mirror of https://github.com/openssl/openssl.git
				
				
				
			Bugfixes for params to legacy control translations for EC parameters
param->ctrl translation: Fix fix_ecdh_cofactor()
In POST_PARAMS_TO_CTRL state the fix_ecdh_cofactor() function should
return value in ctx->p1
param->ctrl translation: fix evp_pkey_ctx_setget_params_to_ctrl
 return
Since some of the ctrl operations may return 0 as valid value
(e.g. ecdh_cofactor value 0 is valid setting), before colling
POST_PARAMS_TO_CTRL, we need to check return value for 0 as well
otherwise the evp_pkey_ctx_setget_params_to_ctrl function fails
without a chance to fix the return value
param->ctrl translation: Set ecdh_cofactor default action_type GET
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22587)
(cherry picked from commit 2aaef03339)
			
			
This commit is contained in:
		
							parent
							
								
									e02db8e16e
								
							
						
					
					
						commit
						690b24d6c0
					
				|  | @ -1208,6 +1208,8 @@ static int fix_ecdh_cofactor(enum state state, | |||
|         /* The initial value for |ctx->action_type| must not be zero. */ | ||||
|         if (!ossl_assert(ctx->action_type != NONE)) | ||||
|             return 0; | ||||
|     } else if (state == POST_PARAMS_TO_CTRL && ctx->action_type == NONE) { | ||||
|         ctx->action_type = GET; | ||||
|     } | ||||
| 
 | ||||
|     if ((ret = default_check(state, translation, ctx)) <= 0) | ||||
|  | @ -1233,6 +1235,8 @@ static int fix_ecdh_cofactor(enum state state, | |||
|         } | ||||
|     } else if (state == PRE_PARAMS_TO_CTRL && ctx->action_type == GET) { | ||||
|         ctx->p1 = -2; | ||||
|     } else if (state == POST_PARAMS_TO_CTRL && ctx->action_type == GET) { | ||||
|         ctx->p1 = ret; | ||||
|     } | ||||
| 
 | ||||
|     return ret; | ||||
|  | @ -2868,8 +2872,14 @@ static int evp_pkey_ctx_setget_params_to_ctrl(EVP_PKEY_CTX *pctx, | |||
|         /*
 | ||||
|          * In POST, we pass the return value as p1, allowing the fixup_args | ||||
|          * function to put it to good use, or maybe affect it. | ||||
|          * | ||||
|          * NOTE: even though EVP_PKEY_CTX_ctrl return value is documented | ||||
|          * as return positive on Success and 0 or negative on falure. There | ||||
|          * maybe parameters (e.g. ecdh_cofactor), which actually return 0 | ||||
|          * as success value. That is why we do POST_PARAMS_TO_CTRL for 0 | ||||
|          * value as well | ||||
|          */ | ||||
|         if (ret > 0) { | ||||
|         if (ret >= 0) { | ||||
|             ctx.p1 = ret; | ||||
|             fixup(POST_PARAMS_TO_CTRL, translation, &ctx); | ||||
|             ret = ctx.p1; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue