/* $OpenXM: OpenXM/src/ox_ntl/crypt/rsa/gmprsa.h,v 1.1 2004/08/16 03:59:58 iwane Exp $ */ #ifndef __GMP_RSA_H__ #define __GMP_RSA_H__ #include typedef struct rsa_key_tag { mpz_t p; /* prime */ mpz_t q; /* prime */ mpz_t mod; /* = p * q */ mpz_t private_key; mpz_t public_key; int k; } rsa_key; #define RSA_PKCS_1_PADDING (0x00000001) #define RSA_PKCS_1_PADDING_PRIVATE0 (0x00) #define RSA_PKCS_1_PADDING_PRIVATE (0x01) #define RSA_PKCS_1_PADDING_PUBLIC (0x02) #ifdef __cplusplus extern "C" { #endif void rsa_init(rsa_key *r); void rsa_clear(rsa_key *r); /* * the probability of a false positive is (1/4) ** reps. * see mpz_probab_prime_p(GMP) */ void rsa_genprime(mpz_ptr prime, int len, const mpz_ptr seed, int rep); /* * bit >= 96 (MUST) * rep >= 80(SHOULD) : see rsa_genprime(). */ int rsa_keygen(rsa_key *, const mpz_ptr seed1, const mpz_ptr seed2, unsigned int bit, int rep); void rsa_set_publickey(rsa_key *rsa, mpz_ptr public_key, mpz_ptr mod); void rsa_set_key(rsa_key *rsa, mpz_ptr public_key, mpz_ptr private_key, mpz_ptr mod); int rsa_encrypt_by_public_key(rsa_key *, unsigned char *eb, const unsigned char *msg, int len, int); int rsa_encrypt_by_private_key(rsa_key *, unsigned char *eb, const unsigned char *msg, int len, int); int rsa_decrypt_by_public_key(rsa_key *, unsigned char *buf, const unsigned char *eb, int); int rsa_decrypt_by_private_key(rsa_key *, unsigned char *buf, const unsigned char *eb, int); #ifdef __cplusplus } #endif #endif