mirror of https://github.com/openssl/openssl.git
				
				
				
			Non-const accessor to legacy keys
Fixes #14466. Reverting the changes of the EVP_PKEY_get0 function. Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/14468)
This commit is contained in:
		
							parent
							
								
									c99248ea81
								
							
						
					
					
						commit
						896dcda18b
					
				|  | @ -22,8 +22,12 @@ OpenSSL 3.0 | |||
| ----------- | ||||
| 
 | ||||
| ### Changes between 1.1.1 and 3.0 [xx XXX xxxx] | ||||
|  * The deprecated function EVP_PKEY_get0() now returns NULL being called for a | ||||
|    provided key. | ||||
| 
 | ||||
|  * The deprecated functions EVP_PKEY_get0(), EVP_PKEY_get0_RSA(), | ||||
|    *Dmitry Belyavskiy* | ||||
| 
 | ||||
|  * The deprecated functions EVP_PKEY_get0_RSA(), | ||||
|    EVP_PKEY_get0_DSA(), EVP_PKEY_get0_EC_KEY(), EVP_PKEY_get0_DH(), | ||||
|    EVP_PKEY_get0_hmac(), EVP_PKEY_get0_poly1305() and EVP_PKEY_get0_siphash() as | ||||
|    well as the similarly named "get1" functions behave slightly differently in | ||||
|  | @ -41,7 +45,7 @@ OpenSSL 3.0 | |||
| 
 | ||||
|    For the above reasons the keys returned from these functions should typically | ||||
|    be treated as read-only. To emphasise this the value returned from | ||||
|    EVP_PKEY_get0(), EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(), | ||||
|    EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(), | ||||
|    EVP_PKEY_get0_EC_KEY() and EVP_PKEY_get0_DH() has been made const. This may | ||||
|    break some existing code. Applications broken by this change should be | ||||
|    modified. The preferred solution is to refactor the code to avoid the use of | ||||
|  |  | |||
|  | @ -740,12 +740,15 @@ int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) | |||
| } | ||||
| # endif | ||||
| 
 | ||||
| const void *EVP_PKEY_get0(const EVP_PKEY *pkey) | ||||
| void *EVP_PKEY_get0(const EVP_PKEY *pkey) | ||||
| { | ||||
|     if (pkey == NULL) | ||||
|         return NULL; | ||||
| 
 | ||||
|     return evp_pkey_get_legacy((EVP_PKEY *)pkey); | ||||
|     if (!evp_pkey_is_provided(pkey)) | ||||
|         return pkey->pkey.ptr; | ||||
| 
 | ||||
|     return NULL; | ||||
| } | ||||
| 
 | ||||
| const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len) | ||||
|  | @ -755,9 +758,12 @@ const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len) | |||
|         ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_AN_HMAC_KEY); | ||||
|         return NULL; | ||||
|     } | ||||
|     os = EVP_PKEY_get0(pkey); | ||||
|     *len = os->length; | ||||
|     return os->data; | ||||
|     os = evp_pkey_get_legacy((EVP_PKEY *)pkey); | ||||
|     if (os != NULL) { | ||||
|         *len = os->length; | ||||
|         return os->data; | ||||
|     } | ||||
|     return NULL; | ||||
| } | ||||
| 
 | ||||
| # ifndef OPENSSL_NO_POLY1305 | ||||
|  | @ -768,9 +774,12 @@ const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len) | |||
|         ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_A_POLY1305_KEY); | ||||
|         return NULL; | ||||
|     } | ||||
|     os = EVP_PKEY_get0(pkey); | ||||
|     *len = os->length; | ||||
|     return os->data; | ||||
|     os = evp_pkey_get_legacy((EVP_PKEY *)pkey); | ||||
|     if (os != NULL) { | ||||
|         *len = os->length; | ||||
|         return os->data; | ||||
|     } | ||||
|     return NULL; | ||||
| } | ||||
| # endif | ||||
| 
 | ||||
|  | @ -783,9 +792,12 @@ const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len) | |||
|         ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_A_SIPHASH_KEY); | ||||
|         return NULL; | ||||
|     } | ||||
|     os = EVP_PKEY_get0(pkey); | ||||
|     *len = os->length; | ||||
|     return os->data; | ||||
|     os = evp_pkey_get_legacy((EVP_PKEY *)pkey); | ||||
|     if (os != NULL) { | ||||
|         *len = os->length; | ||||
|         return os->data; | ||||
|     } | ||||
|     return NULL; | ||||
| } | ||||
| # endif | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,8 +8,9 @@ EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH, EVP_PKEY_get0_EC_KEY, | |||
| EVP_PKEY_assign_RSA, EVP_PKEY_assign_DSA, EVP_PKEY_assign_DH, | ||||
| EVP_PKEY_assign_EC_KEY, EVP_PKEY_assign_POLY1305, EVP_PKEY_assign_SIPHASH, | ||||
| EVP_PKEY_get0_hmac, EVP_PKEY_get0_poly1305, EVP_PKEY_get0_siphash, | ||||
| EVP_PKEY_type, EVP_PKEY_id, EVP_PKEY_base_id, EVP_PKEY_set_alias_type, | ||||
| EVP_PKEY_set1_engine, EVP_PKEY_get0_engine - EVP_PKEY assignment functions | ||||
| EVP_PKEY_get0, EVP_PKEY_type, EVP_PKEY_id, EVP_PKEY_base_id, | ||||
| EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine, EVP_PKEY_get0_engine - | ||||
| EVP_PKEY assignment functions | ||||
| 
 | ||||
| =head1 SYNOPSIS | ||||
| 
 | ||||
|  | @ -42,6 +43,7 @@ L<openssl_user_macros(7)>: | |||
|  const DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey); | ||||
|  const DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey); | ||||
|  const EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey); | ||||
|  void *EVP_PKEY_get0(const EVP_PKEY *pkey); | ||||
| 
 | ||||
|  int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key); | ||||
|  int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key); | ||||
|  | @ -100,7 +102,8 @@ are deprecated. Applications should instead use the EVP_PKEY directly where | |||
| possible. If access to the low level key parameters is required then | ||||
| applications should use L<EVP_PKEY_get_params(3)> and other similar functions. | ||||
| To write an EVP_PKEY out use the OSSL_ENCODER APIs (see | ||||
| L<OSSL_ENCODER_CTX_new_for_pkey(3)>). | ||||
| L<OSSL_ENCODER_CTX_new_for_pkey(3)>). EVP_PKEY_get0() returns a pointer to the | ||||
| legacy key or NULL if the key is not legacy. | ||||
| 
 | ||||
| Note that if an EVP_PKEY was not constructed using one of the deprecated | ||||
| functions such as EVP_PKEY_set1_RSA(), EVP_PKEY_set1_DSA(), EVP_PKEY_set1_DH() | ||||
|  |  | |||
|  | @ -1249,7 +1249,7 @@ ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); | |||
| OSSL_DEPRECATEDIN_3_0 | ||||
| int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); | ||||
| OSSL_DEPRECATEDIN_3_0 | ||||
| const void *EVP_PKEY_get0(const EVP_PKEY *pkey); | ||||
| void *EVP_PKEY_get0(const EVP_PKEY *pkey); | ||||
| OSSL_DEPRECATEDIN_3_0 | ||||
| const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); | ||||
| #  ifndef OPENSSL_NO_POLY1305 | ||||
|  |  | |||
|  | @ -411,7 +411,7 @@ static void thread_downgrade_shared_evp_pkey(void) | |||
|      * This test is only relevant for deprecated functions that perform | ||||
|      * downgrading | ||||
|      */ | ||||
|     if (EVP_PKEY_get0(shared_evp_pkey) == NULL) | ||||
|     if (EVP_PKEY_get0_RSA(shared_evp_pkey) == NULL) | ||||
|         multi_success = 0; | ||||
| #else | ||||
|     /* Shouldn't ever get here */ | ||||
|  |  | |||
|  | @ -675,7 +675,6 @@ EVP_PKEY_assign(3) | |||
| EVP_PKEY_decrypt_old(3) | ||||
| EVP_PKEY_delete_attr(3) | ||||
| EVP_PKEY_encrypt_old(3) | ||||
| EVP_PKEY_get0(3) | ||||
| EVP_PKEY_get_attr(3) | ||||
| EVP_PKEY_get_attr_by_NID(3) | ||||
| EVP_PKEY_get_attr_by_OBJ(3) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue