From 1cc5630207195b3bc9d967596a9a207c1c0f6464 Mon Sep 17 00:00:00 2001 From: bg Date: Fri, 7 Oct 2011 05:11:07 +0200 Subject: [PATCH] now with function --- prf_tls12/prf_tls12.c | 18 ++++++++++++++++++ prf_tls12/prf_tls12.h | 1 + test_src/main-prf_tls12-test.c | 10 +++------- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/prf_tls12/prf_tls12.c b/prf_tls12/prf_tls12.c index 8b84d52..d88ab70 100644 --- a/prf_tls12/prf_tls12.c +++ b/prf_tls12/prf_tls12.c @@ -133,3 +133,21 @@ uint8_t prf_tls12_next(void* dest, prf_tls12_ctx_t* ctx){ return 0; } +uint8_t prf_tls12_fill(void* dest, uint16_t length_B, prf_tls12_ctx_t* ctx){ + uint16_t bs = ctx->blocklength_b/8; + while(length_B>=bs){ + if(prf_tls12_next(dest, ctx)){ + return 1; + } + length_B -= bs; + dest = (uint8_t*)dest + bs; + } + if(length_B){ + uint8_t buffer[bs]; + if(prf_tls12_next(buffer, ctx)){ + return 2; + } + memcpy(dest, buffer, length_B); + } + return 0; +} diff --git a/prf_tls12/prf_tls12.h b/prf_tls12/prf_tls12.h index 759580d..dbd6938 100644 --- a/prf_tls12/prf_tls12.h +++ b/prf_tls12/prf_tls12.h @@ -43,6 +43,7 @@ uint8_t prf_tls12_init_w_label(prf_tls12_ctx_t* ctx, const hfdesc_t* hash, void prf_tls12_free(prf_tls12_ctx_t* ctx); uint8_t prf_tls12_next(void* dest, prf_tls12_ctx_t* ctx); +uint8_t prf_tls12_fill(void* dest, uint16_t length_B, prf_tls12_ctx_t* ctx); #endif /* PRF_TLS12_H_ */ diff --git a/test_src/main-prf_tls12-test.c b/test_src/main-prf_tls12-test.c index 4da039e..b97d8ea 100644 --- a/test_src/main-prf_tls12-test.c +++ b/test_src/main-prf_tls12-test.c @@ -76,17 +76,13 @@ const char test_label[] = "test label"; void test_prf(const hfdesc_t* hash){ prf_tls12_ctx_t ctx; + uint8_t buffer[100]; prf_tls12_init_w_label(&ctx, hash, test_secret, 16*8, test_label, strlen(test_label), test_seed, 16*8); - uint8_t buffer[ctx.blocklength_b/8]; - uint16_t i=0; cli_putstr("\r\n== Testing PRF-TLSv1.2 with "); cli_putstr(hash->name); cli_putstr(" ==\r\n"); - do{ - prf_tls12_next(buffer, &ctx); - cli_hexdump_block(buffer, ctx.blocklength_b/8, 4, 8); - i += ctx.blocklength_b/8; - }while(i<100); + prf_tls12_fill(buffer, 100, &ctx); + cli_hexdump_block(buffer, 100, 4, 8); prf_tls12_free(&ctx); }