Use BN_bn2binpad
authorDr. Stephen Henson <steve@openssl.org>
Wed, 3 Feb 2016 18:51:02 +0000 (18:51 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 5 Feb 2016 00:33:33 +0000 (00:33 +0000)
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
crypto/ec/ec_key.c

index 1332498..19628b1 100644 (file)
@@ -551,7 +551,7 @@ int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len,
 
 size_t EC_KEY_priv2oct(const EC_KEY *eckey, unsigned char *buf, size_t len)
 {
-    size_t buf_len, bn_len;
+    size_t buf_len;
     if (eckey->group == NULL || eckey->group->meth == NULL)
         return 0;
 
@@ -563,23 +563,13 @@ size_t EC_KEY_priv2oct(const EC_KEY *eckey, unsigned char *buf, size_t len)
     else if (len < buf_len)
         return 0;
 
-    bn_len = (size_t)BN_num_bytes(eckey->priv_key);
-
     /* Octetstring may need leading zeros if BN is to short */
 
-    if (bn_len > buf_len) {
+    if (BN_bn2binpad(eckey->priv_key, buf, buf_len) == -1) {
         ECerr(EC_F_EC_KEY_PRIV2OCT, EC_R_BUFFER_TOO_SMALL);
         return 0;
     }
 
-    if (!BN_bn2bin(eckey->priv_key, buf + buf_len - bn_len)) {
-        ECerr(EC_F_EC_KEY_PRIV2OCT, ERR_R_BN_LIB);
-        return 0;
-    }
-
-    if (buf_len - bn_len > 0)
-        memset(buf, 0, buf_len - bn_len);
-
     return buf_len;
 }