> 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]; > }
It's not actually a coincidence that it ends with a[6]. If you have close look at ecp_nistz256_is_affine_G, you'll see that it also check for generator->Z.top being P256_LIMBS - P256_LIMBS / 8, or 7[!] on 32-bit platform. I.e. we can't assume that a[7] is actually an initialized value. Quite contrary actually, because there is configuration flag that will put some junk there on purpose. But yes, it contradicts second usage case of is_one... Which should be complemented with additional if (P256_LIMBS == 8 && r->Z_is_one) r->Z_is_one = (bn_get_top(r->Z) == 7); -- openssl-dev mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev