X-Git-Url: https://bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=src%2Fssl%2Fprf.c;h=f04a5fb7c41060d22bb58289d05dc79af97dc54f;hp=43a74c36f015a81308f5197c9ffdfa7c4d36a556;hb=ea95d8264c6aefe742a9c3f4f9d834b188566a29;hpb=3210f38e0491b39aec1ef419cb4114e9483089fb;ds=sidebyside diff --git a/src/ssl/prf.c b/src/ssl/prf.c index 43a74c3..f04a5fb 100644 --- a/src/ssl/prf.c +++ b/src/ssl/prf.c @@ -28,14 +28,14 @@ void br_tls_phash(void *dst, size_t len, const br_hash_class *dig, - const void *secret, size_t secret_len, - const char *label, const void *seed, size_t seed_len) + const void *secret, size_t secret_len, const char *label, + size_t seed_num, const br_tls_prf_seed_chunk *seed) { unsigned char *buf; unsigned char tmp[64], a[64]; br_hmac_key_context kc; br_hmac_context hc; - size_t label_len, hlen; + size_t label_len, hlen, u; if (len == 0) { return; @@ -46,15 +46,17 @@ br_tls_phash(void *dst, size_t len, br_hmac_key_init(&kc, dig, secret, secret_len); br_hmac_init(&hc, &kc, 0); br_hmac_update(&hc, label, label_len); - br_hmac_update(&hc, seed, seed_len); + for (u = 0; u < seed_num; u ++) { + br_hmac_update(&hc, seed[u].data, seed[u].len); + } br_hmac_out(&hc, a); for (;;) { - size_t u; - br_hmac_init(&hc, &kc, 0); br_hmac_update(&hc, a, hlen); br_hmac_update(&hc, label, label_len); - br_hmac_update(&hc, seed, seed_len); + for (u = 0; u < seed_num; u ++) { + br_hmac_update(&hc, seed[u].data, seed[u].len); + } br_hmac_out(&hc, tmp); for (u = 0; u < hlen && u < len; u ++) { buf[u] ^= tmp[u];