1 1.1 christos /* 2 1.1 christos * Copyright 2020-2025 The OpenSSL Project Authors. All Rights Reserved. 3 1.1 christos * 4 1.1 christos * Licensed under the Apache License 2.0 (the "License"). You may not use 5 1.1 christos * this file except in compliance with the License. You can obtain a copy 6 1.1 christos * in the file LICENSE in the source distribution or at 7 1.1 christos * https://www.openssl.org/source/license.html 8 1.1 christos */ 9 1.1 christos 10 1.1 christos #ifndef ENCODER_PROVIDER 11 1.1 christos # error Macro ENCODER_PROVIDER undefined 12 1.1 christos #endif 13 1.1 christos 14 1.1 christos #define ENCODER_STRUCTURE_type_specific_keypair "type-specific" 15 1.1 christos #define ENCODER_STRUCTURE_type_specific_params "type-specific" 16 1.1 christos #define ENCODER_STRUCTURE_type_specific "type-specific" 17 1.1 christos #define ENCODER_STRUCTURE_type_specific_no_pub "type-specific" 18 1.1 christos #define ENCODER_STRUCTURE_EncryptedPrivateKeyInfo "EncryptedPrivateKeyInfo" 19 1.1 christos #define ENCODER_STRUCTURE_PrivateKeyInfo "PrivateKeyInfo" 20 1.1 christos #define ENCODER_STRUCTURE_SubjectPublicKeyInfo "SubjectPublicKeyInfo" 21 1.1 christos #define ENCODER_STRUCTURE_DH "dh" 22 1.1 christos #define ENCODER_STRUCTURE_DHX "dhx" 23 1.1 christos #define ENCODER_STRUCTURE_DSA "dsa" 24 1.1 christos #define ENCODER_STRUCTURE_EC "ec" 25 1.1 christos #define ENCODER_STRUCTURE_RSA "rsa" 26 1.1 christos #define ENCODER_STRUCTURE_PKCS1 "pkcs1" 27 1.1 christos #define ENCODER_STRUCTURE_PKCS3 "pkcs3" 28 1.1 christos #define ENCODER_STRUCTURE_X9_42 "X9.42" 29 1.1 christos #define ENCODER_STRUCTURE_X9_62 "X9.62" 30 1.1 christos 31 1.1 christos /* Arguments are prefixed with '_' to avoid build breaks on certain platforms */ 32 1.1 christos #define ENCODER_TEXT(_name, _sym, _fips) \ 33 1.1 christos { _name, \ 34 1.1 christos "provider=" ENCODER_PROVIDER ",fips=" #_fips ",output=text", \ 35 1.1 christos (ossl_##_sym##_to_text_encoder_functions) } 36 1.1 christos #define ENCODER(_name, _sym, _fips, _output) \ 37 1.1 christos { _name, \ 38 1.1 christos "provider=" ENCODER_PROVIDER ",fips=" #_fips ",output=" #_output, \ 39 1.1 christos (ossl_##_sym##_to_##_output##_encoder_functions) } 40 1.1 christos #define ENCODER_w_structure(_name, _sym, _fips, _output, _structure) \ 41 1.1 christos { _name, \ 42 1.1 christos "provider=" ENCODER_PROVIDER ",fips=" #_fips ",output=" #_output \ 43 1.1 christos ",structure=" ENCODER_STRUCTURE_##_structure, \ 44 1.1 christos (ossl_##_sym##_to_##_structure##_##_output##_encoder_functions) } 45 1.1 christos 46 1.1 christos /* 47 1.1 christos * Entries for human text "encoders" 48 1.1 christos */ 49 1.1 christos ENCODER_TEXT("RSA", rsa, yes), 50 1.1 christos ENCODER_TEXT("RSA-PSS", rsapss, yes), 51 1.1 christos #ifndef OPENSSL_NO_DH 52 1.1 christos ENCODER_TEXT("DH", dh, yes), 53 1.1 christos ENCODER_TEXT("DHX", dhx, yes), 54 1.1 christos #endif 55 1.1 christos #ifndef OPENSSL_NO_DSA 56 1.1 christos ENCODER_TEXT("DSA", dsa, yes), 57 1.1 christos #endif 58 1.1 christos #ifndef OPENSSL_NO_EC 59 1.1 christos ENCODER_TEXT("EC", ec, yes), 60 1.1 christos # ifndef OPENSSL_NO_ECX 61 1.1 christos ENCODER_TEXT("ED25519", ed25519, yes), 62 1.1 christos ENCODER_TEXT("ED448", ed448, yes), 63 1.1 christos ENCODER_TEXT("X25519", x25519, yes), 64 1.1 christos ENCODER_TEXT("X448", x448, yes), 65 1.1 christos # endif 66 1.1 christos # ifndef OPENSSL_NO_SM2 67 1.1 christos ENCODER_TEXT("SM2", sm2, no), 68 1.1 christos # endif 69 1.1 christos #endif 70 1.1 christos #ifndef OPENSSL_NO_ML_KEM 71 1.1 christos ENCODER_TEXT("ML-KEM-512", ml_kem_512, yes), 72 1.1 christos ENCODER_TEXT("ML-KEM-768", ml_kem_768, yes), 73 1.1 christos ENCODER_TEXT("ML-KEM-1024", ml_kem_1024, yes), 74 1.1 christos #endif 75 1.1 christos #ifndef OPENSSL_NO_ML_DSA 76 1.1 christos ENCODER_TEXT("ML-DSA-44", ml_dsa_44, yes), 77 1.1 christos ENCODER_TEXT("ML-DSA-65", ml_dsa_65, yes), 78 1.1 christos ENCODER_TEXT("ML-DSA-87", ml_dsa_87, yes), 79 1.1 christos #endif 80 1.1 christos #ifndef OPENSSL_NO_SLH_DSA 81 1.1 christos ENCODER_TEXT("SLH-DSA-SHA2-128s", slh_dsa_sha2_128s, yes), 82 1.1 christos ENCODER_TEXT("SLH-DSA-SHA2-128f", slh_dsa_sha2_128f, yes), 83 1.1 christos ENCODER_TEXT("SLH-DSA-SHA2-192s", slh_dsa_sha2_192s, yes), 84 1.1 christos ENCODER_TEXT("SLH-DSA-SHA2-192f", slh_dsa_sha2_192f, yes), 85 1.1 christos ENCODER_TEXT("SLH-DSA-SHA2-256s", slh_dsa_sha2_256s, yes), 86 1.1 christos ENCODER_TEXT("SLH-DSA-SHA2-256f", slh_dsa_sha2_256f, yes), 87 1.1 christos ENCODER_TEXT("SLH-DSA-SHAKE-128s", slh_dsa_shake_128s, yes), 88 1.1 christos ENCODER_TEXT("SLH-DSA-SHAKE-128f", slh_dsa_shake_128f, yes), 89 1.1 christos ENCODER_TEXT("SLH-DSA-SHAKE-192s", slh_dsa_shake_192s, yes), 90 1.1 christos ENCODER_TEXT("SLH-DSA-SHAKE-192f", slh_dsa_shake_192f, yes), 91 1.1 christos ENCODER_TEXT("SLH-DSA-SHAKE-256s", slh_dsa_shake_256s, yes), 92 1.1 christos ENCODER_TEXT("SLH-DSA-SHAKE-256f", slh_dsa_shake_256f, yes), 93 1.1 christos #endif 94 1.1 christos 95 1.1 christos /* 96 1.1 christos * Entries for key type specific output formats. The structure name on these 97 1.1 christos * is the same as the key type name. This allows us to say something like: 98 1.1 christos * 99 1.1 christos * To replace i2d_{TYPE}PrivateKey(), i2d_{TYPE}PublicKey() and 100 1.1 christos * i2d_{TYPE}Params(), use OSSL_ENCODER functions with an OSSL_ENCODER_CTX 101 1.1 christos * created like this: 102 1.1 christos * 103 1.1 christos * OSSL_ENCODER_CTX *ctx = 104 1.1 christos * OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "DER", "type-specific", 105 1.1 christos * NULL, NULL); 106 1.1 christos * 107 1.1 christos * To replace PEM_write_bio_{TYPE}PrivateKey(), PEM_write_bio_{TYPE}PublicKey() 108 1.1 christos * and PEM_write_bio_{TYPE}Params(), use OSSL_ENCODER functions with an 109 1.1 christos * OSSL_ENCODER_CTX created like this: 110 1.1 christos * 111 1.1 christos * OSSL_ENCODER_CTX *ctx = 112 1.1 christos * OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "PEM", "type-specific", 113 1.1 christos * NULL, NULL); 114 1.1 christos * 115 1.1 christos * We only implement those for which there are current i2d_ and PEM_write_bio 116 1.1 christos * implementations. 117 1.1 christos */ 118 1.1 christos 119 1.1 christos /* The RSA encoders only support private key and public key output */ 120 1.1 christos ENCODER_w_structure("RSA", rsa, yes, der, type_specific_keypair), 121 1.1 christos ENCODER_w_structure("RSA", rsa, yes, pem, type_specific_keypair), 122 1.1 christos #ifndef OPENSSL_NO_DH 123 1.1 christos /* DH and X9.42 DH only support key parameters output. */ 124 1.1 christos ENCODER_w_structure("DH", dh, yes, der, type_specific_params), 125 1.1 christos ENCODER_w_structure("DH", dh, yes, pem, type_specific_params), 126 1.1 christos ENCODER_w_structure("DHX", dhx, yes, der, type_specific_params), 127 1.1 christos ENCODER_w_structure("DHX", dhx, yes, pem, type_specific_params), 128 1.1 christos #endif 129 1.1 christos #ifndef OPENSSL_NO_DSA 130 1.1 christos ENCODER_w_structure("DSA", dsa, yes, der, type_specific), 131 1.1 christos ENCODER_w_structure("DSA", dsa, yes, pem, type_specific), 132 1.1 christos #endif 133 1.1 christos #ifndef OPENSSL_NO_EC 134 1.1 christos /* EC only supports keypair and parameters DER and PEM output. */ 135 1.1 christos ENCODER_w_structure("EC", ec, yes, der, type_specific_no_pub), 136 1.1 christos ENCODER_w_structure("EC", ec, yes, pem, type_specific_no_pub), 137 1.1 christos /* EC supports blob output for the public key */ 138 1.1 christos ENCODER("EC", ec, yes, blob), 139 1.1 christos # ifndef OPENSSL_NO_SM2 140 1.1 christos ENCODER_w_structure("SM2", sm2, no, der, type_specific_no_pub), 141 1.1 christos ENCODER_w_structure("SM2", sm2, no, pem, type_specific_no_pub), 142 1.1 christos ENCODER("SM2", sm2, no, blob), 143 1.1 christos # endif 144 1.1 christos #endif 145 1.1 christos 146 1.1 christos /* 147 1.1 christos * Entries for the output formats MSBLOB and PVK 148 1.1 christos */ 149 1.1 christos ENCODER("RSA", rsa, yes, msblob), 150 1.1 christos ENCODER("RSA", rsa, yes, pvk), 151 1.1 christos #ifndef OPENSSL_NO_DSA 152 1.1 christos ENCODER("DSA", dsa, yes, msblob), 153 1.1 christos ENCODER("DSA", dsa, yes, pvk), 154 1.1 christos #endif 155 1.1 christos 156 1.1 christos /* 157 1.1 christos * Entries for encrypted PKCS#8 (EncryptedPrivateKeyInfo), unencrypted PKCS#8 158 1.1 christos * (PrivateKeyInfo) and SubjectPublicKeyInfo. The "der" ones are added 159 1.1 christos * convenience for any user that wants to use OSSL_ENCODER directly. 160 1.1 christos * The "pem" ones also support PEM_write_bio_PrivateKey() and 161 1.1 christos * PEM_write_bio_PUBKEY(). 162 1.1 christos */ 163 1.1 christos ENCODER_w_structure("RSA", rsa, yes, der, EncryptedPrivateKeyInfo), 164 1.1 christos ENCODER_w_structure("RSA", rsa, yes, pem, EncryptedPrivateKeyInfo), 165 1.1 christos ENCODER_w_structure("RSA", rsa, yes, der, PrivateKeyInfo), 166 1.1 christos ENCODER_w_structure("RSA", rsa, yes, pem, PrivateKeyInfo), 167 1.1 christos ENCODER_w_structure("RSA", rsa, yes, der, SubjectPublicKeyInfo), 168 1.1 christos ENCODER_w_structure("RSA", rsa, yes, pem, SubjectPublicKeyInfo), 169 1.1 christos 170 1.1 christos ENCODER_w_structure("RSA-PSS", rsapss, yes, der, EncryptedPrivateKeyInfo), 171 1.1 christos ENCODER_w_structure("RSA-PSS", rsapss, yes, pem, EncryptedPrivateKeyInfo), 172 1.1 christos ENCODER_w_structure("RSA-PSS", rsapss, yes, der, PrivateKeyInfo), 173 1.1 christos ENCODER_w_structure("RSA-PSS", rsapss, yes, pem, PrivateKeyInfo), 174 1.1 christos ENCODER_w_structure("RSA-PSS", rsapss, yes, der, SubjectPublicKeyInfo), 175 1.1 christos ENCODER_w_structure("RSA-PSS", rsapss, yes, pem, SubjectPublicKeyInfo), 176 1.1 christos 177 1.1 christos #ifndef OPENSSL_NO_DH 178 1.1 christos ENCODER_w_structure("DH", dh, yes, der, EncryptedPrivateKeyInfo), 179 1.1 christos ENCODER_w_structure("DH", dh, yes, pem, EncryptedPrivateKeyInfo), 180 1.1 christos ENCODER_w_structure("DH", dh, yes, der, PrivateKeyInfo), 181 1.1 christos ENCODER_w_structure("DH", dh, yes, pem, PrivateKeyInfo), 182 1.1 christos ENCODER_w_structure("DH", dh, yes, der, SubjectPublicKeyInfo), 183 1.1 christos ENCODER_w_structure("DH", dh, yes, pem, SubjectPublicKeyInfo), 184 1.1 christos 185 1.1 christos ENCODER_w_structure("DHX", dhx, yes, der, EncryptedPrivateKeyInfo), 186 1.1 christos ENCODER_w_structure("DHX", dhx, yes, pem, EncryptedPrivateKeyInfo), 187 1.1 christos ENCODER_w_structure("DHX", dhx, yes, der, PrivateKeyInfo), 188 1.1 christos ENCODER_w_structure("DHX", dhx, yes, pem, PrivateKeyInfo), 189 1.1 christos ENCODER_w_structure("DHX", dhx, yes, der, SubjectPublicKeyInfo), 190 1.1 christos ENCODER_w_structure("DHX", dhx, yes, pem, SubjectPublicKeyInfo), 191 1.1 christos #endif 192 1.1 christos 193 1.1 christos #ifndef OPENSSL_NO_DSA 194 1.1 christos ENCODER_w_structure("DSA", dsa, yes, der, EncryptedPrivateKeyInfo), 195 1.1 christos ENCODER_w_structure("DSA", dsa, yes, pem, EncryptedPrivateKeyInfo), 196 1.1 christos ENCODER_w_structure("DSA", dsa, yes, der, PrivateKeyInfo), 197 1.1 christos ENCODER_w_structure("DSA", dsa, yes, pem, PrivateKeyInfo), 198 1.1 christos ENCODER_w_structure("DSA", dsa, yes, der, SubjectPublicKeyInfo), 199 1.1 christos ENCODER_w_structure("DSA", dsa, yes, pem, SubjectPublicKeyInfo), 200 1.1 christos #endif 201 1.1 christos 202 1.1 christos #ifndef OPENSSL_NO_EC 203 1.1 christos ENCODER_w_structure("EC", ec, yes, der, EncryptedPrivateKeyInfo), 204 1.1 christos ENCODER_w_structure("EC", ec, yes, pem, EncryptedPrivateKeyInfo), 205 1.1 christos ENCODER_w_structure("EC", ec, yes, der, PrivateKeyInfo), 206 1.1 christos ENCODER_w_structure("EC", ec, yes, pem, PrivateKeyInfo), 207 1.1 christos ENCODER_w_structure("EC", ec, yes, der, SubjectPublicKeyInfo), 208 1.1 christos ENCODER_w_structure("EC", ec, yes, pem, SubjectPublicKeyInfo), 209 1.1 christos 210 1.1 christos # ifndef OPENSSL_NO_SM2 211 1.1 christos ENCODER_w_structure("SM2", sm2, no, der, EncryptedPrivateKeyInfo), 212 1.1 christos ENCODER_w_structure("SM2", sm2, no, pem, EncryptedPrivateKeyInfo), 213 1.1 christos ENCODER_w_structure("SM2", sm2, no, der, PrivateKeyInfo), 214 1.1 christos ENCODER_w_structure("SM2", sm2, no, pem, PrivateKeyInfo), 215 1.1 christos ENCODER_w_structure("SM2", sm2, no, der, SubjectPublicKeyInfo), 216 1.1 christos ENCODER_w_structure("SM2", sm2, no, pem, SubjectPublicKeyInfo), 217 1.1 christos # endif 218 1.1 christos #endif 219 1.1 christos 220 1.1 christos #ifndef OPENSSL_NO_ECX 221 1.1 christos ENCODER_w_structure("X25519", x25519, yes, der, EncryptedPrivateKeyInfo), 222 1.1 christos ENCODER_w_structure("X25519", x25519, yes, pem, EncryptedPrivateKeyInfo), 223 1.1 christos ENCODER_w_structure("X25519", x25519, yes, der, PrivateKeyInfo), 224 1.1 christos ENCODER_w_structure("X25519", x25519, yes, pem, PrivateKeyInfo), 225 1.1 christos ENCODER_w_structure("X25519", x25519, yes, der, SubjectPublicKeyInfo), 226 1.1 christos ENCODER_w_structure("X25519", x25519, yes, pem, SubjectPublicKeyInfo), 227 1.1 christos 228 1.1 christos ENCODER_w_structure("X448", x448, yes, der, EncryptedPrivateKeyInfo), 229 1.1 christos ENCODER_w_structure("X448", x448, yes, pem, EncryptedPrivateKeyInfo), 230 1.1 christos ENCODER_w_structure("X448", x448, yes, der, PrivateKeyInfo), 231 1.1 christos ENCODER_w_structure("X448", x448, yes, pem, PrivateKeyInfo), 232 1.1 christos ENCODER_w_structure("X448", x448, yes, der, SubjectPublicKeyInfo), 233 1.1 christos ENCODER_w_structure("X448", x448, yes, pem, SubjectPublicKeyInfo), 234 1.1 christos 235 1.1 christos ENCODER_w_structure("ED25519", ed25519, yes, der, EncryptedPrivateKeyInfo), 236 1.1 christos ENCODER_w_structure("ED25519", ed25519, yes, pem, EncryptedPrivateKeyInfo), 237 1.1 christos ENCODER_w_structure("ED25519", ed25519, yes, der, PrivateKeyInfo), 238 1.1 christos ENCODER_w_structure("ED25519", ed25519, yes, pem, PrivateKeyInfo), 239 1.1 christos ENCODER_w_structure("ED25519", ed25519, yes, der, SubjectPublicKeyInfo), 240 1.1 christos ENCODER_w_structure("ED25519", ed25519, yes, pem, SubjectPublicKeyInfo), 241 1.1 christos 242 1.1 christos ENCODER_w_structure("ED448", ed448, yes, der, EncryptedPrivateKeyInfo), 243 1.1 christos ENCODER_w_structure("ED448", ed448, yes, pem, EncryptedPrivateKeyInfo), 244 1.1 christos ENCODER_w_structure("ED448", ed448, yes, der, PrivateKeyInfo), 245 1.1 christos ENCODER_w_structure("ED448", ed448, yes, pem, PrivateKeyInfo), 246 1.1 christos ENCODER_w_structure("ED448", ed448, yes, der, SubjectPublicKeyInfo), 247 1.1 christos ENCODER_w_structure("ED448", ed448, yes, pem, SubjectPublicKeyInfo), 248 1.1 christos #endif 249 1.1 christos #ifndef OPENSSL_NO_SLH_DSA 250 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128s", slh_dsa_sha2_128s, yes, der, EncryptedPrivateKeyInfo), 251 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128f", slh_dsa_sha2_128f, yes, der, EncryptedPrivateKeyInfo), 252 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192s", slh_dsa_sha2_192s, yes, der, EncryptedPrivateKeyInfo), 253 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192f", slh_dsa_sha2_192f, yes, der, EncryptedPrivateKeyInfo), 254 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256s", slh_dsa_sha2_256s, yes, der, EncryptedPrivateKeyInfo), 255 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256f", slh_dsa_sha2_256f, yes, der, EncryptedPrivateKeyInfo), 256 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128s", slh_dsa_shake_128s, yes, der, EncryptedPrivateKeyInfo), 257 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128f", slh_dsa_shake_128f, yes, der, EncryptedPrivateKeyInfo), 258 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192s", slh_dsa_shake_192s, yes, der, EncryptedPrivateKeyInfo), 259 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192f", slh_dsa_shake_192f, yes, der, EncryptedPrivateKeyInfo), 260 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256s", slh_dsa_shake_256s, yes, der, EncryptedPrivateKeyInfo), 261 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256f", slh_dsa_shake_256f, yes, der, EncryptedPrivateKeyInfo), 262 1.1 christos 263 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128s", slh_dsa_sha2_128s, yes, pem, EncryptedPrivateKeyInfo), 264 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128f", slh_dsa_sha2_128f, yes, pem, EncryptedPrivateKeyInfo), 265 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192s", slh_dsa_sha2_192s, yes, pem, EncryptedPrivateKeyInfo), 266 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192f", slh_dsa_sha2_192f, yes, pem, EncryptedPrivateKeyInfo), 267 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256s", slh_dsa_sha2_256s, yes, pem, EncryptedPrivateKeyInfo), 268 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256f", slh_dsa_sha2_256f, yes, pem, EncryptedPrivateKeyInfo), 269 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128s", slh_dsa_shake_128s, yes, pem, EncryptedPrivateKeyInfo), 270 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128f", slh_dsa_shake_128f, yes, pem, EncryptedPrivateKeyInfo), 271 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192s", slh_dsa_shake_192s, yes, pem, EncryptedPrivateKeyInfo), 272 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192f", slh_dsa_shake_192f, yes, pem, EncryptedPrivateKeyInfo), 273 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256s", slh_dsa_shake_256s, yes, pem, EncryptedPrivateKeyInfo), 274 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256f", slh_dsa_shake_256f, yes, pem, EncryptedPrivateKeyInfo), 275 1.1 christos 276 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128s", slh_dsa_sha2_128s, yes, der, PrivateKeyInfo), 277 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128f", slh_dsa_sha2_128f, yes, der, PrivateKeyInfo), 278 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192s", slh_dsa_sha2_192s, yes, der, PrivateKeyInfo), 279 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192f", slh_dsa_sha2_192f, yes, der, PrivateKeyInfo), 280 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256s", slh_dsa_sha2_256s, yes, der, PrivateKeyInfo), 281 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256f", slh_dsa_sha2_256f, yes, der, PrivateKeyInfo), 282 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128s", slh_dsa_shake_128s, yes, der, PrivateKeyInfo), 283 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128f", slh_dsa_shake_128f, yes, der, PrivateKeyInfo), 284 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192s", slh_dsa_shake_192s, yes, der, PrivateKeyInfo), 285 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192f", slh_dsa_shake_192f, yes, der, PrivateKeyInfo), 286 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256s", slh_dsa_shake_256s, yes, der, PrivateKeyInfo), 287 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256f", slh_dsa_shake_256f, yes, der, PrivateKeyInfo), 288 1.1 christos 289 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128s", slh_dsa_sha2_128s, yes, pem, PrivateKeyInfo), 290 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128f", slh_dsa_sha2_128f, yes, pem, PrivateKeyInfo), 291 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192s", slh_dsa_sha2_192s, yes, pem, PrivateKeyInfo), 292 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192f", slh_dsa_sha2_192f, yes, pem, PrivateKeyInfo), 293 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256s", slh_dsa_sha2_256s, yes, pem, PrivateKeyInfo), 294 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256f", slh_dsa_sha2_256f, yes, pem, PrivateKeyInfo), 295 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128s", slh_dsa_shake_128s, yes, pem, PrivateKeyInfo), 296 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128f", slh_dsa_shake_128f, yes, pem, PrivateKeyInfo), 297 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192s", slh_dsa_shake_192s, yes, pem, PrivateKeyInfo), 298 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192f", slh_dsa_shake_192f, yes, pem, PrivateKeyInfo), 299 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256s", slh_dsa_shake_256s, yes, pem, PrivateKeyInfo), 300 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256f", slh_dsa_shake_256f, yes, pem, PrivateKeyInfo), 301 1.1 christos 302 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128s", slh_dsa_sha2_128s, yes, der, SubjectPublicKeyInfo), 303 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128f", slh_dsa_sha2_128f, yes, der, SubjectPublicKeyInfo), 304 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192s", slh_dsa_sha2_192s, yes, der, SubjectPublicKeyInfo), 305 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192f", slh_dsa_sha2_192f, yes, der, SubjectPublicKeyInfo), 306 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256s", slh_dsa_sha2_256s, yes, der, SubjectPublicKeyInfo), 307 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256f", slh_dsa_sha2_256f, yes, der, SubjectPublicKeyInfo), 308 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128s", slh_dsa_shake_128s, yes, der, SubjectPublicKeyInfo), 309 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128f", slh_dsa_shake_128f, yes, der, SubjectPublicKeyInfo), 310 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192s", slh_dsa_shake_192s, yes, der, SubjectPublicKeyInfo), 311 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192f", slh_dsa_shake_192f, yes, der, SubjectPublicKeyInfo), 312 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256s", slh_dsa_shake_256s, yes, der, SubjectPublicKeyInfo), 313 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256f", slh_dsa_shake_256f, yes, der, SubjectPublicKeyInfo), 314 1.1 christos 315 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128s", slh_dsa_sha2_128s, yes, pem, SubjectPublicKeyInfo), 316 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-128f", slh_dsa_sha2_128f, yes, pem, SubjectPublicKeyInfo), 317 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192s", slh_dsa_sha2_192s, yes, pem, SubjectPublicKeyInfo), 318 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-192f", slh_dsa_sha2_192f, yes, pem, SubjectPublicKeyInfo), 319 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256s", slh_dsa_sha2_256s, yes, pem, SubjectPublicKeyInfo), 320 1.1 christos ENCODER_w_structure( "SLH-DSA-SHA2-256f", slh_dsa_sha2_256f, yes, pem, SubjectPublicKeyInfo), 321 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128s", slh_dsa_shake_128s, yes, pem, SubjectPublicKeyInfo), 322 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-128f", slh_dsa_shake_128f, yes, pem, SubjectPublicKeyInfo), 323 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192s", slh_dsa_shake_192s, yes, pem, SubjectPublicKeyInfo), 324 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-192f", slh_dsa_shake_192f, yes, pem, SubjectPublicKeyInfo), 325 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256s", slh_dsa_shake_256s, yes, pem, SubjectPublicKeyInfo), 326 1.1 christos ENCODER_w_structure("SLH-DSA-SHAKE-256f", slh_dsa_shake_256f, yes, pem, SubjectPublicKeyInfo), 327 1.1 christos #endif 328 1.1 christos 329 1.1 christos #ifndef OPENSSL_NO_ML_KEM 330 1.1 christos ENCODER_w_structure("ML-KEM-512", ml_kem_512, yes, der, EncryptedPrivateKeyInfo), 331 1.1 christos ENCODER_w_structure("ML-KEM-512", ml_kem_512, yes, pem, EncryptedPrivateKeyInfo), 332 1.1 christos ENCODER_w_structure("ML-KEM-512", ml_kem_512, yes, der, PrivateKeyInfo), 333 1.1 christos ENCODER_w_structure("ML-KEM-512", ml_kem_512, yes, pem, PrivateKeyInfo), 334 1.1 christos ENCODER_w_structure("ML-KEM-512", ml_kem_512, yes, der, SubjectPublicKeyInfo), 335 1.1 christos ENCODER_w_structure("ML-KEM-512", ml_kem_512, yes, pem, SubjectPublicKeyInfo), 336 1.1 christos 337 1.1 christos ENCODER_w_structure("ML-KEM-768", ml_kem_768, yes, der, EncryptedPrivateKeyInfo), 338 1.1 christos ENCODER_w_structure("ML-KEM-768", ml_kem_768, yes, pem, EncryptedPrivateKeyInfo), 339 1.1 christos ENCODER_w_structure("ML-KEM-768", ml_kem_768, yes, der, PrivateKeyInfo), 340 1.1 christos ENCODER_w_structure("ML-KEM-768", ml_kem_768, yes, pem, PrivateKeyInfo), 341 1.1 christos ENCODER_w_structure("ML-KEM-768", ml_kem_768, yes, der, SubjectPublicKeyInfo), 342 1.1 christos ENCODER_w_structure("ML-KEM-768", ml_kem_768, yes, pem, SubjectPublicKeyInfo), 343 1.1 christos 344 1.1 christos ENCODER_w_structure("ML-KEM-1024", ml_kem_1024, yes, der, EncryptedPrivateKeyInfo), 345 1.1 christos ENCODER_w_structure("ML-KEM-1024", ml_kem_1024, yes, pem, EncryptedPrivateKeyInfo), 346 1.1 christos ENCODER_w_structure("ML-KEM-1024", ml_kem_1024, yes, der, PrivateKeyInfo), 347 1.1 christos ENCODER_w_structure("ML-KEM-1024", ml_kem_1024, yes, pem, PrivateKeyInfo), 348 1.1 christos ENCODER_w_structure("ML-KEM-1024", ml_kem_1024, yes, der, SubjectPublicKeyInfo), 349 1.1 christos ENCODER_w_structure("ML-KEM-1024", ml_kem_1024, yes, pem, SubjectPublicKeyInfo), 350 1.1 christos #endif 351 1.1 christos 352 1.1 christos # ifndef OPENSSL_NO_ML_DSA 353 1.1 christos ENCODER_w_structure("ML-DSA-44", ml_dsa_44, yes, der, EncryptedPrivateKeyInfo), 354 1.1 christos ENCODER_w_structure("ML-DSA-44", ml_dsa_44, yes, pem, EncryptedPrivateKeyInfo), 355 1.1 christos ENCODER_w_structure("ML-DSA-44", ml_dsa_44, yes, der, PrivateKeyInfo), 356 1.1 christos ENCODER_w_structure("ML-DSA-44", ml_dsa_44, yes, pem, PrivateKeyInfo), 357 1.1 christos ENCODER_w_structure("ML-DSA-44", ml_dsa_44, yes, der, SubjectPublicKeyInfo), 358 1.1 christos ENCODER_w_structure("ML-DSA-44", ml_dsa_44, yes, pem, SubjectPublicKeyInfo), 359 1.1 christos 360 1.1 christos ENCODER_w_structure("ML-DSA-65", ml_dsa_65, yes, der, EncryptedPrivateKeyInfo), 361 1.1 christos ENCODER_w_structure("ML-DSA-65", ml_dsa_65, yes, pem, EncryptedPrivateKeyInfo), 362 1.1 christos ENCODER_w_structure("ML-DSA-65", ml_dsa_65, yes, der, PrivateKeyInfo), 363 1.1 christos ENCODER_w_structure("ML-DSA-65", ml_dsa_65, yes, pem, PrivateKeyInfo), 364 1.1 christos ENCODER_w_structure("ML-DSA-65", ml_dsa_65, yes, der, SubjectPublicKeyInfo), 365 1.1 christos ENCODER_w_structure("ML-DSA-65", ml_dsa_65, yes, pem, SubjectPublicKeyInfo), 366 1.1 christos 367 1.1 christos ENCODER_w_structure("ML-DSA-87", ml_dsa_87, yes, der, EncryptedPrivateKeyInfo), 368 1.1 christos ENCODER_w_structure("ML-DSA-87", ml_dsa_87, yes, pem, EncryptedPrivateKeyInfo), 369 1.1 christos ENCODER_w_structure("ML-DSA-87", ml_dsa_87, yes, der, PrivateKeyInfo), 370 1.1 christos ENCODER_w_structure("ML-DSA-87", ml_dsa_87, yes, pem, PrivateKeyInfo), 371 1.1 christos ENCODER_w_structure("ML-DSA-87", ml_dsa_87, yes, der, SubjectPublicKeyInfo), 372 1.1 christos ENCODER_w_structure("ML-DSA-87", ml_dsa_87, yes, pem, SubjectPublicKeyInfo), 373 1.1 christos # endif /* OPENSSL_NO_ML_DSA */ 374 1.1 christos 375 1.1 christos /* 376 1.1 christos * Entries for key type specific output formats. These are exactly the 377 1.1 christos * same as the type specific above, except that they use the key type 378 1.1 christos * name as structure name instead of "type-specific", in the call on 379 1.1 christos * OSSL_ENCODER_CTX_new_for_pkey(). 380 1.1 christos */ 381 1.1 christos 382 1.1 christos /* The RSA encoders only support private key and public key output */ 383 1.1 christos ENCODER_w_structure("RSA", rsa, yes, der, RSA), 384 1.1 christos ENCODER_w_structure("RSA", rsa, yes, pem, RSA), 385 1.1 christos #ifndef OPENSSL_NO_DH 386 1.1 christos /* DH and X9.42 DH only support key parameters output. */ 387 1.1 christos ENCODER_w_structure("DH", dh, yes, der, DH), 388 1.1 christos ENCODER_w_structure("DH", dh, yes, pem, DH), 389 1.1 christos ENCODER_w_structure("DHX", dhx, yes, der, DHX), 390 1.1 christos ENCODER_w_structure("DHX", dhx, yes, pem, DHX), 391 1.1 christos #endif 392 1.1 christos #ifndef OPENSSL_NO_DSA 393 1.1 christos ENCODER_w_structure("DSA", dsa, yes, der, DSA), 394 1.1 christos ENCODER_w_structure("DSA", dsa, yes, pem, DSA), 395 1.1 christos #endif 396 1.1 christos #ifndef OPENSSL_NO_EC 397 1.1 christos ENCODER_w_structure("EC", ec, yes, der, EC), 398 1.1 christos ENCODER_w_structure("EC", ec, yes, pem, EC), 399 1.1 christos #endif 400 1.1 christos 401 1.1 christos /* 402 1.1 christos * Additional entries with structure names being the standard name. 403 1.1 christos * This is entirely for the convenience of the user that wants to use 404 1.1 christos * OSSL_ENCODER directly with names they may fancy. These do not impact 405 1.1 christos * on libcrypto functionality in any way. 406 1.1 christos */ 407 1.1 christos /* PKCS#1 is a well known for plain RSA keys, so we add that too */ 408 1.1 christos ENCODER_w_structure("RSA", rsa, yes, der, PKCS1), 409 1.1 christos ENCODER_w_structure("RSA", rsa, yes, pem, PKCS1), 410 1.1 christos ENCODER_w_structure("RSA-PSS", rsapss, yes, der, PKCS1), 411 1.1 christos ENCODER_w_structure("RSA-PSS", rsapss, yes, pem, PKCS1), 412 1.1 christos #ifndef OPENSSL_NO_DH 413 1.1 christos /* PKCS#3 defines the format for DH parameters */ 414 1.1 christos ENCODER_w_structure("DH", dh, yes, der, PKCS3), 415 1.1 christos ENCODER_w_structure("DH", dh, yes, pem, PKCS3), 416 1.1 christos /* X9.42 defines the format for DHX parameters */ 417 1.1 christos ENCODER_w_structure("DHX", dhx, yes, der, X9_42), 418 1.1 christos ENCODER_w_structure("DHX", dhx, yes, pem, X9_42), 419 1.1 christos #endif 420 1.1 christos #ifndef OPENSSL_NO_EC 421 1.1 christos /* RFC 5915 defines the format for EC keys and parameters */ 422 1.1 christos ENCODER_w_structure("EC", ec, yes, der, X9_62), 423 1.1 christos ENCODER_w_structure("EC", ec, yes, pem, X9_62), 424 1.1 christos #endif 425