提交 310a0edb 编写于 作者: R Richard Levitte

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: NKurt Roeckx <kurt@roeckx.be>
(Merged from https://github.com/openssl/openssl/pull/12390)
上级 e23d850f
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <assert.h> #include <assert.h>
#include <limits.h> #include <limits.h>
#include "internal/cryptlib.h" #include "internal/cryptlib.h"
#include "internal/endian.h"
#include "bn_local.h" #include "bn_local.h"
#include <openssl/opensslconf.h> #include <openssl/opensslconf.h>
#include "internal/constant_time.h" #include "internal/constant_time.h"
...@@ -583,20 +584,20 @@ int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen) ...@@ -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) 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); 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) 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); return BN_bn2binpad(a, to, tolen);
#else
return BN_bn2lebinpad(a, to, tolen);
#endif
} }
int BN_ucmp(const BIGNUM *a, const BIGNUM *b) int BN_ucmp(const BIGNUM *a, const BIGNUM *b)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册