#ifndef RSA_H #define RSA_H #include #include #ifndef MODULUS_SIZE #define MODULUS_SIZE 256ULL #endif typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; typedef struct { mpz_t p; mpz_t q; mpz_t n; mpz_t e; mpz_t d; } rsa_key; typedef struct { mpz_t e; mpz_t n; } rsa_public_key; void rsa_print(const rsa_key *key); void rsa_public_print(const rsa_public_key *pk); int rsa_init(rsa_key *key); void rsa_free(rsa_key *key); int rsa_public_init(rsa_public_key *key); void rsa_public_free(rsa_public_key *key); size_t rsa_sign(u8 *sig, const u8 *sha256, const rsa_key *key); int rsa_verify(const u8 *sig, const size_t sig_length, const u8 *sha256, const rsa_public_key *pk); #endif