Software APIs
sw
device
lib
testing
kmac_testutils.h
1
// Copyright lowRISC contributors (OpenTitan project).
2
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3
// SPDX-License-Identifier: Apache-2.0
4
5
#ifndef OPENTITAN_SW_DEVICE_LIB_TESTING_KMAC_TESTUTILS_H_
6
#define OPENTITAN_SW_DEVICE_LIB_TESTING_KMAC_TESTUTILS_H_
7
8
#include "sw/device/lib/base/status.h"
9
#include "
sw/device/lib/dif/dif_kmac.h
"
10
11
/**
12
* Configure the KMAC block.
13
*
14
* This is a thin wrapper around `dif_kmac_configure`. It sets up a testing
15
* configuration that prioritizes speed over security, since we don't care
16
* about protecting test keys. For instance, it sets the entropy source to
17
* software so KMAC doesn't wait for fresh entropy, and minimizes masking.
18
*
19
* @param kmac KMAC context.
20
* @param sideload Whether to configure KMAC to read a sideloaded key.
21
* @return The result of the operation.
22
*/
23
OT_WARN_UNUSED_RESULT
24
status_t
kmac_testutils_config(dif_kmac_t *kmac,
bool
sideload);
25
26
/**
27
* Runs the full KMAC operation.
28
*
29
* Assumes that the KMAC block has already been initialized and configured, and
30
* that the sideloaded key has been loaded (if applicable).
31
*
32
* @param kmac KMAC block context.
33
* @param mode Mode (security strength) for KMAC.
34
* @param key KMAC key.
35
* @param custom_string Customization string.
36
* @param custom_string_len Length of customization string.
37
* @param message Input message.
38
* @param message_len Length of message in bytes.
39
* @param output_len Requested length of output in words.
40
* @param[out] output Pre-allocated output buffer (length must match
41
* output_len).
42
* @param[out] capacity Optional buffer to read the capacity of Keccak state.
43
* @return The result of the operation.
44
*/
45
OT_WARN_UNUSED_RESULT
46
status_t
kmac_testutils_kmac(
const
dif_kmac_t *kmac,
dif_kmac_mode_kmac_t
mode,
47
const
dif_kmac_key_t
*key,
48
const
char
*custom_string,
49
const
size_t
custom_string_len,
50
const
char
*message,
const
size_t
message_len,
51
const
size_t
output_len, uint32_t *output,
52
uint32_t *capacity);
53
54
/**
55
* Check if the KMAC HW has flagged any errors and acknowledge them.
56
*
57
* @param kmac A KMAC DIF handle.
58
* @return Ok if there were no errors; non-Ok if there was any error.
59
*/
60
OT_WARN_UNUSED_RESULT
61
status_t
kmac_testutils_check_error(
const
dif_kmac_t *kmac);
62
63
#endif
// OPENTITAN_SW_DEVICE_LIB_TESTING_KMAC_TESTUTILS_H_
Return to
OpenTitan Documentation