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