summaryrefslogtreecommitdiff
path: root/der2dsa.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2009-10-19 10:37:49 +0200
committerNiels Möller <nisse@lysator.liu.se>2009-10-19 10:37:49 +0200
commite218daf9c90329c02b3abaccf98a659a1d0e9469 (patch)
tree4516f3395af3db1e5d393dbdafffb50ec8d42091 /der2dsa.c
parent468100008c05eeed344ff11f3120879604998fc4 (diff)
downloadnettle-e218daf9c90329c02b3abaccf98a659a1d0e9469.tar.gz
* tools/pkcs1-conv.c: Updated for dsa/der interface change.
* der2dsa.c (dsa_public_key_from_der_iterators): Split into two new functions... (dsa_params_from_der_iterator): New function. (dsa_public_key_from_der_iterator): New function. (dsa_openssl_private_key_from_der_iterator): Renamed, was dsa_private_key_from_der_iterator. (dsa_openssl_private_key_from_der): Likewise. * dsa.h: Corresponding changees to prototypes and #defines. Rev: nettle/ChangeLog:1.45 Rev: nettle/der2dsa.c:1.3 Rev: nettle/dsa.h:1.3 Rev: nettle/tools/pkcs1-conv.c:1.3
Diffstat (limited to 'der2dsa.c')
-rw-r--r--der2dsa.c53
1 files changed, 28 insertions, 25 deletions
diff --git a/der2dsa.c b/der2dsa.c
index de8b4c85..656bc899 100644
--- a/der2dsa.c
+++ b/der2dsa.c
@@ -39,37 +39,45 @@
&& mpz_sgn((x)) > 0)
int
-dsa_public_key_from_der_iterators(struct dsa_public_key *pub,
- unsigned limit,
- struct asn1_der_iterator *i,
- struct asn1_der_iterator *j)
+dsa_params_from_der_iterator(struct dsa_public_key *pub,
+ unsigned limit,
+ struct asn1_der_iterator *i)
{
- /* DSAPublicKey ::= INTEGER
- Dss-Parms ::= SEQUENCE {
+ /* Dss-Parms ::= SEQUENCE {
p INTEGER,
q INTEGER,
g INTEGER
}
*/
-
return (i->type == ASN1_INTEGER
- && asn1_der_get_bignum(i, pub->y, limit)
- && mpz_sgn(pub->y) > 0
- && j->type == ASN1_INTEGER
- && asn1_der_get_bignum(j, pub->p, limit)
+ && asn1_der_get_bignum(i, pub->p, limit)
&& mpz_sgn(pub->p) > 0
- && GET(j, pub->q, limit)
- && GET(j, pub->g, limit)
+ && GET(i, pub->q, limit)
+ && GET(i, pub->g, limit)
&& asn1_der_iterator_next(i) == ASN1_ITERATOR_END);
+
+}
+
+int
+dsa_public_key_from_der_iterator(struct dsa_public_key *pub,
+ unsigned limit,
+ struct asn1_der_iterator *i)
+{
+ /* DSAPublicKey ::= INTEGER
+ */
+
+ return (i->type == ASN1_INTEGER
+ && asn1_der_get_bignum(i, pub->y, limit)
+ && mpz_sgn(pub->y) > 0);
}
/* FIXME: Rename this and the next function to something
openssl-specific? */
int
-dsa_private_key_from_der_iterator(struct dsa_public_key *pub,
- struct dsa_private_key *priv,
- unsigned limit,
- struct asn1_der_iterator *i)
+dsa_openssl_private_key_from_der_iterator(struct dsa_public_key *pub,
+ struct dsa_private_key *priv,
+ unsigned limit,
+ struct asn1_der_iterator *i)
{
/* DSAPrivateKey ::= SEQUENCE {
version Version,
@@ -97,7 +105,7 @@ dsa_private_key_from_der_iterator(struct dsa_public_key *pub,
}
int
-dsa_keypair_from_der(struct dsa_public_key *pub,
+dsa_openssl_private_key_from_der(struct dsa_public_key *pub,
struct dsa_private_key *priv,
unsigned limit,
unsigned length, const uint8_t *data)
@@ -107,11 +115,6 @@ dsa_keypair_from_der(struct dsa_public_key *pub,
res = asn1_der_iterator_first(&i, length, data);
- if (res != ASN1_ITERATOR_CONSTRUCTED)
- return 0;
-
- if (priv)
- return dsa_private_key_from_der_iterator(pub, priv, limit, &i);
- else
- return 0;
+ return (res == ASN1_ITERATOR_CONSTRUCTED
+ && dsa_openssl_private_key_from_der_iterator(pub, priv, limit, &i));
}