diff --git a/der2dsa.c b/der2dsa.c index 656bc899906feca2433768ecb3ddea6efd7b64e7..206c71482dda78c65779c63cb3d368cb72aab43d 100644 --- a/der2dsa.c +++ b/der2dsa.c @@ -40,7 +40,7 @@ int dsa_params_from_der_iterator(struct dsa_public_key *pub, - unsigned limit, + unsigned p_max_bits, struct asn1_der_iterator *i) { /* Dss-Parms ::= SEQUENCE { @@ -50,24 +50,23 @@ dsa_params_from_der_iterator(struct dsa_public_key *pub, } */ return (i->type == ASN1_INTEGER - && asn1_der_get_bignum(i, pub->p, limit) + && asn1_der_get_bignum(i, pub->p, p_max_bits) && mpz_sgn(pub->p) > 0 - && GET(i, pub->q, limit) - && GET(i, pub->g, limit) + && GET(i, pub->q, DSA_SHA1_Q_BITS) + && GET(i, pub->g, p_max_bits) && asn1_der_iterator_next(i) == ASN1_ITERATOR_END); - } int dsa_public_key_from_der_iterator(struct dsa_public_key *pub, - unsigned limit, + unsigned p_max_bits, struct asn1_der_iterator *i) { /* DSAPublicKey ::= INTEGER */ return (i->type == ASN1_INTEGER - && asn1_der_get_bignum(i, pub->y, limit) + && asn1_der_get_bignum(i, pub->y, p_max_bits) && mpz_sgn(pub->y) > 0); } @@ -76,7 +75,7 @@ dsa_public_key_from_der_iterator(struct dsa_public_key *pub, int dsa_openssl_private_key_from_der_iterator(struct dsa_public_key *pub, struct dsa_private_key *priv, - unsigned limit, + unsigned p_max_bits, struct asn1_der_iterator *i) { /* DSAPrivateKey ::= SEQUENCE { @@ -96,18 +95,18 @@ dsa_openssl_private_key_from_der_iterator(struct dsa_public_key *pub, && i->type == ASN1_INTEGER && asn1_der_get_uint32(i, &version) && version == 0 - && GET(i, pub->p, limit) - && GET(i, pub->q, limit) - && GET(i, pub->g, limit) - && GET(i, pub->y, limit) - && GET(i, priv->x, limit) + && GET(i, pub->p, p_max_bits) + && GET(i, pub->q, DSA_SHA1_Q_BITS) + && GET(i, pub->g, p_max_bits) + && GET(i, pub->y, p_max_bits) + && GET(i, priv->x, DSA_SHA1_Q_BITS) && asn1_der_iterator_next(i) == ASN1_ITERATOR_END); } int dsa_openssl_private_key_from_der(struct dsa_public_key *pub, struct dsa_private_key *priv, - unsigned limit, + unsigned p_max_bits, unsigned length, const uint8_t *data) { struct asn1_der_iterator i; @@ -116,5 +115,5 @@ dsa_openssl_private_key_from_der(struct dsa_public_key *pub, res = asn1_der_iterator_first(&i, length, data); return (res == ASN1_ITERATOR_CONSTRUCTED - && dsa_openssl_private_key_from_der_iterator(pub, priv, limit, &i)); + && dsa_openssl_private_key_from_der_iterator(pub, priv, p_max_bits, &i)); }