diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2016-03-01 14:58:33 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2016-03-02 20:57:32 +0000 |
commit | 4e8cb45c095aaf9317bc62b7787af66217663a48 (patch) | |
tree | 549089a837912eeb00e93c631ed1d03c60ee026e /crypto | |
parent | cd8e4decf79985ffe586c4ccdd35e897f3ac703a (diff) | |
download | openssl-4e8cb45c095aaf9317bc62b7787af66217663a48.tar.gz |
Add string ctrl operations to TLS1 PRF, update documentation.
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/kdf/tls1_prf.c | 27 |
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, |