|  | /* | 
|  | * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. | 
|  | * | 
|  | * Licensed under the Apache License 2.0 (the "License").  You may not use | 
|  | * this file except in compliance with the License.  You can obtain a copy | 
|  | * in the file LICENSE in the source distribution or at | 
|  | * https://www.openssl.org/source/license.html | 
|  | */ | 
|  |  | 
|  | /* Internal tests for EVP_PKEY method ordering */ | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include <string.h> | 
|  |  | 
|  | #include <openssl/evp.h> | 
|  | #include "testutil.h" | 
|  |  | 
|  | /* Test of EVP_PKEY_ASN1_METHOD ordering */ | 
|  | static int test_asn1_meths(void) | 
|  | { | 
|  | int i; | 
|  | int prev = -1; | 
|  | int good = 1; | 
|  | int pkey_id; | 
|  | const EVP_PKEY_ASN1_METHOD *ameth; | 
|  |  | 
|  | for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { | 
|  | ameth = EVP_PKEY_asn1_get0(i); | 
|  | EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); | 
|  | if (pkey_id < prev) | 
|  | good = 0; | 
|  | prev = pkey_id; | 
|  |  | 
|  | } | 
|  | if (!good) { | 
|  | TEST_error("EVP_PKEY_ASN1_METHOD table out of order"); | 
|  | for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { | 
|  | const char *info; | 
|  |  | 
|  | ameth = EVP_PKEY_asn1_get0(i); | 
|  | EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, &info, NULL, ameth); | 
|  | if (info == NULL) | 
|  | info = "<NO NAME>"; | 
|  | TEST_note("%d : %s : %s", pkey_id, OBJ_nid2ln(pkey_id), info); | 
|  | } | 
|  | } | 
|  | return good; | 
|  | } | 
|  |  | 
|  | /* Test of EVP_PKEY_METHOD ordering */ | 
|  | static int test_pkey_meths(void) | 
|  | { | 
|  | size_t i; | 
|  | int prev = -1; | 
|  | int good = 1; | 
|  | int pkey_id; | 
|  | const EVP_PKEY_METHOD *pmeth; | 
|  |  | 
|  | for (i = 0; i < EVP_PKEY_meth_get_count(); i++) { | 
|  | pmeth = EVP_PKEY_meth_get0(i); | 
|  | EVP_PKEY_meth_get0_info(&pkey_id, NULL, pmeth); | 
|  | if (pkey_id < prev) | 
|  | good = 0; | 
|  | prev = pkey_id; | 
|  |  | 
|  | } | 
|  | if (!good) { | 
|  | TEST_error("EVP_PKEY_METHOD table out of order"); | 
|  | for (i = 0; i < EVP_PKEY_meth_get_count(); i++) { | 
|  | pmeth = EVP_PKEY_meth_get0(i); | 
|  | EVP_PKEY_meth_get0_info(&pkey_id, NULL, pmeth); | 
|  | TEST_note("%d : %s", pkey_id, OBJ_nid2ln(pkey_id)); | 
|  | } | 
|  | } | 
|  | return good; | 
|  | } | 
|  |  | 
|  | int setup_tests(void) | 
|  | { | 
|  | ADD_TEST(test_asn1_meths); | 
|  | ADD_TEST(test_pkey_meths); | 
|  | return 1; | 
|  | } |