diff options
author | Bodo Möller <bodo@openssl.org> | 2002-03-18 13:10:45 +0000 |
---|---|---|
committer | Bodo Möller <bodo@openssl.org> | 2002-03-18 13:10:45 +0000 |
commit | af28dd6c75cc7abaec8b5df7555f07d143d3a6d1 (patch) | |
tree | fc317b4c33a4814c735d3f6f64e8a9a54c86486a /crypto/ecdsa/ecs_asn1.c | |
parent | e79ec456beacdc1d8b463d90661fc872e7cf836a (diff) |
Fix bugs and typos.
Add some WTLS curves.
New function EC_GROUP_check() (this will probably
be implemented differently soon).
Submitted by: Nils Larsch
Reviewed by: Bodo Moeller
Diffstat (limited to 'crypto/ecdsa/ecs_asn1.c')
-rw-r--r-- | crypto/ecdsa/ecs_asn1.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/crypto/ecdsa/ecs_asn1.c b/crypto/ecdsa/ecs_asn1.c index 6fa0b3fb7f..b537de6600 100644 --- a/crypto/ecdsa/ecs_asn1.c +++ b/crypto/ecdsa/ecs_asn1.c @@ -170,6 +170,7 @@ X9_62_CURVE *ECDSA_get_X9_62_CURVE(const ECDSA *ecdsa, X9_62_CURVE *curve) X9_62_CURVE *ret=NULL; BIGNUM *tmp1=NULL, *tmp2=NULL; unsigned char *buffer=NULL; + unsigned char char_buf = 0; if (!ecdsa || !ecdsa->group) OPENSSL_ECDSA_ABORT(ECDSA_R_MISSING_PARAMETERS) @@ -189,29 +190,38 @@ X9_62_CURVE *ECDSA_get_X9_62_CURVE(const ECDSA *ecdsa, X9_62_CURVE *curve) if (!EC_GROUP_get_curve_GFp(ecdsa->group, NULL, tmp1, tmp2, NULL)) OPENSSL_ECDSA_ABORT(ERR_R_EC_LIB) - if ((len1 = BN_num_bytes(tmp1)) == 0) - OPENSSL_ECDSA_ABORT(ECDSA_R_UNEXPECTED_PARAMETER_LENGTH) - if ((buffer = OPENSSL_malloc(len1)) == NULL) - OPENSSL_ECDSA_ABORT(ERR_R_MALLOC_FAILURE) - if ((len1 = BN_bn2bin(tmp1, buffer)) == 0) goto err; - if ((ret->a = M_ASN1_OCTET_STRING_new()) == NULL) - OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB) - if (!M_ASN1_OCTET_STRING_set(ret->a, buffer, len1)) + if ((ret->a = M_ASN1_OCTET_STRING_new()) == NULL || + (ret->b = M_ASN1_OCTET_STRING_new()) == NULL ) OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB) - if ((len2 = BN_num_bytes(tmp2)) == 0) - OPENSSL_ECDSA_ABORT(ECDSA_R_UNEXPECTED_PARAMETER_LENGTH) - if (len1 < len2) + len1 = BN_num_bytes(tmp1); + len2 = BN_num_bytes(tmp2); + + if ((buffer = OPENSSL_malloc(len1 > len2 ? len1 : len2)) == NULL) + OPENSSL_ECDSA_ABORT(ERR_R_MALLOC_FAILURE) + + if (len1 == 0) /* => a == 0 */ { - OPENSSL_free(buffer); - if ((buffer = OPENSSL_malloc(len2)) == NULL) - OPENSSL_ECDSA_ABORT(ERR_R_MALLOC_FAILURE) + if (!M_ASN1_OCTET_STRING_set(ret->a, char_buf, 1)) + OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB) + } + else + { + if ((len1 = BN_bn2bin(tmp1, buffer)) == 0) goto err; + if (!M_ASN1_OCTET_STRING_set(ret->a, buffer, len1)) + OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB) + } + if (len2 == 0) /* => b == 0 */ + { + if (!M_ASN1_OCTET_STRING_set(ret->a, char_buf, 1)) + OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB) + } + else + { + if ((len2 = BN_bn2bin(tmp2, buffer)) == 0) goto err; + if (!M_ASN1_OCTET_STRING_set(ret->b, buffer, len2)) + OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB) } - if ((len2 = BN_bn2bin(tmp2, buffer)) == 0) goto err; - if ((ret->b = M_ASN1_OCTET_STRING_new()) == NULL) - OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB) - if (!M_ASN1_OCTET_STRING_set(ret->b, buffer, len2)) - OPENSSL_ECDSA_ABORT(ERR_R_ASN1_LIB) if (ecdsa->seed) { |