From cec7fded6082e17118113ab77d2d77a9abd82886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Tue, 15 May 2018 18:01:28 +0200 Subject: IOSC: Implement VerifyPublicKeySign for ECC --- Source/Core/Common/Crypto/ec.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Source/Core/Common/Crypto/ec.cpp') diff --git a/Source/Core/Common/Crypto/ec.cpp b/Source/Core/Common/Crypto/ec.cpp index 9906ccd5e9..b9a0ca6491 100644 --- a/Source/Core/Common/Crypto/ec.cpp +++ b/Source/Core/Common/Crypto/ec.cpp @@ -278,8 +278,10 @@ std::array Sign(const u8* key, const u8* hash) return signature; } -UNUSED static int check_ecdsa(u8* Q, u8* R, u8* S, const u8* hash) +bool VerifySignature(const u8* public_key, const u8* signature, const u8* hash) { + const u8* R = signature; + const u8* S = signature + 30; u8 Sinv[30]; bn_inv(Sinv, S, ec_N, 30); @@ -290,7 +292,7 @@ UNUSED static int check_ecdsa(u8* Q, u8* R, u8* S, const u8* hash) bn_mul(w1, e, Sinv, ec_N, 30); bn_mul(w2, R, Sinv, ec_N, 30); - Point r1 = w1 * ec_G + w2 * Point{Q}; + Point r1 = w1 * ec_G + w2 * Point{public_key}; auto& rx = r1.X().data; if (bn_compare(rx.data(), ec_N, 30) >= 0) bn_sub_modulus(rx.data(), ec_N, 30); -- cgit v1.2.3