summaryrefslogtreecommitdiffstats
path: root/crypto/kdf
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2016-03-01 14:58:33 +0000
committerDr. Stephen Henson <steve@openssl.org>2016-03-02 20:57:32 +0000
commit4e8cb45c095aaf9317bc62b7787af66217663a48 (patch)
tree549089a837912eeb00e93c631ed1d03c60ee026e /crypto/kdf
parentcd8e4decf79985ffe586c4ccdd35e897f3ac703a (diff)
Add string ctrl operations to TLS1 PRF, update documentation.
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto/kdf')
-rw-r--r--crypto/kdf/tls1_prf.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/crypto/kdf/tls1_prf.c b/crypto/kdf/tls1_prf.c
index 374c6e49ec..1302eb0927 100644
--- a/crypto/kdf/tls1_prf.c
+++ b/crypto/kdf/tls1_prf.c
@@ -138,6 +138,31 @@ static int pkey_tls1_prf_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
}
}
+static int pkey_tls1_prf_ctrl_str(EVP_PKEY_CTX *ctx,
+ const char *type, const char *value)
+{
+ if (value == NULL)
+ return 0;
+ if (strcmp(type, "md") == 0) {
+ TLS1_PRF_PKEY_CTX *kctx = ctx->data;
+
+ const EVP_MD *md = EVP_get_digestbyname(value);
+ if (md == NULL)
+ return 0;
+ kctx->md = md;
+ return 1;
+ }
+ if (strcmp(type, "secret") == 0)
+ return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_TLS_SECRET, value);
+ if (strcmp(type, "hexsecret") == 0)
+ return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_TLS_SECRET, value);
+ if (strcmp(type, "seed") == 0)
+ return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_TLS_SEED, value);
+ if (strcmp(type, "hexseed") == 0)
+ return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_TLS_SEED, value);
+ return -2;
+}
+
static int pkey_tls1_prf_derive(EVP_PKEY_CTX *ctx, unsigned char *key,
size_t *keylen)
{
@@ -176,7 +201,7 @@ const EVP_PKEY_METHOD tls1_prf_pkey_meth = {
0,
pkey_tls1_prf_derive,
pkey_tls1_prf_ctrl,
- 0
+ pkey_tls1_prf_ctrl_str
};
static int tls1_prf_P_hash(const EVP_MD *md,