Please see the attached program and consider the following change: ``` if (P256_LIMBS == 8) { res |= a[4] ^ ONE[4]; res |= a[5] ^ ONE[5]; res |= a[6] ^ ONE[6]; + res |= a[7] ^ ONE[7]; } ```
Cheers, Brian -- https://briansmith.org/
#include <stdint.h> #include <inttypes.h> #include <stdio.h> #include <string.h> #define BN_BITS2 32 typedef uint32_t BN_ULONG; #define TOBN(hi, lo) lo, hi #define P256_LIMBS 8 /* One converted into the Montgomery domain */ static const BN_ULONG ONE[P256_LIMBS] = { TOBN(0x00000000, 0x00000001), TOBN(0xffffffff, 0x00000000), TOBN(0xffffffff, 0xffffffff), TOBN(0x00000000, 0xfffffffe), }; static BN_ULONG is_zero(BN_ULONG in) { in |= (0 - in); in = ~in; in >>= BN_BITS2 - 1; return in; } static BN_ULONG is_one(const BN_ULONG a[P256_LIMBS]) { BN_ULONG res; res = a[0] ^ ONE[0]; res |= a[1] ^ ONE[1]; res |= a[2] ^ ONE[2]; res |= a[3] ^ ONE[3]; if (P256_LIMBS == 8) { res |= a[4] ^ ONE[4]; res |= a[5] ^ ONE[5]; res |= a[6] ^ ONE[6]; } return is_zero(res); } int main() { BN_ULONG not_one[P256_LIMBS]; memcpy(not_one, ONE, sizeof(not_one)); not_one[7] ^= 1; BN_ULONG is_it_one = is_one(not_one); printf("%" PRIu32 "\n", is_it_one); if (is_it_one) { return 1; } return 0; }
-- openssl-dev mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev