16f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. 26f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler * Use of this source code is governed by a BSD-style license that can be 36f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler * found in the LICENSE file. 46f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler * 56f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler * Tests for misc library 66f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler */ 76f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 86f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include <stdio.h> 96f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 106f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include "2sysincludes.h" 116f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include "2api.h" 126f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include "2misc.h" 136f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include "2nvstorage.h" 146f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include "2rsa.h" 156f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include "2secdata.h" 166f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include "vb2_common.h" 176f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler#include "test_common.h" 186f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 196f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler/* Common context for tests */ 206f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic uint8_t workbuf[VB2_WORKBUF_RECOMMENDED_SIZE] 2173e5eb38821d693244f841ce4f0a14546e5b6361Bill Richardson __attribute__ ((aligned (VB2_WORKBUF_ALIGN))); 226f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic struct vb2_context cc; 236f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic struct vb2_shared_data *sd; 246f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 256f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerconst char mock_body[320] = "Mock body"; 266f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerconst int mock_body_size = sizeof(mock_body); 276f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerconst int mock_algorithm = VB2_ALG_RSA2048_SHA256; 286f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerconst int mock_hash_alg = VB2_HASH_SHA256; 296f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerconst int mock_sig_size = 64; 306f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 316f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler/* Mocked function data */ 326f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 33f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Wernerstatic enum { 34f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner HWCRYPTO_DISABLED, 35f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner HWCRYPTO_ENABLED, 36f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner HWCRYPTO_FORBIDDEN, 37f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner} hwcrypto_state; 38f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 396f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic int retval_vb2_load_fw_keyblock; 406f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic int retval_vb2_load_fw_preamble; 416f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic int retval_vb2_digest_finalize; 426f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic int retval_vb2_verify_digest; 436f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 446f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler/* Type of test to reset for */ 456f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerenum reset_type { 466f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler FOR_MISC, 476f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler FOR_EXTEND_HASH, 486f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler FOR_CHECK_HASH, 496f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler}; 506f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 516f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic void reset_common_data(enum reset_type t) 526f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 536f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler struct vb2_fw_preamble *pre; 546f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler struct vb2_packed_key *k; 556f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 566f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler memset(workbuf, 0xaa, sizeof(workbuf)); 576f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 586f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler memset(&cc, 0, sizeof(cc)); 596f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler cc.workbuf = workbuf; 606f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler cc.workbuf_size = sizeof(workbuf); 616f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 626f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler vb2_init_context(&cc); 636f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd = vb2_get_sd(&cc); 646f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 656f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler vb2_nv_init(&cc); 666f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 676f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler vb2_secdata_create(&cc); 686f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler vb2_secdata_init(&cc); 696f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 706f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler retval_vb2_load_fw_keyblock = VB2_SUCCESS; 716f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler retval_vb2_load_fw_preamble = VB2_SUCCESS; 726f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler retval_vb2_digest_finalize = VB2_SUCCESS; 736f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler retval_vb2_verify_digest = VB2_SUCCESS; 746f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 756f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_preamble_offset = cc.workbuf_used; 766f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_preamble_size = sizeof(*pre); 776f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler cc.workbuf_used = sd->workbuf_preamble_offset 786f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler + sd->workbuf_preamble_size; 796f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler pre = (struct vb2_fw_preamble *) 806f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler (cc.workbuf + sd->workbuf_preamble_offset); 816f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler pre->body_signature.data_size = mock_body_size; 826f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler pre->body_signature.sig_size = mock_sig_size; 83f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner if (hwcrypto_state == HWCRYPTO_FORBIDDEN) 84f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner pre->flags = VB2_FIRMWARE_PREAMBLE_DISALLOW_HWCRYPTO; 85f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner else 86f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner pre->flags = 0; 876f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 886f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_data_key_offset = cc.workbuf_used; 896f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_data_key_size = sizeof(*k) + 8; 906f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler cc.workbuf_used = sd->workbuf_data_key_offset + 916f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_data_key_size; 926f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler k = (struct vb2_packed_key *) 936f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler (cc.workbuf + sd->workbuf_data_key_offset); 946f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler k->algorithm = mock_algorithm; 956f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 966f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler if (t == FOR_EXTEND_HASH || t == FOR_CHECK_HASH) 976f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY, NULL); 986f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 996f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler if (t == FOR_CHECK_HASH) 1006f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler vb2api_extend_hash(&cc, mock_body, mock_body_size); 1016f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler}; 1026f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1036f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler/* Mocked functions */ 1046f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1056f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerint vb2_load_fw_keyblock(struct vb2_context *ctx) 1066f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 1076f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return retval_vb2_load_fw_keyblock; 1086f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 1096f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1106f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerint vb2_load_fw_preamble(struct vb2_context *ctx) 1116f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 1126f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return retval_vb2_load_fw_preamble; 1136f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 1146f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1156f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerint vb2_unpack_key(struct vb2_public_key *key, 1166f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler const uint8_t *buf, 1176f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler uint32_t size) 1186f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 1196f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler struct vb2_packed_key *k = (struct vb2_packed_key *)buf; 1206f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1216f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler if (size != sizeof(*k) + 8) 1226f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return VB2_ERROR_UNPACK_KEY_SIZE; 1236f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1246f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler key->sig_alg = vb2_crypto_to_signature(k->algorithm); 1256f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler key->hash_alg = vb2_crypto_to_hash(k->algorithm); 1266f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1276f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return VB2_SUCCESS; 1286f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 1296f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 130f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Wernerint vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg, 131f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner uint32_t data_size) 132f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner{ 133f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner switch (hwcrypto_state) { 134f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner case HWCRYPTO_DISABLED: 135f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED; 136f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner case HWCRYPTO_ENABLED: 137f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner if (hash_alg != mock_hash_alg) 138f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_ERROR_SHA_INIT_ALGORITHM; 139f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner else 140f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_SUCCESS; 141f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner case HWCRYPTO_FORBIDDEN: 142f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner default: 143f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_ERROR_UNKNOWN; 144f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner } 145f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner} 146f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 147f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Wernerint vb2ex_hwcrypto_digest_extend(const uint8_t *buf, 148f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner uint32_t size) 149f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner{ 150f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner if (hwcrypto_state != HWCRYPTO_ENABLED) 151f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_ERROR_UNKNOWN; 152f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 153f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_SUCCESS; 154f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner} 155f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 156f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Wernerint vb2ex_hwcrypto_digest_finalize(uint8_t *digest, 157f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner uint32_t digest_size) 158f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner{ 159f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner if (hwcrypto_state != HWCRYPTO_ENABLED) 160f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_ERROR_UNKNOWN; 161f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 162f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return retval_vb2_digest_finalize; 163f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner} 164f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 1656f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerint vb2_digest_init(struct vb2_digest_context *dc, 1666f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler enum vb2_hash_algorithm hash_alg) 1676f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 168f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner if (hwcrypto_state == HWCRYPTO_ENABLED) 169f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_ERROR_UNKNOWN; 1706f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler if (hash_alg != mock_hash_alg) 1716f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return VB2_ERROR_SHA_INIT_ALGORITHM; 1726f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1736f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler dc->hash_alg = hash_alg; 174f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner dc->using_hwcrypto = 0; 1756f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1766f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return VB2_SUCCESS; 1776f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 1786f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1796f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerint vb2_digest_extend(struct vb2_digest_context *dc, 1806f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler const uint8_t *buf, 1816f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler uint32_t size) 1826f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 183f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner if (hwcrypto_state == HWCRYPTO_ENABLED) 184f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_ERROR_UNKNOWN; 1856f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler if (dc->hash_alg != mock_hash_alg) 1866f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return VB2_ERROR_SHA_EXTEND_ALGORITHM; 1876f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1886f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return VB2_SUCCESS; 1896f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 1906f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 1916f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerint vb2_digest_finalize(struct vb2_digest_context *dc, 1926f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler uint8_t *digest, 1936f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler uint32_t digest_size) 1946f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 195f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner if (hwcrypto_state == HWCRYPTO_ENABLED) 196f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner return VB2_ERROR_UNKNOWN; 1976f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return retval_vb2_digest_finalize; 1986f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 1996f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2006f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangleruint32_t vb2_rsa_sig_size(enum vb2_signature_algorithm sig_alg) 2016f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 2026f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return mock_sig_size; 2036f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 2046f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2056f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerint vb2_rsa_verify_digest(const struct vb2_public_key *key, 2066f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler uint8_t *sig, 2076f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler const uint8_t *digest, 2086f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler const struct vb2_workbuf *wb) 2096f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 2106f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return retval_vb2_verify_digest; 2116f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 2126f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2136f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler/* Tests */ 2146f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2156f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic void phase3_tests(void) 2166f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 2176f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2186f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_SUCC(vb2api_fw_phase3(&cc), "phase3 good"); 2196f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2206f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2216f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler retval_vb2_load_fw_keyblock = VB2_ERROR_MOCK; 2226f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_fw_phase3(&cc), VB2_ERROR_MOCK, "phase3 keyblock"); 2236f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), 2246f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_RECOVERY_RO_INVALID_RW, " recovery reason"); 2256f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2266f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2276f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler retval_vb2_load_fw_preamble = VB2_ERROR_MOCK; 2286f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_fw_phase3(&cc), VB2_ERROR_MOCK, "phase3 keyblock"); 2296f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), 2306f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_RECOVERY_RO_INVALID_RW, " recovery reason"); 2316f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 2326f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2336f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic void init_hash_tests(void) 2346f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 2356f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler struct vb2_packed_key *k; 2366f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler int wb_used_before; 2376f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler uint32_t size; 2386f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2396f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler /* For now, all we support is body signature hash */ 2406f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2416f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler wb_used_before = cc.workbuf_used; 2426f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_SUCC(vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY, &size), 2436f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler "init hash good"); 2446f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(sd->workbuf_hash_offset, 2456f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler (wb_used_before + (VB2_WORKBUF_ALIGN - 1)) & 2466f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler ~(VB2_WORKBUF_ALIGN - 1), 2476f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler "hash context offset"); 2486f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(sd->workbuf_hash_size, sizeof(struct vb2_digest_context), 2496f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler "hash context size"); 2506f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(cc.workbuf_used, 2516f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_hash_offset + sd->workbuf_hash_size, 2526f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler "hash uses workbuf"); 2536f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(sd->hash_tag, VB2_HASH_TAG_FW_BODY, "hash tag"); 2546f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(sd->hash_remaining_size, mock_body_size, "hash remaining"); 2556f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2566f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler wb_used_before = cc.workbuf_used; 2576f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_SUCC(vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY, NULL), 2586f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler "init hash again"); 2596f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(cc.workbuf_used, wb_used_before, "init hash reuses context"); 2606f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2616f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2626f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_init_hash(&cc, VB2_HASH_TAG_INVALID, &size), 2636f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_INIT_HASH_TAG, "init hash invalid tag"); 2646f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2656f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2666f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_preamble_size = 0; 2676f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY, &size), 2686f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_INIT_HASH_PREAMBLE, "init hash preamble"); 2696f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2706f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2716f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY + 1, &size), 2726f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_INIT_HASH_TAG, "init hash unknown tag"); 2736f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2746f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2756f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler cc.workbuf_used = 2766f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler cc.workbuf_size - sizeof(struct vb2_digest_context) + 8; 2776f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY, &size), 2786f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_INIT_HASH_WORKBUF, "init hash workbuf"); 2796f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2806f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2816f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_data_key_size = 0; 2826f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY, &size), 2836f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_INIT_HASH_DATA_KEY, "init hash data key"); 2846f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2856f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2866f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_data_key_size--; 2876f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY, &size), 2886f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_UNPACK_KEY_SIZE, "init hash data key size"); 2896f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2906f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_MISC); 2916f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler k = (struct vb2_packed_key *)(cc.workbuf + sd->workbuf_data_key_offset); 2926f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler k->algorithm--; 2936f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_init_hash(&cc, VB2_HASH_TAG_FW_BODY, &size), 2946f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_SHA_INIT_ALGORITHM, "init hash algorithm"); 2956f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 2966f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 2976f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic void extend_hash_tests(void) 2986f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 2996f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler struct vb2_digest_context *dc; 3006f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3016f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_EXTEND_HASH); 3026f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_SUCC(vb2api_extend_hash(&cc, mock_body, 32), 3036f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler "hash extend good"); 3046f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(sd->hash_remaining_size, mock_body_size - 32, 3056f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler "hash extend remaining"); 3066f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_SUCC(vb2api_extend_hash(&cc, mock_body, mock_body_size - 32), 3076f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler "hash extend again"); 3086f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(sd->hash_remaining_size, 0, "hash extend remaining 2"); 3096f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3106f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_EXTEND_HASH); 3116f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_hash_size = 0; 3126f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_extend_hash(&cc, mock_body, mock_body_size), 3136f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_EXTEND_HASH_WORKBUF, "hash extend no workbuf"); 3146f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3156f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_EXTEND_HASH); 3166f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_extend_hash(&cc, mock_body, mock_body_size + 1), 3176f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_EXTEND_HASH_SIZE, "hash extend too much"); 3186f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3196f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_EXTEND_HASH); 3206f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_extend_hash(&cc, mock_body, 0), 3216f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_EXTEND_HASH_SIZE, "hash extend empty"); 3226f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 323f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner if (hwcrypto_state != HWCRYPTO_ENABLED) { 324f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner reset_common_data(FOR_EXTEND_HASH); 325f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner dc = (struct vb2_digest_context *) 326f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner (cc.workbuf + sd->workbuf_hash_offset); 327f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner dc->hash_alg = mock_hash_alg + 1; 328f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner TEST_EQ(vb2api_extend_hash(&cc, mock_body, mock_body_size), 329f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner VB2_ERROR_SHA_EXTEND_ALGORITHM, "hash extend fail"); 330f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner } 3316f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 3326f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3336f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerstatic void check_hash_tests(void) 3346f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 3356f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler struct vb2_fw_preamble *pre; 3366f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3376f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3386f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_SUCC(vb2api_check_hash(&cc), "check hash good"); 3396f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3406f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3416f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_preamble_size = 0; 3426f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3436f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_CHECK_HASH_PREAMBLE, "check hash preamble"); 3446f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3456f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3466f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_hash_size = 0; 3476f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3486f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_CHECK_HASH_WORKBUF, "check hash no workbuf"); 3496f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3506f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3516f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->hash_remaining_size = 1; 3526f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3536f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_CHECK_HASH_SIZE, "check hash size"); 3546f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3556f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3566f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler cc.workbuf_used = cc.workbuf_size; 3576f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3586f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST, "check hash workbuf"); 3596f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3606f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3616f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler retval_vb2_digest_finalize = VB2_ERROR_MOCK; 3626f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), VB2_ERROR_MOCK, "check hash finalize"); 3636f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3646f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3656f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->hash_tag = VB2_HASH_TAG_INVALID; 3666f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3676f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_CHECK_HASH_TAG, "check hash tag"); 3686f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3696f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3706f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_data_key_size = 0; 3716f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3726f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_API_CHECK_HASH_DATA_KEY, "check hash data key"); 3736f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3746f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3756f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler sd->workbuf_data_key_size--; 3766f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3776f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_UNPACK_KEY_SIZE, "check hash data key size"); 3786f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3796f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3806f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler pre = (struct vb2_fw_preamble *) 3816f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler (cc.workbuf + sd->workbuf_preamble_offset); 3826f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler pre->body_signature.sig_size++; 3836f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3846f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_VDATA_SIG_SIZE, "check hash sig size"); 3856f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3866f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler reset_common_data(FOR_CHECK_HASH); 3876f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler retval_vb2_digest_finalize = VB2_ERROR_RSA_VERIFY_DIGEST; 3886f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler TEST_EQ(vb2api_check_hash(&cc), 3896f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler VB2_ERROR_RSA_VERIFY_DIGEST, "check hash finalize"); 3906f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 3916f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 3926f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spanglerint main(int argc, char* argv[]) 3936f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler{ 3946f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler phase3_tests(); 395f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 396f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner fprintf(stderr, "Running hash API tests without hwcrypto support...\n"); 397f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner hwcrypto_state = HWCRYPTO_DISABLED; 398f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner init_hash_tests(); 399f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner extend_hash_tests(); 400f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner check_hash_tests(); 401f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 402f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner fprintf(stderr, "Running hash API tests with hwcrypto support...\n"); 403f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner hwcrypto_state = HWCRYPTO_ENABLED; 404f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner init_hash_tests(); 405f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner extend_hash_tests(); 406f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner check_hash_tests(); 407f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner 408f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner fprintf(stderr, "Running hash API tests with forbidden hwcrypto...\n"); 409f10e9099286202f83ce4c1dc5ef1e85fcb5ccde7Julius Werner hwcrypto_state = HWCRYPTO_FORBIDDEN; 4106f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler init_hash_tests(); 4116f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler extend_hash_tests(); 4126f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler check_hash_tests(); 4136f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler 4146f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler return gTestSuccess ? 0 : 255; 4156f1b82ac14f341d9733d6e95d518b3ee352002efRandall Spangler} 416