mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
fix(wpa_supplicant): implement sha1_finish for fastpbkdf2
This commit is contained in:
parent
8c6114d0d2
commit
99e7db4ce5
@ -304,6 +304,65 @@ static int mbedtls_sha1_init_start(mbedtls_sha1_context *ctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef MBEDTLS_SHA1_ALT
|
||||
static int sha1_finish(mbedtls_sha1_context *ctx,
|
||||
unsigned char output[20])
|
||||
{
|
||||
int ret = -1;
|
||||
uint32_t used;
|
||||
uint32_t high, low;
|
||||
|
||||
/*
|
||||
* Add padding: 0x80 then 0x00 until 8 bytes remain for the length
|
||||
*/
|
||||
used = ctx->MBEDTLS_PRIVATE(total)[0] & 0x3F;
|
||||
|
||||
ctx->MBEDTLS_PRIVATE(buffer)[used++] = 0x80;
|
||||
|
||||
if (used <= 56) {
|
||||
/* Enough room for padding + length in current block */
|
||||
memset(ctx->MBEDTLS_PRIVATE(buffer) + used, 0, 56 - used);
|
||||
} else {
|
||||
/* We'll need an extra block */
|
||||
memset(ctx->MBEDTLS_PRIVATE(buffer) + used, 0, 64 - used);
|
||||
|
||||
if ((ret = mbedtls_internal_sha1_process(ctx, ctx->MBEDTLS_PRIVATE(buffer))) != 0) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
memset(ctx->MBEDTLS_PRIVATE(buffer), 0, 56);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add message length
|
||||
*/
|
||||
high = (ctx->MBEDTLS_PRIVATE(total)[0] >> 29)
|
||||
| (ctx->MBEDTLS_PRIVATE(total)[1] << 3);
|
||||
low = (ctx->MBEDTLS_PRIVATE(total)[0] << 3);
|
||||
|
||||
write32_be(high, ctx->MBEDTLS_PRIVATE(buffer) + 56);
|
||||
write32_be(low, ctx->MBEDTLS_PRIVATE(buffer) + 60);
|
||||
|
||||
if ((ret = mbedtls_internal_sha1_process(ctx, ctx->MBEDTLS_PRIVATE(buffer))) != 0) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/*
|
||||
* Output final state
|
||||
*/
|
||||
write32_be(ctx->MBEDTLS_PRIVATE(state)[0], output);
|
||||
write32_be(ctx->MBEDTLS_PRIVATE(state)[1], output + 4);
|
||||
write32_be(ctx->MBEDTLS_PRIVATE(state)[2], output + 8);
|
||||
write32_be(ctx->MBEDTLS_PRIVATE(state)[3], output + 12);
|
||||
write32_be(ctx->MBEDTLS_PRIVATE(state)[4], output + 16);
|
||||
|
||||
ret = 0;
|
||||
|
||||
exit:
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
DECL_PBKDF2(sha1, // _name
|
||||
64, // _blocksz
|
||||
20, // _hashsz
|
||||
@ -311,7 +370,11 @@ DECL_PBKDF2(sha1, // _name
|
||||
mbedtls_sha1_init_start, // _init
|
||||
mbedtls_sha1_update, // _update
|
||||
mbedtls_internal_sha1_process, // _xform
|
||||
#if defined(MBEDTLS_SHA1_ALT)
|
||||
mbedtls_sha1_finish, // _final
|
||||
#else
|
||||
sha1_finish, // _final
|
||||
#endif
|
||||
sha1_cpy, // _xcpy
|
||||
sha1_extract, // _xtract
|
||||
sha1_xor) // _xxor
|
||||
|
Loading…
Reference in New Issue
Block a user