crypto.c (688B)
1#include "crypto.h" 2#include "util.h" 3 4char* 5int_to_str(mpz_t n) 6{ 7 char* res; 8 int len; 9 10 len = (int) mpz_sizeinbase(n, 256); 11 res = malloc(len + 1); 12 ASSERT(res != NULL); 13 mpz_export(res, NULL, 1, 1, 0, 0, n); 14 res[len] = '\0'; 15 16 return res; 17} 18 19int 20check_signature(const char *msg, const char *sig_str, 21 const char *exp_str, const char *mod_str) 22{ 23 mpz_t m, e, n, sig; 24 char *_msg; 25 int valid; 26 27 mpz_init_set_str(e, exp_str, 0); 28 mpz_init_set_str(n, mod_str, 0); 29 mpz_init_set_str(sig, sig_str, 0); 30 31 mpz_init(m); 32 mpz_powm(m, sig, e, n); 33 34 _msg = int_to_str(m); 35 valid = !strcmp(msg, _msg); 36 37 mpz_clear(n); 38 mpz_clear(e); 39 mpz_clear(sig); 40 mpz_clear(m); 41 free(_msg); 42 43 return valid; 44}