コード例 #1
0
void mbedtls_sha256_free(mbedtls_sha256_context *ctx)
{
    if (ctx == NULL) {
        return;
    }

    if (ctx->ishw) {
        mbedtls_sha256_hw_free(&ctx->hw_ctx);
        crypto_sha_release();
    }
    else {
        mbedtls_sha256_sw_free(&ctx->sw_ctx);
    }
}
コード例 #2
0
ファイル: sha_alt_hw.c プロジェクト: dinau/mbed
void mbedtls_sha256_hw_finish(crypto_sha_context *ctx, unsigned char output[32])
{
    // 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 ? 28 : 32);
    
        CRPT->SHA_CTL |= CRPT_SHA_CTL_STOP_Msk;
    }
    else {
        mbedtls_sha256_sw_context ctx_sw;
    
        mbedtls_sha256_sw_init(&ctx_sw);
        mbedtls_sha256_sw_starts(&ctx_sw, ctx->is224);
        mbedtls_sha256_sw_finish(&ctx_sw, output);
        mbedtls_sha256_sw_free(&ctx_sw);
    }
}