From b2b9880377f75a333b94a71ce6076016b8285e0b Mon Sep 17 00:00:00 2001 From: Treeston Date: Tue, 6 Aug 2019 11:24:48 +0200 Subject: [PATCH] Core/Common: fix a bug in BigNumber::AsByteArray that was causing incorrect output in 1/256 cases with explicit minSize (iff MSB zero) --- src/common/Cryptography/BigNumber.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/Cryptography/BigNumber.cpp b/src/common/Cryptography/BigNumber.cpp index fd14c117e33..96f9144181e 100644 --- a/src/common/Cryptography/BigNumber.cpp +++ b/src/common/Cryptography/BigNumber.cpp @@ -184,11 +184,11 @@ std::unique_ptr BigNumber::AsByteArray(int32 minSize, bool littleEndian if (length > numBytes) memset((void*)array, 0, length); - BN_bn2bin(_bn, (unsigned char *)array); + BN_bn2bin(_bn, array + (length-numBytes)); // openssl's BN stores data internally in big endian format, reverse if little endian desired if (littleEndian) - std::reverse(array, array + numBytes); + std::reverse(array, array + length); std::unique_ptr ret(array); return ret;