159191Skris=pod 259191Skris 359191Skris=head1 NAME 459191Skris 559191Skrisrsa - RSA public key cryptosystem 659191Skris 759191Skris=head1 SYNOPSIS 859191Skris 959191Skris #include <openssl/rsa.h> 10109998Smarkm #include <openssl/engine.h> 1159191Skris 1259191Skris RSA * RSA_new(void); 1359191Skris void RSA_free(RSA *rsa); 1459191Skris 1559191Skris int RSA_public_encrypt(int flen, unsigned char *from, 1659191Skris unsigned char *to, RSA *rsa, int padding); 1759191Skris int RSA_private_decrypt(int flen, unsigned char *from, 1859191Skris unsigned char *to, RSA *rsa, int padding); 19109998Smarkm int RSA_private_encrypt(int flen, unsigned char *from, 20109998Smarkm unsigned char *to, RSA *rsa,int padding); 21109998Smarkm int RSA_public_decrypt(int flen, unsigned char *from, 22109998Smarkm unsigned char *to, RSA *rsa,int padding); 2359191Skris 2459191Skris int RSA_sign(int type, unsigned char *m, unsigned int m_len, 2559191Skris unsigned char *sigret, unsigned int *siglen, RSA *rsa); 2659191Skris int RSA_verify(int type, unsigned char *m, unsigned int m_len, 2759191Skris unsigned char *sigbuf, unsigned int siglen, RSA *rsa); 2859191Skris 29109998Smarkm int RSA_size(const RSA *rsa); 3059191Skris 3159191Skris RSA *RSA_generate_key(int num, unsigned long e, 3259191Skris void (*callback)(int,int,void *), void *cb_arg); 3359191Skris 3459191Skris int RSA_check_key(RSA *rsa); 3559191Skris 3659191Skris int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); 3759191Skris void RSA_blinding_off(RSA *rsa); 3859191Skris 39109998Smarkm void RSA_set_default_method(const RSA_METHOD *meth); 40109998Smarkm const RSA_METHOD *RSA_get_default_method(void); 41109998Smarkm int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); 42109998Smarkm const RSA_METHOD *RSA_get_method(const RSA *rsa); 4359191Skris RSA_METHOD *RSA_PKCS1_SSLeay(void); 4459191Skris RSA_METHOD *RSA_null_method(void); 45109998Smarkm int RSA_flags(const RSA *rsa); 46109998Smarkm RSA *RSA_new_method(ENGINE *engine); 4759191Skris 4859191Skris int RSA_print(BIO *bp, RSA *x, int offset); 4959191Skris int RSA_print_fp(FILE *fp, RSA *x, int offset); 5059191Skris 5159191Skris int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(), 5259191Skris int (*dup_func)(), void (*free_func)()); 5359191Skris int RSA_set_ex_data(RSA *r,int idx,char *arg); 5459191Skris char *RSA_get_ex_data(RSA *r, int idx); 5559191Skris 5659191Skris int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m, 5759191Skris unsigned int m_len, unsigned char *sigret, unsigned int *siglen, 5859191Skris RSA *rsa); 5959191Skris int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m, 6059191Skris unsigned int m_len, unsigned char *sigbuf, unsigned int siglen, 6159191Skris RSA *rsa); 6259191Skris 6359191Skris=head1 DESCRIPTION 6459191Skris 6559191SkrisThese functions implement RSA public key encryption and signatures 6659191Skrisas defined in PKCS #1 v2.0 [RFC 2437]. 6759191Skris 6859191SkrisThe B<RSA> structure consists of several BIGNUM components. It can 6959191Skriscontain public as well as private RSA keys: 7059191Skris 7159191Skris struct 7259191Skris { 7359191Skris BIGNUM *n; // public modulus 7459191Skris BIGNUM *e; // public exponent 7559191Skris BIGNUM *d; // private exponent 7659191Skris BIGNUM *p; // secret prime factor 7759191Skris BIGNUM *q; // secret prime factor 7859191Skris BIGNUM *dmp1; // d mod (p-1) 7959191Skris BIGNUM *dmq1; // d mod (q-1) 8059191Skris BIGNUM *iqmp; // q^-1 mod p 8159191Skris // ... 8259191Skris }; 8359191Skris RSA 8459191Skris 8559191SkrisIn public keys, the private exponent and the related secret values are 8659191SkrisB<NULL>. 8759191Skris 8859191SkrisB<p>, B<q>, B<dmp1>, B<dmq1> and B<iqmp> may be B<NULL> in private 8959191Skriskeys, but the RSA operations are much faster when these values are 9059191Skrisavailable. 9159191Skris 92109998SmarkmNote that RSA keys may use non-standard B<RSA_METHOD> implementations, 93109998Smarkmeither directly or by the use of B<ENGINE> modules. In some cases (eg. an 94109998SmarkmENGINE providing support for hardware-embedded keys), these BIGNUM values 95109998Smarkmwill not be used by the implementation or may be used for alternative data 96109998Smarkmstorage. For this reason, applications should generally avoid using RSA 97109998Smarkmstructure elements directly and instead use API functions to query or 98109998Smarkmmodify keys. 99109998Smarkm 10059191Skris=head1 CONFORMING TO 10159191Skris 10259191SkrisSSL, PKCS #1 v2.0 10359191Skris 10459191Skris=head1 PATENTS 10559191Skris 10668651SkrisRSA was covered by a US patent which expired in September 2000. 10759191Skris 10859191Skris=head1 SEE ALSO 10959191Skris 11059191SkrisL<rsa(1)|rsa(1)>, L<bn(3)|bn(3)>, L<dsa(3)|dsa(3)>, L<dh(3)|dh(3)>, 111109998SmarkmL<rand(3)|rand(3)>, L<engine(3)|engine(3)>, L<RSA_new(3)|RSA_new(3)>, 11259191SkrisL<RSA_public_encrypt(3)|RSA_public_encrypt(3)>, 11359191SkrisL<RSA_sign(3)|RSA_sign(3)>, L<RSA_size(3)|RSA_size(3)>, 11459191SkrisL<RSA_generate_key(3)|RSA_generate_key(3)>, 11559191SkrisL<RSA_check_key(3)|RSA_check_key(3)>, 11659191SkrisL<RSA_blinding_on(3)|RSA_blinding_on(3)>, 11759191SkrisL<RSA_set_method(3)|RSA_set_method(3)>, L<RSA_print(3)|RSA_print(3)>, 11859191SkrisL<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>, 11959191SkrisL<RSA_private_encrypt(3)|RSA_private_encrypt(3)>, 120100936SnectarL<RSA_sign_ASN1_OCTET_STRING(3)|RSA_sign_ASN1_OCTET_STRING(3)>, 12159191SkrisL<RSA_padding_add_PKCS1_type_1(3)|RSA_padding_add_PKCS1_type_1(3)> 12259191Skris 12359191Skris=cut 124