]>
git.ipfire.org Git - thirdparty/openssl.git/blob - test/pkey_meth_kdf_test.c
2 * Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
10 /* Tests of the EVP_PKEY_CTX_set_* macro family */
15 #include <openssl/evp.h>
16 #include <openssl/kdf.h>
19 static int test_kdf_tls1_prf(void)
23 unsigned char out
[16];
24 size_t outlen
= sizeof(out
);
26 if ((pctx
= EVP_PKEY_CTX_new_id(EVP_PKEY_TLS1_PRF
, NULL
)) == NULL
) {
27 TEST_error("EVP_PKEY_TLS1_PRF");
30 if (EVP_PKEY_derive_init(pctx
) <= 0) {
31 TEST_error("EVP_PKEY_derive_init");
34 if (EVP_PKEY_CTX_set_tls1_prf_md(pctx
, EVP_sha256()) <= 0) {
35 TEST_error("EVP_PKEY_CTX_set_tls1_prf_md");
38 if (EVP_PKEY_CTX_set1_tls1_prf_secret(pctx
,
39 (unsigned char *)"secret", 6) <= 0) {
40 TEST_error("EVP_PKEY_CTX_set1_tls1_prf_secret");
43 if (EVP_PKEY_CTX_add1_tls1_prf_seed(pctx
,
44 (unsigned char *)"seed", 4) <= 0) {
45 TEST_error("EVP_PKEY_CTX_add1_tls1_prf_seed");
48 if (EVP_PKEY_derive(pctx
, out
, &outlen
) <= 0) {
49 TEST_error("EVP_PKEY_derive");
54 const unsigned char expected
[sizeof(out
)] = {
55 0x8e, 0x4d, 0x93, 0x25, 0x30, 0xd7, 0x65, 0xa0,
56 0xaa, 0xe9, 0x74, 0xc3, 0x04, 0x73, 0x5e, 0xcc
58 if (!TEST_mem_eq(out
, sizeof(out
), expected
, sizeof(expected
))) {
64 EVP_PKEY_CTX_free(pctx
);
68 static int test_kdf_hkdf(void)
72 unsigned char out
[10];
73 size_t outlen
= sizeof(out
);
75 if ((pctx
= EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF
, NULL
)) == NULL
) {
76 TEST_error("EVP_PKEY_HKDF");
79 if (EVP_PKEY_derive_init(pctx
) <= 0) {
80 TEST_error("EVP_PKEY_derive_init");
83 if (EVP_PKEY_CTX_set_hkdf_md(pctx
, EVP_sha256()) <= 0) {
84 TEST_error("EVP_PKEY_CTX_set_hkdf_md");
87 if (EVP_PKEY_CTX_set1_hkdf_salt(pctx
, (const unsigned char *)"salt", 4)
89 TEST_error("EVP_PKEY_CTX_set1_hkdf_salt");
92 if (EVP_PKEY_CTX_set1_hkdf_key(pctx
, (const unsigned char *)"secret", 6)
94 TEST_error("EVP_PKEY_CTX_set1_hkdf_key");
97 if (EVP_PKEY_CTX_add1_hkdf_info(pctx
, (const unsigned char *)"label", 5)
99 TEST_error("EVP_PKEY_CTX_set1_hkdf_info");
102 if (EVP_PKEY_derive(pctx
, out
, &outlen
) <= 0) {
103 TEST_error("EVP_PKEY_derive");
108 const unsigned char expected
[sizeof(out
)] = {
109 0x2a, 0xc4, 0x36, 0x9f, 0x52, 0x59, 0x96, 0xf8, 0xde, 0x13
111 if (!TEST_mem_eq(out
, sizeof(out
), expected
, sizeof(expected
))) {
117 EVP_PKEY_CTX_free(pctx
);
121 #ifndef OPENSSL_NO_SCRYPT
122 static int test_kdf_scrypt(void)
126 unsigned char out
[64];
127 size_t outlen
= sizeof(out
);
129 if ((pctx
= EVP_PKEY_CTX_new_id(EVP_PKEY_SCRYPT
, NULL
)) == NULL
) {
130 TEST_error("EVP_PKEY_SCRYPT");
133 if (EVP_PKEY_derive_init(pctx
) <= 0) {
134 TEST_error("EVP_PKEY_derive_init");
137 if (EVP_PKEY_CTX_set1_pbe_pass(pctx
, "password", 8) <= 0) {
138 TEST_error("EVP_PKEY_CTX_set1_pbe_pass");
141 if (EVP_PKEY_CTX_set1_scrypt_salt(pctx
, (unsigned char *)"NaCl", 4) <= 0) {
142 TEST_error("EVP_PKEY_CTX_set1_scrypt_salt");
145 if (EVP_PKEY_CTX_set_scrypt_N(pctx
, 1024) <= 0) {
146 TEST_error("EVP_PKEY_CTX_set_scrypt_N");
149 if (EVP_PKEY_CTX_set_scrypt_r(pctx
, 8) <= 0) {
150 TEST_error("EVP_PKEY_CTX_set_scrypt_r");
153 if (EVP_PKEY_CTX_set_scrypt_p(pctx
, 16) <= 0) {
154 TEST_error("EVP_PKEY_CTX_set_scrypt_p");
157 if (EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx
, 16) <= 0) {
158 TEST_error("EVP_PKEY_CTX_set_maxmem_bytes");
161 if (EVP_PKEY_derive(pctx
, out
, &outlen
) > 0) {
162 TEST_error("EVP_PKEY_derive should have failed");
165 if (EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx
, 10 * 1024 * 1024) <= 0) {
166 TEST_error("EVP_PKEY_CTX_set_maxmem_bytes");
169 if (EVP_PKEY_derive(pctx
, out
, &outlen
) <= 0) {
170 TEST_error("EVP_PKEY_derive");
175 const unsigned char expected
[sizeof(out
)] = {
176 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00,
177 0x78, 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe,
178 0x7c, 0x6a, 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30,
179 0xe7, 0x73, 0x76, 0x63, 0x4b, 0x37, 0x31, 0x62,
180 0x2e, 0xaf, 0x30, 0xd9, 0x2e, 0x22, 0xa3, 0x88,
181 0x6f, 0xf1, 0x09, 0x27, 0x9d, 0x98, 0x30, 0xda,
182 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, 0xee, 0x6d,
183 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, 0x40
185 if (!TEST_mem_eq(out
, sizeof(out
), expected
, sizeof(expected
))) {
191 EVP_PKEY_CTX_free(pctx
);
196 int setup_tests(void)
198 ADD_TEST(test_kdf_tls1_prf
);
199 ADD_TEST(test_kdf_hkdf
);
200 #ifndef OPENSSL_NO_SCRYPT
201 ADD_TEST(test_kdf_scrypt
);