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;
|
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
|
DECL_PBKDF2(sha1, // _name
|
||||||
64, // _blocksz
|
64, // _blocksz
|
||||||
20, // _hashsz
|
20, // _hashsz
|
||||||
@ -311,7 +370,11 @@ DECL_PBKDF2(sha1, // _name
|
|||||||
mbedtls_sha1_init_start, // _init
|
mbedtls_sha1_init_start, // _init
|
||||||
mbedtls_sha1_update, // _update
|
mbedtls_sha1_update, // _update
|
||||||
mbedtls_internal_sha1_process, // _xform
|
mbedtls_internal_sha1_process, // _xform
|
||||||
|
#if defined(MBEDTLS_SHA1_ALT)
|
||||||
mbedtls_sha1_finish, // _final
|
mbedtls_sha1_finish, // _final
|
||||||
|
#else
|
||||||
|
sha1_finish, // _final
|
||||||
|
#endif
|
||||||
sha1_cpy, // _xcpy
|
sha1_cpy, // _xcpy
|
||||||
sha1_extract, // _xtract
|
sha1_extract, // _xtract
|
||||||
sha1_xor) // _xxor
|
sha1_xor) // _xxor
|
||||||
|
Loading…
Reference in New Issue
Block a user