diff options
| author | Benedict <benedict@0xb8000.de> | 2016-12-18 00:14:25 +0100 |
|---|---|---|
| committer | Benedict <benedict@0xb8000.de> | 2017-02-21 13:00:26 +0100 |
| commit | a5b4baa713ed4ffeca70573193ecbc3c0d7421a4 (patch) | |
| tree | 80a59b512540f25592b58389ebdae1c12d7e189f /lib | |
| parent | 29591502e2ab22a262063e5552438b23380b3e55 (diff) | |
set6: challenge44: completed
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/lib6.c | 15 | ||||
| -rw-r--r-- | lib/lib6.h | 3 |
2 files changed, 18 insertions, 0 deletions
@@ -209,3 +209,18 @@ void dsa_recover_x_from_known_k(struct dsa_public_params *pub, BIGNUM *k, BN_mod_sub(priv->private, priv->private, mess_hash, pub->q, ctx); BN_mod_mul(priv->private, priv->private, r_1, pub->q, ctx); } + +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) +{ + + BIGNUM *diff1 = BN_new(); + + BN_mod_sub(diff1, mess1_hash, mess2_hash, pub->q, ctx); + BN_mod_sub(k, s1, s2, pub->q, ctx); + BN_mod_inverse(k, k, pub->q, ctx); + BN_mod_mul(k, k, diff1, pub->q, ctx); + printf("recoverd k is: \n"); + BN_print(out, k); +} @@ -37,4 +37,7 @@ int dsa_verify(char *mess, struct dsa_public_params *pub, struct dsa_per_user_pa *priv); void dsa_recover_x_from_known_k(struct dsa_public_params *pub, BIGNUM *k, struct dsa_per_user_param *priv, BIGNUM *mess_hash); +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); #endif /* __LIB_6_H__ */ |
