xref: /freebsd/crypto/openssl/test/pkey_meth_test.c (revision e0c4386e7e71d93b0edc0c8fa156263fc4a8b0b6)
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