add ECDSA_size to ec_asn1.c
Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user