2015-08-25 9 views
0

OpenSSL EVP_DigestFinal_ex имеет следующую документацию:.OpenSSL: может ли размер вывода EVP_DigestFinal_ex превышать размер дайджеста?

«EVP_DigestFinal_ex() извлекает значение дайджеста из CTX и помещает его в мд Если параметр s не NULL, то число байтов данных, записанных (т.е. длина дайджеста) будет записано в целое число в s, будет записано не более байтов EVP_MAX_MD_SIZE. "

Подпись:

int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); 

Есть ли случаи, когда длина дайджеста будет больше, чем выходной размер дайджеста еще меньше EVP_MAX_MD_SIZE. т. е. для переваривания SHA-1, я получаю выход, который превышает 20 байт?

ответ

1

Соответствующий исходный код из OpenSSL crypto/evp/digest.c:

OPENSSL_assert(ctx->digest->md_size <= EVP_MAX_MD_SIZE); 
    ret = ctx->digest->final(ctx, md); 
    if (size != NULL) 
     *size = ctx->digest->md_size; 

где размера Ваш желаемый результат переваривать размер, и переваривать является Const структуры, которая в случае SHA1 в настоящее время определена в crypto/evp/m_sha1.c:

static const EVP_MD sha1_md = { 
    NID_sha1, 
    NID_sha1WithRSAEncryption, 
    SHA_DIGEST_LENGTH 

md_size является третьим членом этой структуры, поэтому он всегда будет SHA_DIGEST_LENGTH, который является equal to