| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2020-08-06 20:22:30 +08:00
										 |  |  |  * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2018-12-06 20:05:25 +08:00
										 |  |  |  * Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  |  * 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 */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-13 09:00:57 +08:00
										 |  |  | /* We need to use some deprecated APIs */ | 
					
						
							|  |  |  | #define OPENSSL_SUPPRESS_DEPRECATED
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <openssl/evp.h>
 | 
					
						
							|  |  |  | #include "testutil.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-26 00:48:26 +08:00
										 |  |  | /* Test of EVP_PKEY_ASN1_METHOD ordering */ | 
					
						
							|  |  |  | static int test_asn1_meths(void) | 
					
						
							| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     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) { | 
					
						
							| 
									
										
										
										
											2017-03-22 12:27:55 +08:00
										 |  |  |         TEST_error("EVP_PKEY_ASN1_METHOD table out of order"); | 
					
						
							| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  |         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>"; | 
					
						
							| 
									
										
										
										
											2017-06-19 09:21:22 +08:00
										 |  |  |             TEST_note("%d : %s : %s", pkey_id, OBJ_nid2ln(pkey_id), info); | 
					
						
							| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return good; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-13 09:00:57 +08:00
										 |  |  | #ifndef OPENSSL_NO_DEPRECATED_3_0
 | 
					
						
							| 
									
										
										
										
											2017-07-26 00:48:26 +08:00
										 |  |  | /* Test of EVP_PKEY_METHOD ordering */ | 
					
						
							| 
									
										
										
										
											2017-08-16 05:39:03 +08:00
										 |  |  | static int test_pkey_meths(void) | 
					
						
							| 
									
										
										
										
											2017-07-26 00:48:26 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     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; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-02-13 09:00:57 +08:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2017-07-26 00:48:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-09 23:09:50 +08:00
										 |  |  | int setup_tests(void) | 
					
						
							| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     ADD_TEST(test_asn1_meths); | 
					
						
							| 
									
										
										
										
											2020-02-13 09:00:57 +08:00
										 |  |  | #ifndef OPENSSL_NO_DEPRECATED_3_0
 | 
					
						
							| 
									
										
										
										
											2017-07-26 00:48:26 +08:00
										 |  |  |     ADD_TEST(test_pkey_meths); | 
					
						
							| 
									
										
										
										
											2020-02-13 09:00:57 +08:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2017-07-18 09:48:27 +08:00
										 |  |  |     return 1; | 
					
						
							| 
									
										
										
										
											2016-11-20 05:52:34 +08:00
										 |  |  | } |