1*2d40c451Schristos.\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. 2ba9bdd8bSchristos.\" 3*2d40c451Schristos.\" Redistribution and use in source and binary forms, with or without 4*2d40c451Schristos.\" modification, are permitted provided that the following conditions are 5*2d40c451Schristos.\" met: 6*2d40c451Schristos.\" 7*2d40c451Schristos.\" 1. Redistributions of source code must retain the above copyright 8*2d40c451Schristos.\" notice, this list of conditions and the following disclaimer. 9*2d40c451Schristos.\" 2. Redistributions in binary form must reproduce the above copyright 10*2d40c451Schristos.\" notice, this list of conditions and the following disclaimer in 11*2d40c451Schristos.\" the documentation and/or other materials provided with the 12*2d40c451Schristos.\" distribution. 13*2d40c451Schristos.\" 14*2d40c451Schristos.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 15*2d40c451Schristos.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16*2d40c451Schristos.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 17*2d40c451Schristos.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 18*2d40c451Schristos.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 19*2d40c451Schristos.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 20*2d40c451Schristos.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21*2d40c451Schristos.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22*2d40c451Schristos.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23*2d40c451Schristos.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24*2d40c451Schristos.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25*2d40c451Schristos.\" 26*2d40c451Schristos.\" SPDX-License-Identifier: BSD-2-Clause 27*2d40c451Schristos.\" 28*2d40c451Schristos.Dd $Mdocdate: July 15 2022 $ 29ba9bdd8bSchristos.Dt RS256_PK_NEW 3 30ba9bdd8bSchristos.Os 31ba9bdd8bSchristos.Sh NAME 32ba9bdd8bSchristos.Nm rs256_pk_new , 33ba9bdd8bSchristos.Nm rs256_pk_free , 34ba9bdd8bSchristos.Nm rs256_pk_from_RSA , 35*2d40c451Schristos.Nm rs256_pk_from_EVP_PKEY , 36ba9bdd8bSchristos.Nm rs256_pk_from_ptr , 37ba9bdd8bSchristos.Nm rs256_pk_to_EVP_PKEY 38ba9bdd8bSchristos.Nd FIDO2 COSE RS256 API 39ba9bdd8bSchristos.Sh SYNOPSIS 40ba9bdd8bSchristos.In openssl/rsa.h 41ba9bdd8bSchristos.In fido/rs256.h 42ba9bdd8bSchristos.Ft rs256_pk_t * 43ba9bdd8bSchristos.Fn rs256_pk_new "void" 44ba9bdd8bSchristos.Ft void 45ba9bdd8bSchristos.Fn rs256_pk_free "rs256_pk_t **pkp" 46ba9bdd8bSchristos.Ft int 47*2d40c451Schristos.Fn rs256_pk_from_EVP_PKEY "rs256_pk_t *pk" "const EVP_PKEY *pkey" 48*2d40c451Schristos.Ft int 49ba9bdd8bSchristos.Fn rs256_pk_from_RSA "rs256_pk_t *pk" "const RSA *rsa" 50ba9bdd8bSchristos.Ft int 51ba9bdd8bSchristos.Fn rs256_pk_from_ptr "rs256_pk_t *pk" "const void *ptr" "size_t len" 52ba9bdd8bSchristos.Ft EVP_PKEY * 53ba9bdd8bSchristos.Fn rs256_pk_to_EVP_PKEY "const rs256_pk_t *pk" 54ba9bdd8bSchristos.Sh DESCRIPTION 55ba9bdd8bSchristosRS256 is the name given in the CBOR Object Signing and Encryption 56ba9bdd8bSchristos(COSE) RFC to PKCS#1.5 2048-bit RSA with SHA-256. 57ba9bdd8bSchristosThe COSE RS256 API of 58ba9bdd8bSchristos.Em libfido2 59ba9bdd8bSchristosis an auxiliary API with routines to convert between the different 60ba9bdd8bSchristosRSA public key types used in 61ba9bdd8bSchristos.Em libfido2 62ba9bdd8bSchristosand 63ba9bdd8bSchristos.Em OpenSSL . 64ba9bdd8bSchristos.Pp 65ba9bdd8bSchristosIn 66ba9bdd8bSchristos.Em libfido2 , 67ba9bdd8bSchristosRS256 public keys are abstracted by the 68ba9bdd8bSchristos.Vt rs256_pk_t 69ba9bdd8bSchristostype. 70ba9bdd8bSchristos.Pp 71ba9bdd8bSchristosThe 72ba9bdd8bSchristos.Fn rs256_pk_new 73ba9bdd8bSchristosfunction returns a pointer to a newly allocated, empty 74ba9bdd8bSchristos.Vt rs256_pk_t 75ba9bdd8bSchristostype. 76ba9bdd8bSchristosIf memory cannot be allocated, NULL is returned. 77ba9bdd8bSchristos.Pp 78ba9bdd8bSchristosThe 79ba9bdd8bSchristos.Fn rs256_pk_free 80ba9bdd8bSchristosfunction releases the memory backing 81ba9bdd8bSchristos.Fa *pkp , 82ba9bdd8bSchristoswhere 83ba9bdd8bSchristos.Fa *pkp 84ba9bdd8bSchristosmust have been previously allocated by 85ba9bdd8bSchristos.Fn rs256_pk_new . 86ba9bdd8bSchristosOn return, 87ba9bdd8bSchristos.Fa *pkp 88ba9bdd8bSchristosis set to NULL. 89ba9bdd8bSchristosEither 90ba9bdd8bSchristos.Fa pkp 91ba9bdd8bSchristosor 92ba9bdd8bSchristos.Fa *pkp 93ba9bdd8bSchristosmay be NULL, in which case 94ba9bdd8bSchristos.Fn rs256_pk_free 95ba9bdd8bSchristosis a NOP. 96ba9bdd8bSchristos.Pp 97ba9bdd8bSchristosThe 98*2d40c451Schristos.Fn rs256_pk_from_EVP_PKEY 99*2d40c451Schristosfunction fills 100*2d40c451Schristos.Fa pk 101*2d40c451Schristoswith the contents of 102*2d40c451Schristos.Fa pkey . 103*2d40c451SchristosNo references to 104*2d40c451Schristos.Fa pkey 105*2d40c451Schristosare kept. 106*2d40c451Schristos.Pp 107*2d40c451SchristosThe 108ba9bdd8bSchristos.Fn rs256_pk_from_RSA 109ba9bdd8bSchristosfunction fills 110ba9bdd8bSchristos.Fa pk 111ba9bdd8bSchristoswith the contents of 112ba9bdd8bSchristos.Fa rsa . 113ba9bdd8bSchristosNo references to 114ba9bdd8bSchristos.Fa rsa 115ba9bdd8bSchristosare kept. 116ba9bdd8bSchristos.Pp 117ba9bdd8bSchristosThe 118ba9bdd8bSchristos.Fn rs256_pk_from_ptr 119ba9bdd8bSchristosfunction fills 120ba9bdd8bSchristos.Fa pk 121ba9bdd8bSchristoswith the contents of 122ba9bdd8bSchristos.Fa ptr , 123ba9bdd8bSchristoswhere 124ba9bdd8bSchristos.Fa ptr 125ba9bdd8bSchristospoints to 126ba9bdd8bSchristos.Fa len 127ba9bdd8bSchristosbytes. 128ba9bdd8bSchristosNo references to 129ba9bdd8bSchristos.Fa ptr 130ba9bdd8bSchristosare kept. 131ba9bdd8bSchristos.Pp 132ba9bdd8bSchristosThe 133ba9bdd8bSchristos.Fn rs256_pk_to_EVP_PKEY 134ba9bdd8bSchristosfunction converts 135ba9bdd8bSchristos.Fa pk 136ba9bdd8bSchristosto a newly allocated 137ba9bdd8bSchristos.Fa EVP_PKEY 138ba9bdd8bSchristostype with a reference count of 1. 139ba9bdd8bSchristosNo internal references to the returned pointer are kept. 140ba9bdd8bSchristosIf an error occurs, 141ba9bdd8bSchristos.Fn rs256_pk_to_EVP_PKEY 142ba9bdd8bSchristosreturns NULL. 143ba9bdd8bSchristos.Sh RETURN VALUES 144ba9bdd8bSchristosThe 145*2d40c451Schristos.Fn rs256_pk_from_EVP_PKEY , 146*2d40c451Schristos.Fn rs256_pk_from_RSA , 147ba9bdd8bSchristosand 148ba9bdd8bSchristos.Fn rs256_pk_from_ptr 149ba9bdd8bSchristosfunctions return 150ba9bdd8bSchristos.Dv FIDO_OK 151ba9bdd8bSchristoson success. 152ba9bdd8bSchristosOn error, a different error code defined in 153ba9bdd8bSchristos.In fido/err.h 154ba9bdd8bSchristosis returned. 155ba9bdd8bSchristos.Sh SEE ALSO 156ba9bdd8bSchristos.Xr eddsa_pk_new 3 , 157ba9bdd8bSchristos.Xr es256_pk_new 3 , 158*2d40c451Schristos.Xr es384_pk_new 3 , 159ba9bdd8bSchristos.Xr fido_assert_verify 3 , 160ba9bdd8bSchristos.Xr fido_cred_pubkey_ptr 3 161