From: Dr. Stephen Henson Date: Tue, 1 Mar 2016 14:47:15 +0000 (+0000) Subject: EVP_PKEY_CTX utility functions. X-Git-Tag: OpenSSL_1_1_0-pre4~395 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=99119000add47e4d1d9241f4e76f57d98439a766 EVP_PKEY_CTX utility functions. Utility functions to pass a string or hex string to EVP_PKEY_CTX_ctrl(). Reviewed-by: Rich Salz --- diff --git a/crypto/evp/pmeth_lib.c b/crypto/evp/pmeth_lib.c index 72baaa988d..44a6a05249 100644 --- a/crypto/evp/pmeth_lib.c +++ b/crypto/evp/pmeth_lib.c @@ -63,8 +63,10 @@ # include #endif #include +#include #include "internal/asn1_int.h" #include "internal/evp_int.h" +#include "internal/numbers.h" typedef int sk_cmp_fn_type(const char *const *a, const char *const *b); @@ -381,6 +383,33 @@ int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, return ctx->pmeth->ctrl_str(ctx, name, value); } +/* Utility functions to send a string of hex string to a ctrl */ + +int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str) +{ + size_t len; + + len = strlen(str); + if (len > INT_MAX) + return -1; + return ctx->pmeth->ctrl(ctx, cmd, len, (void *)str); +} + +int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex) +{ + unsigned char *bin; + long binlen; + int rv = -1; + + bin = string_to_hex(hex, &binlen); + if (bin == NULL) + return 0; + if (binlen <= INT_MAX) + rv = ctx->pmeth->ctrl(ctx, cmd, binlen, bin); + OPENSSL_free(bin); + return rv; +} + int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx) { return ctx->operation; diff --git a/include/openssl/evp.h b/include/openssl/evp.h index d71429e1d5..44ca1f36c4 100644 --- a/include/openssl/evp.h +++ b/include/openssl/evp.h @@ -1224,6 +1224,9 @@ int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value); +int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); +int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); + int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen);