1*ebfedea0SLionel Sambuc=pod 2*ebfedea0SLionel Sambuc 3*ebfedea0SLionel Sambuc=head1 NAME 4*ebfedea0SLionel Sambuc 5*ebfedea0SLionel Sambucrsa - RSA public key cryptosystem 6*ebfedea0SLionel Sambuc 7*ebfedea0SLionel Sambuc=head1 SYNOPSIS 8*ebfedea0SLionel Sambuc 9*ebfedea0SLionel Sambuc #include <openssl/rsa.h> 10*ebfedea0SLionel Sambuc #include <openssl/engine.h> 11*ebfedea0SLionel Sambuc 12*ebfedea0SLionel Sambuc RSA * RSA_new(void); 13*ebfedea0SLionel Sambuc void RSA_free(RSA *rsa); 14*ebfedea0SLionel Sambuc 15*ebfedea0SLionel Sambuc int RSA_public_encrypt(int flen, unsigned char *from, 16*ebfedea0SLionel Sambuc unsigned char *to, RSA *rsa, int padding); 17*ebfedea0SLionel Sambuc int RSA_private_decrypt(int flen, unsigned char *from, 18*ebfedea0SLionel Sambuc unsigned char *to, RSA *rsa, int padding); 19*ebfedea0SLionel Sambuc int RSA_private_encrypt(int flen, unsigned char *from, 20*ebfedea0SLionel Sambuc unsigned char *to, RSA *rsa,int padding); 21*ebfedea0SLionel Sambuc int RSA_public_decrypt(int flen, unsigned char *from, 22*ebfedea0SLionel Sambuc unsigned char *to, RSA *rsa,int padding); 23*ebfedea0SLionel Sambuc 24*ebfedea0SLionel Sambuc int RSA_sign(int type, unsigned char *m, unsigned int m_len, 25*ebfedea0SLionel Sambuc unsigned char *sigret, unsigned int *siglen, RSA *rsa); 26*ebfedea0SLionel Sambuc int RSA_verify(int type, unsigned char *m, unsigned int m_len, 27*ebfedea0SLionel Sambuc unsigned char *sigbuf, unsigned int siglen, RSA *rsa); 28*ebfedea0SLionel Sambuc 29*ebfedea0SLionel Sambuc int RSA_size(const RSA *rsa); 30*ebfedea0SLionel Sambuc 31*ebfedea0SLionel Sambuc RSA *RSA_generate_key(int num, unsigned long e, 32*ebfedea0SLionel Sambuc void (*callback)(int,int,void *), void *cb_arg); 33*ebfedea0SLionel Sambuc 34*ebfedea0SLionel Sambuc int RSA_check_key(RSA *rsa); 35*ebfedea0SLionel Sambuc 36*ebfedea0SLionel Sambuc int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); 37*ebfedea0SLionel Sambuc void RSA_blinding_off(RSA *rsa); 38*ebfedea0SLionel Sambuc 39*ebfedea0SLionel Sambuc void RSA_set_default_method(const RSA_METHOD *meth); 40*ebfedea0SLionel Sambuc const RSA_METHOD *RSA_get_default_method(void); 41*ebfedea0SLionel Sambuc int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); 42*ebfedea0SLionel Sambuc const RSA_METHOD *RSA_get_method(const RSA *rsa); 43*ebfedea0SLionel Sambuc RSA_METHOD *RSA_PKCS1_SSLeay(void); 44*ebfedea0SLionel Sambuc RSA_METHOD *RSA_null_method(void); 45*ebfedea0SLionel Sambuc int RSA_flags(const RSA *rsa); 46*ebfedea0SLionel Sambuc RSA *RSA_new_method(ENGINE *engine); 47*ebfedea0SLionel Sambuc 48*ebfedea0SLionel Sambuc int RSA_print(BIO *bp, RSA *x, int offset); 49*ebfedea0SLionel Sambuc int RSA_print_fp(FILE *fp, RSA *x, int offset); 50*ebfedea0SLionel Sambuc 51*ebfedea0SLionel Sambuc int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(), 52*ebfedea0SLionel Sambuc int (*dup_func)(), void (*free_func)()); 53*ebfedea0SLionel Sambuc int RSA_set_ex_data(RSA *r,int idx,char *arg); 54*ebfedea0SLionel Sambuc char *RSA_get_ex_data(RSA *r, int idx); 55*ebfedea0SLionel Sambuc 56*ebfedea0SLionel Sambuc int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m, 57*ebfedea0SLionel Sambuc unsigned int m_len, unsigned char *sigret, unsigned int *siglen, 58*ebfedea0SLionel Sambuc RSA *rsa); 59*ebfedea0SLionel Sambuc int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m, 60*ebfedea0SLionel Sambuc unsigned int m_len, unsigned char *sigbuf, unsigned int siglen, 61*ebfedea0SLionel Sambuc RSA *rsa); 62*ebfedea0SLionel Sambuc 63*ebfedea0SLionel Sambuc=head1 DESCRIPTION 64*ebfedea0SLionel Sambuc 65*ebfedea0SLionel SambucThese functions implement RSA public key encryption and signatures 66*ebfedea0SLionel Sambucas defined in PKCS #1 v2.0 [RFC 2437]. 67*ebfedea0SLionel Sambuc 68*ebfedea0SLionel SambucThe B<RSA> structure consists of several BIGNUM components. It can 69*ebfedea0SLionel Sambuccontain public as well as private RSA keys: 70*ebfedea0SLionel Sambuc 71*ebfedea0SLionel Sambuc struct 72*ebfedea0SLionel Sambuc { 73*ebfedea0SLionel Sambuc BIGNUM *n; // public modulus 74*ebfedea0SLionel Sambuc BIGNUM *e; // public exponent 75*ebfedea0SLionel Sambuc BIGNUM *d; // private exponent 76*ebfedea0SLionel Sambuc BIGNUM *p; // secret prime factor 77*ebfedea0SLionel Sambuc BIGNUM *q; // secret prime factor 78*ebfedea0SLionel Sambuc BIGNUM *dmp1; // d mod (p-1) 79*ebfedea0SLionel Sambuc BIGNUM *dmq1; // d mod (q-1) 80*ebfedea0SLionel Sambuc BIGNUM *iqmp; // q^-1 mod p 81*ebfedea0SLionel Sambuc // ... 82*ebfedea0SLionel Sambuc }; 83*ebfedea0SLionel Sambuc RSA 84*ebfedea0SLionel Sambuc 85*ebfedea0SLionel SambucIn public keys, the private exponent and the related secret values are 86*ebfedea0SLionel SambucB<NULL>. 87*ebfedea0SLionel Sambuc 88*ebfedea0SLionel SambucB<p>, B<q>, B<dmp1>, B<dmq1> and B<iqmp> may be B<NULL> in private 89*ebfedea0SLionel Sambuckeys, but the RSA operations are much faster when these values are 90*ebfedea0SLionel Sambucavailable. 91*ebfedea0SLionel Sambuc 92*ebfedea0SLionel SambucNote that RSA keys may use non-standard B<RSA_METHOD> implementations, 93*ebfedea0SLionel Sambuceither directly or by the use of B<ENGINE> modules. In some cases (eg. an 94*ebfedea0SLionel SambucENGINE providing support for hardware-embedded keys), these BIGNUM values 95*ebfedea0SLionel Sambucwill not be used by the implementation or may be used for alternative data 96*ebfedea0SLionel Sambucstorage. For this reason, applications should generally avoid using RSA 97*ebfedea0SLionel Sambucstructure elements directly and instead use API functions to query or 98*ebfedea0SLionel Sambucmodify keys. 99*ebfedea0SLionel Sambuc 100*ebfedea0SLionel Sambuc=head1 CONFORMING TO 101*ebfedea0SLionel Sambuc 102*ebfedea0SLionel SambucSSL, PKCS #1 v2.0 103*ebfedea0SLionel Sambuc 104*ebfedea0SLionel Sambuc=head1 PATENTS 105*ebfedea0SLionel Sambuc 106*ebfedea0SLionel SambucRSA was covered by a US patent which expired in September 2000. 107*ebfedea0SLionel Sambuc 108*ebfedea0SLionel Sambuc=head1 SEE ALSO 109*ebfedea0SLionel Sambuc 110*ebfedea0SLionel SambucL<rsa(1)|rsa(1)>, L<bn(3)|bn(3)>, L<dsa(3)|dsa(3)>, L<dh(3)|dh(3)>, 111*ebfedea0SLionel SambucL<rand(3)|rand(3)>, L<engine(3)|engine(3)>, L<RSA_new(3)|RSA_new(3)>, 112*ebfedea0SLionel SambucL<RSA_public_encrypt(3)|RSA_public_encrypt(3)>, 113*ebfedea0SLionel SambucL<RSA_sign(3)|RSA_sign(3)>, L<RSA_size(3)|RSA_size(3)>, 114*ebfedea0SLionel SambucL<RSA_generate_key(3)|RSA_generate_key(3)>, 115*ebfedea0SLionel SambucL<RSA_check_key(3)|RSA_check_key(3)>, 116*ebfedea0SLionel SambucL<RSA_blinding_on(3)|RSA_blinding_on(3)>, 117*ebfedea0SLionel SambucL<RSA_set_method(3)|RSA_set_method(3)>, L<RSA_print(3)|RSA_print(3)>, 118*ebfedea0SLionel SambucL<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>, 119*ebfedea0SLionel SambucL<RSA_private_encrypt(3)|RSA_private_encrypt(3)>, 120*ebfedea0SLionel SambucL<RSA_sign_ASN1_OCTET_STRING(3)|RSA_sign_ASN1_OCTET_STRING(3)>, 121*ebfedea0SLionel SambucL<RSA_padding_add_PKCS1_type_1(3)|RSA_padding_add_PKCS1_type_1(3)> 122*ebfedea0SLionel Sambuc 123*ebfedea0SLionel Sambuc=cut 124