From: Richard Levitte Date: Thu, 9 Jul 2020 06:40:50 +0000 (+0200) Subject: BN: Check endianness in run-time, in BN_native2bn() and BN_bn2nativepad() X-Git-Tag: openssl-3.0.0-alpha5~44 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=310a0edbd003dd7c580ae3cf78f1782b2c3d9ded;p=thirdparty%2Fopenssl.git BN: Check endianness in run-time, in BN_native2bn() and BN_bn2nativepad() The code relied on B_ENDIAN being defined on all big-endian platform, which turned out to not always be the case. Fixes #12387 Reviewed-by: Kurt Roeckx (Merged from https://github.com/openssl/openssl/pull/12390) --- diff --git a/crypto/bn/bn_lib.c b/crypto/bn/bn_lib.c index a0924d0e314..57783e47d80 100644 --- a/crypto/bn/bn_lib.c +++ b/crypto/bn/bn_lib.c @@ -10,6 +10,7 @@ #include #include #include "internal/cryptlib.h" +#include "internal/endian.h" #include "bn_local.h" #include #include "internal/constant_time.h" @@ -583,20 +584,20 @@ int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen) BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret) { -#ifdef B_ENDIAN + DECLARE_IS_ENDIAN; + + if (IS_LITTLE_ENDIAN) + return BN_lebin2bn(s, len, ret); return BN_bin2bn(s, len, ret); -#else - return BN_lebin2bn(s, len, ret); -#endif } int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen) { -#ifdef B_ENDIAN + DECLARE_IS_ENDIAN; + + if (IS_LITTLE_ENDIAN) + return BN_bn2lebinpad(a, to, tolen); return BN_bn2binpad(a, to, tolen); -#else - return BN_bn2lebinpad(a, to, tolen); -#endif } int BN_ucmp(const BIGNUM *a, const BIGNUM *b)