From dac2e8c79e670b81f5a80edbf93307df01c88c47 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 26 Nov 2015 09:48:06 -0500 Subject: [PATCH] use left sift instead multipilication by 2 --- Signature.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Signature.cpp b/Signature.cpp index 13151508..30c81a94 100644 --- a/Signature.cpp +++ b/Signature.cpp @@ -13,19 +13,16 @@ namespace crypto Ed25519 () { BN_CTX * ctx = BN_CTX_new (); - BIGNUM * two = BN_new (), * tmp = BN_new (); - BN_set_word (two, 2); + BIGNUM * tmp = BN_new (); q = BN_new (); // 2^255-19 - BN_set_word (tmp, 255); - BN_exp (q, two, tmp, ctx); + BN_set_bit (q, 255); // 2^255 BN_sub_word (q, 19); l = BN_new (); // 2^252 + 27742317777372353535851937790883648493 - BN_set_word (tmp, 252); - BN_exp (l, two, tmp, ctx); + BN_set_bit (l, 252); two_252_2 = BN_dup (l); BN_dec2bn (&tmp, "27742317777372353535851937790883648493"); BN_add (l, l, tmp); @@ -45,9 +42,8 @@ namespace crypto tmp = BN_dup (q); BN_sub_word (tmp, 1); BN_div_word (tmp, 4); - BN_mod_exp (I, two, tmp, q, ctx); - - BN_free (two); + BN_set_word (I, 2); + BN_mod_exp (I, I, tmp, q, ctx); BN_free (tmp); // 4*inv(5) @@ -208,7 +204,7 @@ namespace crypto BIGNUM * E = BN_new (), * F = BN_new (), * G = BN_new (), * H = BN_new (); // E = (x+y)*(x+y)-A-B = x^2+y^2+2xy-A-B = 2xy BN_mul (E, p.x, p.y, ctx); - BN_mul_word (E, 2); // E =2*x*y + BN_lshift1 (E, E); // E =2*x*y BN_sub (F, z2, t2); // F = D - C BN_add (G, z2, t2); // G = D + C BN_add (H, y2, x2); // H = B + A @@ -387,7 +383,7 @@ namespace crypto // Bi16[0][0] = B, base point }; - static std::unique_ptr g_Ed25519; + static thread_local std::unique_ptr g_Ed25519; std::unique_ptr& GetEd25519 () { if (!g_Ed25519)