1*9c6dcd48Stb /* $OpenBSD: obj_xref.c,v 1.15 2024/08/28 06:53:24 tb Exp $ */ 28e6e37e3Stb 38e6e37e3Stb /* 48e6e37e3Stb * Copyright (c) 2023 Theo Buehler <tb@openbsd.org> 5f1535dc8Sdjm * 68e6e37e3Stb * Permission to use, copy, modify, and distribute this software for any 78e6e37e3Stb * purpose with or without fee is hereby granted, provided that the above 88e6e37e3Stb * copyright notice and this permission notice appear in all copies. 9f1535dc8Sdjm * 108e6e37e3Stb * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 118e6e37e3Stb * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 128e6e37e3Stb * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 138e6e37e3Stb * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 148e6e37e3Stb * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 158e6e37e3Stb * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 168e6e37e3Stb * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17f1535dc8Sdjm */ 18f1535dc8Sdjm 19f1535dc8Sdjm #include <openssl/objects.h> 20f1535dc8Sdjm 218e6e37e3Stb /* 228e6e37e3Stb * Map between signature nids and pairs of (hash, pkey) nids. If the hash nid 238e6e37e3Stb * is NID_undef, this indicates to ASN1_item_{sign,verify}() that the pkey's 248e6e37e3Stb * ASN.1 method needs to handle algorithm identifiers and part of the message 258e6e37e3Stb * digest. 268e6e37e3Stb */ 27f1535dc8Sdjm 288e6e37e3Stb static const struct { 298e6e37e3Stb int sign_nid; 308e6e37e3Stb int hash_nid; 318e6e37e3Stb int pkey_nid; 328e6e37e3Stb } nid_triple[] = { 33f1535dc8Sdjm { 348e6e37e3Stb .sign_nid = NID_md2WithRSAEncryption, 358e6e37e3Stb .hash_nid = NID_md2, 368e6e37e3Stb .pkey_nid = NID_rsaEncryption, 378e6e37e3Stb }, 3876ce35bfSjsing { 398e6e37e3Stb .sign_nid = NID_md5WithRSAEncryption, 408e6e37e3Stb .hash_nid = NID_md5, 418e6e37e3Stb .pkey_nid = NID_rsaEncryption, 428e6e37e3Stb }, 4376ce35bfSjsing { 448e6e37e3Stb .sign_nid = NID_shaWithRSAEncryption, 458e6e37e3Stb .hash_nid = NID_sha, 468e6e37e3Stb .pkey_nid = NID_rsaEncryption, 478e6e37e3Stb }, 48f1535dc8Sdjm { 498e6e37e3Stb .sign_nid = NID_sha1WithRSAEncryption, 508e6e37e3Stb .hash_nid = NID_sha1, 518e6e37e3Stb .pkey_nid = NID_rsaEncryption, 528e6e37e3Stb }, 5376ce35bfSjsing { 548e6e37e3Stb .sign_nid = NID_dsaWithSHA, 558e6e37e3Stb .hash_nid = NID_sha, 568e6e37e3Stb .pkey_nid = NID_dsa, 578e6e37e3Stb }, 5876ce35bfSjsing { 598e6e37e3Stb .sign_nid = NID_dsaWithSHA1_2, 608e6e37e3Stb .hash_nid = NID_sha1, 618e6e37e3Stb .pkey_nid = NID_dsa_2, 628e6e37e3Stb }, 638e6e37e3Stb { 648e6e37e3Stb .sign_nid = NID_mdc2WithRSA, 658e6e37e3Stb .hash_nid = NID_mdc2, 668e6e37e3Stb .pkey_nid = NID_rsaEncryption, 678e6e37e3Stb }, 688e6e37e3Stb { 698e6e37e3Stb .sign_nid = NID_md5WithRSA, 708e6e37e3Stb .hash_nid = NID_md5, 718e6e37e3Stb .pkey_nid = NID_rsa, 728e6e37e3Stb }, 738e6e37e3Stb { 748e6e37e3Stb .sign_nid = NID_dsaWithSHA1, 758e6e37e3Stb .hash_nid = NID_sha1, 768e6e37e3Stb .pkey_nid = NID_dsa, 778e6e37e3Stb }, 788e6e37e3Stb { 798e6e37e3Stb .sign_nid = NID_sha1WithRSA, 808e6e37e3Stb .hash_nid = NID_sha1, 818e6e37e3Stb .pkey_nid = NID_rsa, 828e6e37e3Stb }, 838e6e37e3Stb { 848e6e37e3Stb .sign_nid = NID_ripemd160WithRSA, 858e6e37e3Stb .hash_nid = NID_ripemd160, 868e6e37e3Stb .pkey_nid = NID_rsaEncryption, 878e6e37e3Stb }, 888e6e37e3Stb { 898e6e37e3Stb .sign_nid = NID_md4WithRSAEncryption, 908e6e37e3Stb .hash_nid = NID_md4, 918e6e37e3Stb .pkey_nid = NID_rsaEncryption, 928e6e37e3Stb }, 938e6e37e3Stb { 948e6e37e3Stb .sign_nid = NID_ecdsa_with_SHA1, 958e6e37e3Stb .hash_nid = NID_sha1, 968e6e37e3Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 978e6e37e3Stb }, 988e6e37e3Stb { 998e6e37e3Stb .sign_nid = NID_sha256WithRSAEncryption, 1008e6e37e3Stb .hash_nid = NID_sha256, 1018e6e37e3Stb .pkey_nid = NID_rsaEncryption, 1028e6e37e3Stb }, 1038e6e37e3Stb { 1048e6e37e3Stb .sign_nid = NID_sha384WithRSAEncryption, 1058e6e37e3Stb .hash_nid = NID_sha384, 1068e6e37e3Stb .pkey_nid = NID_rsaEncryption, 1078e6e37e3Stb }, 1088e6e37e3Stb { 1098e6e37e3Stb .sign_nid = NID_sha512WithRSAEncryption, 1108e6e37e3Stb .hash_nid = NID_sha512, 1118e6e37e3Stb .pkey_nid = NID_rsaEncryption, 1128e6e37e3Stb }, 1138e6e37e3Stb { 1148e6e37e3Stb .sign_nid = NID_sha224WithRSAEncryption, 1158e6e37e3Stb .hash_nid = NID_sha224, 1168e6e37e3Stb .pkey_nid = NID_rsaEncryption, 1178e6e37e3Stb }, 1188e6e37e3Stb { 1198e6e37e3Stb .sign_nid = NID_ecdsa_with_Recommended, 1208e6e37e3Stb .hash_nid = NID_undef, 1218e6e37e3Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 1228e6e37e3Stb }, 1238e6e37e3Stb { 1248e6e37e3Stb .sign_nid = NID_ecdsa_with_Specified, 1258e6e37e3Stb .hash_nid = NID_undef, 1268e6e37e3Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 1278e6e37e3Stb }, 1288e6e37e3Stb { 1298e6e37e3Stb .sign_nid = NID_ecdsa_with_SHA224, 1308e6e37e3Stb .hash_nid = NID_sha224, 1318e6e37e3Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 1328e6e37e3Stb }, 1338e6e37e3Stb { 1348e6e37e3Stb .sign_nid = NID_ecdsa_with_SHA256, 1358e6e37e3Stb .hash_nid = NID_sha256, 1368e6e37e3Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 1378e6e37e3Stb }, 1388e6e37e3Stb { 1398e6e37e3Stb .sign_nid = NID_ecdsa_with_SHA384, 1408e6e37e3Stb .hash_nid = NID_sha384, 1418e6e37e3Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 1428e6e37e3Stb }, 1438e6e37e3Stb { 1448e6e37e3Stb .sign_nid = NID_ecdsa_with_SHA512, 1458e6e37e3Stb .hash_nid = NID_sha512, 1468e6e37e3Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 1478e6e37e3Stb }, 1488e6e37e3Stb { 1498e6e37e3Stb .sign_nid = NID_dsa_with_SHA224, 1508e6e37e3Stb .hash_nid = NID_sha224, 1518e6e37e3Stb .pkey_nid = NID_dsa, 1528e6e37e3Stb }, 1538e6e37e3Stb { 1548e6e37e3Stb .sign_nid = NID_dsa_with_SHA256, 1558e6e37e3Stb .hash_nid = NID_sha256, 1568e6e37e3Stb .pkey_nid = NID_dsa, 1578e6e37e3Stb }, 1588e6e37e3Stb { 1598e6e37e3Stb .sign_nid = NID_id_GostR3411_94_with_GostR3410_2001, 1608e6e37e3Stb .hash_nid = NID_id_GostR3411_94, 1618e6e37e3Stb .pkey_nid = NID_id_GostR3410_2001, 1628e6e37e3Stb }, 1638e6e37e3Stb { 1648e6e37e3Stb .sign_nid = NID_id_GostR3411_94_with_GostR3410_94, 1658e6e37e3Stb .hash_nid = NID_id_GostR3411_94, 1668e6e37e3Stb .pkey_nid = NID_id_GostR3410_94, 1678e6e37e3Stb }, 1688e6e37e3Stb { 1698e6e37e3Stb .sign_nid = NID_id_GostR3411_94_with_GostR3410_94_cc, 1708e6e37e3Stb .hash_nid = NID_id_GostR3411_94, 1718e6e37e3Stb .pkey_nid = NID_id_GostR3410_94_cc, 1728e6e37e3Stb }, 1738e6e37e3Stb { 1748e6e37e3Stb .sign_nid = NID_id_GostR3411_94_with_GostR3410_2001_cc, 1758e6e37e3Stb .hash_nid = NID_id_GostR3411_94, 1768e6e37e3Stb .pkey_nid = NID_id_GostR3410_2001_cc, 1778e6e37e3Stb }, 1788e6e37e3Stb { 1798e6e37e3Stb .sign_nid = NID_rsassaPss, 1808e6e37e3Stb .hash_nid = NID_undef, 181*9c6dcd48Stb .pkey_nid = NID_rsassaPss, 1828e6e37e3Stb }, 1838e6e37e3Stb { 1848e6e37e3Stb .sign_nid = NID_id_tc26_signwithdigest_gost3410_2012_256, 1858e6e37e3Stb .hash_nid = NID_id_tc26_gost3411_2012_256, 1868e6e37e3Stb .pkey_nid = NID_id_GostR3410_2001, 1878e6e37e3Stb }, 1888e6e37e3Stb { 1898e6e37e3Stb .sign_nid = NID_id_tc26_signwithdigest_gost3410_2012_512, 1908e6e37e3Stb .hash_nid = NID_id_tc26_gost3411_2012_512, 1918e6e37e3Stb .pkey_nid = NID_id_GostR3410_2001, 1928e6e37e3Stb }, 1938e6e37e3Stb { 1948e6e37e3Stb .sign_nid = NID_Ed25519, 1958e6e37e3Stb .hash_nid = NID_undef, 1968e6e37e3Stb .pkey_nid = NID_Ed25519, 1978e6e37e3Stb }, 1988e6e37e3Stb { 1998e6e37e3Stb .sign_nid = NID_dhSinglePass_stdDH_sha1kdf_scheme, 2008e6e37e3Stb .hash_nid = NID_sha1, 2018e6e37e3Stb .pkey_nid = NID_dh_std_kdf, 2028e6e37e3Stb }, 2038e6e37e3Stb { 2048e6e37e3Stb .sign_nid = NID_dhSinglePass_stdDH_sha224kdf_scheme, 2058e6e37e3Stb .hash_nid = NID_sha224, 2068e6e37e3Stb .pkey_nid = NID_dh_std_kdf, 2078e6e37e3Stb }, 2088e6e37e3Stb { 2098e6e37e3Stb .sign_nid = NID_dhSinglePass_stdDH_sha256kdf_scheme, 2108e6e37e3Stb .hash_nid = NID_sha256, 2118e6e37e3Stb .pkey_nid = NID_dh_std_kdf, 2128e6e37e3Stb }, 2138e6e37e3Stb { 2148e6e37e3Stb .sign_nid = NID_dhSinglePass_stdDH_sha384kdf_scheme, 2158e6e37e3Stb .hash_nid = NID_sha384, 2168e6e37e3Stb .pkey_nid = NID_dh_std_kdf, 2178e6e37e3Stb }, 2188e6e37e3Stb { 2198e6e37e3Stb .sign_nid = NID_dhSinglePass_stdDH_sha512kdf_scheme, 2208e6e37e3Stb .hash_nid = NID_sha512, 2218e6e37e3Stb .pkey_nid = NID_dh_std_kdf, 2228e6e37e3Stb }, 2238e6e37e3Stb { 2248e6e37e3Stb .sign_nid = NID_dhSinglePass_cofactorDH_sha1kdf_scheme, 2258e6e37e3Stb .hash_nid = NID_sha1, 2268e6e37e3Stb .pkey_nid = NID_dh_cofactor_kdf, 2278e6e37e3Stb }, 2288e6e37e3Stb { 2298e6e37e3Stb .sign_nid = NID_dhSinglePass_cofactorDH_sha224kdf_scheme, 2308e6e37e3Stb .hash_nid = NID_sha224, 2318e6e37e3Stb .pkey_nid = NID_dh_cofactor_kdf, 2328e6e37e3Stb }, 2338e6e37e3Stb { 2348e6e37e3Stb .sign_nid = NID_dhSinglePass_cofactorDH_sha256kdf_scheme, 2358e6e37e3Stb .hash_nid = NID_sha256, 2368e6e37e3Stb .pkey_nid = NID_dh_cofactor_kdf, 2378e6e37e3Stb }, 2388e6e37e3Stb { 2398e6e37e3Stb .sign_nid = NID_dhSinglePass_cofactorDH_sha384kdf_scheme, 2408e6e37e3Stb .hash_nid = NID_sha384, 2418e6e37e3Stb .pkey_nid = NID_dh_cofactor_kdf, 2428e6e37e3Stb }, 2438e6e37e3Stb { 2448e6e37e3Stb .sign_nid = NID_dhSinglePass_cofactorDH_sha512kdf_scheme, 2458e6e37e3Stb .hash_nid = NID_sha512, 2468e6e37e3Stb .pkey_nid = NID_dh_cofactor_kdf, 2478e6e37e3Stb }, 2488e6e37e3Stb { 2498e6e37e3Stb .sign_nid = NID_RSA_SHA3_224, 2508e6e37e3Stb .hash_nid = NID_sha3_224, 2518e6e37e3Stb .pkey_nid = NID_rsaEncryption, 2528e6e37e3Stb }, 2538e6e37e3Stb { 2548e6e37e3Stb .sign_nid = NID_RSA_SHA3_256, 2558e6e37e3Stb .hash_nid = NID_sha3_256, 2568e6e37e3Stb .pkey_nid = NID_rsaEncryption, 2578e6e37e3Stb }, 2588e6e37e3Stb { 2598e6e37e3Stb .sign_nid = NID_RSA_SHA3_384, 2608e6e37e3Stb .hash_nid = NID_sha3_384, 2618e6e37e3Stb .pkey_nid = NID_rsaEncryption, 2628e6e37e3Stb }, 2638e6e37e3Stb { 2648e6e37e3Stb .sign_nid = NID_RSA_SHA3_512, 2658e6e37e3Stb .hash_nid = NID_sha3_512, 2668e6e37e3Stb .pkey_nid = NID_rsaEncryption, 2678e6e37e3Stb }, 2680dadb9f5Stb { 2690dadb9f5Stb .sign_nid = NID_ecdsa_with_SHA3_224, 2700dadb9f5Stb .hash_nid = NID_sha3_224, 2710dadb9f5Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 2720dadb9f5Stb }, 2730dadb9f5Stb { 2740dadb9f5Stb .sign_nid = NID_ecdsa_with_SHA3_256, 2750dadb9f5Stb .hash_nid = NID_sha3_256, 2760dadb9f5Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 2770dadb9f5Stb }, 2780dadb9f5Stb { 2790dadb9f5Stb .sign_nid = NID_ecdsa_with_SHA3_384, 2800dadb9f5Stb .hash_nid = NID_sha3_384, 2810dadb9f5Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 2820dadb9f5Stb }, 2830dadb9f5Stb { 2840dadb9f5Stb .sign_nid = NID_ecdsa_with_SHA3_512, 2850dadb9f5Stb .hash_nid = NID_sha3_512, 2860dadb9f5Stb .pkey_nid = NID_X9_62_id_ecPublicKey, 2870dadb9f5Stb }, 2888e6e37e3Stb }; 2898e6e37e3Stb 2908e6e37e3Stb #define N_NID_TRIPLES (sizeof(nid_triple) / sizeof(nid_triple[0])) 291f1535dc8Sdjm 292223e7da0Sjsing int 2938e6e37e3Stb OBJ_find_sigid_algs(int sign_nid, int *hash_nid, int *pkey_nid) 294f1535dc8Sdjm { 2958e6e37e3Stb size_t i; 296f1535dc8Sdjm 2978e6e37e3Stb for (i = 0; i < N_NID_TRIPLES; i++) { 2988e6e37e3Stb if (sign_nid != nid_triple[i].sign_nid) 2998e6e37e3Stb continue; 3008e6e37e3Stb 3018e6e37e3Stb if (hash_nid != NULL) 3028e6e37e3Stb *hash_nid = nid_triple[i].hash_nid; 3038e6e37e3Stb if (pkey_nid != NULL) 3048e6e37e3Stb *pkey_nid = nid_triple[i].pkey_nid; 3058e6e37e3Stb 306f1535dc8Sdjm return 1; 307f1535dc8Sdjm } 3088e6e37e3Stb 3098e6e37e3Stb return 0; 3108e6e37e3Stb } 3111e9308c1Sbeck LCRYPTO_ALIAS(OBJ_find_sigid_algs); 312f1535dc8Sdjm 313223e7da0Sjsing int 3148e6e37e3Stb OBJ_find_sigid_by_algs(int *sign_nid, int hash_nid, int pkey_nid) 315f1535dc8Sdjm { 3168e6e37e3Stb size_t i; 317f1535dc8Sdjm 3188e6e37e3Stb for (i = 0; i < N_NID_TRIPLES; i++) { 3198e6e37e3Stb if (hash_nid != nid_triple[i].hash_nid) 3208e6e37e3Stb continue; 3218e6e37e3Stb if (pkey_nid != nid_triple[i].pkey_nid) 3228e6e37e3Stb continue; 323f1535dc8Sdjm 3248e6e37e3Stb if (sign_nid != NULL) 3258e6e37e3Stb *sign_nid = nid_triple[i].sign_nid; 3268e6e37e3Stb 327f1535dc8Sdjm return 1; 328f1535dc8Sdjm } 3298e6e37e3Stb 3308e6e37e3Stb return 0; 3318e6e37e3Stb } 3321e9308c1Sbeck LCRYPTO_ALIAS(OBJ_find_sigid_by_algs); 333