mirror of
https://github.com/naehrwert/scetool.git
synced 2025-04-25 22:27:45 +00:00
Fixed ECDSA checking.
This commit is contained in:
parent
5a46f2f1b3
commit
bd746e9e3a
2 changed files with 39 additions and 6 deletions
41
src/ec.cpp
41
src/ec.cpp
|
@ -73,7 +73,7 @@ static void elt_square(u8 *d, u8 *a)
|
||||||
elt_mul(d, a, a);
|
elt_mul(d, a, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void elt_inv(u8 *d, u8 *a)
|
void elt_inv(u8 *d, u8 *a)
|
||||||
{
|
{
|
||||||
u8 s[20];
|
u8 s[20];
|
||||||
elt_copy(s, a);
|
elt_copy(s, a);
|
||||||
|
@ -314,12 +314,16 @@ static int check_ecdsa(struct point *Q, u8 *R, u8 *S, u8 *hash)
|
||||||
return (bn_compare(rr, R, 21) == 0);
|
return (bn_compare(rr, R, 21) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
static void ec_priv_to_pub(u8 *k, u8 *Q)
|
void ec_priv_to_pub(u8 *k, u8 *Q)
|
||||||
{
|
{
|
||||||
point_mul(Q, k, ec_G);
|
struct point mQ;
|
||||||
|
point_mul(&mQ, k, &ec_G);
|
||||||
|
point_from_mon(&mQ);
|
||||||
|
elt_copy(Q, mQ.x);
|
||||||
|
elt_copy(Q+20, mQ.y);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
int ecdsa_set_curve(u32 type)
|
int ecdsa_set_curve(u32 type)
|
||||||
{
|
{
|
||||||
|
@ -355,3 +359,30 @@ void ecdsa_sign(u8 *hash, u8 *R, u8 *S)
|
||||||
{
|
{
|
||||||
generate_ecdsa(R, S, ec_k, hash);
|
generate_ecdsa(R, S, ec_k, hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_m (u8 *r, u8 *s, u8 *e, u8 *k, u8 *m)
|
||||||
|
{
|
||||||
|
u8 tmp_r[21], tmp_s[21], tmp_e[21], tmp_k[21];
|
||||||
|
u8 tmp_mul[21], tmp_sum[21], tmp_inv[21];
|
||||||
|
|
||||||
|
tmp_r[0] = tmp_s[0] = tmp_e[0] = 0;
|
||||||
|
bn_copy(tmp_r, r, 21);
|
||||||
|
bn_copy(tmp_s, s, 21);
|
||||||
|
bn_copy(tmp_e + 1, e, 20);
|
||||||
|
bn_reduce(tmp_e, ec_N, 21);
|
||||||
|
bn_to_mon(tmp_r, ec_N, 21);
|
||||||
|
bn_to_mon(tmp_s, ec_N, 21);
|
||||||
|
bn_to_mon(tmp_e, ec_N, 21);
|
||||||
|
|
||||||
|
tmp_k[0] = 0;
|
||||||
|
bn_copy(tmp_k, k, 21);
|
||||||
|
bn_reduce(tmp_k, ec_N, 21);
|
||||||
|
bn_to_mon(tmp_k, ec_N, 21);
|
||||||
|
|
||||||
|
bn_mon_mul(tmp_mul, tmp_r, tmp_k, ec_N, 21);
|
||||||
|
bn_add(tmp_sum, tmp_mul, tmp_e, ec_N, 21);
|
||||||
|
bn_mon_inv(tmp_inv, tmp_s, ec_N, 21);
|
||||||
|
bn_mon_mul(tmp_mul, tmp_inv, tmp_sum, ec_N, 21);
|
||||||
|
bn_from_mon(tmp_mul, ec_N, 21);
|
||||||
|
memcpy (m, tmp_mul + 1, 20);
|
||||||
|
}
|
||||||
|
|
|
@ -6,5 +6,7 @@ void ecdsa_set_pub(u8 *Q);
|
||||||
void ecdsa_set_priv(u8 *k);
|
void ecdsa_set_priv(u8 *k);
|
||||||
int ecdsa_verify(u8 *hash, u8 *R, u8 *S);
|
int ecdsa_verify(u8 *hash, u8 *R, u8 *S);
|
||||||
void ecdsa_sign(u8 *hash, u8 *R, u8 *S);
|
void ecdsa_sign(u8 *hash, u8 *R, u8 *S);
|
||||||
|
void ec_priv_to_pub(u8 *k, u8 *Q);
|
||||||
|
void elt_inv(u8 *d, u8 *a);
|
||||||
|
void get_m (u8 *r, u8 *s, u8 *e, u8 *k, u8 *m);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue