mirror of
https://github.com/openssl/openssl.git
synced 2024-11-21 01:15:20 +08:00
add ECDSA_size to ec_asn1.c
Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
c535979126
commit
cf517a6d3d
@ -1319,3 +1319,37 @@ void ECDSA_SIG_get0(BIGNUM **pr, BIGNUM **ps, ECDSA_SIG *sig)
|
||||
if (ps)
|
||||
*ps = sig->s;
|
||||
}
|
||||
|
||||
int ECDSA_size(const EC_KEY *r)
|
||||
{
|
||||
int ret, i;
|
||||
ASN1_INTEGER bs;
|
||||
BIGNUM *order = NULL;
|
||||
unsigned char buf[4];
|
||||
const EC_GROUP *group;
|
||||
|
||||
if (r == NULL)
|
||||
return 0;
|
||||
group = EC_KEY_get0_group(r);
|
||||
if (group == NULL)
|
||||
return 0;
|
||||
|
||||
if ((order = BN_new()) == NULL)
|
||||
return 0;
|
||||
if (!EC_GROUP_get_order(group, order, NULL)) {
|
||||
BN_clear_free(order);
|
||||
return 0;
|
||||
}
|
||||
i = BN_num_bits(order);
|
||||
bs.length = (i + 7) / 8;
|
||||
bs.data = buf;
|
||||
bs.type = V_ASN1_INTEGER;
|
||||
/* If the top bit is set the asn1 encoding is 1 larger. */
|
||||
buf[0] = 0xff;
|
||||
|
||||
i = i2d_ASN1_INTEGER(&bs, NULL);
|
||||
i += i; /* r and s */
|
||||
ret = ASN1_object_size(1, i, V_ASN1_SEQUENCE);
|
||||
BN_clear_free(order);
|
||||
return (ret);
|
||||
}
|
||||
|
@ -1089,6 +1089,12 @@ int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen,
|
||||
int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen,
|
||||
const unsigned char *sig, int siglen, EC_KEY *eckey);
|
||||
|
||||
/** Returns the maximum length of the DER encoded signature
|
||||
* \param eckey EC_KEY object
|
||||
* \return numbers of bytes required for the DER encoded signature
|
||||
*/
|
||||
int ECDSA_size(const EC_KEY *eckey);
|
||||
|
||||
# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x)
|
||||
|
||||
# ifndef __cplusplus
|
||||
|
Loading…
Reference in New Issue
Block a user