1 .\" $NetBSD: libcrypto.pl,v 1.3 2007/11/27 22:16:03 christos Exp $
3 .\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
6 .\" ========================================================================
7 .de Sh \" Subsection heading
15 .de Sp \" Vertical space (when we can't use .PP)
19 .de Vb \" Begin verbatim text
24 .de Ve \" End verbatim text
28 .\" Set up some character translations and predefined strings. \*(-- will
29 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
30 .\" double quote, and \*(R" will give a right double quote. \*(C+ will
31 .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
32 .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
33 .\" nothing in troff, for use with C<>.
35 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
39 . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
40 . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
53 .\" Escape single quotes in literal strings from groff's Unicode transform.
57 .\" If the F register is turned on, we'll generate index entries on stderr for
58 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
59 .\" entries marked with X<> in POD. Of course, you'll have to process the
60 .\" output yourself in some meaningful fashion.
63 . tm Index:\\$1\t\\n%\t"\\$2"
73 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
74 .\" Fear. Run. Save yourself. No user-serviceable parts.
75 . \" fudge factors for nroff and troff
84 . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
90 . \" simple accents for nroff and troff
100 . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
101 . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
102 . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
103 . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
104 . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
105 . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
107 . \" troff and (daisy-wheel) nroff accents
108 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
109 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
110 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
111 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
112 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
113 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
114 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
115 .ds ae a\h'-(\w'a'u*4/10)'e
116 .ds Ae A\h'-(\w'A'u*4/10)'E
117 . \" corrections for vroff
118 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
119 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
120 . \" for low resolution devices (crt and lpr)
121 .if \n(.H>23 .if \n(.V>19 \
134 .\" ========================================================================
136 .IX Title "RSA_set_method 3"
137 .TH RSA_set_method 3 "2007-11-19" "1.1.0-dev" "OpenSSL"
138 .\" For nroff, turn off justification. Always turn off hyphenation; it makes
139 .\" way too many mistakes in technical documents.
143 RSA_set_default_method, RSA_get_default_method, RSA_set_method,
144 RSA_get_method, RSA_PKCS1_SSLeay, RSA_null_method, RSA_flags,
145 RSA_new_method \- select RSA method
149 .IX Header "SYNOPSIS"
151 \& #include <openssl/rsa.h>
153 \& void RSA_set_default_method(const RSA_METHOD *meth);
155 \& RSA_METHOD *RSA_get_default_method(void);
157 \& int RSA_set_method(RSA *rsa, const RSA_METHOD *meth);
159 \& RSA_METHOD *RSA_get_method(const RSA *rsa);
161 \& RSA_METHOD *RSA_PKCS1_SSLeay(void);
163 \& RSA_METHOD *RSA_null_method(void);
165 \& int RSA_flags(const RSA *rsa);
167 \& RSA *RSA_new_method(RSA_METHOD *method);
170 .IX Header "DESCRIPTION"
171 An \fB\s-1RSA_METHOD\s0\fR specifies the functions that OpenSSL uses for \s-1RSA\s0
172 operations. By modifying the method, alternative implementations such as
173 hardware accelerators may be used. \s-1IMPORTANT:\s0 See the \s-1NOTES\s0 section for
174 important information about how these \s-1RSA\s0 \s-1API\s0 functions are affected by the
175 use of \fB\s-1ENGINE\s0\fR \s-1API\s0 calls.
177 Initially, the default \s-1RSA_METHOD\s0 is the OpenSSL internal implementation,
178 as returned by \fIRSA_PKCS1_SSLeay()\fR.
180 \&\fIRSA_set_default_method()\fR makes \fBmeth\fR the default method for all \s-1RSA\s0
181 structures created later. \fB\s-1NB\s0\fR: This is true only whilst no \s-1ENGINE\s0 has
182 been set as a default for \s-1RSA\s0, so this function is no longer recommended.
184 \&\fIRSA_get_default_method()\fR returns a pointer to the current default
185 \&\s-1RSA_METHOD\s0. However, the meaningfulness of this result is dependent on
186 whether the \s-1ENGINE\s0 \s-1API\s0 is being used, so this function is no longer
189 \&\fIRSA_set_method()\fR selects \fBmeth\fR to perform all operations using the key
190 \&\fBrsa\fR. This will replace the \s-1RSA_METHOD\s0 used by the \s-1RSA\s0 key and if the
191 previous method was supplied by an \s-1ENGINE\s0, the handle to that \s-1ENGINE\s0 will
192 be released during the change. It is possible to have \s-1RSA\s0 keys that only
193 work with certain \s-1RSA_METHOD\s0 implementations (eg. from an \s-1ENGINE\s0 module
194 that supports embedded hardware-protected keys), and in such cases
195 attempting to change the \s-1RSA_METHOD\s0 for the key can have unexpected
198 \&\fIRSA_get_method()\fR returns a pointer to the \s-1RSA_METHOD\s0 being used by \fBrsa\fR.
199 This method may or may not be supplied by an \s-1ENGINE\s0 implementation, but if
200 it is, the return value can only be guaranteed to be valid as long as the
201 \&\s-1RSA\s0 key itself is valid and does not have its implementation changed by
202 \&\fIRSA_set_method()\fR.
204 \&\fIRSA_flags()\fR returns the \fBflags\fR that are set for \fBrsa\fR's current
205 \&\s-1RSA_METHOD\s0. See the \s-1BUGS\s0 section.
207 \&\fIRSA_new_method()\fR allocates and initializes an \s-1RSA\s0 structure so that
208 \&\fBengine\fR will be used for the \s-1RSA\s0 operations. If \fBengine\fR is \s-1NULL\s0, the
209 default \s-1ENGINE\s0 for \s-1RSA\s0 operations is used, and if no default \s-1ENGINE\s0 is set,
210 the \s-1RSA_METHOD\s0 controlled by \fIRSA_set_default_method()\fR is used.
212 \&\fIRSA_flags()\fR returns the \fBflags\fR that are set for \fBrsa\fR's current method.
214 \&\fIRSA_new_method()\fR allocates and initializes an \fB\s-1RSA\s0\fR structure so that
215 \&\fBmethod\fR will be used for the \s-1RSA\s0 operations. If \fBmethod\fR is \fB\s-1NULL\s0\fR,
216 the default method is used.
217 .SH "THE RSA_METHOD STRUCTURE"
218 .IX Header "THE RSA_METHOD STRUCTURE"
220 \& typedef struct rsa_meth_st
222 \& /* name of the implementation */
226 \& int (*rsa_pub_enc)(int flen, unsigned char *from,
227 \& unsigned char *to, RSA *rsa, int padding);
229 \& /* verify arbitrary data */
230 \& int (*rsa_pub_dec)(int flen, unsigned char *from,
231 \& unsigned char *to, RSA *rsa, int padding);
233 \& /* sign arbitrary data */
234 \& int (*rsa_priv_enc)(int flen, unsigned char *from,
235 \& unsigned char *to, RSA *rsa, int padding);
238 \& int (*rsa_priv_dec)(int flen, unsigned char *from,
239 \& unsigned char *to, RSA *rsa, int padding);
241 \& /* compute r0 = r0 ^ I mod rsa\->n (May be NULL for some
242 \& implementations) */
243 \& int (*rsa_mod_exp)(BIGNUM *r0, BIGNUM *I, RSA *rsa);
245 \& /* compute r = a ^ p mod m (May be NULL for some implementations) */
246 \& int (*bn_mod_exp)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
247 \& const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
249 \& /* called at RSA_new */
250 \& int (*init)(RSA *rsa);
252 \& /* called at RSA_free */
253 \& int (*finish)(RSA *rsa);
255 \& /* RSA_FLAG_EXT_PKEY \- rsa_mod_exp is called for private key
256 \& * operations, even if p,q,dmp1,dmq1,iqmp
258 \& * RSA_FLAG_SIGN_VER \- enable rsa_sign and rsa_verify
259 \& * RSA_METHOD_FLAG_NO_CHECK \- don\*(Aqt check pub/private match
263 \& char *app_data; /* ?? */
265 \& /* sign. For backward compatibility, this is used only
266 \& * if (flags & RSA_FLAG_SIGN_VER)
268 \& int (*rsa_sign)(int type, unsigned char *m, unsigned int m_len,
269 \& unsigned char *sigret, unsigned int *siglen, RSA *rsa);
271 \& /* verify. For backward compatibility, this is used only
272 \& * if (flags & RSA_FLAG_SIGN_VER)
274 \& int (*rsa_verify)(int type, unsigned char *m, unsigned int m_len,
275 \& unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
280 .IX Header "RETURN VALUES"
281 \&\fIRSA_PKCS1_SSLeay()\fR, \fIRSA_PKCS1_null_method()\fR, \fIRSA_get_default_method()\fR
282 and \fIRSA_get_method()\fR return pointers to the respective RSA_METHODs.
284 \&\fIRSA_set_default_method()\fR returns no value.
286 \&\fIRSA_set_method()\fR returns a pointer to the old \s-1RSA_METHOD\s0 implementation
287 that was replaced. However, this return value should probably be ignored
288 because if it was supplied by an \s-1ENGINE\s0, the pointer could be invalidated
289 at any time if the \s-1ENGINE\s0 is unloaded (in fact it could be unloaded as a
290 result of the \fIRSA_set_method()\fR function releasing its handle to the
291 \&\s-1ENGINE\s0). For this reason, the return type may be replaced with a \fBvoid\fR
292 declaration in a future release.
294 \&\fIRSA_new_method()\fR returns \s-1NULL\s0 and sets an error code that can be obtained
295 by \fIERR_get_error\fR\|(3) if the allocation fails. Otherwise
296 it returns a pointer to the newly allocated structure.
299 As of version 0.9.7, \s-1RSA_METHOD\s0 implementations are grouped together with
300 other algorithmic APIs (eg. \s-1DSA_METHOD\s0, \s-1EVP_CIPHER\s0, etc) into \fB\s-1ENGINE\s0\fR
301 modules. If a default \s-1ENGINE\s0 is specified for \s-1RSA\s0 functionality using an
302 \&\s-1ENGINE\s0 \s-1API\s0 function, that will override any \s-1RSA\s0 defaults set using the \s-1RSA\s0
303 \&\s-1API\s0 (ie. \fIRSA_set_default_method()\fR). For this reason, the \s-1ENGINE\s0 \s-1API\s0 is the
304 recommended way to control default implementations for use in \s-1RSA\s0 and other
305 cryptographic algorithms.
308 The behaviour of \fIRSA_flags()\fR is a mis-feature that is left as-is for now
309 to avoid creating compatibility problems. \s-1RSA\s0 functionality, such as the
310 encryption functions, are controlled by the \fBflags\fR value in the \s-1RSA\s0 key
311 itself, not by the \fBflags\fR value in the \s-1RSA_METHOD\s0 attached to the \s-1RSA\s0 key
312 (which is what this function returns). If the flags element of an \s-1RSA\s0 key
313 is changed, the changes will be honoured by \s-1RSA\s0 functionality but will not
314 be reflected in the return value of the \fIRSA_flags()\fR function \- in effect
315 \&\fIRSA_flags()\fR behaves more like an \fIRSA_default_flags()\fR function (which does
316 not currently exist).
318 .IX Header "SEE ALSO"
319 \&\fIopenssl_rsa\fR\|(3), \fIRSA_new\fR\|(3)
322 \&\fIRSA_new_method()\fR and \fIRSA_set_default_method()\fR appeared in SSLeay 0.8.
323 \&\fIRSA_get_default_method()\fR, \fIRSA_set_method()\fR and \fIRSA_get_method()\fR as
324 well as the rsa_sign and rsa_verify components of \s-1RSA_METHOD\s0 were
325 added in OpenSSL 0.9.4.
327 \&\fIRSA_set_default_openssl_method()\fR and \fIRSA_get_default_openssl_method()\fR
328 replaced \fIRSA_set_default_method()\fR and \fIRSA_get_default_method()\fR
329 respectively, and \fIRSA_set_method()\fR and \fIRSA_new_method()\fR were altered to use
330 \&\fB\s-1ENGINE\s0\fRs rather than \fB\s-1RSA_METHOD\s0\fRs during development of the engine
331 version of OpenSSL 0.9.6. For 0.9.7, the handling of defaults in the \s-1ENGINE\s0
332 \&\s-1API\s0 was restructured so that this change was reversed, and behaviour of the
333 other functions resembled more closely the previous behaviour. The
334 behaviour of defaults in the \s-1ENGINE\s0 \s-1API\s0 now transparently overrides the
335 behaviour of defaults in the \s-1RSA\s0 \s-1API\s0 without requiring changing these