diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/lib6.c | 17 | ||||
| -rw-r--r-- | lib/lib6.h | 2 |
2 files changed, 17 insertions, 2 deletions
@@ -152,7 +152,7 @@ void dsa_sign(char *mess, struct dsa_public_params *pub_param, struct dsa_per_us BN_zero(priv_param->r); BN_zero(priv_param->s); - while(BN_is_zero(priv_param->r) || BN_is_zero(priv_param->s)) { + //while(BN_is_zero(priv_param->r) || BN_is_zero(priv_param->s)) { if(BN_is_zero(k)) { BN_pseudo_rand(k, pub_param->bits, -1, -1); BN_mod(k, k, pub_param->q, ctx); @@ -164,7 +164,7 @@ void dsa_sign(char *mess, struct dsa_public_params *pub_param, struct dsa_per_us BN_mod_add(tmp, hash_bn, tmp, pub_param->q, ctx); BN_mod_inverse(k_1, k, pub_param->q, ctx); BN_mod_mul(priv_param->s, k_1, tmp, pub_param->q, ctx); - } + //} } @@ -224,3 +224,16 @@ void dsa_recover_k_from_repeated_nonce(BIGNUM *mess1_hash, BIGNUM *mess2_hash, printf("recoverd k is: \n"); BN_print(out, k); } + +void dsa_generate_magic_signature(struct dsa_public_params *pub, struct dsa_per_user_param + *priv, BIGNUM *mess_hash) +{ + BIGNUM *tmp = BN_new(); + + BN_mod_exp(tmp, priv->public, mess_hash, pub->p, ctx); + BN_mod(priv->r, tmp, pub->q, ctx); + + BN_mod_inverse(tmp, mess_hash, pub->q, ctx); + BN_mod_mul(priv->s, priv->r, tmp, pub->q, ctx); + +} @@ -40,4 +40,6 @@ void dsa_recover_x_from_known_k(struct dsa_public_params *pub, BIGNUM *k, void dsa_recover_k_from_repeated_nonce(BIGNUM *mess1_hash, BIGNUM *mess2_hash, BIGNUM *s1, BIGNUM *s2, struct dsa_public_params *pub, struct dsa_per_user_param *priv, BIGNUM *k); +void dsa_generate_magic_signature(struct dsa_public_params *pub, struct dsa_per_user_param + *priv, BIGNUM *mess_hash); #endif /* __LIB_6_H__ */ |
