5 #include "sw/device/lib/crypto/impl/status.h"
9 #include "gmock/gmock.h"
10 #include "gtest/gtest.h"
15 namespace status_unittest {
18 TEST(Status, OkIsHardenedTrue) {
22 int HammingDistance(int32_t a, int32_t b) {
28 constexpr
int kMinimumHammingDistance = 5;
29 TEST(Status, TopLevelStatusHammingDistance) {
30 std::array<otcrypto_status_t, 5> error_codes = {
31 OTCRYPTO_BAD_ARGS, OTCRYPTO_RECOV_ERR, OTCRYPTO_FATAL_ERR,
32 OTCRYPTO_ASYNC_INCOMPLETE, OTCRYPTO_NOT_IMPLEMENTED};
35 EXPECT_GE(HammingDistance(kOtcryptoStatusValueOk, 0), kMinimumHammingDistance)
36 <<
"The 'OK' status code " << kOtcryptoStatusValueOk
37 <<
" is too close to zero.";
41 EXPECT_GE(HammingDistance(status1.value, 0), kMinimumHammingDistance)
42 <<
"Error code " << status1.value <<
" is too close to zero.";
44 EXPECT_GE(HammingDistance(status1.value, kOtcryptoStatusValueOk),
45 kMinimumHammingDistance)
46 <<
"Error code " << status1.value <<
" is too close to the 'OK' value ("
47 << kOtcryptoStatusValueOk <<
").";
51 if (status1.value != status2.value) {
52 EXPECT_GE(HammingDistance(status1.value, status2.value),
53 kMinimumHammingDistance)
54 <<
"Error codes " << status1.value <<
" and " << status2.value
55 <<
" are too close to each other.";
61 TEST(Status, OkIsNonHardenedOk) { EXPECT_EQ(status_ok(OTCRYPTO_OK),
true); }
63 TEST(Status, ErrorMacrosNotOk) {
65 EXPECT_EQ(status_ok(OTCRYPTO_BAD_ARGS),
false);
66 EXPECT_EQ(status_ok(OTCRYPTO_RECOV_ERR),
false);
67 EXPECT_EQ(status_ok(OTCRYPTO_FATAL_ERR),
false);
68 EXPECT_EQ(status_ok(OTCRYPTO_ASYNC_INCOMPLETE),
false);
69 EXPECT_EQ(status_ok(OTCRYPTO_NOT_IMPLEMENTED),
false);
72 TEST(Status, ErrorMacrosHaveExpectedValues) {
74 EXPECT_EQ(status_err(OTCRYPTO_BAD_ARGS), kInvalidArgument);
75 EXPECT_EQ(status_err(OTCRYPTO_RECOV_ERR), kAborted);
76 EXPECT_EQ(status_err(OTCRYPTO_FATAL_ERR), kFailedPrecondition);
77 EXPECT_EQ(status_err(OTCRYPTO_ASYNC_INCOMPLETE), kUnavailable);
78 EXPECT_EQ(status_err(OTCRYPTO_NOT_IMPLEMENTED), kUnimplemented);
86 TEST(Status, HardenedTryOfNonHardenedOkIsError) {
87 EXPECT_EQ(status_err(do_hardened_try(OK_STATUS())), kFailedPrecondition);
90 TEST(Status, HardenedTryOfHardenedOkIsOk) {
91 EXPECT_EQ(status_ok(do_hardened_try(OTCRYPTO_OK)),
true);
94 TEST(Status, HardenedTryOfErrorIsError) {
95 EXPECT_EQ(status_ok(do_hardened_try(INVALID_ARGUMENT())),
false);
98 TEST(Status, HardenedTryOfErrorWithTruthyArgIsError) {
108 TEST(Status, TryInterpretOk) {
110 EXPECT_EQ(status_ok(try_interpret(OTCRYPTO_OK)),
true);
113 TEST(Status, TryInterpretNonHardenedOk) {
115 EXPECT_EQ(status_ok(try_interpret(OK_STATUS())),
false);
118 TEST(Status, TryInterpretErrors) {
120 EXPECT_EQ(status_ok(try_interpret(OTCRYPTO_BAD_ARGS)),
false);
121 EXPECT_EQ(status_ok(try_interpret(OTCRYPTO_RECOV_ERR)),
false);
122 EXPECT_EQ(status_ok(try_interpret(OTCRYPTO_FATAL_ERR)),
false);
123 EXPECT_EQ(status_ok(try_interpret(OTCRYPTO_ASYNC_INCOMPLETE)),
false);