|
cryptnox-sdk-esp32 1.0.0
ESP32 SDK for Cryptnox Hardware Wallet
|
#include "unity.h"#include "CW_SecureChannel.h"#include "CW_Defs.h"#include "CW_Utils.h"#include "CW_Platform.h"#include "esp32_crypto_provider.h"#include <string.h>#include <stdio.h>Go to the source code of this file.
Classes | |
| class | MockLogger |
| class | MockPlatform |
| struct | MockScriptEntry |
| class | ScriptedMockNfcTransport |
| class | ReflectiveMockNfcTransport |
Macros | |
| #define | SC_AES_BLOCK_BYTES (16U) |
| #define | SC_AES_KEY_BYTES (32U) |
| #define | SC_EC_COORD_BYTES (32U) |
| #define | SC_EC_PUBKEY_BYTES (64U) |
| #define | SC_CERT_MARKER_BYTES (1U) |
| #define | SC_CERT_NONCE_BYTES (8U) |
| #define | SC_CERT_KEY65_BYTES (65U) |
| #define | SC_CERT_TOTAL_BYTES (74U) |
| #define | SC_CERT_KEY_OFFSET (SC_CERT_MARKER_BYTES + SC_CERT_NONCE_BYTES) |
| #define | SC_SW_BYTES (2U) |
| #define | SC_SELECT_RESP_BYTES (26U) |
| #define | SC_GET_CERT_RESP_BYTES (148U) |
| #define | SC_OPEN_SC_RESP_BYTES (34U) |
| #define | SC_MUTUAL_AUTH_RESP_BYTES (66U) |
| #define | SC_SALT_BYTES (32U) |
| #define | SC_IV_BYTES (16U) |
| #define | SC_SHA512_OUT_BYTES (64U) |
| #define | SC_APDU_HEADER_LEN (4U) |
| #define | SC_APDU_LC_OFFSET (4U) |
| #define | SC_APDU_MAC_OFFSET (5U) /* header[4] + Lc[1] */ |
| #define | SC_APDU_MAC_BYTES (16U) |
| #define | SC_CARD_RESP_PAYLOAD_BYTES (4U) |
| #define | SC_CARD_RESP_TOTAL_BYTES (SC_CARD_RESP_PAYLOAD_BYTES + SC_SW_BYTES) |
| #define | MOCK_MAX_SCRIPTS (8U) |
| #define | MOCK_MAX_RESP_BYTES (255U) |
| #define | MOCK_UART_BAUD_RATE (115200UL) |
Functions | |
| TEST_CASE ("checkStatusWord: SW 0x9000 returns true", "[secure_channel]") | |
| TEST_CASE ("checkStatusWord: SW mismatch returns false", "[secure_channel]") | |
| TEST_CASE ("checkStatusWord: response shorter than 2 bytes returns false", "[secure_channel]") | |
| TEST_CASE ("extractCardEphemeralKey: extracts 64-byte key from synthetic certificate", "[secure_channel]") | |
| TEST_CASE ("extractCardEphemeralKey: null cert pointer returns false", "[secure_channel]") | |
| TEST_CASE ("selectApdu: succeeds when transport returns SW 0x9000", "[secure_channel]") | |
| TEST_CASE ("selectApdu: fails when transport returns error SW", "[secure_channel]") | |
| TEST_CASE ("getCardCertificate: extracts 146 certificate bytes from mock response", "[secure_channel]") | |
| TEST_CASE ("openSecureChannel: extracts 32-byte salt from mock response", "[secure_channel]") | |
| TEST_CASE ("mutuallyAuthenticate: sets session IV to first 16 bytes of mock response", "[secure_channel]") | |
| TEST_CASE ("key derivation: ECDH + SHA-512 split yields distinct Kenc and Kmac", "[secure_channel]") | |
| TEST_CASE ("aesCbcEncrypt/aesCbcDecrypt: round-trip via reflective mock returns card payload", "[secure_channel]") | |
Variables | |
| static const uint8_t | K_CARD_EPHEMERAL_PUB [SC_EC_PUBKEY_BYTES] |
| static const uint8_t | K_TEST_KENC [SC_AES_KEY_BYTES] |
| static const uint8_t | K_TEST_KMAC [SC_AES_KEY_BYTES] |
| static const uint8_t | K_CARD_RESP_PLAINTEXT [SC_CARD_RESP_TOTAL_BYTES] |
| static ESP32CryptoProvider | s_crypto |
| static MockLogger | s_logger |
| static MockPlatform | s_platform |
| static ScriptedMockNfcTransport | s_scriptedTransport |
| static ReflectiveMockNfcTransport | s_reflectiveTransport |
| #define MOCK_MAX_RESP_BYTES (255U) |
Definition at line 53 of file test_cw_secure_channel.cpp.
| #define MOCK_MAX_SCRIPTS (8U) |
Definition at line 52 of file test_cw_secure_channel.cpp.
Referenced by ScriptedMockNfcTransport::addScript().
| #define MOCK_UART_BAUD_RATE (115200UL) |
Definition at line 54 of file test_cw_secure_channel.cpp.
Referenced by MockLogger::begin().
| #define SC_AES_BLOCK_BYTES (16U) |
Definition at line 19 of file test_cw_secure_channel.cpp.
Referenced by ReflectiveMockNfcTransport::sendAPDU().
| #define SC_AES_KEY_BYTES (32U) |
Definition at line 20 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), TEST_CASE(), and TEST_CASE().
| #define SC_APDU_HEADER_LEN (4U) |
Definition at line 42 of file test_cw_secure_channel.cpp.
| #define SC_APDU_LC_OFFSET (4U) |
Definition at line 43 of file test_cw_secure_channel.cpp.
| #define SC_APDU_MAC_BYTES (16U) |
Definition at line 45 of file test_cw_secure_channel.cpp.
Referenced by ReflectiveMockNfcTransport::sendAPDU().
| #define SC_APDU_MAC_OFFSET (5U) /* header[4] + Lc[1] */ |
Definition at line 44 of file test_cw_secure_channel.cpp.
Referenced by ReflectiveMockNfcTransport::sendAPDU().
| #define SC_CARD_RESP_PAYLOAD_BYTES (4U) |
Definition at line 48 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_CARD_RESP_TOTAL_BYTES (SC_CARD_RESP_PAYLOAD_BYTES + SC_SW_BYTES) |
Definition at line 49 of file test_cw_secure_channel.cpp.
| #define SC_CERT_KEY65_BYTES (65U) |
Definition at line 27 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_CERT_KEY_OFFSET (SC_CERT_MARKER_BYTES + SC_CERT_NONCE_BYTES) |
Definition at line 29 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_CERT_MARKER_BYTES (1U) |
Definition at line 25 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_CERT_NONCE_BYTES (8U) |
Definition at line 26 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_CERT_TOTAL_BYTES (74U) |
Definition at line 28 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_EC_COORD_BYTES (32U) |
Definition at line 21 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), TEST_CASE(), and TEST_CASE().
| #define SC_EC_PUBKEY_BYTES (64U) |
Definition at line 22 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), and TEST_CASE().
| #define SC_GET_CERT_RESP_BYTES (148U) |
Definition at line 34 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_IV_BYTES (16U) |
Definition at line 38 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), and TEST_CASE().
| #define SC_MUTUAL_AUTH_RESP_BYTES (66U) |
Definition at line 36 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), and TEST_CASE().
| #define SC_OPEN_SC_RESP_BYTES (34U) |
Definition at line 35 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_SALT_BYTES (32U) |
Definition at line 37 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), TEST_CASE(), and TEST_CASE().
| #define SC_SELECT_RESP_BYTES (26U) |
Definition at line 33 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), and TEST_CASE().
| #define SC_SHA512_OUT_BYTES (64U) |
Definition at line 39 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
| #define SC_SW_BYTES (2U) |
Definition at line 32 of file test_cw_secure_channel.cpp.
Referenced by ReflectiveMockNfcTransport::sendAPDU().
| TEST_CASE | ( | "aesCbcEncrypt/aesCbcDecrypt: round-trip via reflective mock returns card payload" | , |
| "" | [secure_channel] ) |
Definition at line 639 of file test_cw_secure_channel.cpp.
References K_CARD_RESP_PLAINTEXT, K_TEST_KENC, K_TEST_KMAC, s_crypto, s_logger, s_platform, s_reflectiveTransport, SC_AES_KEY_BYTES, SC_CARD_RESP_PAYLOAD_BYTES, and SC_IV_BYTES.
| TEST_CASE | ( | "checkStatusWord: response shorter than 2 bytes returns false" | , |
| "" | [secure_channel] ) |
Definition at line 350 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, and s_scriptedTransport.
| TEST_CASE | ( | "checkStatusWord: SW 0x9000 returns true" | , |
| "" | [secure_channel] ) |
Definition at line 324 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, and s_scriptedTransport.
| TEST_CASE | ( | "checkStatusWord: SW mismatch returns false" | , |
| "" | [secure_channel] ) |
Definition at line 337 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, and s_scriptedTransport.
| TEST_CASE | ( | "extractCardEphemeralKey: extracts 64-byte key from synthetic certificate" | , |
| "" | [secure_channel] ) |
Definition at line 365 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, s_scriptedTransport, SC_CERT_KEY65_BYTES, SC_CERT_KEY_OFFSET, SC_CERT_MARKER_BYTES, SC_CERT_NONCE_BYTES, SC_CERT_TOTAL_BYTES, and SC_EC_PUBKEY_BYTES.
| TEST_CASE | ( | "extractCardEphemeralKey: null cert pointer returns false" | , |
| "" | [secure_channel] ) |
Definition at line 400 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, s_scriptedTransport, and SC_EC_PUBKEY_BYTES.
| TEST_CASE | ( | "getCardCertificate: extracts 146 certificate bytes from mock response" | , |
| "" | [secure_channel] ) |
Definition at line 444 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, s_scriptedTransport, and SC_GET_CERT_RESP_BYTES.
| TEST_CASE | ( | "key derivation: ECDH + SHA-512 split yields distinct Kenc and Kmac" | , |
| "" | [secure_channel] ) |
Definition at line 562 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, s_scriptedTransport, SC_AES_KEY_BYTES, SC_EC_COORD_BYTES, SC_EC_PUBKEY_BYTES, SC_MUTUAL_AUTH_RESP_BYTES, SC_SALT_BYTES, and SC_SHA512_OUT_BYTES.
| TEST_CASE | ( | "mutuallyAuthenticate: sets session IV to first 16 bytes of mock response" | , |
| "" | [secure_channel] ) |
Definition at line 504 of file test_cw_secure_channel.cpp.
References K_CARD_EPHEMERAL_PUB, s_crypto, s_logger, s_platform, s_scriptedTransport, SC_AES_KEY_BYTES, SC_EC_COORD_BYTES, SC_EC_PUBKEY_BYTES, SC_IV_BYTES, SC_MUTUAL_AUTH_RESP_BYTES, and SC_SALT_BYTES.
| TEST_CASE | ( | "openSecureChannel: extracts 32-byte salt from mock response" | , |
| "" | [secure_channel] ) |
Definition at line 471 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, s_scriptedTransport, SC_EC_COORD_BYTES, SC_EC_PUBKEY_BYTES, SC_OPEN_SC_RESP_BYTES, and SC_SALT_BYTES.
| TEST_CASE | ( | "selectApdu: fails when transport returns error SW" | , |
| "" | [secure_channel] ) |
Definition at line 429 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, s_scriptedTransport, and SC_SELECT_RESP_BYTES.
| TEST_CASE | ( | "selectApdu: succeeds when transport returns SW 0x9000" | , |
| "" | [secure_channel] ) |
Definition at line 414 of file test_cw_secure_channel.cpp.
References s_crypto, s_logger, s_platform, s_scriptedTransport, and SC_SELECT_RESP_BYTES.
|
static |
Definition at line 59 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
|
static |
Definition at line 88 of file test_cw_secure_channel.cpp.
Referenced by ReflectiveMockNfcTransport::sendAPDU(), and TEST_CASE().
|
static |
Definition at line 74 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
|
static |
Definition at line 80 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
|
static |
Definition at line 314 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), and TEST_CASE().
|
static |
Definition at line 315 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), and TEST_CASE().
|
static |
Definition at line 316 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), and TEST_CASE().
|
static |
Definition at line 318 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE().
|
static |
Definition at line 317 of file test_cw_secure_channel.cpp.
Referenced by TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), TEST_CASE(), and TEST_CASE().