Abstract out verify logic for fe_mul
This commit is contained in:
parent
e179e651cb
commit
4c25f6efbd
11
src/field.h
11
src/field.h
@ -90,6 +90,7 @@ static const secp256k1_fe secp256k1_const_beta = SECP256K1_FE_CONST(
|
|||||||
# define secp256k1_fe_negate secp256k1_fe_impl_negate
|
# define secp256k1_fe_negate secp256k1_fe_impl_negate
|
||||||
# define secp256k1_fe_mul_int secp256k1_fe_impl_mul_int
|
# define secp256k1_fe_mul_int secp256k1_fe_impl_mul_int
|
||||||
# define secp256k1_fe_add secp256k1_fe_impl_add
|
# define secp256k1_fe_add secp256k1_fe_impl_add
|
||||||
|
# define secp256k1_fe_mul secp256k1_fe_impl_mul
|
||||||
#endif /* !defined(VERIFY) */
|
#endif /* !defined(VERIFY) */
|
||||||
|
|
||||||
/** Normalize a field element.
|
/** Normalize a field element.
|
||||||
@ -225,8 +226,14 @@ static void secp256k1_fe_mul_int(secp256k1_fe *r, int a);
|
|||||||
*/
|
*/
|
||||||
static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a);
|
static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a);
|
||||||
|
|
||||||
/** Sets a field element to be the product of two others. Requires the inputs' magnitudes to be at most 8.
|
/** Multiply two field elements.
|
||||||
* The output magnitude is 1 (but not guaranteed to be normalized). */
|
*
|
||||||
|
* On input, a and b must be valid field elements; r does not need to be initialized.
|
||||||
|
* r and a may point to the same object, but neither can be equal to b. The magnitudes
|
||||||
|
* of a and b must not exceed 8.
|
||||||
|
* Performs {r = a * b}
|
||||||
|
* On output, r will have magnitude 1, but won't be normalized.
|
||||||
|
*/
|
||||||
static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b);
|
static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b);
|
||||||
|
|
||||||
/** Sets a field element to be the square of another. Requires the input's magnitude to be at most 8.
|
/** Sets a field element to be the square of another. Requires the input's magnitude to be at most 8.
|
||||||
|
@ -1027,21 +1027,8 @@ SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
|
SECP256K1_INLINE static void secp256k1_fe_impl_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
|
||||||
#ifdef VERIFY
|
|
||||||
VERIFY_CHECK(a->magnitude <= 8);
|
|
||||||
VERIFY_CHECK(b->magnitude <= 8);
|
|
||||||
secp256k1_fe_verify(a);
|
|
||||||
secp256k1_fe_verify(b);
|
|
||||||
VERIFY_CHECK(r != b);
|
|
||||||
VERIFY_CHECK(a != b);
|
|
||||||
#endif
|
|
||||||
secp256k1_fe_mul_inner(r->n, a->n, b->n);
|
secp256k1_fe_mul_inner(r->n, a->n, b->n);
|
||||||
#ifdef VERIFY
|
|
||||||
r->magnitude = 1;
|
|
||||||
r->normalized = 0;
|
|
||||||
secp256k1_fe_verify(r);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {
|
static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {
|
||||||
|
@ -361,21 +361,8 @@ SECP256K1_INLINE static void secp256k1_fe_impl_add(secp256k1_fe *r, const secp25
|
|||||||
r->n[4] += a->n[4];
|
r->n[4] += a->n[4];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
|
SECP256K1_INLINE static void secp256k1_fe_impl_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
|
||||||
#ifdef VERIFY
|
|
||||||
VERIFY_CHECK(a->magnitude <= 8);
|
|
||||||
VERIFY_CHECK(b->magnitude <= 8);
|
|
||||||
secp256k1_fe_verify(a);
|
|
||||||
secp256k1_fe_verify(b);
|
|
||||||
VERIFY_CHECK(r != b);
|
|
||||||
VERIFY_CHECK(a != b);
|
|
||||||
#endif
|
|
||||||
secp256k1_fe_mul_inner(r->n, a->n, b->n);
|
secp256k1_fe_mul_inner(r->n, a->n, b->n);
|
||||||
#ifdef VERIFY
|
|
||||||
r->magnitude = 1;
|
|
||||||
r->normalized = 0;
|
|
||||||
secp256k1_fe_verify(r);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {
|
static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {
|
||||||
|
@ -286,6 +286,20 @@ SECP256K1_INLINE static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_f
|
|||||||
r->normalized = 0;
|
r->normalized = 0;
|
||||||
secp256k1_fe_verify(r);
|
secp256k1_fe_verify(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void secp256k1_fe_impl_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b);
|
||||||
|
SECP256K1_INLINE static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
|
||||||
|
secp256k1_fe_verify(a);
|
||||||
|
secp256k1_fe_verify(b);
|
||||||
|
VERIFY_CHECK(a->magnitude <= 8);
|
||||||
|
VERIFY_CHECK(b->magnitude <= 8);
|
||||||
|
VERIFY_CHECK(r != b);
|
||||||
|
VERIFY_CHECK(a != b);
|
||||||
|
secp256k1_fe_impl_mul(r, a, b);
|
||||||
|
r->magnitude = 1;
|
||||||
|
r->normalized = 0;
|
||||||
|
secp256k1_fe_verify(r);
|
||||||
|
}
|
||||||
#endif /* defined(VERIFY) */
|
#endif /* defined(VERIFY) */
|
||||||
|
|
||||||
#endif /* SECP256K1_FIELD_IMPL_H */
|
#endif /* SECP256K1_FIELD_IMPL_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user