| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER, | 
					
						
							|  |  |  | OSSL_DECODER_fetch, | 
					
						
							|  |  |  | OSSL_DECODER_up_ref, | 
					
						
							|  |  |  | OSSL_DECODER_free, | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_provider, | 
					
						
							|  |  |  | OSSL_DECODER_get0_properties, | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | OSSL_DECODER_is_a, | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_name, | 
					
						
							|  |  |  | OSSL_DECODER_get0_description, | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | OSSL_DECODER_do_all_provided, | 
					
						
							|  |  |  | OSSL_DECODER_names_do_all, | 
					
						
							|  |  |  | OSSL_DECODER_gettable_params, | 
					
						
							|  |  |  | OSSL_DECODER_get_params | 
					
						
							|  |  |  | - Decoder method routines | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/decoder.h> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  typedef struct ossl_decoder_st OSSL_DECODER; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-15 17:55:50 +08:00
										 |  |  |  OSSL_DECODER *OSSL_DECODER_fetch(OSSL_LIB_CTX *ctx, const char *name, | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  |                                   const char *properties); | 
					
						
							|  |  |  |  int OSSL_DECODER_up_ref(OSSL_DECODER *decoder); | 
					
						
							|  |  |  |  void OSSL_DECODER_free(OSSL_DECODER *decoder); | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  |  const OSSL_PROVIDER *OSSL_DECODER_get0_provider(const OSSL_DECODER *decoder); | 
					
						
							|  |  |  |  const char *OSSL_DECODER_get0_properties(const OSSL_DECODER *decoder); | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  |  int OSSL_DECODER_is_a(const OSSL_DECODER *decoder, const char *name); | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  |  const char *OSSL_DECODER_get0_name(const OSSL_DECODER *decoder); | 
					
						
							|  |  |  |  const char *OSSL_DECODER_get0_description(const OSSL_DECODER *decoder); | 
					
						
							| 
									
										
										
										
											2020-10-15 17:55:50 +08:00
										 |  |  |  void OSSL_DECODER_do_all_provided(OSSL_LIB_CTX *libctx, | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  |                                    void (*fn)(OSSL_DECODER *decoder, void *arg), | 
					
						
							|  |  |  |                                    void *arg); | 
					
						
							| 
									
										
										
										
											2021-02-20 01:03:43 +08:00
										 |  |  |  int OSSL_DECODER_names_do_all(const OSSL_DECODER *decoder, | 
					
						
							|  |  |  |                                void (*fn)(const char *name, void *data), | 
					
						
							|  |  |  |                                void *data); | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  |  const OSSL_PARAM *OSSL_DECODER_gettable_params(OSSL_DECODER *decoder); | 
					
						
							|  |  |  |  int OSSL_DECODER_get_params(OSSL_DECODER_CTX *ctx, const OSSL_PARAM params[]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | B<OSSL_DECODER> is a method for decoders, which know how to | 
					
						
							|  |  |  | decode encoded data into an object of some type that the rest | 
					
						
							|  |  |  | of OpenSSL knows how to handle. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_fetch() looks for an algorithm within the provider that | 
					
						
							| 
									
										
										
										
											2020-10-15 17:55:50 +08:00
										 |  |  | has been loaded into the B<OSSL_LIB_CTX> given by I<ctx>, having the | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | name given by I<name> and the properties given by I<properties>. | 
					
						
							|  |  |  | The I<name> determines what type of object the fetched decoder | 
					
						
							|  |  |  | method is expected to be able to decode, and the properties are | 
					
						
							|  |  |  | used to determine the expected output type. | 
					
						
							|  |  |  | For known properties and the values they may have, please have a look | 
					
						
							|  |  |  | in L<provider-encoder(7)/Names and properties>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_up_ref() increments the reference count for the given | 
					
						
							|  |  |  | I<decoder>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_free() decrements the reference count for the given | 
					
						
							|  |  |  | I<decoder>, and when the count reaches zero, frees it. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_provider() returns the provider of the given | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | I<decoder>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_properties() returns the property definition associated | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | with the given I<decoder>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_is_a() checks if I<decoder> is an implementation | 
					
						
							|  |  |  | of an algorithm that's identifiable with I<name>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-01 19:19:39 +08:00
										 |  |  | OSSL_DECODER_get0_name() returns the name used to fetch the given I<decoder>. | 
					
						
							| 
									
										
										
										
											2021-05-10 10:57:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_description() returns a description of the I<decoder>, meant | 
					
						
							| 
									
										
										
										
											2021-03-16 21:21:42 +08:00
										 |  |  | for display and human consumption.  The description is at the discretion | 
					
						
							|  |  |  | of the I<decoder> implementation. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | OSSL_DECODER_names_do_all() traverses all names for the given | 
					
						
							| 
									
										
										
										
											2021-01-25 21:16:05 +08:00
										 |  |  | I<decoder>, and calls I<fn> with each name and I<data> as arguments. | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-25 21:16:05 +08:00
										 |  |  | OSSL_DECODER_do_all_provided() traverses all decoder | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | implementations by all activated providers in the library context | 
					
						
							|  |  |  | I<libctx>, and for each of the implementations, calls I<fn> with the | 
					
						
							| 
									
										
										
										
											2021-01-25 21:16:05 +08:00
										 |  |  | implementation method and I<arg> as arguments. | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_gettable_params() returns an L<OSSL_PARAM(3)> | 
					
						
							|  |  |  | array of parameter descriptors. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_get_params() attempts to get parameters specified | 
					
						
							|  |  |  | with an L<OSSL_PARAM(3)> array I<params>.  Parameters that the | 
					
						
							|  |  |  | implementation doesn't recognise should be ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_fetch() returns a pointer to an OSSL_DECODER object, | 
					
						
							|  |  |  | or NULL on error. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_up_ref() returns 1 on success, or 0 on error. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_free() doesn't return any value. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_provider() returns a pointer to a provider object, or | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | NULL on error. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_properties() returns a pointer to a property | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | definition string, or NULL on error. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_is_a() returns 1 if I<decoder> was identifiable, | 
					
						
							|  |  |  | otherwise 0. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_name() returns the algorithm name from the provided | 
					
						
							| 
									
										
										
										
											2021-05-10 10:57:33 +08:00
										 |  |  | implementation for the given I<decoder>. Note that the I<decoder> may have | 
					
						
							|  |  |  | multiple synonyms associated with it. In this case the first name from the | 
					
						
							|  |  |  | algorithm definition is returned. Ownership of the returned string is retained | 
					
						
							|  |  |  | by the I<decoder> object and should not be freed by the caller. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Rename all getters to use get/get0 in name
For functions that exist in 1.1.1 provide a simple aliases via #define.
Fixes #15236
Functions with OSSL_DECODER_, OSSL_ENCODER_, OSSL_STORE_LOADER_,
EVP_KEYEXCH_, EVP_KEM_, EVP_ASYM_CIPHER_, EVP_SIGNATURE_,
EVP_KEYMGMT_, EVP_RAND_, EVP_MAC_, EVP_KDF_, EVP_PKEY_,
EVP_MD_, and EVP_CIPHER_ prefixes are renamed.
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15405)
											
										 
											2021-05-21 22:58:08 +08:00
										 |  |  | OSSL_DECODER_get0_description() returns a pointer to a decription, or NULL if | 
					
						
							| 
									
										
										
										
											2021-03-16 21:21:42 +08:00
										 |  |  | there isn't one. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-20 01:03:43 +08:00
										 |  |  | OSSL_DECODER_names_do_all() returns 1 if the callback was called for all | 
					
						
							|  |  |  | names. A return value of 0 means that the callback was not called for any names. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | =head1 NOTES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OSSL_DECODER_fetch() may be called implicitly by other fetching | 
					
						
							|  |  |  | functions, using the same library context and properties. | 
					
						
							|  |  |  | Any other API that uses keys will typically do this. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 EXAMPLES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-16 01:31:34 +08:00
										 |  |  | To list all decoders in a provider to a bio_out: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  static void collect_decoders(OSSL_DECODER *decoder, void *stack) | 
					
						
							|  |  |  |  { | 
					
						
							|  |  |  |      STACK_OF(OSSL_DECODER) *decoder_stack = stack; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      sk_OSSL_DECODER_push(decoder_stack, decoder); | 
					
						
							|  |  |  |      OSSL_DECODER_up_ref(decoder); | 
					
						
							|  |  |  |  } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  void print_name(const char *name, void *vdata) | 
					
						
							|  |  |  |  { | 
					
						
							|  |  |  |      BIO *bio = vdata; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      BIO_printf(bio, "%s ", name); | 
					
						
							|  |  |  |  } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  STACK_OF(OSSL_DECODER) *decoders; | 
					
						
							|  |  |  |  int i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  decoders = sk_OSSL_DECODER_new_null(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  BIO_printf(bio_out, "DECODERs provided by %s:\n", provider); | 
					
						
							|  |  |  |  OSSL_DECODER_do_all_provided(NULL, collect_decoders, | 
					
						
							|  |  |  |                               decoders); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  for (i = 0; i < sk_OSSL_DECODER_num(decoders); i++) { | 
					
						
							|  |  |  |      OSSL_DECODER *decoder = sk_OSSL_DECODER_value(decoders, i); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-28 22:57:22 +08:00
										 |  |  |      if (strcmp(OSSL_PROVIDER_get0_name(OSSL_DECODER_get0_provider(decoder)), | 
					
						
							| 
									
										
										
										
											2021-03-16 01:31:34 +08:00
										 |  |  |                 provider) != 0) | 
					
						
							|  |  |  |          continue; | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-16 01:31:34 +08:00
										 |  |  |      if (OSSL_DECODER_names_do_all(decoder, print_name, bio_out)) | 
					
						
							|  |  |  |             BIO_printf(bio_out, "\n"); | 
					
						
							|  |  |  |  } | 
					
						
							|  |  |  |  sk_OSSL_DECODER_pop_free(decoders, OSSL_DECODER_free); | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | L<provider(7)>, L<OSSL_DECODER_CTX(3)>, L<OSSL_DECODER_from_bio(3)>, | 
					
						
							| 
									
										
										
										
											2021-02-11 23:57:37 +08:00
										 |  |  | L<OSSL_DECODER_CTX_new_for_pkey(3)>, L<OSSL_LIB_CTX(3)> | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The functions described here were added in OpenSSL 3.0. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-28 20:54:57 +08:00
										 |  |  | Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2020-08-17 03:25:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | L<https://www.openssl.org/source/license.html>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =cut |