Allow for higher granularity of entropy estimates by using 'double'
[openssl.git] / doc / crypto / rsa.pod
1 =pod
2
3 =head1 NAME
4
5 rsa - RSA public key cryptosystem
6
7 =head1 SYNOPSIS
8
9  #include <openssl/rsa.h>
10
11  RSA * RSA_new(void);
12  void RSA_free(RSA *rsa);
13
14  int RSA_public_encrypt(int flen, unsigned char *from,
15     unsigned char *to, RSA *rsa, int padding);
16  int RSA_private_decrypt(int flen, unsigned char *from,
17     unsigned char *to, RSA *rsa, int padding);
18
19  int RSA_sign(int type, unsigned char *m, unsigned int m_len,
20     unsigned char *sigret, unsigned int *siglen, RSA *rsa);
21  int RSA_verify(int type, unsigned char *m, unsigned int m_len,
22     unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
23
24  int RSA_size(RSA *rsa);
25
26  RSA *RSA_generate_key(int num, unsigned long e,
27     void (*callback)(int,int,void *), void *cb_arg);
28
29  int RSA_check_key(RSA *rsa);
30
31  int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
32  void RSA_blinding_off(RSA *rsa);
33
34  void RSA_set_default_method(RSA_METHOD *meth);
35  RSA_METHOD *RSA_get_default_method(void);
36  RSA_METHOD *RSA_set_method(RSA *rsa, RSA_METHOD *meth);
37  RSA_METHOD *RSA_get_method(RSA *rsa);
38  RSA_METHOD *RSA_PKCS1_SSLeay(void);
39  RSA_METHOD *RSA_PKCS1_RSAref(void);
40  RSA_METHOD *RSA_null_method(void);
41  int RSA_flags(RSA *rsa);
42  RSA *RSA_new_method(RSA_METHOD *method);
43
44  int RSA_print(BIO *bp, RSA *x, int offset);
45  int RSA_print_fp(FILE *fp, RSA *x, int offset);
46
47  int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
48     int (*dup_func)(), void (*free_func)());
49  int RSA_set_ex_data(RSA *r,int idx,char *arg);
50  char *RSA_get_ex_data(RSA *r, int idx);
51
52  int RSA_private_encrypt(int flen, unsigned char *from,
53     unsigned char *to, RSA *rsa,int padding);
54  int RSA_public_decrypt(int flen, unsigned char *from, 
55     unsigned char *to, RSA *rsa,int padding);
56
57  int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m,
58     unsigned int m_len, unsigned char *sigret, unsigned int *siglen,
59     RSA *rsa);
60  int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m,
61     unsigned int m_len, unsigned char *sigbuf, unsigned int siglen,
62     RSA *rsa);
63
64  int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen,
65     unsigned char *f, int fl);
66  int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen,
67     unsigned char *f, int fl, int rsa_len);
68  int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen,
69     unsigned char *f, int fl);
70  int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
71     unsigned char *f, int fl, int rsa_len);
72  int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
73     unsigned char *f, int fl, unsigned char *p, int pl);
74  int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
75     unsigned char *f, int fl, int rsa_len, unsigned char *p, int pl);
76  int RSA_padding_add_SSLv23(unsigned char *to, int tlen,
77     unsigned char *f, int fl);
78  int RSA_padding_check_SSLv23(unsigned char *to, int tlen,
79     unsigned char *f, int fl, int rsa_len);
80  int RSA_padding_add_none(unsigned char *to, int tlen,
81     unsigned char *f, int fl);
82  int RSA_padding_check_none(unsigned char *to, int tlen,
83     unsigned char *f, int fl, int rsa_len);
84
85 =head1 DESCRIPTION
86
87 These functions implement RSA public key encryption and signatures
88 as defined in PKCS #1 v2.0 [RFC 2437].
89
90 The B<RSA> structure consists of several BIGNUM components. It can
91 contain public as well as private RSA keys:
92
93  struct
94         {
95         BIGNUM *n;              // public modulus
96         BIGNUM *e;              // public exponent
97         BIGNUM *d;              // private exponent
98         BIGNUM *p;              // secret prime factor
99         BIGNUM *q;              // secret prime factor
100         BIGNUM *dmp1;           // d mod (p-1)
101         BIGNUM *dmq1;           // d mod (q-1)
102         BIGNUM *iqmp;           // q^-1 mod p
103         // ...
104         };
105  RSA
106
107 In public keys, the private exponent and the related secret values are
108 B<NULL>.
109
110 B<dmp1>, B<dmq1> and B<iqmp> may be B<NULL> in private keys, but the
111 RSA operations are much faster when these values are available.
112
113 =head1 CONFORMING TO
114
115 SSL, PKCS #1 v2.0
116
117 =head1 PATENTS
118
119 RSA is covered by a US patent which expires in September 2000.
120
121 =head1 SEE ALSO
122
123 L<rsa(1)|rsa(1)>, L<bn(3)|bn(3)>, L<dsa(3)|dsa(3)>, L<dh(3)|dh(3)>,
124 L<rand(3)|rand(3)>, L<RSA_new(3)|RSA_new(3)>,
125 L<RSA_public_encrypt(3)|RSA_public_encrypt(3)>,
126 L<RSA_sign(3)|RSA_sign(3)>, L<RSA_size(3)|RSA_size(3)>,
127 L<RSA_generate_key(3)|RSA_generate_key(3)>,
128 L<RSA_check_key(3)|RSA_check_key(3)>,
129 L<RSA_blinding_on(3)|RSA_blinding_on(3)>,
130 L<RSA_set_method(3)|RSA_set_method(3)>, L<RSA_print(3)|RSA_print(3)>,
131 L<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>,
132 L<RSA_private_encrypt(3)|RSA_private_encrypt(3)>,
133 L<RSA_sign_ASN_OCTET_STRING(3)|RSA_sign_ASN_OCTET_STRING(3)>,
134 L<RSA_padding_add_PKCS1_type_1(3)|RSA_padding_add_PKCS1_type_1(3)> 
135
136 =cut