bambi6-service-postit

Simple Note-Taking A/D Service for BambiCTF6 in 2021
git clone https://git.sinitax.com/sinitax/bambi6-service-postit
Log | Files | Refs | README | LICENSE | sfeed.txt

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}