1 .\" $NetBSD: RSA_set_method.3,v 1.14 2015/06/12 17:01:14 christos Exp $
3 .\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
6 .\" ========================================================================
7 .de Sp \" Vertical space (when we can't use .PP)
11 .de Vb \" Begin verbatim text
16 .de Ve \" End verbatim text
20 .\" Set up some character translations and predefined strings. \*(-- will
21 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
22 .\" double quote, and \*(R" will give a right double quote. \*(C+ will
23 .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
24 .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
25 .\" nothing in troff, for use with C<>.
27 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
31 . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
32 . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
47 .\" Escape single quotes in literal strings from groff's Unicode transform.
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
53 .\" entries marked with X<> in POD. Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
56 .\" Avoid warning from groff about undefined register 'F'.
60 .if \n(.g .if rF .nr rF 1
61 .if (\n(rF:(\n(.g==0)) \{
64 . tm Index:\\$1\t\\n%\t"\\$2"
74 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
75 .\" Fear. Run. Save yourself. No user-serviceable parts.
76 . \" fudge factors for nroff and troff
85 . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
91 . \" simple accents for nroff and troff
101 . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
102 . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
103 . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
104 . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
105 . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
106 . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
108 . \" troff and (daisy-wheel) nroff accents
109 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
110 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
111 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
112 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
113 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
114 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
115 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
116 .ds ae a\h'-(\w'a'u*4/10)'e
117 .ds Ae A\h'-(\w'A'u*4/10)'E
118 . \" corrections for vroff
119 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
120 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
121 . \" for low resolution devices (crt and lpr)
122 .if \n(.H>23 .if \n(.V>19 \
135 .\" ========================================================================
137 .IX Title "RSA_set_method 3"
138 .TH RSA_set_method 3 "2014-08-10" "1.0.1n" "OpenSSL"
139 .\" For nroff, turn off justification. Always turn off hyphenation; it makes
140 .\" way too many mistakes in technical documents.
144 RSA_set_default_method, RSA_get_default_method, RSA_set_method,
145 RSA_get_method, RSA_PKCS1_SSLeay, RSA_null_method, RSA_flags,
146 RSA_new_method \- select RSA method
150 .IX Header "SYNOPSIS"
152 \& #include <openssl/rsa.h>
154 \& void RSA_set_default_method(const RSA_METHOD *meth);
156 \& RSA_METHOD *RSA_get_default_method(void);
158 \& int RSA_set_method(RSA *rsa, const RSA_METHOD *meth);
160 \& RSA_METHOD *RSA_get_method(const RSA *rsa);
162 \& RSA_METHOD *RSA_PKCS1_SSLeay(void);
164 \& RSA_METHOD *RSA_null_method(void);
166 \& int RSA_flags(const RSA *rsa);
168 \& RSA *RSA_new_method(RSA_METHOD *method);
171 .IX Header "DESCRIPTION"
172 An \fB\s-1RSA_METHOD\s0\fR specifies the functions that OpenSSL uses for \s-1RSA\s0
173 operations. By modifying the method, alternative implementations such as
174 hardware accelerators may be used. \s-1IMPORTANT:\s0 See the \s-1NOTES\s0 section for
175 important information about how these \s-1RSA API\s0 functions are affected by the
176 use of \fB\s-1ENGINE\s0\fR \s-1API\s0 calls.
178 Initially, the default \s-1RSA_METHOD\s0 is the OpenSSL internal implementation,
179 as returned by \fIRSA_PKCS1_SSLeay()\fR.
181 \&\fIRSA_set_default_method()\fR makes \fBmeth\fR the default method for all \s-1RSA\s0
182 structures created later. \fB\s-1NB\s0\fR: This is true only whilst no \s-1ENGINE\s0 has
183 been set as a default for \s-1RSA,\s0 so this function is no longer recommended.
185 \&\fIRSA_get_default_method()\fR returns a pointer to the current default
186 \&\s-1RSA_METHOD.\s0 However, the meaningfulness of this result is dependent on
187 whether the \s-1ENGINE API\s0 is being used, so this function is no longer
190 \&\fIRSA_set_method()\fR selects \fBmeth\fR to perform all operations using the key
191 \&\fBrsa\fR. This will replace the \s-1RSA_METHOD\s0 used by the \s-1RSA\s0 key and if the
192 previous method was supplied by an \s-1ENGINE,\s0 the handle to that \s-1ENGINE\s0 will
193 be released during the change. It is possible to have \s-1RSA\s0 keys that only
194 work with certain \s-1RSA_METHOD\s0 implementations (eg. from an \s-1ENGINE\s0 module
195 that supports embedded hardware-protected keys), and in such cases
196 attempting to change the \s-1RSA_METHOD\s0 for the key can have unexpected
199 \&\fIRSA_get_method()\fR returns a pointer to the \s-1RSA_METHOD\s0 being used by \fBrsa\fR.
200 This method may or may not be supplied by an \s-1ENGINE\s0 implementation, but if
201 it is, the return value can only be guaranteed to be valid as long as the
202 \&\s-1RSA\s0 key itself is valid and does not have its implementation changed by
203 \&\fIRSA_set_method()\fR.
205 \&\fIRSA_flags()\fR returns the \fBflags\fR that are set for \fBrsa\fR's current
206 \&\s-1RSA_METHOD.\s0 See the \s-1BUGS\s0 section.
208 \&\fIRSA_new_method()\fR allocates and initializes an \s-1RSA\s0 structure so that
209 \&\fBengine\fR will be used for the \s-1RSA\s0 operations. If \fBengine\fR is \s-1NULL,\s0 the
210 default \s-1ENGINE\s0 for \s-1RSA\s0 operations is used, and if no default \s-1ENGINE\s0 is set,
211 the \s-1RSA_METHOD\s0 controlled by \fIRSA_set_default_method()\fR is used.
213 \&\fIRSA_flags()\fR returns the \fBflags\fR that are set for \fBrsa\fR's current method.
215 \&\fIRSA_new_method()\fR allocates and initializes an \fB\s-1RSA\s0\fR structure so that
216 \&\fBmethod\fR will be used for the \s-1RSA\s0 operations. If \fBmethod\fR is \fB\s-1NULL\s0\fR,
217 the default method is used.
218 .SH "THE RSA_METHOD STRUCTURE"
219 .IX Header "THE RSA_METHOD STRUCTURE"
221 \& typedef struct rsa_meth_st
223 \& /* name of the implementation */
227 \& int (*rsa_pub_enc)(int flen, unsigned char *from,
228 \& unsigned char *to, RSA *rsa, int padding);
230 \& /* verify arbitrary data */
231 \& int (*rsa_pub_dec)(int flen, unsigned char *from,
232 \& unsigned char *to, RSA *rsa, int padding);
234 \& /* sign arbitrary data */
235 \& int (*rsa_priv_enc)(int flen, unsigned char *from,
236 \& unsigned char *to, RSA *rsa, int padding);
239 \& int (*rsa_priv_dec)(int flen, unsigned char *from,
240 \& unsigned char *to, RSA *rsa, int padding);
242 \& /* compute r0 = r0 ^ I mod rsa\->n (May be NULL for some
243 \& implementations) */
244 \& int (*rsa_mod_exp)(BIGNUM *r0, BIGNUM *I, RSA *rsa);
246 \& /* compute r = a ^ p mod m (May be NULL for some implementations) */
247 \& int (*bn_mod_exp)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
248 \& const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
250 \& /* called at RSA_new */
251 \& int (*init)(RSA *rsa);
253 \& /* called at RSA_free */
254 \& int (*finish)(RSA *rsa);
256 \& /* RSA_FLAG_EXT_PKEY \- rsa_mod_exp is called for private key
257 \& * operations, even if p,q,dmp1,dmq1,iqmp
259 \& * RSA_FLAG_SIGN_VER \- enable rsa_sign and rsa_verify
260 \& * RSA_METHOD_FLAG_NO_CHECK \- don\*(Aqt check pub/private match
264 \& char *app_data; /* ?? */
266 \& /* sign. For backward compatibility, this is used only
267 \& * if (flags & RSA_FLAG_SIGN_VER)
269 \& int (*rsa_sign)(int type,
270 \& const unsigned char *m, unsigned int m_length,
271 \& unsigned char *sigret, unsigned int *siglen, const RSA *rsa);
272 \& /* verify. For backward compatibility, this is used only
273 \& * if (flags & RSA_FLAG_SIGN_VER)
275 \& int (*rsa_verify)(int dtype,
276 \& const unsigned char *m, unsigned int m_length,
277 \& const unsigned char *sigbuf, unsigned int siglen,
279 \& /* keygen. If NULL builtin RSA key generation will be used */
280 \& int (*rsa_keygen)(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
285 .IX Header "RETURN VALUES"
286 \&\fIRSA_PKCS1_SSLeay()\fR, \fIRSA_PKCS1_null_method()\fR, \fIRSA_get_default_method()\fR
287 and \fIRSA_get_method()\fR return pointers to the respective RSA_METHODs.
289 \&\fIRSA_set_default_method()\fR returns no value.
291 \&\fIRSA_set_method()\fR returns a pointer to the old \s-1RSA_METHOD\s0 implementation
292 that was replaced. However, this return value should probably be ignored
293 because if it was supplied by an \s-1ENGINE,\s0 the pointer could be invalidated
294 at any time if the \s-1ENGINE\s0 is unloaded (in fact it could be unloaded as a
295 result of the \fIRSA_set_method()\fR function releasing its handle to the
296 \&\s-1ENGINE\s0). For this reason, the return type may be replaced with a \fBvoid\fR
297 declaration in a future release.
299 \&\fIRSA_new_method()\fR returns \s-1NULL\s0 and sets an error code that can be obtained
300 by \fIERR_get_error\fR\|(3) if the allocation fails. Otherwise
301 it returns a pointer to the newly allocated structure.
304 As of version 0.9.7, \s-1RSA_METHOD\s0 implementations are grouped together with
305 other algorithmic APIs (eg. \s-1DSA_METHOD, EVP_CIPHER,\s0 etc) into \fB\s-1ENGINE\s0\fR
306 modules. If a default \s-1ENGINE\s0 is specified for \s-1RSA\s0 functionality using an
307 \&\s-1ENGINE API\s0 function, that will override any \s-1RSA\s0 defaults set using the \s-1RSA
308 API \s0(ie. \fIRSA_set_default_method()\fR). For this reason, the \s-1ENGINE API\s0 is the
309 recommended way to control default implementations for use in \s-1RSA\s0 and other
310 cryptographic algorithms.
313 The behaviour of \fIRSA_flags()\fR is a mis-feature that is left as-is for now
314 to avoid creating compatibility problems. \s-1RSA\s0 functionality, such as the
315 encryption functions, are controlled by the \fBflags\fR value in the \s-1RSA\s0 key
316 itself, not by the \fBflags\fR value in the \s-1RSA_METHOD\s0 attached to the \s-1RSA\s0 key
317 (which is what this function returns). If the flags element of an \s-1RSA\s0 key
318 is changed, the changes will be honoured by \s-1RSA\s0 functionality but will not
319 be reflected in the return value of the \fIRSA_flags()\fR function \- in effect
320 \&\fIRSA_flags()\fR behaves more like an \fIRSA_default_flags()\fR function (which does
321 not currently exist).
323 .IX Header "SEE ALSO"
324 \&\fIopenssl_rsa\fR\|(3), \fIRSA_new\fR\|(3)
327 \&\fIRSA_new_method()\fR and \fIRSA_set_default_method()\fR appeared in SSLeay 0.8.
328 \&\fIRSA_get_default_method()\fR, \fIRSA_set_method()\fR and \fIRSA_get_method()\fR as
329 well as the rsa_sign and rsa_verify components of \s-1RSA_METHOD\s0 were
330 added in OpenSSL 0.9.4.
332 \&\fIRSA_set_default_openssl_method()\fR and \fIRSA_get_default_openssl_method()\fR
333 replaced \fIRSA_set_default_method()\fR and \fIRSA_get_default_method()\fR
334 respectively, and \fIRSA_set_method()\fR and \fIRSA_new_method()\fR were altered to use
335 \&\fB\s-1ENGINE\s0\fRs rather than \fB\s-1RSA_METHOD\s0\fRs during development of the engine
336 version of OpenSSL 0.9.6. For 0.9.7, the handling of defaults in the \s-1ENGINE
337 API\s0 was restructured so that this change was reversed, and behaviour of the
338 other functions resembled more closely the previous behaviour. The
339 behaviour of defaults in the \s-1ENGINE API\s0 now transparently overrides the
340 behaviour of defaults in the \s-1RSA API\s0 without requiring changing these