1 /* 2 * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 /* Internal tests for EVP_PKEY method ordering */ 11 12 /* We need to use some deprecated APIs */ 13 #define OPENSSL_SUPPRESS_DEPRECATED 14 15 #include <stdio.h> 16 #include <string.h> 17 18 #include <openssl/evp.h> 19 #include "testutil.h" 20 21 /* Test of EVP_PKEY_ASN1_METHOD ordering */ 22 static int test_asn1_meths(void) 23 { 24 int i; 25 int prev = -1; 26 int good = 1; 27 int pkey_id; 28 const EVP_PKEY_ASN1_METHOD *ameth; 29 30 for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { 31 ameth = EVP_PKEY_asn1_get0(i); 32 EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); 33 if (pkey_id < prev) 34 good = 0; 35 prev = pkey_id; 36 37 } 38 if (!good) { 39 TEST_error("EVP_PKEY_ASN1_METHOD table out of order"); 40 for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { 41 const char *info; 42 43 ameth = EVP_PKEY_asn1_get0(i); 44 EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, &info, NULL, ameth); 45 if (info == NULL) 46 info = "<NO NAME>"; 47 TEST_note("%d : %s : %s", pkey_id, OBJ_nid2ln(pkey_id), info); 48 } 49 } 50 return good; 51 } 52 53 #ifndef OPENSSL_NO_DEPRECATED_3_0 54 /* Test of EVP_PKEY_METHOD ordering */ 55 static int test_pkey_meths(void) 56 { 57 size_t i; 58 int prev = -1; 59 int good = 1; 60 int pkey_id; 61 const EVP_PKEY_METHOD *pmeth; 62 63 for (i = 0; i < EVP_PKEY_meth_get_count(); i++) { 64 pmeth = EVP_PKEY_meth_get0(i); 65 EVP_PKEY_meth_get0_info(&pkey_id, NULL, pmeth); 66 if (pkey_id < prev) 67 good = 0; 68 prev = pkey_id; 69 70 } 71 if (!good) { 72 TEST_error("EVP_PKEY_METHOD table out of order"); 73 for (i = 0; i < EVP_PKEY_meth_get_count(); i++) { 74 pmeth = EVP_PKEY_meth_get0(i); 75 EVP_PKEY_meth_get0_info(&pkey_id, NULL, pmeth); 76 TEST_note("%d : %s", pkey_id, OBJ_nid2ln(pkey_id)); 77 } 78 } 79 return good; 80 } 81 #endif 82 83 int setup_tests(void) 84 { 85 ADD_TEST(test_asn1_meths); 86 #ifndef OPENSSL_NO_DEPRECATED_3_0 87 ADD_TEST(test_pkey_meths); 88 #endif 89 return 1; 90 } 91