Exemple #1
0
/*
 * SHA-512 context setup
 */
int mbedtls_sha512_starts_ret(mbedtls_sha512_context *ctx, int is384)
{
    if (ctx->active_ctx == &ctx->hw_ctx) {
        mbedtls_sha512_hw_starts(&ctx->hw_ctx, is384);
    } else if (ctx->active_ctx == &ctx->sw_ctx) {
        mbedtls_sha512_sw_starts(&ctx->sw_ctx, is384);
    }
    return 0;
}
Exemple #2
0
void mbedtls_sha512_hw_finish(crypto_sha_context *ctx, unsigned char output[64])
{
    // H/W SHA cannot handle zero data well. Fall back to S/W SHA.
    if (ctx->total) {
        crypto_sha_update_nobuf(ctx, ctx->buffer, ctx->buffer_left, 1);
        ctx->buffer_left = 0;
        crypto_sha_getinternstate(output, ctx->is224_384 ? 48 : 64);
    
        CRPT->HMAC_CTL |= CRPT_HMAC_CTL_STOP_Msk;
    }
    else {
        mbedtls_sha512_sw_context ctx_sw;
    
        mbedtls_sha512_sw_init(&ctx_sw);
        mbedtls_sha512_sw_starts(&ctx_sw, ctx->is224_384);
        mbedtls_sha512_sw_finish(&ctx_sw, output);
        mbedtls_sha512_sw_free(&ctx_sw);
    }
}