| 
									
										
										
										
											2016-05-18 02:52:22 +08:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2018-05-29 20:07:08 +08:00
										 |  |  |  * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2016-05-18 02:52:22 +08:00
										 |  |  |  * Licensed under the OpenSSL license (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
 | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-07 12:14:48 +08:00
										 |  |  | #include "eng_int.h"
 | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 04:00:51 +08:00
										 |  |  | static ENGINE_TABLE *dsa_table = NULL; | 
					
						
							|  |  |  | static const int dummy_nid = 1; | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 04:00:51 +08:00
										 |  |  | void ENGINE_unregister_DSA(ENGINE *e) | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     engine_table_unregister(&dsa_table, e); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-09 01:06:52 +08:00
										 |  |  | static void engine_unregister_all_DSA(void) | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     engine_table_cleanup(&dsa_table); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 04:00:51 +08:00
										 |  |  | int ENGINE_register_DSA(ENGINE *e) | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     if (e->dsa_meth) | 
					
						
							|  |  |  |         return engine_table_register(&dsa_table, | 
					
						
							|  |  |  |                                      engine_unregister_all_DSA, e, &dummy_nid, | 
					
						
							|  |  |  |                                      1, 0); | 
					
						
							|  |  |  |     return 1; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-09 23:09:50 +08:00
										 |  |  | void ENGINE_register_all_DSA(void) | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     ENGINE *e; | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  |     for (e = ENGINE_get_first(); e; e = ENGINE_get_next(e)) | 
					
						
							|  |  |  |         ENGINE_register_DSA(e); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-08-18 18:22:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 04:00:51 +08:00
										 |  |  | int ENGINE_set_default_DSA(ENGINE *e) | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     if (e->dsa_meth) | 
					
						
							|  |  |  |         return engine_table_register(&dsa_table, | 
					
						
							|  |  |  |                                      engine_unregister_all_DSA, e, &dummy_nid, | 
					
						
							|  |  |  |                                      1, 1); | 
					
						
							|  |  |  |     return 1; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-08-18 21:53:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Exposed API function to get a functional reference from the implementation | 
					
						
							| 
									
										
										
										
											2001-09-26 04:00:51 +08:00
										 |  |  |  * table (ie. try to get a functional reference from the tabled structural | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  |  * references). | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2001-09-26 04:00:51 +08:00
										 |  |  | ENGINE *ENGINE_get_default_DSA(void) | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     return engine_table_select(&dsa_table, dummy_nid); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-08-18 21:53:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 04:00:51 +08:00
										 |  |  | /* Obtains an DSA implementation from an ENGINE functional reference */ | 
					
						
							|  |  |  | const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e) | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     return e->dsa_meth; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-08-18 21:53:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-26 04:00:51 +08:00
										 |  |  | /* Sets an DSA implementation in an ENGINE structure */ | 
					
						
							|  |  |  | int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth) | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | { | 
					
						
							|  |  |  |     e->dsa_meth = dsa_meth; | 
					
						
							|  |  |  |     return 1; | 
					
						
							|  |  |  | } |