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