Simplify secp256k1_fe_{impl_,}verify
This commit is contained in:
parent
4e176ad5b9
commit
7fc642fa25
@ -15,26 +15,25 @@
|
|||||||
#ifdef VERIFY
|
#ifdef VERIFY
|
||||||
static void secp256k1_fe_impl_verify(const secp256k1_fe *a) {
|
static void secp256k1_fe_impl_verify(const secp256k1_fe *a) {
|
||||||
const uint32_t *d = a->n;
|
const uint32_t *d = a->n;
|
||||||
int m = a->normalized ? 1 : 2 * a->magnitude, r = 1;
|
int m = a->normalized ? 1 : 2 * a->magnitude;
|
||||||
r &= (d[0] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[0] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[1] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[1] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[2] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[2] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[3] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[3] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[4] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[4] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[5] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[5] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[6] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[6] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[7] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[7] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[8] <= 0x3FFFFFFUL * m);
|
VERIFY_CHECK(d[8] <= 0x3FFFFFFUL * m);
|
||||||
r &= (d[9] <= 0x03FFFFFUL * m);
|
VERIFY_CHECK(d[9] <= 0x03FFFFFUL * m);
|
||||||
if (a->normalized) {
|
if (a->normalized) {
|
||||||
if (r && (d[9] == 0x03FFFFFUL)) {
|
if (d[9] == 0x03FFFFFUL) {
|
||||||
uint32_t mid = d[8] & d[7] & d[6] & d[5] & d[4] & d[3] & d[2];
|
uint32_t mid = d[8] & d[7] & d[6] & d[5] & d[4] & d[3] & d[2];
|
||||||
if (mid == 0x3FFFFFFUL) {
|
if (mid == 0x3FFFFFFUL) {
|
||||||
r &= ((d[1] + 0x40UL + ((d[0] + 0x3D1UL) >> 26)) <= 0x3FFFFFFUL);
|
VERIFY_CHECK((d[1] + 0x40UL + ((d[0] + 0x3D1UL) >> 26)) <= 0x3FFFFFFUL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VERIFY_CHECK(r == 1);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -21,19 +21,18 @@
|
|||||||
#ifdef VERIFY
|
#ifdef VERIFY
|
||||||
static void secp256k1_fe_impl_verify(const secp256k1_fe *a) {
|
static void secp256k1_fe_impl_verify(const secp256k1_fe *a) {
|
||||||
const uint64_t *d = a->n;
|
const uint64_t *d = a->n;
|
||||||
int m = a->normalized ? 1 : 2 * a->magnitude, r = 1;
|
int m = a->normalized ? 1 : 2 * a->magnitude;
|
||||||
/* secp256k1 'p' value defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */
|
/* secp256k1 'p' value defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */
|
||||||
r &= (d[0] <= 0xFFFFFFFFFFFFFULL * m);
|
VERIFY_CHECK(d[0] <= 0xFFFFFFFFFFFFFULL * m);
|
||||||
r &= (d[1] <= 0xFFFFFFFFFFFFFULL * m);
|
VERIFY_CHECK(d[1] <= 0xFFFFFFFFFFFFFULL * m);
|
||||||
r &= (d[2] <= 0xFFFFFFFFFFFFFULL * m);
|
VERIFY_CHECK(d[2] <= 0xFFFFFFFFFFFFFULL * m);
|
||||||
r &= (d[3] <= 0xFFFFFFFFFFFFFULL * m);
|
VERIFY_CHECK(d[3] <= 0xFFFFFFFFFFFFFULL * m);
|
||||||
r &= (d[4] <= 0x0FFFFFFFFFFFFULL * m);
|
VERIFY_CHECK(d[4] <= 0x0FFFFFFFFFFFFULL * m);
|
||||||
if (a->normalized) {
|
if (a->normalized) {
|
||||||
if (r && (d[4] == 0x0FFFFFFFFFFFFULL) && ((d[3] & d[2] & d[1]) == 0xFFFFFFFFFFFFFULL)) {
|
if ((d[4] == 0x0FFFFFFFFFFFFULL) && ((d[3] & d[2] & d[1]) == 0xFFFFFFFFFFFFFULL)) {
|
||||||
r &= (d[0] < 0xFFFFEFFFFFC2FULL);
|
VERIFY_CHECK(d[0] < 0xFFFFEFFFFFC2FULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VERIFY_CHECK(r == 1);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -163,12 +163,11 @@ static void secp256k1_fe_verify(const secp256k1_fe *a) { (void)a; }
|
|||||||
static void secp256k1_fe_impl_verify(const secp256k1_fe *a);
|
static void secp256k1_fe_impl_verify(const secp256k1_fe *a);
|
||||||
static void secp256k1_fe_verify(const secp256k1_fe *a) {
|
static void secp256k1_fe_verify(const secp256k1_fe *a) {
|
||||||
/* Magnitude between 0 and 32. */
|
/* Magnitude between 0 and 32. */
|
||||||
int r = (a->magnitude >= 0) & (a->magnitude <= 32);
|
VERIFY_CHECK((a->magnitude >= 0) && (a->magnitude <= 32));
|
||||||
/* Normalized is 0 or 1. */
|
/* Normalized is 0 or 1. */
|
||||||
r &= (a->normalized == 0) | (a->normalized == 1);
|
VERIFY_CHECK((a->normalized == 0) || (a->normalized == 1));
|
||||||
/* If normalized, magnitude must be 0 or 1. */
|
/* If normalized, magnitude must be 0 or 1. */
|
||||||
if (a->normalized) r &= (a->magnitude <= 1);
|
if (a->normalized) VERIFY_CHECK(a->magnitude <= 1);
|
||||||
VERIFY_CHECK(r == 1);
|
|
||||||
/* Invoke implementation-specific checks. */
|
/* Invoke implementation-specific checks. */
|
||||||
secp256k1_fe_impl_verify(a);
|
secp256k1_fe_impl_verify(a);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user