35#define CW_FUZZ_BUILD 1
54 bool begin()
override {
return false; }
57 uint8_t*, uint8_t&)
override {
return false; }
64 bool begin(
unsigned long)
override {
return true; }
66 void print(
const char*)
override {}
68 void print(uint8_t,
int)
override {}
69 void print(uint16_t,
int)
override {}
70 void print(uint32_t,
int)
override {}
71 void print(
int,
int)
override {}
84 bool sha256(
const uint8_t*,
size_t, uint8_t*)
override {
return false; }
85 bool sha512(
const uint8_t*,
size_t, uint8_t*)
override {
return false; }
87 const uint8_t*, uint8_t,
88 uint8_t*,
bool)
override {
return 0U; }
90 const uint8_t*, uint8_t,
91 uint8_t*,
bool)
override {
return 0U; }
92 bool ecdh(
const uint8_t*,
const uint8_t*, uint8_t*,
96 bool random(uint8_t*,
unsigned)
override {
return false; }
98 const uint8_t*,
CW_Curve)
override {
return false; }
110 if ((dest != NULL) && (len > 0U)) {
111 memset(dest, 0xA5U, len);
135 const uint8_t selector = data[0];
136 const uint8_t* payload = data + 1U;
137 const size_t payloadSize = size - 1U;
140 if ((selector == 0x00U) || (selector > 0x01U)) {
141 uint8_t raw64[64U] = { 0U };
142 uint8_t derLen = (payloadSize <= 255U)
143 ?
static_cast<uint8_t
>(payloadSize)
149 if ((selector == 0x01U) || (selector > 0x01U)) {
150 uint16_t tbsMsgStart = 0U;
151 uint16_t tbsMsgLen = 0U;
152 const uint8_t* pubKey65Ptr = NULL;
153 const uint8_t* sigPtr = NULL;
155 uint16_t bufLen = (payloadSize <= 0xFFFFU)
156 ?
static_cast<uint16_t
>(payloadSize)
159 tbsMsgStart, tbsMsgLen,
160 pubKey65Ptr, sigPtr, sigLen);
Abstract cryptographic primitives interface.
Abstract logging interface.
Abstract NFC transport interface.
Implementation of the Cryptnox secure channel protocol.
static bool derWalkMfCert(const uint8_t *buf, uint16_t bufLen, uint16_t &tbsMsgStart, uint16_t &tbsMsgLen, const uint8_t *&pubKey65Ptr, const uint8_t *&sigPtr, uint8_t &sigLen)
Cryptnox secure channel protocol over NFC.
Implementation of the platform-independent utility helpers.
Abstract interface for cryptographic operations used by CW_SecureChannel.
Abstract interface for serial/debug output.
Abstract interface for NFC transport operations.
static bool parseDerSigToRaw(const uint8_t *der, uint8_t derLen, uint8_t *raw64)
static bool fill_secure_random(uint8_t *dest, size_t len)
Fill len bytes at dest with cryptographically random data.
bool sha512(const uint8_t *, size_t, uint8_t *) override
Compute SHA-512 over a contiguous data buffer.
bool random(uint8_t *, unsigned) override
Fill a buffer with cryptographically random bytes.
bool makeKey(uint8_t *, uint8_t *, CW_Curve) override
Generate a new EC key pair.
uint16_t aesCbcEncrypt(const uint8_t *, uint16_t, uint8_t *, const uint8_t *, uint8_t, uint8_t *, bool) override
AES-CBC encrypt.
bool ecdsaVerify(const uint8_t *, const uint8_t *, size_t, const uint8_t *, CW_Curve) override
Verify an ECDSA signature (raw r||s, 64 bytes) against a message hash.
uint16_t aesCbcDecrypt(uint8_t *, uint16_t, uint8_t *, const uint8_t *, uint8_t, uint8_t *, bool) override
AES-CBC decrypt.
bool ecdh(const uint8_t *, const uint8_t *, uint8_t *, CW_Curve) override
ECDH shared secret computation.
bool sha256(const uint8_t *, size_t, uint8_t *) override
Compute SHA-256 over a contiguous data buffer.
void print(uint32_t, int) override
void print(int, int) override
void println(const char *) override
void print(uint8_t, int) override
void println(uint8_t, int) override
void println(char) override
void print(const __FlashStringHelper *) override
void println(uint16_t, int) override
bool begin(unsigned long) override
Initialize the logging interface.
void print(char) override
void print(const char *) override
void println(const __FlashStringHelper *) override
void print(uint16_t, int) override
void println(uint32_t, int) override
void println(int, int) override
bool sendAPDU(const uint8_t *, uint8_t, uint8_t *, uint8_t &) override
Send an APDU command to the card and receive the response.
bool inListPassiveTarget() override
Detect the presence of a passive ISO-DEP NFC target.
bool begin() override
Initialize the NFC transport hardware.
bool printFirmwareVersion() override
Print NFC module firmware version information to the logger.
void resetReader() override
Reset the NFC reader/field for the next card detection cycle.
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
CW_Curve
Portable curve identifier used throughout the SDK.
static bool parseDerSigToRaw(const uint8_t *der, uint8_t derLen, uint8_t *raw64)