From 5d8d9a8efaad0ece23f6692f1b1318744230fd4d Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Mon, 1 Aug 2016 18:37:03 +0100 Subject: Add DSA_bits() function. RT#4637 Reviewed-by: Rich Salz --- crypto/dsa/dsa_ameth.c | 2 +- crypto/dsa/dsa_lib.c | 5 +++++ doc/crypto/DSA_size.pod | 16 +++++++++++----- include/openssl/dsa.h | 1 + 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/crypto/dsa/dsa_ameth.c b/crypto/dsa/dsa_ameth.c index c7573bf256..f2f2cf5f55 100644 --- a/crypto/dsa/dsa_ameth.c +++ b/crypto/dsa/dsa_ameth.c @@ -254,7 +254,7 @@ static int int_dsa_size(const EVP_PKEY *pkey) static int dsa_bits(const EVP_PKEY *pkey) { - return BN_num_bits(pkey->pkey.dsa->p); + return DSA_bits(pkey->pkey.dsa); } static int dsa_security_bits(const EVP_PKEY *pkey) diff --git a/crypto/dsa/dsa_lib.c b/crypto/dsa/dsa_lib.c index 9c001d7b1b..42324c70fb 100644 --- a/crypto/dsa/dsa_lib.c +++ b/crypto/dsa/dsa_lib.c @@ -339,3 +339,8 @@ ENGINE *DSA_get0_engine(DSA *d) { return d->engine; } + +int DSA_bits(const DSA *dsa) +{ + return BN_num_bits(dsa->p); +} diff --git a/doc/crypto/DSA_size.pod b/doc/crypto/DSA_size.pod index 7c121469a1..16e6f3a963 100644 --- a/doc/crypto/DSA_size.pod +++ b/doc/crypto/DSA_size.pod @@ -2,25 +2,31 @@ =head1 NAME -DSA_size - get DSA signature size +DSA_size, DSA_bits - get DSA signature size or key bits =head1 SYNOPSIS #include int DSA_size(const DSA *dsa); + int DSA_bits(const DSA *dsa); =head1 DESCRIPTION -This function returns the size of an ASN.1 encoded DSA signature in -bytes. It can be used to determine how much memory must be allocated -for a DSA signature. +DSA_size() returns the maximum size of an ASN.1 encoded DSA signature +for key B in bytes. It can be used to determine how much memory must +be allocated for a DSA signature. Bq> must not be B. +DSA_bits() returns the number of bits in key B: this is the number +of bits in the B

parameter. + =head1 RETURN VALUE -The size in bytes. +DSA_size() returns the size in bytes. + +DSA_bits() returns the number of bits in the key. =head1 SEE ALSO diff --git a/include/openssl/dsa.h b/include/openssl/dsa.h index cbc60e168a..cb5fbc2f05 100644 --- a/include/openssl/dsa.h +++ b/include/openssl/dsa.h @@ -101,6 +101,7 @@ void DSA_free(DSA *r); /* "up" the DSA object's reference count */ int DSA_up_ref(DSA *r); int DSA_size(const DSA *); +int DSA_bits(const DSA *d); int DSA_security_bits(const DSA *d); /* next 4 return -1 on error */ int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); -- cgit v1.2.3