mirror of https://github.com/openssl/openssl.git
				
				
				
			Params: add argument to the _from_text calls to indicate if the param exists.
The extra argument is a integer pointer and is optional. Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/11049)
This commit is contained in:
		
							parent
							
								
									7b5108dff4
								
							
						
					
					
						commit
						2ee0dfa684
					
				|  | @ -2708,7 +2708,7 @@ OSSL_PARAM *app_params_new_from_opts(STACK_OF(OPENSSL_STRING) *opts, | |||
|         /* Skip over the separator so that vmtp points to the value */ | ||||
|         vtmp++; | ||||
|         if (!OSSL_PARAM_allocate_from_text(¶ms[params_n], paramdefs, | ||||
|                                            stmp, vtmp, strlen(vtmp))) | ||||
|                                            stmp, vtmp, strlen(vtmp), NULL)) | ||||
|             goto err; | ||||
|         OPENSSL_free(stmp); | ||||
|     } | ||||
|  |  | |||
|  | @ -224,7 +224,7 @@ static int pkey_kdf_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, | |||
|         type = OSSL_KDF_PARAM_SCRYPT_N; | ||||
| 
 | ||||
|     if (!OSSL_PARAM_allocate_from_text(¶ms[0], defs, type, | ||||
|                                        value, strlen(value))) | ||||
|                                        value, strlen(value), NULL)) | ||||
|         return 0; | ||||
| 
 | ||||
|     /*
 | ||||
|  |  | |||
|  | @ -453,7 +453,7 @@ static int pkey_mac_ctrl_str(EVP_PKEY_CTX *ctx, | |||
| 
 | ||||
|     if (!OSSL_PARAM_allocate_from_text(¶ms[0], | ||||
|                                        EVP_MAC_settable_ctx_params(mac), | ||||
|                                        type, value, strlen(value) + 1)) | ||||
|                                        type, value, strlen(value) + 1, NULL)) | ||||
|         return 0; | ||||
|     params[1] = OSSL_PARAM_construct_end(); | ||||
|     ok = EVP_MAC_CTX_set_params(hctx->ctx, params); | ||||
|  |  | |||
|  | @ -940,7 +940,7 @@ static int legacy_ctrl_str_to_param(EVP_PKEY_CTX *ctx, const char *name, | |||
|         int rv = 0; | ||||
| 
 | ||||
|         if (!OSSL_PARAM_allocate_from_text(¶ms[0], settable, name, value, | ||||
|                                            strlen(value))) | ||||
|                                            strlen(value), NULL)) | ||||
|             return 0; | ||||
|         if (EVP_PKEY_CTX_set_params(ctx, params)) | ||||
|             rv = 1; | ||||
|  |  | |||
|  | @ -24,7 +24,7 @@ static int prepare_from_text(const OSSL_PARAM *paramdefs, const char *key, | |||
|                              const char *value, size_t value_n, | ||||
|                              /* Output parameters */ | ||||
|                              const OSSL_PARAM **paramdef, int *ishex, | ||||
|                              size_t *buf_n, BIGNUM **tmpbn) | ||||
|                              size_t *buf_n, BIGNUM **tmpbn, int *found) | ||||
| { | ||||
|     const OSSL_PARAM *p; | ||||
| 
 | ||||
|  | @ -38,6 +38,8 @@ static int prepare_from_text(const OSSL_PARAM *paramdefs, const char *key, | |||
|         key += 3; | ||||
| 
 | ||||
|     p = *paramdef = OSSL_PARAM_locate_const(paramdefs, key); | ||||
|     if (found != NULL) | ||||
|         *found = p != NULL; | ||||
|     if (p == NULL) | ||||
|         return 0; | ||||
| 
 | ||||
|  | @ -163,7 +165,7 @@ static int construct_from_text(OSSL_PARAM *to, const OSSL_PARAM *paramdef, | |||
| int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, | ||||
|                                   const OSSL_PARAM *paramdefs, | ||||
|                                   const char *key, const char *value, | ||||
|                                   size_t value_n) | ||||
|                                   size_t value_n, int *found) | ||||
| { | ||||
|     const OSSL_PARAM *paramdef = NULL; | ||||
|     int ishex = 0; | ||||
|  | @ -176,7 +178,7 @@ int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, | |||
|         return 0; | ||||
| 
 | ||||
|     if (!prepare_from_text(paramdefs, key, value, value_n, | ||||
|                            ¶mdef, &ishex, &buf_n, &tmpbn)) | ||||
|                            ¶mdef, &ishex, &buf_n, &tmpbn, found)) | ||||
|         return 0; | ||||
| 
 | ||||
|     if ((buf = OPENSSL_zalloc(buf_n > 0 ? buf_n : 1)) == NULL) { | ||||
|  |  | |||
|  | @ -12,7 +12,8 @@ OSSL_PARAM_allocate_from_text | |||
|  int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, | ||||
|                                    const OSSL_PARAM *paramdefs, | ||||
|                                    const char *key, const char *value, | ||||
|                                    size_t value_n); | ||||
|                                    size_t value_n, | ||||
|                                    int *found); | ||||
| 
 | ||||
| =head1 DESCRIPTION | ||||
| 
 | ||||
|  | @ -37,6 +38,9 @@ left untouched, allowing a caller to find out how large the buffer | |||
| should be. | ||||
| I<buf> needs to be correctly aligned for the type of the B<OSSL_PARAM> | ||||
| I<key>. | ||||
| If <found> is not NULL, it is set to 1 if the parameter can be located and | ||||
| to 0 otherwise. | ||||
| 
 | ||||
| The caller must remember to free the data of I<to> when it's not | ||||
| useful any more. | ||||
| 
 | ||||
|  | @ -127,7 +131,7 @@ Can be written like this instead: | |||
|       *vtmp++ = '\0'; | ||||
|       if (!OSSL_PARAM_allocate_from_text(¶ms[params_n], | ||||
|                                          paramdefs, stmp, | ||||
|                                          vtmp, strlen(vtmp))) | ||||
|                                          vtmp, strlen(vtmp), NULL)) | ||||
|           goto err; | ||||
|   } | ||||
|   params[params_n] = OSSL_PARAM_construct_end(); | ||||
|  |  | |||
|  | @ -92,7 +92,7 @@ OSSL_PARAM OSSL_PARAM_construct_end(void); | |||
| int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, | ||||
|                                   const OSSL_PARAM *paramdefs, | ||||
|                                   const char *key, const char *value, | ||||
|                                   size_t value_n); | ||||
|                                   size_t value_n, int *found); | ||||
| 
 | ||||
| int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val); | ||||
| int OSSL_PARAM_get_uint(const OSSL_PARAM *p, unsigned int *val); | ||||
|  |  | |||
|  | @ -167,7 +167,7 @@ static int self_test_kdf(const ST_KAT_KDF *t, OSSL_ST_EVENT *event, | |||
|         if (!OSSL_PARAM_allocate_from_text(¶ms[i], settables, | ||||
|                                            t->ctrls[i].name, | ||||
|                                            t->ctrls[i].value, | ||||
|                                            strlen(t->ctrls[i].value))) | ||||
|                                            strlen(t->ctrls[i].value), NULL)) | ||||
|             goto end; | ||||
|     } | ||||
|     if (!EVP_KDF_CTX_set_params(ctx, params)) | ||||
|  |  | |||
|  | @ -1310,7 +1310,7 @@ static int mac_test_run_mac(EVP_TEST *t) | |||
|             || !OSSL_PARAM_allocate_from_text(¶ms[params_n], | ||||
|                                               defined_params, | ||||
|                                               tmpkey, tmpval, | ||||
|                                               strlen(tmpval))) { | ||||
|                                               strlen(tmpval), NULL)) { | ||||
|             OPENSSL_free(tmpkey); | ||||
|             t->err = "MAC_PARAM_ERROR"; | ||||
|             goto err; | ||||
|  | @ -2129,7 +2129,7 @@ static int kdf_test_ctrl(EVP_TEST *t, EVP_KDF_CTX *kctx, | |||
|         *p++ = '\0'; | ||||
| 
 | ||||
|     rv = OSSL_PARAM_allocate_from_text(kdata->p, defs, name, p, | ||||
|                                        p != NULL ? strlen(p) : 0); | ||||
|                                        p != NULL ? strlen(p) : 0, NULL); | ||||
|     *++kdata->p = OSSL_PARAM_construct_end(); | ||||
|     if (!rv) { | ||||
|         t->err = "KDF_PARAM_ERROR"; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue