39 for (
size_t i = 0; i < 4; ++i) {
40 std::memcpy(&limbs[i], Data + i * 8,
sizeof(uint64_t));
42 const uint256_t s_raw(limbs[0], limbs[1], limbs[2], limbs[3]);
43 const fr s =
fr(s_raw);
49 assert(decomp.alpha < bound &&
"secp256r1 fake-GLV: alpha >= 2^128");
50 assert(decomp.beta_abs < bound &&
"secp256r1 fake-GLV: |beta| >= 2^128");
53 const fr beta_abs_fr(decomp.beta_abs);
54 const fr beta_signed = decomp.beta_is_negative ? -beta_abs_fr : beta_abs_fr;
55 const fr lhs = beta_signed * s;
56 const fr rhs(decomp.alpha);
57 assert(
lhs ==
rhs &&
"secp256r1 fake-GLV: beta_signed * s != alpha (mod n)");
63 assert(decomp.beta_is_negative ==
false);