diff options
author | Vadim Sukhomlinov <sukhomlinov@google.com> | 2021-09-16 13:17:00 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-09-17 01:38:05 +0000 |
commit | b89dd9906c4b990d45d48195368df1cfb583b9b0 (patch) | |
tree | 853a8cfe7a228585cb6c56916190e0ec47379bc7 /board | |
parent | 83a5b5bd7f9773a33728b223930a16425f380541 (diff) | |
download | chrome-ec-b89dd9906c4b990d45d48195368df1cfb583b9b0.tar.gz |
cr50: add TRNG testing mode with TRNG restartstabilize-rust-14225.B-cr50_stab
NIST statistical tests for TRNG entropy requires to compare entropy
in regular mode (continuous readings) with entropy after TRNG restarts.
Added support for TRNG restart before reading entropy and updated script
to drive tests.
BUG=b:138577834
TEST=test/nist_entropy.sh
Signed-off-by: Vadim Sukhomlinov <sukhomlinov@google.com>
Change-Id: Idc46191be05e8275730726f6debb8007ca361bc6
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3165883
Reviewed-by: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Reviewed-by: William Wesson <wesson@google.com>
Reviewed-by: Andrey Pronin <apronin@chromium.org>
Commit-Queue: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Tested-by: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Diffstat (limited to 'board')
-rw-r--r-- | board/cr50/dcrypto/trng.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/board/cr50/dcrypto/trng.c b/board/cr50/dcrypto/trng.c index ce49527472..5745ec308f 100644 --- a/board/cr50/dcrypto/trng.c +++ b/board/cr50/dcrypto/trng.c @@ -154,6 +154,7 @@ uint64_t read_rand(void) #include "console.h" #include "endian.h" #include "extension.h" +#include "timer.h" #include "watchdog.h" #if CRYPTO_TEST_CMD_RAND @@ -291,6 +292,7 @@ static bool raw_rand_bytes(void *buffer, size_t len) * ========================================================================= * text_len | 2 | the number of random bytes to generate, big endian * type | 1 | 0 - TRNG, 1 = FIPS TRNG, 2 = FIPS DRBG + * | | 3 - TRNG after restart * | | other values reserved for extensions */ static enum vendor_cmd_rc trng_test(enum vendor_cmd_cc code, void *buf, @@ -314,6 +316,13 @@ static enum vendor_cmd_rc trng_test(enum vendor_cmd_cc code, void *buf, } switch (op_type) { + case 3: + /* Power down LDO, wait 1ms, power up. */ + GWRITE(TRNG, POWER_DOWN_B, 0); + udelay(1000); + GWRITE(TRNG, POWER_DOWN_B, 1); + GWRITE(TRNG, GO_EVENT, 1); + /* Fall through */ case 0: if (!raw_rand_bytes(buf, text_len)) return VENDOR_RC_INTERNAL_ERROR; |