mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-06 16:36:16 +08:00
Update HKDF API
This commit is contained in:
@@ -32,9 +32,9 @@ int hkdf_expand(const DIGEST *digest, const uint8_t *prk, size_t prklen,
|
|||||||
|
|
||||||
int sm3_hkdf_extract(const uint8_t *salt, size_t saltlen,
|
int sm3_hkdf_extract(const uint8_t *salt, size_t saltlen,
|
||||||
const uint8_t *ikm, size_t ikmlen,
|
const uint8_t *ikm, size_t ikmlen,
|
||||||
uint8_t *prk, size_t *prklen);
|
uint8_t prk[32]);
|
||||||
|
|
||||||
int sm3_hkdf_expand(const uint8_t *prk, size_t prklen,
|
int sm3_hkdf_expand(const uint8_t prk[32],
|
||||||
const uint8_t *opt_info, size_t opt_infolen,
|
const uint8_t *opt_info, size_t opt_infolen,
|
||||||
size_t L, uint8_t *okm);
|
size_t L, uint8_t *okm);
|
||||||
|
|
||||||
|
|||||||
49
src/hkdf.c
49
src/hkdf.c
@@ -123,36 +123,26 @@ int hkdf_expand(const DIGEST *digest, const uint8_t *prk, size_t prklen,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
int sm3_hkdf_extract(const uint8_t *salt, size_t saltlen,
|
int sm3_hkdf_extract(const uint8_t *salt, size_t saltlen,
|
||||||
const uint8_t *ikm, size_t ikmlen,
|
const uint8_t *ikm, size_t ikmlen,
|
||||||
uint8_t *prk, size_t *prklen)
|
uint8_t prk[32])
|
||||||
{
|
{
|
||||||
SM3_HMAC_CTX hmac_ctx;
|
SM3_HMAC_CTX hmac_ctx;
|
||||||
|
|
||||||
if (!salt || saltlen == 0) {
|
if (!salt || saltlen == 0) {
|
||||||
uint8_t zeros[SM3_HMAC_SIZE] = {0};
|
uint8_t zeros[SM3_HMAC_SIZE] = {0};
|
||||||
if (sm3_hmac_init(&hmac_ctx, zeros, SM3_HMAC_SIZE) != 1) {
|
sm3_hmac_init(&hmac_ctx, zeros, SM3_HMAC_SIZE);
|
||||||
error_print();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (sm3_hmac_init(&hmac_ctx, salt, saltlen) != 1) {
|
sm3_hmac_init(&hmac_ctx, salt, saltlen);
|
||||||
error_print();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sm3_hmac_update(&hmac_ctx, ikm, ikmlen) != 1
|
sm3_hmac_update(&hmac_ctx, ikm, ikmlen);
|
||||||
|| sm3_hmac_finish(&hmac_ctx, prk) != 1) {
|
sm3_hmac_finish(&hmac_ctx, prk);
|
||||||
error_print();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*prklen = SM3_HMAC_SIZE;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sm3_hkdf_expand(const uint8_t *prk, size_t prklen,
|
// the expand can only be called once, if we want to expand multi times, the API should be changed
|
||||||
|
int sm3_hkdf_expand(const uint8_t prk[32],
|
||||||
const uint8_t *opt_info, size_t opt_infolen,
|
const uint8_t *opt_info, size_t opt_infolen,
|
||||||
size_t L, uint8_t *okm)
|
size_t L, uint8_t *okm)
|
||||||
{
|
{
|
||||||
@@ -162,13 +152,10 @@ int sm3_hkdf_expand(const uint8_t *prk, size_t prklen,
|
|||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
if (L > 0) {
|
if (L > 0) {
|
||||||
if (sm3_hmac_init(&hmac_ctx, prk, prklen) != 1
|
sm3_hmac_init(&hmac_ctx, prk, 32);
|
||||||
|| sm3_hmac_update(&hmac_ctx, opt_info, opt_infolen) < 0
|
sm3_hmac_update(&hmac_ctx, opt_info, opt_infolen);
|
||||||
|| sm3_hmac_update(&hmac_ctx, &counter, 1) != 1
|
sm3_hmac_update(&hmac_ctx, &counter, 1);
|
||||||
|| sm3_hmac_finish(&hmac_ctx, T) != 1) {
|
sm3_hmac_finish(&hmac_ctx, T);
|
||||||
error_print();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
counter++;
|
counter++;
|
||||||
len = SM3_HMAC_SIZE;
|
len = SM3_HMAC_SIZE;
|
||||||
if (len > L) {
|
if (len > L) {
|
||||||
@@ -183,14 +170,11 @@ int sm3_hkdf_expand(const uint8_t *prk, size_t prklen,
|
|||||||
error_print();
|
error_print();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (sm3_hmac_init(&hmac_ctx, digest, prk, prklen) != 1
|
sm3_hmac_init(&hmac_ctx, prk, 32);
|
||||||
|| sm3_hmac_update(&hmac_ctx, T, len) != 1
|
sm3_hmac_update(&hmac_ctx, T, len);
|
||||||
|| sm3_hmac_update(&hmac_ctx, opt_info, opt_infolen) < 0
|
sm3_hmac_update(&hmac_ctx, opt_info, opt_infolen);
|
||||||
|| sm3_hmac_update(&hmac_ctx, &counter, 1) != 1
|
sm3_hmac_update(&hmac_ctx, &counter, 1);
|
||||||
|| sm3_hmac_finish(&hmac_ctx, T) != 1) {
|
sm3_hmac_finish(&hmac_ctx, T);
|
||||||
error_print();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
counter++;
|
counter++;
|
||||||
len = SM3_HMAC_SIZE;
|
len = SM3_HMAC_SIZE;
|
||||||
if (len > L) {
|
if (len > L) {
|
||||||
@@ -202,4 +186,3 @@ int sm3_hkdf_expand(const uint8_t *prk, size_t prklen,
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|||||||
Reference in New Issue
Block a user