blob: 3c3126d94f5ec2db6eb68d08d977658500833f82 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <crypto/aead.h>
#include <crypto/bytes.h>
#include <crypto/secret.h>
#include <crypto/cipher.h>
#include <crypto/hkdf.h>
#include <zircon/status.h>
#include <zircon/types.h>
// For expressions that return a zx_status_t, this macro will print the symbolic names when a
// mismatch is encountered. Don't use this directly; use the wrappers below.
#define UT_ZX(lhs, rhs, ret) \
do { \
UT_ASSERT_VALID_TEST_STATE; \
zx_status_t _lhs_val = (lhs); \
zx_status_t _rhs_val = (rhs); \
if (_lhs_val != _rhs_val) { \
UNITTEST_FAIL_TRACEF("%s returned %s; expected %s\n", #lhs, \
zx_status_get_string(_lhs_val), zx_status_get_string(_rhs_val)); \
current_test_info->all_ok = false; \
ret; \
} \
} while (0)
// Wrappers for UT_ZX.
#define EXPECT_ZX(expr, status) UT_ZX(expr, status, DONOT_RET)
#define ASSERT_ZX(expr, status) UT_ZX(expr, status, RET_FALSE)
#define EXPECT_OK(expr) UT_ZX(expr, ZX_OK, DONOT_RET)
#define ASSERT_OK(expr) UT_ZX(expr, ZX_OK, RET_FALSE)
// Value-parameterized tests: Consumers of this file can define an 'EACH_PARAM' macro as follows:
// #define EACH_PARAM(OP, Test)
// OP(Test, Class, Param1)
// OP(Test, Class, Param2)
// ...
// OP(Test, Class, ParamN)
// where |Param1| corresponds to an enum constant |Class::kParam1|, etc.
//
// Consumers can then use the following macros to automatically define and run tests for each
// parameter:
// bool TestSomething(Param param) {
// BEGIN_TEST;
// ...
// END_TEST;
// }
// DEFINE_EACH(TestSomething)
// ...
// BEGIN_TEST_CASE(SomeTest)
// RUN_EACH(TestSomething)
// END_TEST_CASE(SomeTest)
#define DEFINE_TEST_PARAM(Test, Class, Param) bool Test ## _ ## Param(void) { return Test(Class::k ## Param); }
#define RUN_TEST_PARAM(Test, Class, Param) RUN_TEST(Test ## _ ## Param)
#define DEFINE_EACH(Test) EACH_PARAM(DEFINE_TEST_PARAM, Test)
#define RUN_EACH(Test) EACH_PARAM(RUN_TEST_PARAM, Test)
namespace crypto {
namespace testing {
// Resizes |out| and sets its contents to match the given |hex| string.
zx_status_t HexToBytes(const char* hex, Bytes* out);
zx_status_t HexToSecret(const char* hex, Secret* out);
// Fills the given |key| and |iv| with as much random data as indicated by |Cipher::GetKeyLen| and
// |Cipher::GetIVLen| for the given |cipher|. |iv| may be null.
zx_status_t GenerateKeyMaterial(Cipher::Algorithm cipher, Secret* key, Bytes* iv);
// Fills the given |key|, |iv| with as much random data as indicated by |AEAD::GetKeyLen| and
//|AEAD::GetIVLen| for the given |aead|. |iv| may be null.
zx_status_t GenerateKeyMaterial(AEAD::Algorithm aead, Secret* key, Bytes* iv);
} // namespace testing
} // namespace crypto