Abstract out verify logic for fe_to_storage
This commit is contained in:
parent
1e6894bdd7
commit
76d31e5047
@ -93,6 +93,7 @@ static const secp256k1_fe secp256k1_const_beta = SECP256K1_FE_CONST(
|
|||||||
# define secp256k1_fe_mul secp256k1_fe_impl_mul
|
# define secp256k1_fe_mul secp256k1_fe_impl_mul
|
||||||
# define secp256k1_fe_sqr secp256k1_fe_impl_sqr
|
# define secp256k1_fe_sqr secp256k1_fe_impl_sqr
|
||||||
# define secp256k1_fe_cmov secp256k1_fe_impl_cmov
|
# define secp256k1_fe_cmov secp256k1_fe_impl_cmov
|
||||||
|
# define secp256k1_fe_to_storage secp256k1_fe_impl_to_storage
|
||||||
#endif /* !defined(VERIFY) */
|
#endif /* !defined(VERIFY) */
|
||||||
|
|
||||||
/** Normalize a field element.
|
/** Normalize a field element.
|
||||||
@ -263,7 +264,11 @@ static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a);
|
|||||||
/** Potentially faster version of secp256k1_fe_inv, without constant-time guarantee. */
|
/** Potentially faster version of secp256k1_fe_inv, without constant-time guarantee. */
|
||||||
static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a);
|
static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a);
|
||||||
|
|
||||||
/** Convert a field element to the storage type. */
|
/** Convert a field element to secp256k1_fe_storage.
|
||||||
|
*
|
||||||
|
* On input, a must be a valid normalized field element.
|
||||||
|
* Performs {r = a}.
|
||||||
|
*/
|
||||||
static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a);
|
static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a);
|
||||||
|
|
||||||
/** Convert a field element back from the storage type. */
|
/** Convert a field element back from the storage type. */
|
||||||
|
@ -1145,10 +1145,7 @@ static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r,
|
|||||||
r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1);
|
r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
|
static void secp256k1_fe_impl_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
|
||||||
#ifdef VERIFY
|
|
||||||
VERIFY_CHECK(a->normalized);
|
|
||||||
#endif
|
|
||||||
r->n[0] = a->n[0] | a->n[1] << 26;
|
r->n[0] = a->n[0] | a->n[1] << 26;
|
||||||
r->n[1] = a->n[1] >> 6 | a->n[2] << 20;
|
r->n[1] = a->n[1] >> 6 | a->n[2] << 20;
|
||||||
r->n[2] = a->n[2] >> 12 | a->n[3] << 14;
|
r->n[2] = a->n[2] >> 12 | a->n[3] << 14;
|
||||||
|
@ -459,10 +459,7 @@ static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r,
|
|||||||
r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
|
r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
|
static void secp256k1_fe_impl_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
|
||||||
#ifdef VERIFY
|
|
||||||
VERIFY_CHECK(a->normalized);
|
|
||||||
#endif
|
|
||||||
r->n[0] = a->n[0] | a->n[1] << 52;
|
r->n[0] = a->n[0] | a->n[1] << 52;
|
||||||
r->n[1] = a->n[1] >> 12 | a->n[2] << 40;
|
r->n[1] = a->n[1] >> 12 | a->n[2] << 40;
|
||||||
r->n[2] = a->n[2] >> 24 | a->n[3] << 28;
|
r->n[2] = a->n[2] >> 24 | a->n[3] << 28;
|
||||||
|
@ -336,6 +336,13 @@ SECP256K1_INLINE static void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_
|
|||||||
}
|
}
|
||||||
secp256k1_fe_verify(r);
|
secp256k1_fe_verify(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void secp256k1_fe_impl_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a);
|
||||||
|
SECP256K1_INLINE static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
|
||||||
|
secp256k1_fe_verify(a);
|
||||||
|
VERIFY_CHECK(a->normalized);
|
||||||
|
secp256k1_fe_impl_to_storage(r, a);
|
||||||
|
}
|
||||||
#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