xref: /openbsd-src/lib/libcrypto/man/RSA_meth_new.3 (revision 660113a2707df840ca32984ee20a27302d47501c)
1*660113a2Stb.\" $OpenBSD: RSA_meth_new.3,v 1.6 2025/01/05 15:40:42 tb Exp $
299647b63Sschwarze.\" full merge up to: OpenSSL a970b14f Jul 31 18:58:40 2017 -0400
399647b63Sschwarze.\" selective merge up to: OpenSSL 24907560 Sep 17 07:47:42 2018 +1000
480655ea9Sschwarze.\"
580655ea9Sschwarze.\" This file is a derived work.
680655ea9Sschwarze.\" The changes are covered by the following Copyright and license:
780655ea9Sschwarze.\"
899647b63Sschwarze.\" Copyright (c) 2018, 2019 Ingo Schwarze <schwarze@openbsd.org>
980655ea9Sschwarze.\"
1080655ea9Sschwarze.\" Permission to use, copy, modify, and distribute this software for any
1180655ea9Sschwarze.\" purpose with or without fee is hereby granted, provided that the above
1280655ea9Sschwarze.\" copyright notice and this permission notice appear in all copies.
1380655ea9Sschwarze.\"
1480655ea9Sschwarze.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1580655ea9Sschwarze.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1680655ea9Sschwarze.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1780655ea9Sschwarze.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1880655ea9Sschwarze.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1980655ea9Sschwarze.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
2080655ea9Sschwarze.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2180655ea9Sschwarze.\"
2280655ea9Sschwarze.\" The original file was written by Richard Levitte <levitte@openssl.org>.
2380655ea9Sschwarze.\" Copyright (c) 2016 The OpenSSL Project.  All rights reserved.
2480655ea9Sschwarze.\"
2580655ea9Sschwarze.\" Redistribution and use in source and binary forms, with or without
2680655ea9Sschwarze.\" modification, are permitted provided that the following conditions
2780655ea9Sschwarze.\" are met:
2880655ea9Sschwarze.\"
2980655ea9Sschwarze.\" 1. Redistributions of source code must retain the above copyright
3080655ea9Sschwarze.\"    notice, this list of conditions and the following disclaimer.
3180655ea9Sschwarze.\"
3280655ea9Sschwarze.\" 2. Redistributions in binary form must reproduce the above copyright
3380655ea9Sschwarze.\"    notice, this list of conditions and the following disclaimer in
3480655ea9Sschwarze.\"    the documentation and/or other materials provided with the
3580655ea9Sschwarze.\"    distribution.
3680655ea9Sschwarze.\"
3780655ea9Sschwarze.\" 3. All advertising materials mentioning features or use of this
3880655ea9Sschwarze.\"    software must display the following acknowledgment:
3980655ea9Sschwarze.\"    "This product includes software developed by the OpenSSL Project
4080655ea9Sschwarze.\"    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
4180655ea9Sschwarze.\"
4280655ea9Sschwarze.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
4380655ea9Sschwarze.\"    endorse or promote products derived from this software without
4480655ea9Sschwarze.\"    prior written permission. For written permission, please contact
4580655ea9Sschwarze.\"    openssl-core@openssl.org.
4680655ea9Sschwarze.\"
4780655ea9Sschwarze.\" 5. Products derived from this software may not be called "OpenSSL"
4880655ea9Sschwarze.\"    nor may "OpenSSL" appear in their names without prior written
4980655ea9Sschwarze.\"    permission of the OpenSSL Project.
5080655ea9Sschwarze.\"
5180655ea9Sschwarze.\" 6. Redistributions of any form whatsoever must retain the following
5280655ea9Sschwarze.\"    acknowledgment:
5380655ea9Sschwarze.\"    "This product includes software developed by the OpenSSL Project
5480655ea9Sschwarze.\"    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
5580655ea9Sschwarze.\"
5680655ea9Sschwarze.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
5780655ea9Sschwarze.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
5880655ea9Sschwarze.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
5980655ea9Sschwarze.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
6080655ea9Sschwarze.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
6180655ea9Sschwarze.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
6280655ea9Sschwarze.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
6380655ea9Sschwarze.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
6480655ea9Sschwarze.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
6580655ea9Sschwarze.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
6680655ea9Sschwarze.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
6780655ea9Sschwarze.\" OF THE POSSIBILITY OF SUCH DAMAGE.
6880655ea9Sschwarze.\"
69*660113a2Stb.Dd $Mdocdate: January 5 2025 $
7080655ea9Sschwarze.Dt RSA_METH_NEW 3
7180655ea9Sschwarze.Os
7280655ea9Sschwarze.Sh NAME
7380655ea9Sschwarze.Nm RSA_meth_new ,
7480655ea9Sschwarze.Nm RSA_meth_dup ,
75bd028407Sdjm.Nm RSA_meth_free ,
7699647b63Sschwarze.Nm RSA_meth_get0_name ,
77bd028407Sdjm.Nm RSA_meth_set1_name ,
7899647b63Sschwarze.Nm RSA_meth_get_flags ,
7999647b63Sschwarze.Nm RSA_meth_set_flags ,
8099647b63Sschwarze.Nm RSA_meth_get0_app_data ,
8199647b63Sschwarze.Nm RSA_meth_set0_app_data ,
8299647b63Sschwarze.Nm RSA_meth_get_init ,
8399647b63Sschwarze.Nm RSA_meth_set_init ,
8499647b63Sschwarze.Nm RSA_meth_get_finish ,
8580655ea9Sschwarze.Nm RSA_meth_set_finish ,
8699647b63Sschwarze.Nm RSA_meth_get_pub_enc ,
8799647b63Sschwarze.Nm RSA_meth_set_pub_enc ,
8899647b63Sschwarze.Nm RSA_meth_get_pub_dec ,
8999647b63Sschwarze.Nm RSA_meth_set_pub_dec ,
9099647b63Sschwarze.Nm RSA_meth_get_priv_enc ,
9180655ea9Sschwarze.Nm RSA_meth_set_priv_enc ,
9299647b63Sschwarze.Nm RSA_meth_get_priv_dec ,
9399647b63Sschwarze.Nm RSA_meth_set_priv_dec ,
9499647b63Sschwarze.Nm RSA_meth_get_sign ,
9599647b63Sschwarze.Nm RSA_meth_set_sign ,
9699647b63Sschwarze.Nm RSA_meth_get_verify ,
9799647b63Sschwarze.Nm RSA_meth_set_verify ,
9899647b63Sschwarze.Nm RSA_meth_get_mod_exp ,
9999647b63Sschwarze.Nm RSA_meth_set_mod_exp ,
10099647b63Sschwarze.Nm RSA_meth_get_bn_mod_exp ,
10199647b63Sschwarze.Nm RSA_meth_set_bn_mod_exp ,
10299647b63Sschwarze.Nm RSA_meth_get_keygen ,
10399647b63Sschwarze.Nm RSA_meth_set_keygen
10480655ea9Sschwarze.Nd build up RSA methods
10580655ea9Sschwarze.Sh SYNOPSIS
10680655ea9Sschwarze.In openssl/rsa.h
10780655ea9Sschwarze.Ft RSA_METHOD *
10880655ea9Sschwarze.Fo RSA_meth_new
10980655ea9Sschwarze.Fa "const char *name"
11080655ea9Sschwarze.Fa "int flags"
11180655ea9Sschwarze.Fc
11280655ea9Sschwarze.Ft RSA_METHOD *
11380655ea9Sschwarze.Fo RSA_meth_dup
11480655ea9Sschwarze.Fa "const RSA_METHOD *meth"
11580655ea9Sschwarze.Fc
116bd028407Sdjm.Ft void
117bd028407Sdjm.Fo RSA_meth_free
118bd028407Sdjm.Fa "RSA_METHOD *meth"
119bd028407Sdjm.Fc
12099647b63Sschwarze.Ft const char *
12199647b63Sschwarze.Fo RSA_meth_get0_name
12299647b63Sschwarze.Fa "const RSA_METHOD *meth"
12399647b63Sschwarze.Fc
124bd028407Sdjm.Ft int
125bd028407Sdjm.Fo RSA_meth_set1_name
126bd028407Sdjm.Fa "RSA_METHOD *meth"
127bd028407Sdjm.Fa "const char *name"
128bd028407Sdjm.Fc
129bd028407Sdjm.Ft int
13099647b63Sschwarze.Fo RSA_meth_get_flags
13199647b63Sschwarze.Fa "const RSA_METHOD *meth"
13299647b63Sschwarze.Fc
13399647b63Sschwarze.Ft int
13499647b63Sschwarze.Fo RSA_meth_set_flags
13599647b63Sschwarze.Fa "RSA_METHOD *meth"
13699647b63Sschwarze.Fa "int flags"
13799647b63Sschwarze.Fc
13899647b63Sschwarze.Ft void *
13999647b63Sschwarze.Fo RSA_meth_get0_app_data
14099647b63Sschwarze.Fa "const RSA_METHOD *meth"
14199647b63Sschwarze.Fc
14299647b63Sschwarze.Ft int
14399647b63Sschwarze.Fo RSA_meth_set0_app_data
14499647b63Sschwarze.Fa "RSA_METHOD *meth"
14599647b63Sschwarze.Fa "void *app_data"
14699647b63Sschwarze.Fc
14799647b63Sschwarze.Ft int
14899647b63Sschwarze.Fo "(*RSA_meth_get_init(const RSA_METHOD *meth))"
14999647b63Sschwarze.Fa "RSA *rsa"
15099647b63Sschwarze.Fc
15199647b63Sschwarze.Ft int
15299647b63Sschwarze.Fo "RSA_meth_set_init"
15399647b63Sschwarze.Fa "RSA_METHOD *meth"
15499647b63Sschwarze.Fa "int (*init)(RSA *rsa)"
15599647b63Sschwarze.Fc
15699647b63Sschwarze.Ft int
15799647b63Sschwarze.Fo "(*RSA_meth_get_finish(const RSA_METHOD *meth))"
15899647b63Sschwarze.Fa "RSA *rsa"
15999647b63Sschwarze.Fc
16080655ea9Sschwarze.Ft int
16180655ea9Sschwarze.Fo RSA_meth_set_finish
16280655ea9Sschwarze.Fa "RSA_METHOD *meth"
16380655ea9Sschwarze.Fa "int (*finish)(RSA *rsa)"
16480655ea9Sschwarze.Fc
16580655ea9Sschwarze.Ft int
16699647b63Sschwarze.Fo "(*RSA_meth_get_pub_enc(const RSA_METHOD *meth))"
16799647b63Sschwarze.Fa "int flen"
16899647b63Sschwarze.Fa "const unsigned char *from"
16999647b63Sschwarze.Fa "unsigned char *to"
17099647b63Sschwarze.Fa "RSA *rsa"
17199647b63Sschwarze.Fa "int padding"
17299647b63Sschwarze.Fc
17399647b63Sschwarze.Ft int
17499647b63Sschwarze.Fo RSA_meth_set_pub_enc
17599647b63Sschwarze.Fa "RSA_METHOD *meth"
17699647b63Sschwarze.Fa "int (*pub_enc)(int flen, const unsigned char *from,\
17799647b63Sschwarze unsigned char *to, RSA *rsa, int padding)"
17899647b63Sschwarze.Fc
17999647b63Sschwarze.Ft int
18099647b63Sschwarze.Fo "(*RSA_meth_get_pub_dec(const RSA_METHOD *meth))"
18199647b63Sschwarze.Fa "int flen"
18299647b63Sschwarze.Fa "const unsigned char *from"
18399647b63Sschwarze.Fa "unsigned char *to"
18499647b63Sschwarze.Fa "RSA *rsa"
18599647b63Sschwarze.Fa "int padding"
18699647b63Sschwarze.Fc
18799647b63Sschwarze.Ft int
18899647b63Sschwarze.Fo RSA_meth_set_pub_dec
18999647b63Sschwarze.Fa "RSA_METHOD *meth"
19099647b63Sschwarze.Fa "int (*pub_dec)(int flen, const unsigned char *from,\
19199647b63Sschwarze unsigned char *to, RSA *rsa, int padding)"
19299647b63Sschwarze.Fc
19399647b63Sschwarze.Ft int
19499647b63Sschwarze.Fo "(*RSA_meth_get_priv_enc(const RSA_METHOD *meth))"
19599647b63Sschwarze.Fa "int flen"
19699647b63Sschwarze.Fa "const unsigned char *from"
19799647b63Sschwarze.Fa "unsigned char *to"
19899647b63Sschwarze.Fa "RSA *rsa"
19999647b63Sschwarze.Fa "int padding"
20099647b63Sschwarze.Fc
20199647b63Sschwarze.Ft int
20280655ea9Sschwarze.Fo RSA_meth_set_priv_enc
20380655ea9Sschwarze.Fa "RSA_METHOD *meth"
20480655ea9Sschwarze.Fa "int (*priv_enc)(int flen, const unsigned char *from,\
20580655ea9Sschwarze unsigned char *to, RSA *rsa, int padding)"
20680655ea9Sschwarze.Fc
20780655ea9Sschwarze.Ft int
20899647b63Sschwarze.Fo "(*RSA_meth_get_priv_dec(const RSA_METHOD *meth))"
20999647b63Sschwarze.Fa "int flen"
21099647b63Sschwarze.Fa "const unsigned char *from"
21199647b63Sschwarze.Fa "unsigned char *to"
21299647b63Sschwarze.Fa "RSA *rsa"
21399647b63Sschwarze.Fa "int padding"
21499647b63Sschwarze.Fc
21599647b63Sschwarze.Ft int
21680655ea9Sschwarze.Fo RSA_meth_set_priv_dec
21780655ea9Sschwarze.Fa "RSA_METHOD *meth"
21880655ea9Sschwarze.Fa "int (*priv_dec)(int flen, const unsigned char *from,\
21980655ea9Sschwarze unsigned char *to, RSA *rsa, int padding)"
22080655ea9Sschwarze.Fc
22199647b63Sschwarze.Ft int
22299647b63Sschwarze.Fo "(*RSA_meth_get_sign(const RSA_METHOD *meth))"
22399647b63Sschwarze.Fa "int type"
22499647b63Sschwarze.Fa "const unsigned char *m"
22599647b63Sschwarze.Fa "unsigned int m_length"
22699647b63Sschwarze.Fa "unsigned char *sigret"
22799647b63Sschwarze.Fa "unsigned int *siglen"
22899647b63Sschwarze.Fa "const RSA *rsa"
22999647b63Sschwarze.Fc
23099647b63Sschwarze.Ft int
23199647b63Sschwarze.Fo RSA_meth_set_sign
23299647b63Sschwarze.Fa "RSA_METHOD *rsa"
23399647b63Sschwarze.Fa "int (*sign)(int type, const unsigned char *m, unsigned int m_length,\
23499647b63Sschwarze unsigned char *sigret, unsigned int *siglen, const RSA *rsa)"
23599647b63Sschwarze.Fc
23699647b63Sschwarze.Ft int
23799647b63Sschwarze.Fo "(*RSA_meth_get_verify(const RSA_METHOD *meth))"
23899647b63Sschwarze.Fa "int dtype"
23999647b63Sschwarze.Fa "const unsigned char *m"
24099647b63Sschwarze.Fa "unsigned int m_length"
24199647b63Sschwarze.Fa "const unsigned char *sigbuf"
24299647b63Sschwarze.Fa "unsigned int siglen"
24399647b63Sschwarze.Fa "const RSA *rsa"
24499647b63Sschwarze.Fc
24599647b63Sschwarze.Ft int
24699647b63Sschwarze.Fo RSA_meth_set_verify
24799647b63Sschwarze.Fa "RSA_METHOD *rsa"
24899647b63Sschwarze.Fa "int (*verify)(int dtype, const unsigned char *m,\
24999647b63Sschwarze unsigned int m_length, const unsigned char *sigbuf,\
25099647b63Sschwarze unsigned int siglen, const RSA *rsa)"
25199647b63Sschwarze.Fc
25299647b63Sschwarze.Ft int
25399647b63Sschwarze.Fo "(*RSA_meth_get_mod_exp(const RSA_METHOD *meth))"
25499647b63Sschwarze.Fa "BIGNUM *r0"
25599647b63Sschwarze.Fa "const BIGNUM *i"
25699647b63Sschwarze.Fa "RSA *rsa"
25799647b63Sschwarze.Fa "BN_CTX *ctx"
25899647b63Sschwarze.Fc
25999647b63Sschwarze.Ft int
26099647b63Sschwarze.Fo RSA_meth_set_mod_exp
26199647b63Sschwarze.Fa "RSA_METHOD *meth"
26299647b63Sschwarze.Fa "int (*mod_exp)(BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx)"
26399647b63Sschwarze.Fc
26499647b63Sschwarze.Ft int
26599647b63Sschwarze.Fo "(*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth))"
26699647b63Sschwarze.Fa "BIGNUM *r"
26799647b63Sschwarze.Fa "const BIGNUM *a"
26899647b63Sschwarze.Fa "const BIGNUM *p"
26999647b63Sschwarze.Fa "const BIGNUM *m"
27099647b63Sschwarze.Fa "BN_CTX *ctx"
27199647b63Sschwarze.Fa "BN_MONT_CTX *m_ctx"
27299647b63Sschwarze.Fc
27399647b63Sschwarze.Ft int
27499647b63Sschwarze.Fo RSA_meth_set_bn_mod_exp
27599647b63Sschwarze.Fa "RSA_METHOD *meth"
27699647b63Sschwarze.Fa "int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\
27799647b63Sschwarze const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)"
27899647b63Sschwarze.Fc
27999647b63Sschwarze.Ft int
28099647b63Sschwarze.Fo "(*RSA_meth_get_keygen(const RSA_METHOD *meth))"
28199647b63Sschwarze.Fa "RSA *rsa"
28299647b63Sschwarze.Fa "int bits"
28399647b63Sschwarze.Fa "BIGNUM *e"
28499647b63Sschwarze.Fa "BN_GENCB *cb"
28599647b63Sschwarze.Fc
28699647b63Sschwarze.Ft int
28799647b63Sschwarze.Fo RSA_meth_set_keygen
28899647b63Sschwarze.Fa "RSA_METHOD *meth"
28999647b63Sschwarze.Fa "int (*keygen)(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb)"
29099647b63Sschwarze.Fc
29180655ea9Sschwarze.Sh DESCRIPTION
29280655ea9SschwarzeThe
29380655ea9Sschwarze.Vt RSA_METHOD
29480655ea9Sschwarzestructure holds function pointers for custom RSA implementations.
29580655ea9Sschwarze.Pp
29680655ea9Sschwarze.Fn RSA_meth_new
29780655ea9Sschwarzecreates a new
29880655ea9Sschwarze.Vt RSA_METHOD
29980655ea9Sschwarzestructure.
30080655ea9SschwarzeA copy of the NUL-terminated
30180655ea9Sschwarze.Fa name
30280655ea9Sschwarzeis stored in the new
30380655ea9Sschwarze.Vt RSA_METHOD
30480655ea9Sschwarzeobject.
30580655ea9SschwarzeAny new
30680655ea9Sschwarze.Vt RSA
30780655ea9Sschwarzeobject constructed from this
30880655ea9Sschwarze.Vt RSA_METHOD
30980655ea9Sschwarzewill have the given
31080655ea9Sschwarze.Fa flags
31199647b63Sschwarzeset by default, as if they were set with
31299647b63Sschwarze.Xr RSA_set_flags 3 .
31380655ea9Sschwarze.Pp
31480655ea9Sschwarze.Fn RSA_meth_dup
31580655ea9Sschwarzecreates a deep copy of
31699647b63Sschwarze.Fa meth ,
31799647b63Sschwarzeexcept that a pointer stored into it with
31899647b63Sschwarze.Fn RSA_meth_set0_app_data
31999647b63Sschwarzeis copied as a pointer without creating a copy of its content.
32080655ea9SschwarzeThis might be useful for creating a new
32180655ea9Sschwarze.Vt RSA_METHOD
32280655ea9Sschwarzebased on an existing one, but with some differences.
32380655ea9Sschwarze.Pp
32480655ea9Sschwarze.Fn RSA_meth_free
32580655ea9Sschwarzedestroys
32680655ea9Sschwarze.Fa meth
32799647b63Sschwarzeand frees any memory associated with it,
32899647b63Sschwarzeexcept that memory pointed to by a pointer set with
32999647b63Sschwarze.Fn RSA_meth_set0_app_data
33099647b63Sschwarzeis not freed.
33199647b63SschwarzeIf
33299647b63Sschwarze.Fa meth
33399647b63Sschwarzeis
33499647b63Sschwarze.Dv NULL ,
33599647b63Sschwarzeno action occurs.
33680655ea9Sschwarze.Pp
33799647b63Sschwarze.Fn RSA_meth_get0_name
33899647b63Sschwarzereturns an internal pointer to the name of
33999647b63Sschwarze.Fa meth .
340bd028407Sdjm.Fn RSA_meth_set1_name
34199647b63Sschwarzestores a copy of the NUL-terminated
342bd028407Sdjm.Fa name
343bd028407Sdjmin the
344bd028407Sdjm.Vt RSA_METHOD
34599647b63Sschwarzeobject after freeing the previously stored name.
34699647b63SschwarzeMethod names are ignored by the default RSA implementation
34799647b63Sschwarzebut can be used by alternative implementations
34899647b63Sschwarzeand by the application program.
34999647b63Sschwarze.Pp
35099647b63Sschwarze.Fn RSA_meth_get_flags
35199647b63Sschwarzeretrieves the flags from
35299647b63Sschwarze.Fa meth .
35399647b63SschwarzeFlags are documented in
35499647b63Sschwarze.Xr RSA_test_flags 3 .
35599647b63Sschwarze.Fn RSA_meth_set_flags
35699647b63Sschwarzeoverwrites all flags in
35799647b63Sschwarze.Fa meth .
35899647b63SschwarzeUnlike
35999647b63Sschwarze.Xr RSA_set_flags 3 ,
36099647b63Sschwarzeit does not preserve any flags that were set before the call.
36199647b63Sschwarze.Pp
36299647b63Sschwarze.Fn RSA_meth_get0_app_data
36399647b63Sschwarzeand
36499647b63Sschwarze.Fn RSA_meth_set0_app_data
36599647b63Sschwarzeget and set a pointer to implementation-specific data.
36699647b63SschwarzeThe function
36799647b63Sschwarze.Fn RSA_meth_free
36899647b63Sschwarzedoes not
36999647b63Sschwarze.Xr free 3
37099647b63Sschwarzethe memory pointed to by
37199647b63Sschwarze.Fa app_data .
37299647b63SschwarzeThe default RSA implementation does not use
37399647b63Sschwarze.Fa app_data .
37499647b63Sschwarze.Pp
37599647b63Sschwarze.Fn RSA_meth_get_init
37699647b63Sschwarzeand
37799647b63Sschwarze.Fn RSA_meth_set_init
37899647b63Sschwarzeget and set an optional function used when creating a new
37999647b63Sschwarze.Vt RSA
38099647b63Sschwarzeobject.
38199647b63SschwarzeUnless
38299647b63Sschwarze.Fa init
38399647b63Sschwarzeis
38499647b63Sschwarze.Dv NULL ,
38599647b63Sschwarzeit will be called at the end of
38699647b63Sschwarze.Xr RSA_new 3 ,
38799647b63Sschwarze.Xr RSA_new_method 3 ,
38899647b63Sschwarzeand
38999647b63Sschwarze.Xr RSA_set_method 3 ,
39099647b63Sschwarzepassing a pointer to the newly allocated or reset
39199647b63Sschwarze.Vt RSA
39299647b63Sschwarzeobject as an argument.
39399647b63SschwarzeThe default RSA implementation,
39499647b63Sschwarze.Xr RSA_PKCS1_SSLeay 3 ,
39599647b63Sschwarzecontains an
39699647b63Sschwarze.Fa init
39799647b63Sschwarzefunction equivalent to calling
39899647b63Sschwarze.Xr RSA_set_flags 3
39999647b63Sschwarzewith an argument of
40099647b63Sschwarze.Dv RSA_FLAG_CACHE_PUBLIC | RSA_FLAG_CACHE_PRIVATE .
401bd028407Sdjm.Pp
402bd028407Sdjm.Fn RSA_meth_get_finish
403bd028407Sdjmand
40480655ea9Sschwarze.Fn RSA_meth_set_finish
405bd028407Sdjmget and set an optional function for destroying an
40680655ea9Sschwarze.Vt RSA
40780655ea9Sschwarzeobject.
40880655ea9SschwarzeUnless
40980655ea9Sschwarze.Fa finish
41080655ea9Sschwarzeis
41180655ea9Sschwarze.Dv NULL ,
41280655ea9Sschwarzeit will be called from
41399647b63Sschwarze.Xr RSA_set_method 3
41499647b63Sschwarzeand from
41580655ea9Sschwarze.Xr RSA_free 3 .
41699647b63SschwarzeIt takes the same argument as
41799647b63Sschwarze.Xr RSA_free 3
41880655ea9Sschwarzeand is intended to do RSA implementation specific cleanup.
41980655ea9SschwarzeThe memory used by the
42080655ea9Sschwarze.Vt RSA
42180655ea9Sschwarzeobject itself should not be freed by the
42280655ea9Sschwarze.Fa finish
42380655ea9Sschwarzefunction.
42499647b63SschwarzeThe default RSA implementation contains a
42599647b63Sschwarze.Fa finish
42699647b63Sschwarzefunction freeing the memory used by the
42799647b63Sschwarze.Dv RSA_FLAG_CACHE_PUBLIC
42899647b63Sschwarzeand
42999647b63Sschwarze.Dv RSA_FLAG_CACHE_PRIVATE
43099647b63Sschwarzecaches.
43180655ea9Sschwarze.Pp
43299647b63Sschwarze.Fn RSA_meth_get_pub_enc ,
43399647b63Sschwarze.Fn RSA_meth_set_pub_enc ,
43499647b63Sschwarze.Fn RSA_meth_get_pub_dec ,
43599647b63Sschwarze.Fn RSA_meth_set_pub_dec ,
43699647b63Sschwarze.Fn RSA_meth_get_priv_enc ,
43799647b63Sschwarze.Fn RSA_meth_set_priv_enc ,
43899647b63Sschwarze.Fn RSA_meth_get_priv_dec ,
43980655ea9Sschwarzeand
44080655ea9Sschwarze.Fn RSA_meth_set_priv_dec
44199647b63Sschwarzeget and set the mandatory functions
44299647b63Sschwarzeused for public and private key encryption and decryption.
44380655ea9SschwarzeThese functions will be called from
44499647b63Sschwarze.Xr RSA_public_encrypt 3 ,
44599647b63Sschwarze.Xr RSA_public_decrypt 3 ,
44699647b63Sschwarze.Xr RSA_private_encrypt 3 ,
44780655ea9Sschwarzeand
44899647b63Sschwarze.Xr RSA_private_decrypt 3 ,
44999647b63Sschwarzerespectively, and take the same parameters as those.
45099647b63Sschwarze.Pp
45199647b63Sschwarze.Fn RSA_meth_get_sign ,
45299647b63Sschwarze.Fn RSA_meth_set_sign ,
45399647b63Sschwarze.Fn RSA_meth_get_verify ,
45499647b63Sschwarzeand
45599647b63Sschwarze.Fn RSA_meth_set_verify
45699647b63Sschwarzeget and set the optional functions
45799647b63Sschwarzeused for creating and verifying an RSA signature.
45899647b63Sschwarze.Pp
45999647b63Sschwarze.Fn RSA_meth_get_mod_exp
46099647b63Sschwarzeand
46199647b63Sschwarze.Fn RSA_meth_set_mod_exp
4621e09e4a4Sschwarzeget and set the function
4631e09e4a4Sschwarzeused for Chinese Remainder Theorem (CRT) computations involving the
46499647b63Sschwarze.Fa p ,
46599647b63Sschwarze.Fa q ,
46699647b63Sschwarze.Fa dmp1 ,
46799647b63Sschwarze.Fa dmq1 ,
46899647b63Sschwarzeand
46999647b63Sschwarze.Fa iqmp
47099647b63Sschwarzefields of an
47199647b63Sschwarze.Vt RSA
47299647b63Sschwarzeobject.
47399647b63SschwarzeIt is used by the default RSA implementation during
47499647b63Sschwarze.Xr RSA_private_encrypt 3
47599647b63Sschwarzeand
47699647b63Sschwarze.Xr RSA_private_decrypt 3
47799647b63Sschwarzewhen the required components of the private key are available
47899647b63Sschwarzeor when the
47999647b63Sschwarze.Dv RSA_FLAG_EXT_PKEY
48099647b63Sschwarzeflag is set.
48199647b63Sschwarze.Pp
48299647b63Sschwarze.Fn RSA_meth_get_bn_mod_exp
48399647b63Sschwarzeand
48499647b63Sschwarze.Fn RSA_meth_set_bn_mod_exp
48599647b63Sschwarzeget and set the function used for CRT computations,
48699647b63Sschwarzespecifically the value r =
48799647b63Sschwarze.Fa a
48899647b63Sschwarze\(ha
48999647b63Sschwarze.Fa p
49099647b63Sschwarzemod
49199647b63Sschwarze.Fa m .
49299647b63SschwarzeIt is used by the default RSA implementation during
49399647b63Sschwarze.Xr RSA_public_encrypt 3
49499647b63Sschwarzeand
49599647b63Sschwarze.Xr RSA_public_decrypt 3
49699647b63Sschwarzeand as a fallback during
49799647b63Sschwarze.Xr RSA_private_encrypt 3
49899647b63Sschwarzeand
49999647b63Sschwarze.Xr RSA_private_decrypt 3 .
50099647b63Sschwarze.Pp
50199647b63Sschwarze.Fn RSA_meth_get_keygen
50299647b63Sschwarzeand
50399647b63Sschwarze.Fn RSA_meth_set_keygen
50499647b63Sschwarzeget and set the optional function used for generating a new RSA key pair.
50599647b63SschwarzeUnless
50699647b63Sschwarze.Fa keygen
50799647b63Sschwarzeis
50899647b63Sschwarze.Dv NULL ,
50999647b63Sschwarzeit will be called from
51099647b63Sschwarze.Xr RSA_generate_key_ex 3
51199647b63Sschwarzeand takes the same parameters.
51299647b63SschwarzeOtherwise, a builtin default implementation is used.
51380655ea9Sschwarze.Sh RETURN VALUES
51480655ea9Sschwarze.Fn RSA_meth_new
51580655ea9Sschwarzeand
51680655ea9Sschwarze.Fn RSA_meth_dup
51780655ea9Sschwarzereturn the newly allocated
51880655ea9Sschwarze.Vt RSA_METHOD
51980655ea9Sschwarzeobject or
52080655ea9Sschwarze.Dv NULL
52180655ea9Sschwarzeon failure.
52280655ea9Sschwarze.Pp
52399647b63Sschwarze.Fn RSA_meth_get0_name
52499647b63Sschwarzereturns an internal pointer which must not be freed by the caller.
52599647b63Sschwarze.Pp
52699647b63Sschwarze.Fn RSA_meth_get_flags
52799647b63Sschwarzereturns zero or more
52899647b63Sschwarze.Dv RSA_FLAG_*
52999647b63Sschwarzeconstants OR'ed together, or 0 if no flags are set in
53099647b63Sschwarze.Fa meth .
53199647b63Sschwarze.Pp
53299647b63Sschwarze.Fn RSA_meth_get0_app_data
53399647b63Sschwarzereturns the pointer that was earlier passed to
53499647b63Sschwarze.Fn RSA_meth_set0_app_data
53599647b63Sschwarzeor
53699647b63Sschwarze.Dv NULL
53799647b63Sschwarzeotherwise.
53899647b63Sschwarze.Pp
53999647b63SschwarzeAll other
54099647b63Sschwarze.Fn RSA_meth_get_*
54199647b63Sschwarzefunctions return the appropriate function pointer that has been set
54299647b63Sschwarzewith the corresponding
54399647b63Sschwarze.Fn RSA_meth_set_*
54499647b63Sschwarzefunction, or
54599647b63Sschwarze.Dv NULL
54699647b63Sschwarzeif no such pointer has been set in
54799647b63Sschwarze.Fa meth .
54899647b63Sschwarze.Pp
54980655ea9SschwarzeAll
550bd028407Sdjm.Fn RSA_meth_set*
55180655ea9Sschwarzefunctions return 1 on success or 0 on failure.
55299647b63SschwarzeIn the current implementation, only
55399647b63Sschwarze.Fn RSA_meth_set1_name
55499647b63Sschwarzecan actually fail.
55580655ea9Sschwarze.Sh SEE ALSO
55699647b63Sschwarze.Xr RSA_generate_key_ex 3 ,
55780655ea9Sschwarze.Xr RSA_new 3 ,
55880655ea9Sschwarze.Xr RSA_private_encrypt 3 ,
55999647b63Sschwarze.Xr RSA_public_encrypt 3 ,
56099647b63Sschwarze.Xr RSA_set_flags 3 ,
56199647b63Sschwarze.Xr RSA_set_method 3 ,
56299647b63Sschwarze.Xr RSA_sign 3
56380655ea9Sschwarze.Sh HISTORY
564bd028407SdjmThese functions first appeared in OpenSSL 1.1.0.
56599647b63Sschwarze.Fn RSA_meth_new ,
56699647b63Sschwarze.Fn RSA_meth_dup ,
56799647b63Sschwarze.Fn RSA_meth_free ,
56899647b63Sschwarze.Fn RSA_meth_set_finish ,
56999647b63Sschwarze.Fn RSA_meth_set_priv_enc ,
570bd028407Sdjmand
57199647b63Sschwarze.Fn RSA_meth_set_priv_dec
572bd028407Sdjmhave been available since
57399647b63Sschwarze.Ox 6.3 ,
57499647b63Sschwarze.Fn RSA_meth_set1_name
57599647b63Sschwarzeand
57699647b63Sschwarze.Fn RSA_meth_get_finish
57799647b63Sschwarzesince
578bd028407Sdjm.Ox 6.4 ,
57999647b63Sschwarzeand
58099647b63Sschwarze.Fn RSA_meth_get0_name ,
58199647b63Sschwarze.Fn RSA_meth_get_flags ,
58299647b63Sschwarze.Fn RSA_meth_set_flags ,
58399647b63Sschwarze.Fn RSA_meth_get0_app_data ,
58499647b63Sschwarze.Fn RSA_meth_set0_app_data ,
58599647b63Sschwarze.Fn RSA_meth_get_init ,
58699647b63Sschwarze.Fn RSA_meth_set_init ,
58799647b63Sschwarze.Fn RSA_meth_set_finish ,
58899647b63Sschwarze.Fn RSA_meth_get_pub_enc ,
58999647b63Sschwarze.Fn RSA_meth_set_pub_enc ,
59099647b63Sschwarze.Fn RSA_meth_get_pub_dec ,
59199647b63Sschwarze.Fn RSA_meth_set_pub_dec ,
59299647b63Sschwarze.Fn RSA_meth_get_priv_enc ,
59399647b63Sschwarze.Fn RSA_meth_get_priv_dec ,
59499647b63Sschwarze.Fn RSA_meth_get_sign ,
59599647b63Sschwarze.Fn RSA_meth_set_sign ,
59699647b63Sschwarze.Fn RSA_meth_get_verify ,
59799647b63Sschwarze.Fn RSA_meth_set_verify ,
59899647b63Sschwarze.Fn RSA_meth_get_mod_exp ,
59999647b63Sschwarze.Fn RSA_meth_set_mod_exp ,
60099647b63Sschwarze.Fn RSA_meth_get_bn_mod_exp ,
60199647b63Sschwarze.Fn RSA_meth_set_bn_mod_exp ,
60299647b63Sschwarze.Fn RSA_meth_get_keygen ,
60399647b63Sschwarzeand
60499647b63Sschwarze.Fn RSA_meth_set_keygen
60599647b63Sschwarzesince
60699647b63Sschwarze.Ox 6.6 .
607