From d6966c07d56e45acc59e6ae56b6f5bd85832664b Mon Sep 17 00:00:00 2001 From: Patrik Pfaffenbauer Date: Thu, 15 Apr 2021 15:49:00 +0200 Subject: [PATCH] fix big32 encoding + add unit tests --- lib/src/utils/ecurve.dart | 4 ++++ test/ecc_test.dart | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/src/utils/ecurve.dart b/lib/src/utils/ecurve.dart index e7867b4..d6fbf53 100644 --- a/lib/src/utils/ecurve.dart +++ b/lib/src/utils/ecurve.dart @@ -234,6 +234,10 @@ Uint8List _encodeBigInt(BigInt number) { if (number > BigInt.zero) { rawSize = (number.bitLength + 7) >> 3; needsPaddingByte = ((number >> (rawSize - 1) * 8) & negativeFlag) == negativeFlag ? 1 : 0; + + if (rawSize < 32) { + needsPaddingByte = 1; + } } else { needsPaddingByte = 0; rawSize = (number.bitLength + 8) >> 3; diff --git a/test/ecc_test.dart b/test/ecc_test.dart index 34e0e24..60383bc 100644 --- a/test/ecc_test.dart +++ b/test/ecc_test.dart @@ -26,4 +26,28 @@ void main() { ecc.sign(HEX.decode("b11d3d5e4ae12b89d5e3872ccc7d1f96d29b0ab888b67dccf1be5164b811cdbe"), HEX.decode("55b18e96ce3964ef2c81ad69249eca6d42682c11fbe525df6671fcbf0c2be902")); }); }); + + group('Failing ecc test', () { + test('Should fail with the third set of key-msg', () { + var key, msg, sig; + + key = 'f92ca9fe5f77afa489214a7ba2bd6b36d30dd4acdb55c70d1378b5c45c831820'; + msg = '045a7448dffff67c08023d16279c57c0bd16af6467580c183cc4672e768b8a77'; + + sig = ecc.sign(HEX.decode(msg), HEX.decode(key)); + print(HEX.encode(sig)); + + key = '8c39fb3d889b6be22850254dc7ce3247c559d9f968785d88251ee4457633e335'; + msg = '6ad99bc30926fd79cf5a977044088fd298a59728c5b0c1040713d3a8e1c1e69b'; + + sig = ecc.sign(HEX.decode(msg), HEX.decode(key)); + print(HEX.encode(sig)); + + key = '2de619ea940d31927e0a7bbd5ebf855ab66f488b94a65cf929a1eb70b54ec771'; + msg = 'd82a6db2583353856dd4dadc38cdb6373b092ea1f026fa04f03aa3c4e972454f'; + + sig = ecc.sign(HEX.decode(msg), HEX.decode(key)); + print(HEX.encode(sig)); + }); + }); }