Merge pull request #576 from dgarske/ti_c25
Add TI LAUNCHXL-F28P55X (C2000 C28x) bare-metal wolfCrypt examplepull/616/head
commit
c8e71603ae
|
|
@ -1123,14 +1123,15 @@ examples:
|
|||
- script: [./softhsm2-init.sh, pkcs11_test]
|
||||
expect: "All PKCS#11 examples passed"
|
||||
timeout: 300
|
||||
# TODO: drop this expect_fail when wolfSSL/wolfssl#10954 merges into the
|
||||
# refs under test -- that PR fixes it (keygen destroys the HSM public
|
||||
# key, so verify must use the exported point) and pkcs11_test was proven
|
||||
# green against the PR ref. gen_ec_keys_label() then wc_ecc_verify_hash()
|
||||
# on the PKCS#11 public key returns WC_HW_E (-248); signing and the
|
||||
# no-label path pass. Not reproducible locally -- brew SoftHSM 2.7 reports
|
||||
# PKCS#11 3.2 but exports no C_GetInterface, which wolfSSL rejects first.
|
||||
# gen_ec_keys_label() then wc_ecc_verify_hash() on the PKCS#11 public key
|
||||
# returns WC_HW_E (-248); signing and the no-label path pass. Fixed on
|
||||
# master by wolfSSL/wolfssl#10954 (keygen destroys the HSM public key, so
|
||||
# verify must use the exported point), still in the latest stable tag;
|
||||
# drop expect_fail + fixed_on once a stable tag has it. Not reproducible
|
||||
# locally -- brew SoftHSM 2.7 reports PKCS#11 3.2 but exports no
|
||||
# C_GetInterface, which wolfSSL rejects first.
|
||||
expect_fail: "wc_ecc_verify_hash on a label-generated PKCS#11 EC key returns WC_HW_E (-248)"
|
||||
fixed_on: [master]
|
||||
|
||||
# ------------------------------------------------- host: separate profiles
|
||||
- id: pk-rsa
|
||||
|
|
@ -1497,6 +1498,11 @@ examples:
|
|||
mode: skip
|
||||
reason: "RealTek AmebaPro2 SDK + licensed ASDK 10.3.0 toolchain"
|
||||
|
||||
- id: ti-c2000-f28p55x
|
||||
path: embedded/ti-c2000-f28p55x
|
||||
mode: skip
|
||||
reason: "TI LAUNCHXL-F28P55X bare metal; licensed C2000 CGT (cl2000) compiler plus C2000Ware, and the KAT output only comes back over the board's XDS110 JTAG/CIO link"
|
||||
|
||||
- id: renesas-rh850
|
||||
path: Renesas/cs+/RH850/rsapss_sign_verify
|
||||
mode: skip
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
out/
|
||||
*.obj
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
/* 28p55x_wolf_flash_lnk.cmd
|
||||
*
|
||||
* Linker command file for the wolfCrypt test/benchmark on the
|
||||
* TI LAUNCHXL-F28P55X (TMS320F28P550SJ), running from flash. EABI only
|
||||
* (build driverlib and this project with --abi=eabi).
|
||||
*
|
||||
* Differs from the stock C2000Ware generic flash linker in three ways that
|
||||
* the ML-DSA-87 verify path requires:
|
||||
* - A large STACK in low RAM. The C28x stack pointer is 16-bit, so the
|
||||
* stack must live below 0x10000. RAMLS0-7 (0x8000..0xBFFF, 16 KW) is the
|
||||
* largest contiguous low block; the verify key struct (~7 KW pinned by
|
||||
* WOLFSSL_MLDSA_VERIFY_NO_MALLOC) plus Keccak frames live here.
|
||||
* - A real heap (.sysmem) in low RAMGS0-1 for the test/benchmark malloc
|
||||
* temporaries (ML-DSA verify itself allocates nothing).
|
||||
* - .bss/.data placed in the high RAMGS2-3 + RAMLS8-9 blocks so they do not
|
||||
* compete with the stack for low RAM.
|
||||
*
|
||||
* Copyright (C) 2006-2026 wolfSSL Inc. GPLv3 - see project headers.
|
||||
*/
|
||||
|
||||
-stack 0x4000 /* 16 KW C28x stack (full RAMLS0-7); wolfcrypt_test's deep call
|
||||
* chain + SHAKE/large-hash locals (~1.6 KW) need the headroom */
|
||||
-heap 0x2000 /* 8 KW heap (RAMGS1); RAMGS0 now hosts RAM-resident hot code.
|
||||
* ML-DSA verify uses no heap; test/benchmark temporaries fit. */
|
||||
|
||||
MEMORY
|
||||
{
|
||||
BEGIN : origin = 0x080000, length = 0x000002
|
||||
|
||||
BOOT_RSVD : origin = 0x000002, length = 0x000126 /* M0, used by boot ROM stack */
|
||||
RAMM0 : origin = 0x000128, length = 0x0002D8
|
||||
RAMM1 : origin = 0x000400, length = 0x000400
|
||||
|
||||
/* Low RAM (< 0x10000): usable for the 16-bit-SP stack and the heap. */
|
||||
RAMLS_STACK : origin = 0x008000, length = 0x004000 /* RAMLS0-7, 16 KW */
|
||||
/* RAMGS0 hosts RAM-resident hot code (.TI.ramfunc), RAMGS1 the heap. At
|
||||
* 150 MHz the flash has wait states; running the Keccak permutation and the
|
||||
* ML-DSA NTTs from RAM removes the instruction-fetch stalls. */
|
||||
RAMGS_RAMCODE : origin = 0x00C000, length = 0x002000 /* RAMGS0, 8 KW */
|
||||
RAMGS_HEAP : origin = 0x00E000, length = 0x002000 /* RAMGS1, 8 KW */
|
||||
|
||||
/* High RAM (>= 0x10000): data only (no stack). */
|
||||
RAMGS_HI : origin = 0x010000, length = 0x004000 /* RAMGS2-3, 16 KW */
|
||||
RAMLS_HI : origin = 0x014000, length = 0x004000 /* RAMLS8-9, 16 KW */
|
||||
|
||||
/* Flash banks (ML-DSA verify code + const test vectors are large). */
|
||||
FLASH_BANK0 : origin = 0x080002, length = 0x01FFFE
|
||||
FLASH_BANK1 : origin = 0x0A0000, length = 0x020000
|
||||
FLASH_BANK2 : origin = 0x0C0000, length = 0x020000
|
||||
FLASH_BANK3 : origin = 0x0E0000, length = 0x020000
|
||||
FLASH_BANK4 : origin = 0x100000, length = 0x008000
|
||||
|
||||
RESET : origin = 0x3FFFC0, length = 0x000002
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
codestart : > BEGIN
|
||||
/* Hot crypto relocated to RAM (loaded from flash, copied by Device_init's
|
||||
* Ramfuncs memcpy). Listed before .text so these subsections are claimed
|
||||
* here, not by the generic .text below. --gen_func_subsections=on makes
|
||||
* each function its own .text:<name> input section. */
|
||||
.TI.ramfunc : { sha3.obj(.text:BlockSha3)
|
||||
wc_mldsa.obj(.text:mldsa_ntt_c)
|
||||
wc_mldsa.obj(.text:mldsa_invntt_c)
|
||||
wc_mldsa.obj(.text:mldsa_ntt_small_c) }
|
||||
LOAD = FLASH_BANK0,
|
||||
RUN = RAMGS_RAMCODE,
|
||||
LOAD_START(RamfuncsLoadStart),
|
||||
LOAD_SIZE(RamfuncsLoadSize),
|
||||
LOAD_END(RamfuncsLoadEnd),
|
||||
RUN_START(RamfuncsRunStart),
|
||||
RUN_SIZE(RamfuncsRunSize),
|
||||
RUN_END(RamfuncsRunEnd),
|
||||
ALIGN(8)
|
||||
.text : >> FLASH_BANK0 | FLASH_BANK1 | FLASH_BANK2 | FLASH_BANK3 | FLASH_BANK4, ALIGN(8)
|
||||
.cinit : > FLASH_BANK0 | FLASH_BANK1 | FLASH_BANK2 | FLASH_BANK3 | FLASH_BANK4, ALIGN(8)
|
||||
.switch : > FLASH_BANK0 | FLASH_BANK1 | FLASH_BANK2 | FLASH_BANK3 | FLASH_BANK4, ALIGN(8)
|
||||
.reset : > RESET, TYPE = DSECT /* unused */
|
||||
|
||||
.stack : > RAMLS_STACK
|
||||
|
||||
.bss : >> RAMGS_HI | RAMLS_HI
|
||||
.bss:output : > RAMGS_HI
|
||||
.init_array : > FLASH_BANK0 | FLASH_BANK1 | FLASH_BANK2 | FLASH_BANK3 | FLASH_BANK4, ALIGN(8)
|
||||
.const : >> FLASH_BANK0 | FLASH_BANK1 | FLASH_BANK2 | FLASH_BANK3 | FLASH_BANK4, ALIGN(8)
|
||||
.data : >> RAMGS_HI | RAMLS_HI
|
||||
.sysmem : > RAMGS_HEAP
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
/* 28p55x_wolf_sign_lnk.cmd
|
||||
*
|
||||
* Linker command file for the FULL ML-DSA-87 (keygen + sign + verify) build of
|
||||
* the wolfCrypt example on the TI LAUNCHXL-F28P55X (TMS320F28P550SJ), running
|
||||
* from flash. EABI only. Selected by `make SIGN=1`.
|
||||
*
|
||||
* ML-DSA-87 keygen/sign/verify need a much larger heap than the verify-only
|
||||
* build. Even with every small-memory path enabled the peak is ~30 KW in a
|
||||
* single allocation, so this script dedicates the whole contiguous RAMGS0-3
|
||||
* block (32 KW) to the heap (.sysmem). The stack stays in low RAMLS0-7 (the
|
||||
* 16-bit SP needs RAM < 0x10000) and .bss/.data live in RAMLS8-9. The full
|
||||
* wolfcrypt test/benchmark are NOT built in this mode (they would not fit
|
||||
* alongside the 32 KW heap), so .bss is small.
|
||||
*
|
||||
* Copyright (C) 2006-2026 wolfSSL Inc. GPLv3 - see project headers.
|
||||
*/
|
||||
|
||||
-stack 0x3000 /* 12 KW C28x stack (< 0x10000); big arrays go to heap via
|
||||
* WOLFSSL_SMALL_STACK */
|
||||
-heap 0x7E00 /* ~31.5 KW heap - ML-DSA-87 keygen/sign peak ~30.5 KW */
|
||||
|
||||
MEMORY
|
||||
{
|
||||
BEGIN : origin = 0x080000, length = 0x000002
|
||||
|
||||
BOOT_RSVD : origin = 0x000002, length = 0x000126 /* M0, used by boot ROM stack */
|
||||
RAMM0 : origin = 0x000128, length = 0x0002D8
|
||||
RAMM1 : origin = 0x000400, length = 0x000400
|
||||
|
||||
/* Low RAM (< 0x10000): the 16-bit-SP stack (12 KW), plus 4 KW of RAM-
|
||||
* resident hot code carved from the top of RAMLS0-7. The stack only uses
|
||||
* 0x3000, so 0xB000..0xBFFF is free for the Keccak permutation. */
|
||||
RAMLS_STACK : origin = 0x008000, length = 0x003000 /* RAMLS0-5, 12 KW */
|
||||
RAMLS_RAMCODE : origin = 0x00B000, length = 0x001000 /* RAMLS6-7, 4 KW */
|
||||
|
||||
/* RAMGS0-3 is one contiguous 32 KW block (0xC000..0x13FFF): the heap. */
|
||||
RAMGS_BIG : origin = 0x00C000, length = 0x008000 /* RAMGS0-3, 32 KW */
|
||||
|
||||
/* High RAM: .bss/.data (no stack here). */
|
||||
RAMLS_HI : origin = 0x014000, length = 0x004000 /* RAMLS8-9, 16 KW */
|
||||
|
||||
/* Flash banks (ML-DSA sign code is large). */
|
||||
FLASH_BANK0 : origin = 0x080002, length = 0x01FFFE
|
||||
FLASH_BANK1 : origin = 0x0A0000, length = 0x020000
|
||||
FLASH_BANK2 : origin = 0x0C0000, length = 0x020000
|
||||
FLASH_BANK3 : origin = 0x0E0000, length = 0x020000
|
||||
FLASH_BANK4 : origin = 0x100000, length = 0x008000
|
||||
|
||||
RESET : origin = 0x3FFFC0, length = 0x000002
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
codestart : > BEGIN
|
||||
.text : >> FLASH_BANK0 | FLASH_BANK1 | FLASH_BANK2 | FLASH_BANK3, ALIGN(8)
|
||||
.cinit : > FLASH_BANK0, ALIGN(8)
|
||||
.switch : > FLASH_BANK0, ALIGN(8)
|
||||
.reset : > RESET, TYPE = DSECT /* unused */
|
||||
|
||||
.stack : > RAMLS_STACK
|
||||
|
||||
.bss : > RAMLS_HI
|
||||
.bss:output : > RAMLS_HI
|
||||
.init_array : > FLASH_BANK0, ALIGN(8)
|
||||
.const : >> FLASH_BANK0 | FLASH_BANK1, ALIGN(8)
|
||||
.data : > RAMLS_HI
|
||||
.sysmem : > RAMGS_BIG
|
||||
|
||||
.TI.ramfunc : { sha3.obj(.text:BlockSha3) }
|
||||
LOAD = FLASH_BANK0,
|
||||
RUN = RAMLS_RAMCODE,
|
||||
LOAD_START(RamfuncsLoadStart),
|
||||
LOAD_SIZE(RamfuncsLoadSize),
|
||||
LOAD_END(RamfuncsLoadEnd),
|
||||
RUN_START(RamfuncsRunStart),
|
||||
RUN_SIZE(RamfuncsRunSize),
|
||||
RUN_END(RamfuncsRunEnd),
|
||||
ALIGN(8)
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
/* ecc_p256_kat.h - deterministic ECDSA P-256 (SECP256R1) known-answer vector.
|
||||
*
|
||||
* Source: RFC 6979 Appendix A.2.5 (P-256), message "sample", hash SHA-256.
|
||||
* Used for an RNG-free verify KAT on the TI C2000 C28x bring-up.
|
||||
*
|
||||
* Brace-init byte arrays (NOT "\x.." string literals): on cl2000 a char[]/byte[]
|
||||
* initialized from a "\x.." string sign-extends bytes >= 0x80 into the 16-bit
|
||||
* cell; a brace-init list stores clean octets.
|
||||
*/
|
||||
#ifndef ECC_P256_KAT_H
|
||||
#define ECC_P256_KAT_H
|
||||
|
||||
/* Public key Q = (Ux, Uy), 32 bytes each, big-endian. */
|
||||
static const unsigned char kat_p256_qx[32] = {
|
||||
0x60,0xFE,0xD4,0xBA,0x25,0x5A,0x9D,0x31,0xC9,0x61,0xEB,0x74,0xC6,0x35,0x6D,0x68,
|
||||
0xC0,0x49,0xB8,0x92,0x3B,0x61,0xFA,0x6C,0xE6,0x69,0x62,0x2E,0x60,0xF2,0x9F,0xB6
|
||||
};
|
||||
static const unsigned char kat_p256_qy[32] = {
|
||||
0x79,0x03,0xFE,0x10,0x08,0xB8,0xBC,0x99,0xA4,0x1A,0xE9,0xE9,0x56,0x28,0xBC,0x64,
|
||||
0xF2,0xF1,0xB2,0x0C,0x2D,0x7E,0x9F,0x51,0x77,0xA3,0xC2,0x94,0xD4,0x46,0x22,0x99
|
||||
};
|
||||
|
||||
/* SHA-256("sample") - the message digest that was signed. */
|
||||
static const unsigned char kat_p256_hash[32] = {
|
||||
0xAF,0x2B,0xDB,0xE1,0xAA,0x9B,0x6E,0xC1,0xE2,0xAD,0xE1,0xD6,0x94,0xF4,0x1F,0xC7,
|
||||
0x1A,0x83,0x1D,0x02,0x68,0xE9,0x89,0x15,0x62,0x11,0x3D,0x8A,0x62,0xAD,0xD1,0xBF
|
||||
};
|
||||
|
||||
/* Signature (r, s), 32 bytes each, big-endian. */
|
||||
static const unsigned char kat_p256_r[32] = {
|
||||
0xEF,0xD4,0x8B,0x2A,0xAC,0xB6,0xA8,0xFD,0x11,0x40,0xDD,0x9C,0xD4,0x5E,0x81,0xD6,
|
||||
0x9D,0x2C,0x87,0x7B,0x56,0xAA,0xF9,0x91,0xC3,0x4D,0x0E,0xA8,0x4E,0xAF,0x37,0x16
|
||||
};
|
||||
static const unsigned char kat_p256_s[32] = {
|
||||
0xF7,0xCB,0x1C,0x94,0x2D,0x65,0x7C,0x41,0xD4,0x36,0xC7,0xA1,0xB6,0xE2,0x9F,0x65,
|
||||
0xF3,0xE9,0x00,0xDB,0xB9,0xAF,0xF4,0x06,0x4D,0xC4,0xAB,0x2F,0x84,0x3A,0xCD,0xA8
|
||||
};
|
||||
|
||||
#endif /* ECC_P256_KAT_H */
|
||||
|
|
@ -0,0 +1,611 @@
|
|||
/* Auto-extracted ML-DSA-87 verify KAT vectors from wolfcrypt/test/test.c
|
||||
* (ml_dsa_87_pub_key + ml_dsa_87_sig). For on-target verify validation. */
|
||||
#ifndef MLDSA87_KAT_H
|
||||
#define MLDSA87_KAT_H
|
||||
static const unsigned char kat_mldsa87_pub[] = {
|
||||
0x8a, 0x66, 0xe3, 0x6e, 0x3c, 0x11, 0x70, 0x9f, 0x82, 0xdd, 0xeb, 0x9e,
|
||||
0xc0, 0xd7, 0x25, 0x87, 0x0c, 0x65, 0x07, 0x9d, 0x47, 0x39, 0x5d, 0x04,
|
||||
0x42, 0x5c, 0xd6, 0x0a, 0xdc, 0x39, 0x44, 0x04, 0xd9, 0x79, 0x43, 0x87,
|
||||
0x98, 0x64, 0x88, 0x82, 0x3a, 0x31, 0xbd, 0xec, 0x66, 0xcb, 0x01, 0x90,
|
||||
0xf9, 0x85, 0xcc, 0xde, 0x54, 0x69, 0x7d, 0x84, 0xb3, 0x84, 0x3c, 0x42,
|
||||
0x0d, 0x09, 0x63, 0xdb, 0xe6, 0x5d, 0xc2, 0x8a, 0xcf, 0xe1, 0xf4, 0x86,
|
||||
0x13, 0x05, 0x09, 0x9a, 0x4d, 0x05, 0xd4, 0x31, 0xe7, 0x27, 0x39, 0xfd,
|
||||
0x3a, 0xdb, 0x63, 0x9f, 0x1c, 0x67, 0x0b, 0x01, 0xec, 0xf9, 0xff, 0xf3,
|
||||
0xda, 0xa9, 0xf4, 0x9a, 0x59, 0x52, 0x76, 0xc2, 0xd2, 0xd5, 0xdd, 0x8d,
|
||||
0xb1, 0xa2, 0xef, 0xb3, 0x73, 0x99, 0xe3, 0xcd, 0x1c, 0xf5, 0xca, 0x6e,
|
||||
0x39, 0xfa, 0x26, 0x83, 0x45, 0xe7, 0xd0, 0x9c, 0x1b, 0xf7, 0xb2, 0x64,
|
||||
0xf1, 0x70, 0x00, 0x10, 0xc0, 0x7c, 0x7f, 0xb2, 0x32, 0xce, 0x6d, 0x71,
|
||||
0xa5, 0x43, 0x7c, 0x40, 0x71, 0x09, 0x54, 0x74, 0xac, 0xb5, 0xeb, 0xe0,
|
||||
0x04, 0x02, 0xe5, 0x82, 0x4d, 0x5a, 0x85, 0x1e, 0x19, 0x86, 0x39, 0x33,
|
||||
0x92, 0x2f, 0xa9, 0xa8, 0x10, 0xd2, 0x31, 0x60, 0x16, 0x08, 0x99, 0xe3,
|
||||
0x2c, 0x93, 0x13, 0xc4, 0x4b, 0x10, 0xe0, 0x42, 0xca, 0x3f, 0x32, 0xa7,
|
||||
0xa4, 0xd2, 0xfc, 0x9c, 0x93, 0xb6, 0x5f, 0xe2, 0x5b, 0x6e, 0x40, 0x0c,
|
||||
0x63, 0xf8, 0xf8, 0xe1, 0x2d, 0xcd, 0x86, 0x07, 0x79, 0xdb, 0x61, 0xad,
|
||||
0x24, 0xfd, 0x1e, 0x66, 0x3e, 0x8d, 0x76, 0xba, 0x98, 0x8e, 0x94, 0xc7,
|
||||
0x57, 0xb1, 0x65, 0xce, 0x4f, 0x97, 0xfa, 0x34, 0x7c, 0x97, 0x6b, 0xcd,
|
||||
0x3c, 0x42, 0x81, 0xa4, 0xd1, 0x75, 0xeb, 0x6d, 0x0c, 0x31, 0x0e, 0x6f,
|
||||
0xd5, 0x75, 0xe7, 0xff, 0x83, 0xdd, 0x7a, 0x4d, 0x83, 0x67, 0xa7, 0x4b,
|
||||
0xc1, 0x74, 0xad, 0x37, 0x38, 0x99, 0xe0, 0xf5, 0x5a, 0x44, 0x36, 0xa2,
|
||||
0x20, 0x2b, 0xfc, 0xc9, 0xfa, 0x68, 0xcb, 0xf0, 0x6f, 0x0a, 0x46, 0x1d,
|
||||
0xb5, 0xca, 0x5b, 0x96, 0x1b, 0x3a, 0xaf, 0x7d, 0x01, 0x7a, 0xd2, 0x09,
|
||||
0xcc, 0xd4, 0xe4, 0xb1, 0x49, 0x34, 0x56, 0x68, 0x9c, 0x0f, 0x23, 0xe9,
|
||||
0xb3, 0x4b, 0xed, 0x3d, 0xe7, 0x8d, 0x19, 0x6e, 0xe6, 0xfa, 0x06, 0x55,
|
||||
0xb8, 0x06, 0x4d, 0xa8, 0x45, 0x20, 0x91, 0xf7, 0xfa, 0x0b, 0x6b, 0xce,
|
||||
0x55, 0xa7, 0x14, 0x1b, 0xf9, 0xea, 0xc5, 0x79, 0x78, 0xf7, 0x3a, 0xd9,
|
||||
0xfc, 0x07, 0x43, 0x06, 0x90, 0x94, 0x5e, 0xc9, 0x48, 0x51, 0xe5, 0x96,
|
||||
0x68, 0x78, 0xc8, 0xcb, 0xd1, 0xf3, 0x65, 0xef, 0x14, 0x91, 0xa3, 0xca,
|
||||
0x8b, 0x77, 0x40, 0x84, 0xf4, 0x2e, 0xe7, 0x56, 0xe3, 0xab, 0xa0, 0xa8,
|
||||
0x61, 0x93, 0x17, 0x95, 0x9e, 0xff, 0x3a, 0xd4, 0x12, 0xea, 0x13, 0xe6,
|
||||
0x82, 0x16, 0xed, 0x14, 0x70, 0x91, 0xcc, 0x72, 0x58, 0x99, 0xa1, 0x7f,
|
||||
0xf3, 0x84, 0x10, 0xf4, 0x01, 0x0d, 0x05, 0x45, 0x4d, 0xca, 0x05, 0x03,
|
||||
0x75, 0x7e, 0xbb, 0x44, 0x2e, 0xf5, 0xee, 0xed, 0x64, 0x9b, 0xd3, 0xde,
|
||||
0x3e, 0xfc, 0x31, 0x8c, 0xca, 0x23, 0x66, 0x25, 0xac, 0x5f, 0x0f, 0x33,
|
||||
0x0f, 0xd2, 0xe9, 0xc9, 0x96, 0x2a, 0xe2, 0xb8, 0xed, 0x93, 0xd3, 0x78,
|
||||
0xd8, 0x81, 0xe4, 0x52, 0x9a, 0xc6, 0x64, 0x1d, 0x2d, 0x5f, 0x93, 0x9a,
|
||||
0x2e, 0x73, 0xc4, 0x17, 0xae, 0xc6, 0x08, 0x0d, 0x2d, 0xe9, 0x4b, 0x10,
|
||||
0x29, 0xa8, 0x4e, 0x8c, 0x08, 0x59, 0x87, 0x10, 0x0d, 0x5d, 0xfa, 0xec,
|
||||
0xd6, 0x42, 0xf6, 0x5c, 0xa4, 0x0d, 0xaa, 0x64, 0x8e, 0x20, 0xa5, 0x50,
|
||||
0x9f, 0x0b, 0x85, 0x37, 0x57, 0x15, 0x7c, 0xb1, 0xe4, 0xdd, 0xd5, 0x19,
|
||||
0x3b, 0x10, 0x7d, 0x22, 0xdb, 0x53, 0x8b, 0x7b, 0x32, 0xf7, 0xf2, 0x24,
|
||||
0x92, 0xb2, 0x05, 0xd1, 0xfd, 0xfc, 0x11, 0xd6, 0xfd, 0x3c, 0x8d, 0xd7,
|
||||
0xb0, 0x58, 0x50, 0x06, 0x84, 0x61, 0xa6, 0x78, 0x04, 0x1d, 0x7f, 0x92,
|
||||
0x0e, 0x8b, 0xb3, 0x63, 0x43, 0xc5, 0x30, 0x4c, 0xce, 0x2b, 0x44, 0x70,
|
||||
0x53, 0x7c, 0xb5, 0xbd, 0x30, 0xcb, 0x41, 0x19, 0x27, 0x69, 0xfe, 0x41,
|
||||
0x92, 0xae, 0xf0, 0x37, 0x33, 0xf0, 0x95, 0xe4, 0xe8, 0x4f, 0x75, 0x41,
|
||||
0x64, 0x87, 0xc5, 0x68, 0xd3, 0xce, 0xfa, 0xaa, 0xe8, 0x59, 0x88, 0xfe,
|
||||
0x24, 0x46, 0x27, 0x60, 0x71, 0x36, 0x78, 0x66, 0x3c, 0x36, 0x8e, 0xdb,
|
||||
0x90, 0x67, 0xa5, 0x6a, 0xfe, 0xd3, 0x23, 0x28, 0x91, 0x34, 0x24, 0x67,
|
||||
0x4b, 0x01, 0x6a, 0x0e, 0x02, 0xb7, 0xf0, 0xa8, 0xd4, 0x76, 0xd5, 0xa8,
|
||||
0x1c, 0xd3, 0xb3, 0x7d, 0x74, 0xc6, 0x17, 0x96, 0xa7, 0xf9, 0xad, 0x24,
|
||||
0x36, 0xd2, 0xeb, 0x34, 0x5a, 0xcc, 0x9c, 0x01, 0x99, 0xbe, 0x21, 0x4f,
|
||||
0x27, 0x9d, 0x6b, 0xca, 0x27, 0x1b, 0x60, 0x51, 0x41, 0x23, 0xe1, 0xcb,
|
||||
0xfc, 0x17, 0x2e, 0x1a, 0x4d, 0x3d, 0x51, 0xb3, 0x91, 0x8c, 0x53, 0x4d,
|
||||
0xd7, 0xbc, 0xa4, 0x07, 0xd7, 0x17, 0x19, 0x18, 0x61, 0x38, 0x4e, 0x05,
|
||||
0x81, 0x3f, 0x43, 0x8a, 0x00, 0x60, 0xdc, 0x30, 0xf4, 0x38, 0x3f, 0x93,
|
||||
0x82, 0x10, 0x29, 0x73, 0xa9, 0xbd, 0x63, 0x15, 0x7d, 0xac, 0x2e, 0xc9,
|
||||
0x05, 0xc1, 0x01, 0x41, 0x18, 0x5a, 0xc0, 0xc8, 0xc7, 0x81, 0x69, 0xe7,
|
||||
0x24, 0x21, 0x57, 0xaf, 0x88, 0x73, 0x7c, 0x53, 0x29, 0xae, 0x5a, 0xdf,
|
||||
0x76, 0x37, 0x56, 0x4f, 0x1f, 0x6b, 0xfd, 0x71, 0xbb, 0x80, 0x4a, 0xd7,
|
||||
0x53, 0x50, 0x10, 0x2d, 0xfc, 0x1a, 0xaf, 0x7c, 0x1f, 0xe8, 0xd0, 0x6c,
|
||||
0xa6, 0x45, 0x3d, 0xb5, 0x3d, 0xb2, 0xfc, 0x97, 0xa9, 0xbf, 0x7c, 0x0f,
|
||||
0x32, 0x7a, 0xcc, 0xa9, 0x2f, 0xd0, 0xc6, 0xe6, 0xcd, 0x04, 0x1d, 0x71,
|
||||
0x91, 0xb9, 0x59, 0x4b, 0xad, 0xa0, 0xde, 0x9e, 0xdc, 0x9c, 0x10, 0xeb,
|
||||
0x8d, 0xd6, 0x65, 0x57, 0xbc, 0x96, 0xfd, 0x0f, 0xcc, 0x73, 0xbe, 0x39,
|
||||
0x27, 0x99, 0x94, 0xf5, 0xe1, 0xbb, 0x32, 0xcd, 0x27, 0x7e, 0x08, 0xa0,
|
||||
0xd2, 0x92, 0x39, 0xeb, 0x71, 0xc8, 0xe8, 0x34, 0x57, 0x34, 0x4b, 0x20,
|
||||
0x3f, 0xe2, 0x68, 0xec, 0xc0, 0x8a, 0x71, 0xa3, 0x16, 0xa2, 0x91, 0x77,
|
||||
0xde, 0x41, 0x12, 0xa5, 0xf5, 0x2a, 0x63, 0x60, 0x55, 0xd0, 0x33, 0xa4,
|
||||
0xa7, 0x2e, 0xcb, 0x80, 0x08, 0xe5, 0x76, 0x16, 0x75, 0x04, 0x57, 0xe3,
|
||||
0x14, 0x71, 0x4e, 0x57, 0x29, 0x23, 0x0e, 0xc0, 0xcc, 0xad, 0xba, 0xdc,
|
||||
0x96, 0x5d, 0x23, 0x49, 0x42, 0xd8, 0x91, 0x08, 0x0d, 0x52, 0xf4, 0x5f,
|
||||
0xcd, 0xb7, 0x03, 0xaa, 0x73, 0x26, 0xa8, 0xd5, 0x5b, 0x0c, 0x85, 0xc8,
|
||||
0x84, 0x50, 0x9e, 0x70, 0x18, 0x45, 0x27, 0x82, 0x20, 0x75, 0xad, 0x52,
|
||||
0x5c, 0x80, 0x4b, 0xb1, 0x0b, 0x3b, 0x30, 0x39, 0x02, 0x54, 0x18, 0x5d,
|
||||
0x02, 0x9e, 0x85, 0x31, 0x4a, 0x07, 0x9c, 0x59, 0x5d, 0xab, 0x13, 0x4f,
|
||||
0x8f, 0x6e, 0x39, 0x20, 0xb2, 0xc5, 0x31, 0x93, 0xc6, 0xcc, 0xfb, 0xdc,
|
||||
0x15, 0xba, 0x3d, 0xcc, 0xbb, 0xd2, 0x6f, 0x04, 0x21, 0xdf, 0x0b, 0x27,
|
||||
0x5c, 0xd2, 0x6e, 0xfa, 0xda, 0x86, 0x5d, 0xe4, 0xca, 0xa4, 0x90, 0x22,
|
||||
0xa2, 0x80, 0xb5, 0x33, 0x17, 0xdb, 0x9b, 0x7b, 0x0a, 0xcc, 0x0f, 0x9b,
|
||||
0x38, 0x06, 0xdf, 0x10, 0x11, 0xa1, 0xd7, 0x2c, 0x24, 0xf0, 0xa8, 0x34,
|
||||
0x24, 0xfb, 0x99, 0xba, 0x0a, 0xb5, 0xa1, 0x94, 0x6c, 0x2d, 0xf8, 0xda,
|
||||
0x74, 0xaf, 0x19, 0x59, 0x84, 0xb2, 0x68, 0x1c, 0xef, 0xa1, 0xf5, 0x18,
|
||||
0x8f, 0x10, 0xf6, 0xb3, 0x6d, 0x33, 0x87, 0xe0, 0x25, 0xc8, 0x65, 0x5c,
|
||||
0x2f, 0x51, 0x07, 0x83, 0x69, 0x1b, 0xce, 0xa8, 0xe6, 0xe4, 0x27, 0x62,
|
||||
0x5d, 0x9b, 0x7f, 0xa7, 0x07, 0xc8, 0x54, 0x86, 0x90, 0xa5, 0x06, 0x6a,
|
||||
0x94, 0x80, 0x84, 0x97, 0xaa, 0x2a, 0xb9, 0x79, 0xe5, 0x19, 0x7a, 0x91,
|
||||
0xef, 0x8b, 0x58, 0xdc, 0xf9, 0x90, 0x94, 0xa2, 0x25, 0x4c, 0x69, 0xd8,
|
||||
0x6e, 0x9e, 0xad, 0xf8, 0x82, 0x17, 0x37, 0xc9, 0x20, 0x15, 0x24, 0x40,
|
||||
0xe5, 0xc6, 0xc1, 0xc7, 0xbd, 0xd4, 0x62, 0xff, 0x16, 0x6d, 0xa5, 0xec,
|
||||
0xe9, 0x67, 0x41, 0x9d, 0x3e, 0xfb, 0x22, 0x81, 0x80, 0x61, 0x37, 0x45,
|
||||
0xa5, 0x9f, 0x70, 0xff, 0xd4, 0x99, 0x3d, 0x79, 0x45, 0xd0, 0x27, 0xc2,
|
||||
0x32, 0xbe, 0xd4, 0xe2, 0x53, 0xa8, 0x8c, 0x94, 0x8b, 0xbe, 0x8a, 0x43,
|
||||
0xf7, 0x2a, 0x28, 0x49, 0xf4, 0xce, 0x2e, 0x0b, 0x98, 0xc7, 0xaf, 0x7d,
|
||||
0x51, 0x2e, 0xda, 0xd0, 0x7a, 0xfa, 0x91, 0x3a, 0xe6, 0xe7, 0x64, 0xd6,
|
||||
0x09, 0xd8, 0x5d, 0x6a, 0x97, 0xcf, 0x89, 0x96, 0x72, 0x21, 0x97, 0x61,
|
||||
0xc5, 0x1b, 0xd8, 0xa1, 0xf0, 0xcd, 0x9d, 0xe4, 0xe9, 0x13, 0xd0, 0x16,
|
||||
0x41, 0x20, 0xa4, 0x2c, 0x33, 0xf5, 0x3d, 0xfe, 0x80, 0xe8, 0xb2, 0x52,
|
||||
0x0e, 0x18, 0x31, 0x19, 0x50, 0xeb, 0xc6, 0x99, 0x43, 0xab, 0x9a, 0x59,
|
||||
0x5d, 0x6c, 0x84, 0x00, 0x88, 0x45, 0x7c, 0x73, 0xdf, 0x56, 0x61, 0x3a,
|
||||
0xe1, 0x55, 0xb8, 0x59, 0x13, 0xcc, 0x0e, 0x53, 0xe9, 0xf4, 0x74, 0xa0,
|
||||
0xf2, 0x15, 0xd2, 0xa8, 0xf9, 0xd4, 0x0d, 0x3d, 0xe7, 0x3d, 0x7d, 0x5b,
|
||||
0x19, 0x89, 0x8b, 0x2c, 0x4d, 0x8a, 0xeb, 0xc3, 0x43, 0x31, 0x9a, 0x45,
|
||||
0x72, 0x5b, 0x25, 0xb6, 0xa2, 0xc1, 0x98, 0xe3, 0x8a, 0xd4, 0x90, 0xd0,
|
||||
0x3e, 0x13, 0xf0, 0xd7, 0x90, 0x34, 0x94, 0xcc, 0xf1, 0x0a, 0xa9, 0x30,
|
||||
0xd1, 0x95, 0x43, 0x07, 0xcd, 0xd2, 0xca, 0xb0, 0xe5, 0xd4, 0xf1, 0xa1,
|
||||
0xc5, 0x9b, 0xf4, 0x98, 0x28, 0xba, 0xde, 0x40, 0xd6, 0x98, 0x98, 0x20,
|
||||
0x9c, 0x84, 0x9e, 0xc6, 0x57, 0xd8, 0x84, 0xc4, 0xa2, 0x9b, 0x53, 0x50,
|
||||
0xa5, 0xa6, 0x0b, 0x47, 0xe8, 0x08, 0x7d, 0xd7, 0x09, 0xa4, 0x0c, 0x2b,
|
||||
0x27, 0xde, 0xf9, 0x78, 0xbc, 0xa4, 0xb6, 0xc6, 0x1b, 0xda, 0xce, 0x6a,
|
||||
0xf8, 0x1a, 0xf5, 0xfe, 0x7b, 0xab, 0x58, 0x7c, 0xdc, 0x72, 0x02, 0x94,
|
||||
0x99, 0xf0, 0x3c, 0x37, 0x87, 0x5b, 0xd2, 0x4b, 0x5a, 0x80, 0x83, 0xd7,
|
||||
0xfc, 0x9d, 0xa7, 0x51, 0x81, 0xb8, 0x62, 0xff, 0x4b, 0xb3, 0x9f, 0x07,
|
||||
0xc3, 0x54, 0xfb, 0x41, 0x85, 0x42, 0x9d, 0xac, 0x27, 0x81, 0x2e, 0xaf,
|
||||
0x98, 0x67, 0x8c, 0x23, 0xad, 0x45, 0xfe, 0x6a, 0x57, 0x9f, 0x18, 0xc5,
|
||||
0x71, 0x8c, 0xad, 0x3f, 0x30, 0x3c, 0xaa, 0x47, 0x8d, 0xba, 0xc8, 0x7f,
|
||||
0x03, 0x1c, 0x86, 0xee, 0xba, 0x3f, 0x59, 0x45, 0xd4, 0xd0, 0xf5, 0x54,
|
||||
0x9e, 0xcb, 0x08, 0xcf, 0xca, 0x40, 0x0a, 0x06, 0xc0, 0x1e, 0x60, 0x1f,
|
||||
0x33, 0xbf, 0x2c, 0xa8, 0x5f, 0xce, 0x23, 0xa0, 0xe2, 0x1c, 0x2d, 0x56,
|
||||
0x2a, 0x44, 0x61, 0x58, 0xf1, 0x84, 0x63, 0x4f, 0x0d, 0x5e, 0xfb, 0x83,
|
||||
0x0f, 0x36, 0x1b, 0xf4, 0x8f, 0x17, 0x82, 0x2e, 0x04, 0x2c, 0x77, 0x9d,
|
||||
0x32, 0x58, 0xb8, 0xb0, 0xf9, 0x44, 0xd2, 0xf6, 0x84, 0xa4, 0x8b, 0x28,
|
||||
0x53, 0xd6, 0x99, 0x81, 0x84, 0x43, 0xf0, 0xc1, 0x15, 0xc6, 0x74, 0x4f,
|
||||
0xab, 0x05, 0xcc, 0x80, 0xdf, 0xef, 0xcf, 0xaf, 0x14, 0x82, 0xdf, 0x51,
|
||||
0x7c, 0x28, 0x5e, 0x5b, 0x27, 0x5e, 0x91, 0x8b, 0x54, 0x3d, 0x54, 0x26,
|
||||
0xb0, 0x3f, 0xd7, 0xc5, 0xce, 0xf3, 0x6d, 0x2c, 0x12, 0xc6, 0xb4, 0x48,
|
||||
0x60, 0x11, 0x9c, 0xef, 0x29, 0x98, 0x9c, 0x76, 0x4e, 0x73, 0x2b, 0xd2,
|
||||
0x23, 0x53, 0x7d, 0x03, 0xc2, 0x2f, 0x8a, 0xa1, 0xe2, 0x84, 0x54, 0x2d,
|
||||
0xd8, 0xc6, 0x55, 0x77, 0x9d, 0x07, 0x67, 0x1f, 0x1a, 0xd3, 0x57, 0x4c,
|
||||
0x25, 0x79, 0x8f, 0xd8, 0x82, 0xc2, 0x4d, 0x87, 0x84, 0x33, 0xdc, 0x47,
|
||||
0xed, 0x9e, 0xfb, 0xd2, 0x62, 0xc8, 0x50, 0x76, 0xda, 0x3c, 0x3c, 0x05,
|
||||
0x0e, 0x2d, 0x30, 0x56, 0xca, 0x4d, 0x6a, 0xe2, 0x17, 0x24, 0x26, 0x9c,
|
||||
0xff, 0x09, 0xec, 0xb3, 0x94, 0xec, 0xab, 0x69, 0xb2, 0xf0, 0xa5, 0x66,
|
||||
0x18, 0x92, 0x49, 0x6b, 0x90, 0xf5, 0x77, 0x5a, 0x18, 0xe5, 0x51, 0x36,
|
||||
0x4a, 0x35, 0x54, 0x98, 0x48, 0x04, 0xa9, 0x0f, 0xcb, 0x55, 0xf1, 0x71,
|
||||
0xad, 0x1a, 0x4a, 0x2c, 0x0e, 0x5d, 0x5e, 0x77, 0x47, 0xf5, 0x46, 0x17,
|
||||
0x6b, 0x94, 0x2a, 0xbc, 0x40, 0xe5, 0xa7, 0xa6, 0x88, 0x41, 0x76, 0x22,
|
||||
0x47, 0xd1, 0xe8, 0x2b, 0x18, 0x48, 0x21, 0xc0, 0xe8, 0x4f, 0xe2, 0xb2,
|
||||
0x7e, 0x03, 0xbb, 0x25, 0x9c, 0xc8, 0x68, 0x66, 0x48, 0x25, 0x6a, 0xf2,
|
||||
0x64, 0x29, 0xec, 0x79, 0xba, 0xdb, 0x34, 0xe1, 0xd4, 0xf9, 0x52, 0x0e,
|
||||
0xfd, 0x8d, 0x86, 0x94, 0x71, 0xd8, 0xe0, 0x86, 0x02, 0x9b, 0xd4, 0x65,
|
||||
0x69, 0x5e, 0x01, 0x32, 0x87, 0x59, 0xd8, 0x6c, 0xbc, 0x8a, 0x9f, 0x58,
|
||||
0x28, 0x8c, 0x97, 0xef, 0x33, 0xb2, 0xda, 0x45, 0xa0, 0xec, 0xe5, 0x5b,
|
||||
0xac, 0xc6, 0x65, 0xc1, 0xb6, 0xcb, 0xf7, 0x85, 0x0e, 0xfa, 0x78, 0x36,
|
||||
0x30, 0x84, 0x90, 0xa8, 0xf8, 0x42, 0x25, 0xa5, 0xdd, 0xdc, 0xdc, 0x89,
|
||||
0xd3, 0xf0, 0x73, 0x9a, 0xd8, 0x95, 0x8f, 0x04, 0xbf, 0xc1, 0xfd, 0x94,
|
||||
0xff, 0xe6, 0xf8, 0x4e, 0xc6, 0x43, 0xc9, 0x60, 0x30, 0xe9, 0x68, 0xa8,
|
||||
0x76, 0xfb, 0xfa, 0xdf, 0xc0, 0x9b, 0xbc, 0xbc, 0x34, 0xe4, 0x38, 0xfd,
|
||||
0x93, 0xb0, 0x47, 0xb2, 0x3e, 0x83, 0x6c, 0xef, 0xe1, 0xaf, 0x35, 0xb4,
|
||||
0x90, 0x2a, 0x32, 0xaf, 0x25, 0x3f, 0x3e, 0x72, 0x61, 0xc0, 0x0f, 0x29,
|
||||
0xbb, 0x46, 0x6e, 0x2e, 0x94, 0x7d, 0xdd, 0xb7, 0x67, 0x1f, 0x7b, 0x64,
|
||||
0xcb, 0xa5, 0x9a, 0x58, 0x63, 0x20, 0xa7, 0xc0, 0x94, 0xa9, 0xad, 0x90,
|
||||
0x7d, 0xf3, 0x2b, 0x61, 0x2b, 0x64, 0x3d, 0x8a, 0xc3, 0xd1, 0xcb, 0xad,
|
||||
0x36, 0x44, 0xe6, 0x29, 0x8b, 0x3d, 0x95, 0x7c, 0xa7, 0xa2, 0xfa, 0x1b,
|
||||
0x16, 0x8d, 0x9e, 0xc4, 0xf8, 0x4c, 0x76, 0x20, 0x00, 0x68, 0x07, 0x99,
|
||||
0x9c, 0x60, 0xe6, 0x16, 0x6a, 0x6f, 0x8a, 0xbe, 0x71, 0x95, 0xa1, 0xcb,
|
||||
0xfe, 0x7c, 0x41, 0x59, 0x61, 0x20, 0xf9, 0x54, 0x3c, 0xb1, 0x19, 0x5c,
|
||||
0x42, 0x67, 0x3f, 0xff, 0xf3, 0x32, 0x21, 0x9c, 0x9e, 0x88, 0xf9, 0x97,
|
||||
0x00, 0x43, 0x73, 0x4a, 0xfc, 0x54, 0xeb, 0x27, 0x79, 0x14, 0x85, 0xd3,
|
||||
0xdc, 0x47, 0xb3, 0x6d, 0x24, 0xd3, 0xf7, 0x7a, 0xfb, 0x90, 0x7c, 0x6e,
|
||||
0xcd, 0x4e, 0xbf, 0x26, 0x76, 0xd2, 0xe8, 0xcc, 0x67, 0xd1, 0x23, 0x3c,
|
||||
0x94, 0x16, 0x1e, 0x07, 0x36, 0x7c, 0x96, 0xf6, 0xe8, 0x50, 0x72, 0x26,
|
||||
0x56, 0x67, 0x89, 0xa9, 0x11, 0xfb, 0x1d, 0xb8, 0xb9, 0x2a, 0x55, 0xb7,
|
||||
0x85, 0xf7, 0x40, 0xa2, 0xfc, 0x9f, 0x30, 0xec, 0x8f, 0x9a, 0x1c, 0xc8,
|
||||
0xe4, 0xc5, 0x1f, 0xcb, 0x0a, 0x60, 0x80, 0x41, 0xec, 0x88, 0x8a, 0xda,
|
||||
0x7c, 0x7a, 0xa1, 0x96, 0x51, 0x62, 0x16, 0x63, 0x75, 0x36, 0x28, 0x7c,
|
||||
0xc9, 0xd0, 0x27, 0x0c, 0x9e, 0x18, 0x4a, 0x82, 0xf7, 0x02, 0xb9, 0x40,
|
||||
0x8f, 0xd5, 0x97, 0x7a, 0x35, 0xa9, 0x3a, 0xb3, 0x8b, 0x6b, 0xf1, 0x9a,
|
||||
0xd1, 0xe7, 0x14, 0x38, 0x5e, 0xba, 0x8c, 0xbf, 0x32, 0xaa, 0x34, 0x30,
|
||||
0x7c, 0x1e, 0x11, 0xcd, 0x1f, 0x9f, 0xcf, 0x4d, 0x14, 0xce, 0x67, 0xf9,
|
||||
0x9c, 0x89, 0x07, 0x92, 0x44, 0x6e, 0x9a, 0x16, 0xe4, 0xfb, 0x67, 0x01,
|
||||
0x3f, 0x4c, 0x14, 0x89, 0x33, 0x87, 0x46, 0xc6, 0xe4, 0x66, 0x94, 0xd4,
|
||||
0x87, 0x4f, 0x2c, 0x92, 0x1b, 0xae, 0x82, 0xe7, 0x99, 0xaa, 0xb4, 0x99,
|
||||
0x81, 0x26, 0xa6, 0x6f, 0x1d, 0xc1, 0x95, 0x80, 0xe9, 0xea, 0xe3, 0x44,
|
||||
0x6a, 0x2b, 0xd2, 0xe0, 0x0d, 0x69, 0x42, 0xf7, 0x27, 0x6b, 0x4f, 0x02,
|
||||
0x7a, 0x33, 0x7b, 0x43, 0x3d, 0xef, 0x10, 0xaa, 0xab, 0xc5, 0xa2, 0xf0,
|
||||
0xbb, 0x07, 0x4b, 0x26, 0x0c, 0x58, 0xcd, 0x3b, 0xd2, 0x6d, 0xa5, 0x32,
|
||||
0x37, 0x88, 0x4e, 0x8b, 0xe3, 0x75, 0xb0, 0xbb, 0x87, 0xea, 0xa4, 0x53,
|
||||
0xf3, 0xff, 0x39, 0x92, 0x44, 0xab, 0x7b, 0x71, 0x62, 0x31, 0x6b, 0x31,
|
||||
0xca, 0x97, 0xba, 0xd7, 0x41, 0xe0, 0x47, 0x47, 0x4f, 0x77, 0xa2, 0x35,
|
||||
0x62, 0x7a, 0xc1, 0xb6, 0x69, 0x10, 0x09, 0xce, 0xfc, 0x92, 0xcc, 0xc5,
|
||||
0x7a, 0x11, 0xf1, 0xc1, 0xa0, 0x80, 0xe5, 0x42, 0x17, 0xb6, 0x3f, 0xab,
|
||||
0xc1, 0xa2, 0x41, 0xfb, 0xe3, 0x98, 0x2d, 0x7a, 0xe4, 0x1b, 0x1f, 0x7e,
|
||||
0x71, 0x3c, 0x3e, 0x90, 0x8c, 0x60, 0x30, 0xb7, 0x73, 0x06, 0x1f, 0x8a,
|
||||
0xce, 0x50, 0x20, 0x7c, 0xfa, 0x8c, 0xf2, 0x14, 0xd9, 0x00, 0xa2, 0x21,
|
||||
0xea, 0x10, 0x36, 0x21, 0x6f, 0x7f, 0x13, 0xe3, 0x6c, 0xb2, 0xd6, 0xa5,
|
||||
0xa6, 0x6e, 0xa9, 0xe7, 0x1d, 0xdf, 0xc9, 0x97, 0x60, 0x75, 0xa3, 0x55,
|
||||
0xa1, 0x2c, 0x94, 0xd7, 0x85, 0x4b, 0x44, 0xc6, 0x9c, 0x17, 0xc2, 0xad,
|
||||
0xe6, 0x56, 0x72, 0x1d, 0xb9, 0x13, 0x54, 0xfe, 0x8c, 0xec, 0xf4, 0xa3,
|
||||
0x54, 0x6b, 0x31, 0xbc, 0x55, 0x9e, 0x01, 0xd4, 0x9b, 0x24, 0x9e, 0x51,
|
||||
0xaf, 0x67, 0x76, 0x02, 0xf7, 0x34, 0x6a, 0xaa, 0xb0, 0x3c, 0x70, 0x2e,
|
||||
0xc8, 0x86, 0xfa, 0x40, 0x89, 0x12, 0xb7, 0x49, 0x38, 0x0b, 0xf7, 0x66,
|
||||
0xd2, 0x2e, 0x58, 0xf1, 0x22, 0x3b, 0xb3, 0x40, 0x6b, 0x7a, 0x68, 0x4d,
|
||||
0x42, 0xfd, 0xbf, 0xa0, 0xf7, 0x2f, 0x63, 0x4a, 0x87, 0xe7, 0x99, 0x52,
|
||||
0x6e, 0xe7, 0xdd, 0xca, 0x19, 0x71, 0xee, 0x92, 0xe2, 0x68, 0x0e, 0xe1,
|
||||
0xb7, 0x90, 0x1f, 0xc4, 0xef, 0xf8, 0xf6, 0x85, 0x53, 0x18, 0x33, 0x86,
|
||||
0x15, 0xc8, 0x29, 0x58, 0x6f, 0xf0, 0x1c, 0x14, 0x73, 0xa9, 0x8e, 0x88,
|
||||
0x74, 0xd4, 0x21, 0xf5, 0xc6, 0x7c, 0xd8, 0x96, 0x0f, 0xb0, 0xa6, 0x7b,
|
||||
0xf7, 0x72, 0x15, 0xd7, 0x30, 0x6b, 0x15, 0x1d, 0x3f, 0xb7, 0x4e, 0xaa,
|
||||
0xc0, 0x52, 0x1d, 0x84, 0xbf, 0x98, 0xbd, 0x33, 0x02, 0xab, 0x8b, 0xd0,
|
||||
0x9c, 0x85, 0x2f, 0xa3, 0xfb, 0x46, 0x8d, 0x4d, 0x97, 0x1a, 0x8a, 0x3c,
|
||||
0x73, 0x5b, 0x3b, 0x58, 0x26, 0xba, 0x6b, 0x45, 0x2e, 0x24, 0x66, 0x79,
|
||||
0x7d, 0xc4, 0xf8, 0x8c, 0x05, 0x7d, 0x5c, 0x23, 0xb9, 0xe8, 0x5d, 0xfe,
|
||||
0xc9, 0x84, 0xe5, 0x58, 0x40, 0xa4, 0xb7, 0x55, 0x74, 0x69, 0x92, 0x9c,
|
||||
0x3e, 0x19, 0xb1, 0xb6, 0x51, 0xe9, 0x71, 0xcc, 0x96, 0x2b, 0x01, 0x71,
|
||||
0xf5, 0xb9, 0xde, 0x77, 0xfe, 0x2e, 0x74, 0x9c, 0x6a, 0x52, 0x17, 0x1e,
|
||||
0xea, 0xd9, 0xc8, 0x14, 0xbe, 0x61, 0xdf, 0xe9, 0x96, 0x24, 0x5a, 0x9a,
|
||||
0xd8, 0xd7, 0xad, 0x71, 0xe0, 0xf4, 0xbb, 0x9e, 0xae, 0x95, 0xcd, 0x58,
|
||||
0x94, 0x81, 0xee, 0x46, 0x84, 0x65, 0x39, 0xb1, 0x1b, 0x1e, 0xf5, 0x50,
|
||||
0xad, 0x56, 0x58, 0xb7, 0x53, 0x9b, 0x2a, 0x2f, 0x09, 0x61, 0x57, 0xda,
|
||||
0xf5, 0xdc, 0x9f, 0x3c, 0x6c, 0x69, 0x0d, 0x61, 0x49, 0xb2, 0xe0, 0xb2,
|
||||
0xe5, 0xef, 0x19, 0xbe, 0x04, 0xf6, 0x6b, 0xad, 0x41, 0x4c, 0x5a, 0x50,
|
||||
0xf6, 0xac, 0x1b, 0x25, 0x8a, 0xdd, 0xe3, 0x57, 0xab, 0x7c, 0x92, 0xe4
|
||||
};
|
||||
static const unsigned char kat_mldsa87_sig[] = {
|
||||
0x20, 0xff, 0x12, 0xe1, 0x87, 0xf6, 0x11, 0x38, 0xff, 0x41, 0xd0, 0x8f,
|
||||
0xcd, 0x7e, 0xd1, 0xf6, 0x21, 0x17, 0xd0, 0x46, 0xe9, 0x86, 0x83, 0x1b,
|
||||
0xaf, 0xe5, 0x2b, 0x59, 0x21, 0xd1, 0x6b, 0xc9, 0xdb, 0x34, 0xdc, 0xba,
|
||||
0xfd, 0xd3, 0xf8, 0x71, 0x49, 0xd8, 0x31, 0xbc, 0x48, 0x83, 0x22, 0x7b,
|
||||
0xfd, 0x6a, 0x93, 0xa6, 0x39, 0x4c, 0xda, 0xdb, 0x15, 0xe7, 0x41, 0x14,
|
||||
0xb4, 0xb8, 0xfe, 0xb0, 0x1f, 0xf9, 0x0a, 0x2c, 0x0b, 0xc0, 0xac, 0x09,
|
||||
0x84, 0x69, 0x5e, 0x64, 0x8c, 0xa8, 0xee, 0xa1, 0x52, 0x22, 0xde, 0x0d,
|
||||
0xc7, 0x25, 0xef, 0xa8, 0xfd, 0x8c, 0xb9, 0x45, 0x4f, 0xa4, 0x9c, 0xbc,
|
||||
0x70, 0xf2, 0x88, 0xea, 0x79, 0x13, 0xb0, 0xfc, 0xe6, 0x41, 0x48, 0x1c,
|
||||
0x33, 0x48, 0xa2, 0x77, 0x75, 0x37, 0x9f, 0xc1, 0x86, 0x94, 0xcd, 0x69,
|
||||
0x98, 0x87, 0x47, 0x49, 0x75, 0x93, 0xf1, 0xa4, 0x2d, 0x8e, 0xa8, 0x7e,
|
||||
0x0f, 0x95, 0xf5, 0x3e, 0x5d, 0x31, 0x2d, 0xc9, 0x58, 0x1c, 0x42, 0xfd,
|
||||
0x79, 0x6a, 0x49, 0xa3, 0x84, 0xc5, 0x2e, 0x8d, 0x96, 0x9c, 0xc8, 0x05,
|
||||
0x93, 0xdb, 0x6d, 0xbf, 0x83, 0x34, 0xc2, 0x81, 0x47, 0x90, 0xc9, 0xa9,
|
||||
0x82, 0xbd, 0xe1, 0xc8, 0x89, 0xa2, 0x36, 0x47, 0xed, 0xfb, 0x47, 0x57,
|
||||
0x01, 0x1a, 0x75, 0x8c, 0x6b, 0x83, 0xcf, 0x56, 0xae, 0x52, 0x66, 0x8b,
|
||||
0xab, 0x7f, 0x0c, 0xec, 0xde, 0x5c, 0x13, 0xbe, 0xbd, 0x5b, 0x74, 0x28,
|
||||
0xb5, 0xd7, 0x68, 0xd5, 0xd2, 0xe9, 0x96, 0x3b, 0x55, 0xda, 0x3a, 0x93,
|
||||
0x3c, 0xd9, 0x9f, 0x53, 0x2a, 0x31, 0x84, 0x45, 0x3f, 0xee, 0x2b, 0xfc,
|
||||
0x92, 0xb0, 0x9c, 0xc6, 0x16, 0x16, 0x4f, 0x33, 0x41, 0x17, 0x58, 0xbe,
|
||||
0x5d, 0x57, 0x4b, 0x04, 0x82, 0xe3, 0xb3, 0x68, 0xdf, 0x7c, 0x93, 0xce,
|
||||
0x9d, 0xf6, 0x7e, 0x21, 0x3d, 0x28, 0x1c, 0xf0, 0x37, 0x46, 0xf2, 0xc2,
|
||||
0x73, 0x7c, 0xbe, 0x98, 0x0e, 0x09, 0x75, 0xa7, 0x21, 0x11, 0xa9, 0xd6,
|
||||
0xd1, 0x47, 0xac, 0xd0, 0x19, 0x48, 0x3b, 0x74, 0xc1, 0x3c, 0x37, 0x43,
|
||||
0x49, 0x12, 0x62, 0xee, 0xaf, 0x5c, 0x38, 0xf7, 0x8a, 0xce, 0xb3, 0x7a,
|
||||
0x05, 0x16, 0xd4, 0x71, 0x8b, 0xbe, 0x1a, 0xe0, 0x1e, 0xbc, 0x4b, 0x54,
|
||||
0x0f, 0xb5, 0x73, 0x2b, 0xb8, 0x3a, 0x75, 0xf0, 0x26, 0xcd, 0xf9, 0xca,
|
||||
0x32, 0xf9, 0x7e, 0x15, 0x38, 0x75, 0x9c, 0x4d, 0xbc, 0x11, 0xf8, 0xea,
|
||||
0x8e, 0xe8, 0x38, 0x17, 0xc5, 0x62, 0xf4, 0x34, 0xfb, 0xd6, 0xf5, 0x76,
|
||||
0xfc, 0xa3, 0xf3, 0x44, 0xf9, 0xab, 0x2e, 0x9a, 0x68, 0xcd, 0xa1, 0x29,
|
||||
0xff, 0xda, 0xe8, 0xb5, 0xb0, 0x20, 0x5d, 0x02, 0x01, 0x62, 0x26, 0x44,
|
||||
0x32, 0xc8, 0x94, 0xf8, 0xf1, 0xaa, 0xf9, 0xc2, 0x86, 0xcb, 0x55, 0x7f,
|
||||
0x8d, 0xb3, 0xf6, 0x63, 0xb1, 0xa4, 0x95, 0x57, 0xb8, 0x1d, 0xc3, 0x42,
|
||||
0xd2, 0x4b, 0x69, 0xcd, 0x7a, 0x10, 0x5b, 0x6a, 0x13, 0xd1, 0x02, 0x98,
|
||||
0x38, 0x87, 0x9b, 0x9a, 0x5a, 0x66, 0x73, 0xcb, 0x75, 0xd0, 0x7a, 0x4b,
|
||||
0xad, 0x23, 0x06, 0x1c, 0xc8, 0x6b, 0x0c, 0xa8, 0xfe, 0x7b, 0x8f, 0x65,
|
||||
0x50, 0xd7, 0xf7, 0x76, 0x88, 0x42, 0xe0, 0x5e, 0x18, 0x91, 0x8b, 0x99,
|
||||
0x37, 0x56, 0x08, 0x91, 0xe7, 0x01, 0xe7, 0x05, 0xd5, 0xed, 0x43, 0x25,
|
||||
0x71, 0x7e, 0x3e, 0xfc, 0xc4, 0xfd, 0xed, 0x8b, 0x85, 0x16, 0x8c, 0xe3,
|
||||
0x05, 0xee, 0x51, 0x02, 0xa4, 0x4b, 0xd8, 0x3c, 0xcf, 0x4d, 0x2f, 0x2d,
|
||||
0x68, 0x6e, 0xc1, 0xd5, 0xfa, 0x91, 0xfd, 0x6a, 0xe0, 0x64, 0x85, 0x35,
|
||||
0x9c, 0x75, 0xe6, 0x0d, 0xb8, 0xec, 0x97, 0x88, 0x62, 0x98, 0x78, 0x75,
|
||||
0xc7, 0x1e, 0x68, 0xa7, 0xb9, 0x7b, 0xab, 0x75, 0x7a, 0x72, 0x3c, 0x7b,
|
||||
0xab, 0x60, 0x03, 0xb7, 0x38, 0x13, 0xe4, 0x96, 0x6e, 0xcb, 0x95, 0xcc,
|
||||
0xdc, 0x6a, 0x47, 0x67, 0x77, 0xd7, 0x95, 0xc4, 0x87, 0x66, 0xc2, 0x7e,
|
||||
0x42, 0x90, 0x59, 0x4f, 0xd6, 0xf3, 0xf4, 0xa7, 0xd0, 0x29, 0xf9, 0x5d,
|
||||
0x4b, 0x06, 0x06, 0xf7, 0x6e, 0xb2, 0xab, 0xb0, 0x8e, 0x21, 0xa6, 0xff,
|
||||
0x5e, 0x7b, 0x47, 0xb6, 0x3a, 0xa6, 0x9e, 0x19, 0xf6, 0xdf, 0x9b, 0x3b,
|
||||
0x3d, 0x07, 0x37, 0xd1, 0x0b, 0xa8, 0xf3, 0x9c, 0x43, 0x89, 0xee, 0xba,
|
||||
0x03, 0xee, 0x38, 0x74, 0x13, 0x09, 0x8e, 0x47, 0x4e, 0xa9, 0x14, 0xf5,
|
||||
0xb0, 0x55, 0xe0, 0x03, 0xe5, 0xb9, 0x53, 0xef, 0x03, 0x15, 0x60, 0xb3,
|
||||
0x4a, 0x71, 0x31, 0x4b, 0xf1, 0xc8, 0xe4, 0x63, 0x9b, 0x8b, 0x78, 0x3c,
|
||||
0x1f, 0xac, 0x27, 0x20, 0xa8, 0x53, 0x7d, 0xdd, 0x72, 0xd3, 0x90, 0x8f,
|
||||
0x71, 0xa6, 0xa7, 0xeb, 0xb0, 0xeb, 0x42, 0x96, 0xa4, 0xc3, 0xba, 0xc6,
|
||||
0x3c, 0xe7, 0x7b, 0x15, 0x1e, 0xfa, 0x15, 0x23, 0x37, 0xf3, 0xc8, 0xb2,
|
||||
0xf9, 0x46, 0x04, 0xd1, 0x5e, 0x44, 0xd7, 0x8f, 0x70, 0xb1, 0x0a, 0xde,
|
||||
0x6a, 0xe3, 0xaf, 0x9e, 0x49, 0x55, 0x78, 0x79, 0x11, 0x22, 0x87, 0xa9,
|
||||
0x54, 0x7c, 0xb4, 0x83, 0xe1, 0x25, 0xcd, 0x89, 0xa6, 0x91, 0x21, 0x7b,
|
||||
0xbe, 0x3d, 0x2f, 0x46, 0xb5, 0x5b, 0x50, 0x1a, 0xc8, 0x8d, 0x32, 0xf3,
|
||||
0x62, 0x1f, 0x24, 0x64, 0xe8, 0xb6, 0x02, 0x4f, 0x1f, 0x52, 0x3c, 0x40,
|
||||
0xfc, 0x72, 0x38, 0xd4, 0xba, 0x40, 0x8e, 0xb7, 0xc0, 0x97, 0x06, 0x16,
|
||||
0xd5, 0xe3, 0x39, 0x45, 0xd7, 0x7c, 0x0e, 0xed, 0x6b, 0x19, 0x19, 0x0a,
|
||||
0x8e, 0xcb, 0x2b, 0xee, 0x4d, 0xa1, 0x5e, 0x84, 0x22, 0x66, 0xcd, 0x4f,
|
||||
0xb9, 0x1a, 0x25, 0x85, 0x02, 0xc0, 0x67, 0xc4, 0xd5, 0x1a, 0xcb, 0xbb,
|
||||
0xde, 0x4d, 0x3c, 0x3c, 0x62, 0x9f, 0x76, 0x8f, 0x15, 0x29, 0xa5, 0xbb,
|
||||
0x5a, 0x48, 0x38, 0x66, 0xfa, 0x56, 0x0a, 0x09, 0xbd, 0xdf, 0xdf, 0x4a,
|
||||
0xe7, 0x0e, 0xa6, 0xb1, 0xb5, 0x7c, 0xe1, 0xed, 0x8d, 0x63, 0x07, 0x42,
|
||||
0xf3, 0xf8, 0x15, 0x28, 0x7c, 0x09, 0xf5, 0x02, 0x69, 0x1b, 0x88, 0x1e,
|
||||
0x3d, 0xad, 0x5f, 0x46, 0xed, 0xab, 0x2b, 0x11, 0x96, 0x73, 0xa8, 0xe8,
|
||||
0xe6, 0x64, 0x7d, 0xae, 0x13, 0xa1, 0x7d, 0x54, 0xae, 0xc0, 0x82, 0xeb,
|
||||
0x2a, 0xd1, 0x76, 0xb7, 0x9f, 0xbd, 0x33, 0x8f, 0xe7, 0xe6, 0x79, 0x92,
|
||||
0xa6, 0xaf, 0x61, 0x91, 0x49, 0xbc, 0xd2, 0x3c, 0x6f, 0x8b, 0xbe, 0x8f,
|
||||
0x5f, 0x1f, 0x00, 0x2c, 0x2e, 0x2c, 0xa0, 0x14, 0xcf, 0x34, 0x42, 0x44,
|
||||
0x41, 0x11, 0xd7, 0x37, 0xd3, 0x99, 0x44, 0x36, 0x43, 0x03, 0xb9, 0x50,
|
||||
0x4f, 0xab, 0xfe, 0x48, 0xe2, 0x4b, 0xed, 0x51, 0x8b, 0xe0, 0x04, 0x3c,
|
||||
0x93, 0x28, 0x55, 0xc8, 0x5a, 0xb3, 0x52, 0x2c, 0x56, 0xbd, 0x43, 0xb9,
|
||||
0x4a, 0x6c, 0x4c, 0xcc, 0xda, 0xba, 0x9c, 0xe6, 0x3e, 0x50, 0x8b, 0x1a,
|
||||
0xe5, 0x83, 0xc1, 0x60, 0x55, 0xb2, 0x02, 0x16, 0x54, 0x33, 0x62, 0x69,
|
||||
0x7c, 0x7d, 0x94, 0xf2, 0xb0, 0x3a, 0x22, 0xf0, 0x21, 0x46, 0xd7, 0x94,
|
||||
0x53, 0xec, 0x63, 0x4c, 0x3e, 0xc3, 0x71, 0xd1, 0xb9, 0x2e, 0x16, 0xe8,
|
||||
0x17, 0x63, 0x7e, 0x0c, 0x83, 0x05, 0x72, 0xe6, 0x20, 0x60, 0x34, 0xae,
|
||||
0x0e, 0x54, 0xa0, 0x57, 0x75, 0x93, 0x2e, 0xb8, 0x6c, 0xec, 0xda, 0x44,
|
||||
0x1b, 0xac, 0xd6, 0x75, 0xc5, 0x79, 0x3c, 0xc2, 0xa6, 0xa2, 0x7f, 0x3a,
|
||||
0xb0, 0xec, 0xeb, 0xc1, 0xe6, 0xd6, 0xae, 0xac, 0x2e, 0x55, 0x30, 0x1c,
|
||||
0x81, 0xa4, 0x4c, 0x35, 0x0e, 0xd8, 0xa6, 0x4e, 0xea, 0x0e, 0xbf, 0x79,
|
||||
0xf7, 0xdf, 0x55, 0xfc, 0xf9, 0x24, 0xb0, 0xa6, 0xba, 0xc3, 0x72, 0x42,
|
||||
0x60, 0x06, 0x44, 0x03, 0xe3, 0x40, 0x3c, 0x2a, 0x13, 0xf7, 0xdf, 0x3d,
|
||||
0xb7, 0x0d, 0x86, 0x6c, 0xb0, 0x0f, 0x2e, 0x72, 0x91, 0x16, 0x4f, 0x5f,
|
||||
0xd0, 0x3e, 0x8c, 0x36, 0xed, 0xa8, 0x6f, 0xbc, 0x65, 0xb0, 0x65, 0x99,
|
||||
0x47, 0x50, 0xa5, 0x9c, 0xea, 0xee, 0x8a, 0x44, 0x70, 0xf5, 0x31, 0x1a,
|
||||
0xe9, 0x11, 0xc1, 0xce, 0xe0, 0x21, 0x52, 0x70, 0x89, 0xf7, 0xc3, 0x35,
|
||||
0xfa, 0x55, 0x5a, 0xc5, 0x10, 0x02, 0xc4, 0xc7, 0xf7, 0xe1, 0xaf, 0x49,
|
||||
0x48, 0x61, 0xe7, 0x0d, 0xa1, 0x2d, 0x7d, 0x03, 0x00, 0x38, 0xa7, 0xd5,
|
||||
0xd3, 0xbf, 0x95, 0x29, 0xed, 0xcc, 0x70, 0x3e, 0xbe, 0x95, 0x8a, 0xdf,
|
||||
0xaf, 0xbf, 0xec, 0xf8, 0x6a, 0x4f, 0x9e, 0x69, 0xee, 0x4e, 0x3d, 0x8b,
|
||||
0x58, 0xa0, 0x2e, 0xb5, 0x83, 0x6a, 0x0e, 0x04, 0xa4, 0xa9, 0x74, 0xcb,
|
||||
0x4f, 0xb0, 0x39, 0x37, 0x8f, 0xcf, 0xbf, 0x77, 0xe4, 0x1a, 0x74, 0xcf,
|
||||
0x0e, 0x0d, 0x2d, 0x6e, 0x1d, 0xba, 0xc1, 0xf5, 0x7c, 0x54, 0x6e, 0x92,
|
||||
0xec, 0x4b, 0x03, 0xc3, 0xa4, 0x44, 0xad, 0x3e, 0x4f, 0xa4, 0xd9, 0xe9,
|
||||
0x71, 0x3c, 0xe6, 0xb6, 0xbe, 0xe7, 0xfc, 0x72, 0x76, 0x86, 0x9a, 0x73,
|
||||
0xb1, 0xb3, 0xf3, 0x84, 0xb6, 0x2a, 0x40, 0x0b, 0x8c, 0xae, 0xb3, 0xc4,
|
||||
0xdc, 0xb5, 0x21, 0x85, 0x87, 0xdc, 0x19, 0x18, 0xd5, 0xba, 0xa4, 0x5e,
|
||||
0x88, 0x89, 0xa4, 0xf4, 0x88, 0x75, 0xc2, 0x7a, 0xb4, 0xee, 0x9d, 0x54,
|
||||
0x66, 0x97, 0x70, 0x08, 0x8f, 0x99, 0x84, 0x5d, 0x5e, 0xa7, 0x6f, 0x92,
|
||||
0xe8, 0xa3, 0x65, 0xfa, 0x0e, 0x87, 0xfb, 0x3c, 0xe9, 0x17, 0x2d, 0xc7,
|
||||
0x2d, 0x30, 0x8f, 0x41, 0x82, 0x68, 0x2b, 0xf1, 0x67, 0x8e, 0xf7, 0x05,
|
||||
0x78, 0xfa, 0xc3, 0x61, 0xba, 0x35, 0xe7, 0x2f, 0x19, 0xef, 0x71, 0x36,
|
||||
0xac, 0x5b, 0xf0, 0x45, 0x30, 0x70, 0xdc, 0xc7, 0xab, 0x7b, 0x62, 0x17,
|
||||
0x9d, 0xc4, 0x43, 0x6f, 0xfc, 0x02, 0x56, 0x5f, 0x65, 0xaa, 0x68, 0x3b,
|
||||
0x5c, 0xfa, 0x71, 0x28, 0x89, 0xe9, 0x28, 0x2f, 0x95, 0x4b, 0xfc, 0xe6,
|
||||
0xe7, 0xc8, 0x44, 0x28, 0x5c, 0x3c, 0x08, 0x5f, 0x9c, 0xbc, 0x41, 0x68,
|
||||
0x91, 0x98, 0x7a, 0x00, 0x63, 0xc9, 0x5c, 0x75, 0x8f, 0xcc, 0x33, 0x77,
|
||||
0x7b, 0xd0, 0x2d, 0xe8, 0xa2, 0x98, 0xa4, 0x1b, 0xfa, 0x09, 0x67, 0x7b,
|
||||
0x25, 0x96, 0x19, 0xf4, 0x77, 0x33, 0x20, 0x4f, 0x19, 0xf6, 0x9c, 0x6c,
|
||||
0x2e, 0xd9, 0x68, 0x95, 0xb0, 0xe2, 0x18, 0x06, 0xe5, 0x84, 0x8e, 0xf7,
|
||||
0xbf, 0x6c, 0x96, 0xa8, 0x9d, 0x37, 0xc7, 0x28, 0xa1, 0x3d, 0x90, 0x8c,
|
||||
0x40, 0x3d, 0xe2, 0x51, 0xfd, 0x55, 0x09, 0xf8, 0x83, 0x43, 0x44, 0x4d,
|
||||
0x1c, 0x8a, 0x8d, 0x36, 0x84, 0x64, 0xc4, 0xfa, 0x1d, 0x72, 0x04, 0x0b,
|
||||
0x1d, 0x49, 0x13, 0x88, 0x78, 0x5f, 0x07, 0x9b, 0xc8, 0x01, 0x9c, 0x3c,
|
||||
0xfc, 0xff, 0x0f, 0xd5, 0x13, 0xcd, 0x15, 0x98, 0xcc, 0xe6, 0x59, 0x1e,
|
||||
0x83, 0x38, 0x8f, 0x6c, 0x75, 0xbe, 0xdf, 0xe9, 0x1b, 0xc5, 0xb9, 0x6b,
|
||||
0xa4, 0x5a, 0x0c, 0xae, 0x98, 0x8d, 0x93, 0xfa, 0x76, 0x7f, 0x0d, 0x0b,
|
||||
0xe8, 0xa0, 0x3b, 0x9e, 0x5e, 0xc8, 0xa8, 0xcc, 0x02, 0xc9, 0x86, 0x9c,
|
||||
0x78, 0xaf, 0x6e, 0x6a, 0xf4, 0xfe, 0x49, 0xad, 0xc5, 0x93, 0xae, 0x62,
|
||||
0xbd, 0xe3, 0x3a, 0xa8, 0xf2, 0x60, 0xb5, 0x29, 0xde, 0x5f, 0x12, 0x02,
|
||||
0x2d, 0x43, 0x90, 0xf5, 0x9d, 0x9d, 0x97, 0x29, 0xfa, 0xdd, 0x60, 0x41,
|
||||
0x64, 0xb7, 0xa5, 0x03, 0x72, 0x10, 0x2b, 0xdd, 0x5b, 0x60, 0xe6, 0xf0,
|
||||
0xe1, 0xd7, 0xa5, 0x97, 0xec, 0xb4, 0x9a, 0x4c, 0x3e, 0x16, 0xa2, 0x82,
|
||||
0xb3, 0xc3, 0x3f, 0x3e, 0x5d, 0x32, 0xac, 0x5a, 0x40, 0xb4, 0x00, 0xfa,
|
||||
0xd9, 0x47, 0xe8, 0x77, 0xa8, 0x96, 0x5c, 0x60, 0x04, 0x9c, 0x5c, 0xdf,
|
||||
0x24, 0x3b, 0xa7, 0x4a, 0x58, 0x25, 0x12, 0x9a, 0xa8, 0x7b, 0x3e, 0x14,
|
||||
0xc8, 0x06, 0x79, 0x23, 0xea, 0x91, 0x7f, 0xe1, 0x78, 0x41, 0x6c, 0xdb,
|
||||
0x8c, 0xeb, 0x66, 0x35, 0x87, 0x87, 0x81, 0x65, 0x2c, 0xef, 0x3a, 0x6e,
|
||||
0xae, 0xb3, 0x6c, 0xe9, 0x86, 0x50, 0x6d, 0x89, 0xd6, 0x27, 0x0a, 0xdb,
|
||||
0xf8, 0xd4, 0xb8, 0x85, 0x8e, 0x37, 0xa6, 0x56, 0xf7, 0x58, 0x18, 0x4c,
|
||||
0x44, 0xcf, 0xeb, 0xc4, 0x79, 0x19, 0xfc, 0x2e, 0x53, 0x18, 0x0e, 0x7b,
|
||||
0x51, 0x86, 0xf3, 0x59, 0x13, 0xb2, 0xaf, 0xd3, 0xee, 0xf4, 0xd5, 0xbf,
|
||||
0x2c, 0xb8, 0x6d, 0x71, 0x74, 0x7c, 0x67, 0x54, 0xa7, 0x4b, 0x03, 0xa9,
|
||||
0x1b, 0x62, 0x95, 0x9f, 0xc3, 0xf0, 0x71, 0x39, 0x2d, 0x26, 0xaf, 0xaf,
|
||||
0xa7, 0xa5, 0x58, 0xf8, 0xf8, 0x8a, 0xe0, 0x62, 0x90, 0x3f, 0x72, 0x9d,
|
||||
0x21, 0x82, 0x76, 0x3e, 0x4c, 0x5d, 0xe0, 0xb5, 0x67, 0x23, 0xe3, 0x13,
|
||||
0x1a, 0x29, 0xa3, 0xda, 0xa4, 0xb4, 0x5c, 0x1d, 0x47, 0xdf, 0xdf, 0xc9,
|
||||
0x93, 0x6c, 0xb2, 0xb5, 0x22, 0xb3, 0x47, 0x2b, 0xcf, 0xf0, 0x36, 0x87,
|
||||
0x51, 0x3c, 0x79, 0x41, 0x70, 0xbd, 0xea, 0x70, 0xa2, 0x29, 0x90, 0x55,
|
||||
0x30, 0x6f, 0x3e, 0x50, 0xc8, 0x38, 0xd6, 0xfa, 0x6f, 0xe3, 0x39, 0x67,
|
||||
0x88, 0x52, 0x1f, 0xd3, 0x52, 0xbf, 0x3e, 0x7b, 0x2a, 0xe5, 0x1e, 0xcd,
|
||||
0xf9, 0xf1, 0x91, 0x1d, 0x04, 0x61, 0x25, 0xbb, 0xe1, 0x33, 0xe3, 0x66,
|
||||
0x46, 0xed, 0x06, 0x8d, 0xc3, 0x4f, 0x20, 0xc6, 0x24, 0xa7, 0xb5, 0x49,
|
||||
0x3b, 0xc7, 0xe6, 0xa0, 0x77, 0x58, 0xd9, 0x70, 0xb1, 0xf5, 0xec, 0x94,
|
||||
0x19, 0xf3, 0x5b, 0x0f, 0x9a, 0xe4, 0xad, 0x37, 0x81, 0xaf, 0x68, 0x7b,
|
||||
0xe5, 0x67, 0xb5, 0xae, 0x7f, 0x2d, 0x64, 0x78, 0x68, 0x5a, 0xd1, 0x8f,
|
||||
0x1c, 0xc0, 0xc3, 0x5b, 0x21, 0x77, 0xe4, 0xa8, 0x5d, 0x05, 0x50, 0xc1,
|
||||
0x92, 0xee, 0x36, 0x2d, 0xd2, 0xff, 0xee, 0xc2, 0x11, 0x99, 0xee, 0xd7,
|
||||
0x48, 0xfb, 0x6a, 0xa3, 0xc9, 0xb7, 0x0c, 0xc1, 0xe5, 0x12, 0xbf, 0x6f,
|
||||
0x58, 0x66, 0x35, 0x34, 0x26, 0xaa, 0xbe, 0xc3, 0x33, 0x86, 0xfd, 0xc0,
|
||||
0x1c, 0xa5, 0xe4, 0x1e, 0x91, 0xc4, 0x55, 0x4e, 0xf1, 0xcb, 0xd2, 0x0b,
|
||||
0xe8, 0x0d, 0x89, 0x6a, 0x00, 0xbd, 0x7b, 0xf5, 0x3d, 0x1a, 0x4a, 0x48,
|
||||
0xfc, 0xf0, 0x5b, 0xcd, 0xdb, 0xb2, 0xa0, 0x27, 0x4b, 0x8f, 0xf7, 0x87,
|
||||
0x78, 0x13, 0xdb, 0x3f, 0xfb, 0x0b, 0xda, 0x22, 0xb3, 0x2b, 0x3a, 0x38,
|
||||
0xd2, 0x29, 0x73, 0x77, 0xb8, 0xd6, 0xec, 0xab, 0xb4, 0xfe, 0xbe, 0xbb,
|
||||
0x6e, 0xe2, 0xc8, 0x45, 0x7b, 0x0d, 0x36, 0x28, 0x0f, 0x45, 0x72, 0xea,
|
||||
0x6d, 0x38, 0x02, 0x5e, 0x48, 0x89, 0x12, 0x24, 0x1b, 0x33, 0x0f, 0xe9,
|
||||
0xf4, 0xce, 0xf8, 0x27, 0x16, 0x37, 0x29, 0xae, 0xe8, 0x22, 0x03, 0x31,
|
||||
0xa9, 0xa0, 0x73, 0x0c, 0x40, 0xe4, 0xfc, 0x6b, 0xe2, 0x1c, 0x8d, 0x7c,
|
||||
0x40, 0x82, 0x72, 0x28, 0xd0, 0x7d, 0xe5, 0xef, 0x05, 0x14, 0x80, 0x28,
|
||||
0x11, 0x32, 0x0d, 0x63, 0x8a, 0xc3, 0x7c, 0xfe, 0xf5, 0x06, 0x0e, 0xb0,
|
||||
0x78, 0x5c, 0x3a, 0xb6, 0x54, 0x37, 0x46, 0xa7, 0x43, 0x4f, 0x05, 0xec,
|
||||
0xe4, 0x9f, 0xd8, 0x55, 0x1f, 0x70, 0xb3, 0xe6, 0xbc, 0x46, 0x34, 0x9e,
|
||||
0xfc, 0xa4, 0x57, 0x8f, 0x0f, 0x25, 0x6f, 0x9f, 0xb3, 0x80, 0x21, 0x0b,
|
||||
0xa1, 0xca, 0x59, 0xcd, 0x37, 0xf7, 0xc9, 0xcb, 0xbe, 0x91, 0xad, 0x07,
|
||||
0x4f, 0xc7, 0x4e, 0x04, 0xbd, 0x38, 0x8b, 0x63, 0xb5, 0x51, 0xac, 0xc8,
|
||||
0x83, 0x3a, 0xa7, 0xe1, 0x77, 0xbc, 0xa4, 0x0c, 0x6c, 0x50, 0xeb, 0x46,
|
||||
0xe1, 0x45, 0x9a, 0x7b, 0x01, 0xca, 0x54, 0xf0, 0x0f, 0xa0, 0x1f, 0x43,
|
||||
0x9a, 0x19, 0x70, 0x2e, 0x70, 0x5a, 0xcf, 0x3b, 0x1b, 0x41, 0xfd, 0xd3,
|
||||
0x9a, 0xa2, 0x36, 0x14, 0xf0, 0xdd, 0xb0, 0x12, 0x6d, 0xcf, 0x55, 0x3f,
|
||||
0xef, 0x0a, 0xc1, 0x80, 0xa9, 0x68, 0xc3, 0x98, 0x03, 0x46, 0x34, 0xce,
|
||||
0x91, 0xb2, 0x7a, 0x94, 0xd2, 0xe7, 0xb9, 0x9c, 0x56, 0xb8, 0xf8, 0xd6,
|
||||
0xff, 0xbf, 0x8b, 0x39, 0x45, 0x04, 0x45, 0xc9, 0xa2, 0xe2, 0xbb, 0x50,
|
||||
0x68, 0x13, 0x32, 0x1e, 0x09, 0x51, 0xb7, 0xb9, 0xcf, 0x5f, 0xcc, 0x54,
|
||||
0xd2, 0xf3, 0xc1, 0x9d, 0xa0, 0x8d, 0x22, 0xc8, 0x7e, 0x1b, 0xc6, 0x14,
|
||||
0xde, 0x5f, 0x52, 0xb4, 0x69, 0x71, 0xca, 0x58, 0x1d, 0x1e, 0x89, 0xcb,
|
||||
0x56, 0x78, 0x7a, 0x85, 0xee, 0xfd, 0xf6, 0x7e, 0xbe, 0x49, 0x9b, 0xb1,
|
||||
0x05, 0x95, 0x12, 0xe9, 0x63, 0xbd, 0x61, 0x9a, 0x26, 0xf9, 0x0b, 0x9f,
|
||||
0x23, 0x0a, 0x59, 0x55, 0x93, 0xd3, 0x2d, 0xca, 0x66, 0x45, 0x03, 0xb7,
|
||||
0xf0, 0x88, 0x9e, 0xc1, 0x11, 0xbb, 0x62, 0x2c, 0x6f, 0xac, 0x3e, 0x87,
|
||||
0xd7, 0xe6, 0x4a, 0x44, 0x83, 0x04, 0x5d, 0x5d, 0xbc, 0x3c, 0xce, 0x83,
|
||||
0x2b, 0x11, 0x42, 0x02, 0x73, 0x1c, 0x24, 0x90, 0xd9, 0x1a, 0x7d, 0x96,
|
||||
0x82, 0x33, 0x75, 0x1e, 0x59, 0xea, 0xa7, 0x99, 0xe1, 0x5b, 0xdc, 0xe4,
|
||||
0x07, 0xc5, 0x48, 0x07, 0xb4, 0xbc, 0x80, 0x0e, 0xbd, 0x63, 0x6e, 0x66,
|
||||
0xf1, 0x12, 0xb6, 0x67, 0xe0, 0x14, 0x74, 0x9f, 0xbb, 0xb3, 0xb8, 0x16,
|
||||
0xd0, 0x25, 0xe9, 0x21, 0x80, 0x1a, 0x32, 0xb0, 0x58, 0x9a, 0x62, 0x17,
|
||||
0x18, 0x9d, 0x64, 0x2d, 0x47, 0x89, 0x82, 0x3b, 0x8c, 0x5d, 0x60, 0xc4,
|
||||
0x54, 0x69, 0xaa, 0xb4, 0x6a, 0x1d, 0x16, 0xb0, 0xe2, 0x5d, 0x7d, 0xeb,
|
||||
0xb9, 0x80, 0x37, 0xcd, 0x5b, 0xf0, 0xa1, 0xa8, 0x39, 0xb2, 0xd6, 0x3a,
|
||||
0xc8, 0xcd, 0xca, 0xaf, 0xcb, 0x3b, 0x54, 0xc2, 0x67, 0x49, 0xf3, 0xf1,
|
||||
0x11, 0x4d, 0x53, 0x7c, 0x46, 0x8d, 0x22, 0xf6, 0x9a, 0x0d, 0x9e, 0xda,
|
||||
0x37, 0xc6, 0x06, 0x00, 0xca, 0xb6, 0xb6, 0x99, 0xc5, 0xb6, 0x81, 0x7e,
|
||||
0x87, 0x62, 0xcf, 0x07, 0x76, 0xc1, 0x5f, 0xfe, 0x86, 0xfc, 0x5b, 0xa0,
|
||||
0xac, 0xca, 0xcb, 0x7d, 0xf5, 0x5a, 0xc2, 0x5e, 0x41, 0x48, 0x35, 0xc4,
|
||||
0x71, 0x9d, 0xc4, 0x0a, 0x79, 0x6f, 0xe3, 0x6d, 0x47, 0xd4, 0xaa, 0xfd,
|
||||
0x97, 0xe7, 0xb0, 0x7e, 0x61, 0xf1, 0x7d, 0x7e, 0xf8, 0x78, 0x4c, 0x2e,
|
||||
0x65, 0x51, 0xeb, 0x99, 0xd0, 0x3e, 0x24, 0x4c, 0xe0, 0x40, 0x7e, 0x2d,
|
||||
0xf7, 0x00, 0x9d, 0x50, 0x87, 0xce, 0x1f, 0x9a, 0xd2, 0x76, 0x00, 0x09,
|
||||
0xeb, 0x10, 0x1b, 0x4c, 0xf1, 0x43, 0x0e, 0x35, 0xbb, 0x23, 0x2e, 0x26,
|
||||
0x3d, 0x66, 0xa3, 0x0f, 0xf6, 0x10, 0x8b, 0x67, 0xce, 0x66, 0xfd, 0xb5,
|
||||
0x07, 0xdc, 0x04, 0x69, 0xad, 0xe0, 0x4d, 0xdf, 0xdb, 0x2f, 0x87, 0xf7,
|
||||
0xde, 0xc3, 0x77, 0x89, 0x71, 0xfd, 0x70, 0x38, 0xed, 0xe6, 0x27, 0xb1,
|
||||
0xbd, 0x94, 0x5f, 0x39, 0x20, 0x72, 0x59, 0xc4, 0x39, 0xd0, 0x20, 0x5d,
|
||||
0xe2, 0xe7, 0xe0, 0x00, 0x61, 0xc7, 0x65, 0xbd, 0xef, 0x05, 0xb3, 0xc7,
|
||||
0x7e, 0xae, 0xc5, 0x83, 0x7f, 0xc1, 0x32, 0x4e, 0x2a, 0x17, 0x64, 0x4e,
|
||||
0x2a, 0x9a, 0x2d, 0x26, 0x99, 0xa2, 0xd7, 0x37, 0x3a, 0x10, 0x6a, 0x89,
|
||||
0x72, 0x43, 0x0e, 0x3a, 0x03, 0x4c, 0xf9, 0xfe, 0xe8, 0xfc, 0x87, 0x71,
|
||||
0x37, 0x71, 0x5a, 0x05, 0xbc, 0x4e, 0x20, 0x4c, 0xd7, 0xf9, 0x8d, 0x4e,
|
||||
0xb8, 0xb8, 0x56, 0x07, 0xc8, 0x6e, 0x34, 0x6d, 0x45, 0x83, 0x34, 0xf0,
|
||||
0x77, 0xfb, 0x18, 0xec, 0x72, 0xf6, 0x4c, 0xfb, 0xba, 0x84, 0xe9, 0x89,
|
||||
0x3d, 0xfd, 0xb7, 0x0d, 0x70, 0xae, 0xa4, 0x48, 0x6b, 0x39, 0xf8, 0x62,
|
||||
0xc0, 0x7f, 0x0c, 0xf2, 0xa3, 0xfa, 0x7a, 0x64, 0x83, 0x57, 0x7d, 0x4c,
|
||||
0x04, 0x96, 0xd7, 0x9d, 0x10, 0x8b, 0x34, 0x48, 0x17, 0xff, 0x74, 0x5c,
|
||||
0x9c, 0xbe, 0xeb, 0xe5, 0x52, 0x94, 0x6a, 0x34, 0x6f, 0xf7, 0x95, 0x32,
|
||||
0x38, 0x5a, 0x9b, 0x08, 0xf6, 0xda, 0x8c, 0x0f, 0x9c, 0x5d, 0x04, 0x45,
|
||||
0xd4, 0xe9, 0xa4, 0x7a, 0xc4, 0xfd, 0x70, 0xfe, 0xa1, 0x3d, 0x21, 0xa0,
|
||||
0x01, 0xe5, 0x21, 0xca, 0xa7, 0xd9, 0xf1, 0x9f, 0x45, 0xe1, 0xe8, 0x2d,
|
||||
0x27, 0xe6, 0x87, 0xc8, 0x0d, 0xad, 0x13, 0xdb, 0xfe, 0x2f, 0xaa, 0x2b,
|
||||
0xdc, 0xa6, 0x1a, 0xc9, 0x19, 0x78, 0x1a, 0x1f, 0x10, 0xcf, 0x31, 0xe1,
|
||||
0x06, 0x28, 0x66, 0xb3, 0xa7, 0xa2, 0xa6, 0xf1, 0x3b, 0x2d, 0xd3, 0x81,
|
||||
0xaf, 0x6f, 0xc9, 0x88, 0x76, 0xe9, 0x83, 0x6c, 0x52, 0xb9, 0x70, 0x51,
|
||||
0x87, 0x6b, 0x8b, 0xbd, 0x5b, 0x9c, 0xa9, 0xf3, 0xcb, 0x55, 0xd1, 0x76,
|
||||
0x40, 0xe1, 0x90, 0xb9, 0x4c, 0xbd, 0xab, 0x1d, 0xa0, 0x5b, 0x5b, 0x34,
|
||||
0x14, 0x2f, 0x87, 0x8f, 0x63, 0xa0, 0x2d, 0x29, 0x4e, 0x50, 0x4b, 0x18,
|
||||
0x5f, 0x86, 0xac, 0x1b, 0x93, 0xe9, 0x59, 0x38, 0xa1, 0x2a, 0x36, 0x21,
|
||||
0xb2, 0xa4, 0xc0, 0x79, 0xc1, 0x60, 0xfc, 0x0f, 0xbf, 0x99, 0x04, 0x9d,
|
||||
0x4b, 0x17, 0x60, 0x5b, 0xcd, 0x78, 0x03, 0xd7, 0x7c, 0x4b, 0x9b, 0x17,
|
||||
0x58, 0x24, 0x60, 0xb8, 0x08, 0x92, 0x48, 0x4f, 0x66, 0x42, 0x9a, 0x98,
|
||||
0x2a, 0x99, 0x9a, 0x8f, 0xdd, 0xd7, 0x09, 0xf3, 0x22, 0x66, 0x62, 0xef,
|
||||
0xe5, 0x64, 0xd3, 0xdf, 0x31, 0xaa, 0x84, 0x4c, 0xa5, 0x3f, 0x4e, 0x27,
|
||||
0x48, 0x37, 0x96, 0x63, 0xbf, 0x8d, 0xe1, 0xf0, 0xd1, 0xef, 0x95, 0x1a,
|
||||
0xe6, 0xf4, 0x02, 0x61, 0xbf, 0xe3, 0xbc, 0x8b, 0x3d, 0x0b, 0x77, 0x91,
|
||||
0xc0, 0x5d, 0xfb, 0xe6, 0x7e, 0xab, 0x5e, 0xc5, 0x1c, 0x5b, 0x16, 0xfd,
|
||||
0x88, 0xa4, 0x78, 0x4c, 0x06, 0x77, 0xc3, 0x6e, 0x84, 0x0c, 0xda, 0xbf,
|
||||
0xf3, 0x8e, 0xd3, 0x61, 0x65, 0xac, 0xf2, 0x18, 0x70, 0x68, 0x84, 0x6f,
|
||||
0x9f, 0x3a, 0x94, 0x81, 0xa6, 0xc7, 0xc3, 0x92, 0xee, 0x4b, 0x20, 0x15,
|
||||
0x4e, 0x03, 0x76, 0x51, 0x5b, 0x4e, 0xe1, 0x5c, 0x51, 0x5e, 0x1b, 0x9c,
|
||||
0x30, 0x25, 0x79, 0xdd, 0x70, 0x12, 0xec, 0xdc, 0x45, 0x95, 0x45, 0x43,
|
||||
0xcd, 0xbb, 0xae, 0xa0, 0x0d, 0x43, 0xb4, 0xc9, 0x8c, 0x62, 0xfd, 0x7b,
|
||||
0xed, 0x50, 0x78, 0xb7, 0xa6, 0x94, 0xcb, 0x98, 0xb0, 0xbe, 0x09, 0xd9,
|
||||
0x0c, 0xb2, 0xc4, 0x8b, 0x96, 0x93, 0xd9, 0x26, 0xc6, 0x6d, 0x26, 0x93,
|
||||
0x32, 0x4e, 0x86, 0x72, 0x74, 0x92, 0x00, 0x72, 0x0b, 0x20, 0xa3, 0x2b,
|
||||
0x94, 0xe6, 0x10, 0x56, 0x5a, 0x41, 0x71, 0x92, 0x08, 0xce, 0x6c, 0xc4,
|
||||
0x1d, 0x9e, 0x71, 0x82, 0x64, 0x23, 0xe5, 0x15, 0xef, 0x4a, 0x7c, 0x4d,
|
||||
0xe3, 0x92, 0xbc, 0xa3, 0xa2, 0x29, 0xb7, 0x46, 0xfa, 0x8f, 0x9f, 0xc2,
|
||||
0x5d, 0xe4, 0xc0, 0x9c, 0x3f, 0x40, 0x17, 0xae, 0x44, 0xf3, 0x28, 0x10,
|
||||
0x29, 0x24, 0xa9, 0x1c, 0x9e, 0xd2, 0x55, 0x4c, 0xee, 0x45, 0xfe, 0x4a,
|
||||
0x45, 0x12, 0xf5, 0xde, 0xc7, 0x64, 0x15, 0xc3, 0x4a, 0x77, 0x63, 0x05,
|
||||
0x8d, 0xa6, 0x31, 0xa0, 0xad, 0x64, 0xaf, 0x3c, 0x69, 0x2c, 0x25, 0x78,
|
||||
0xae, 0xa0, 0x88, 0x96, 0x8a, 0xc2, 0x9b, 0x8d, 0xee, 0x6f, 0x2e, 0x79,
|
||||
0x1f, 0xec, 0x32, 0x35, 0x75, 0x83, 0x19, 0x8b, 0xda, 0xca, 0xd0, 0xaf,
|
||||
0x6a, 0x6c, 0x42, 0xe8, 0x81, 0xb5, 0x69, 0x31, 0x0b, 0x7d, 0xbc, 0xd8,
|
||||
0xd2, 0xb7, 0x7a, 0x8f, 0xfa, 0xcf, 0x91, 0x07, 0x1f, 0xda, 0xa9, 0x1f,
|
||||
0xb7, 0x2d, 0xff, 0x50, 0x15, 0x2a, 0xef, 0x8c, 0xa1, 0xe3, 0x7f, 0x08,
|
||||
0x95, 0xf2, 0x99, 0x83, 0x1f, 0x97, 0x71, 0x3e, 0x35, 0x3c, 0x8c, 0xe7,
|
||||
0x08, 0xd8, 0xa6, 0x1f, 0x0c, 0xa6, 0x52, 0xdc, 0x73, 0xa0, 0xfc, 0xd2,
|
||||
0x73, 0xe9, 0x27, 0x9d, 0xfd, 0x7a, 0x4a, 0x29, 0xd3, 0x12, 0x26, 0x13,
|
||||
0x0f, 0xce, 0xea, 0x56, 0x99, 0x61, 0x78, 0x47, 0x2c, 0xa0, 0x16, 0xa0,
|
||||
0xe2, 0x64, 0x97, 0x57, 0x31, 0xf0, 0x32, 0x5b, 0x44, 0x93, 0x76, 0x8b,
|
||||
0x59, 0x63, 0x5c, 0x5b, 0x0f, 0xe1, 0xe7, 0x74, 0x98, 0x11, 0x2d, 0x90,
|
||||
0xe4, 0xde, 0xd4, 0x3a, 0xc2, 0xfd, 0x24, 0xe3, 0x1f, 0x7a, 0xf4, 0x40,
|
||||
0xbb, 0x51, 0x92, 0x8f, 0x68, 0x9c, 0x51, 0xab, 0xdc, 0xf6, 0x1e, 0x96,
|
||||
0xca, 0x56, 0x5c, 0x92, 0xca, 0xb2, 0x1b, 0x2e, 0x6d, 0x20, 0x28, 0xb3,
|
||||
0x0a, 0x8e, 0xfd, 0xa9, 0xa2, 0x38, 0x74, 0x60, 0x37, 0xa6, 0x96, 0x02,
|
||||
0x20, 0x8a, 0x9a, 0x2b, 0x8c, 0xb9, 0x6d, 0xec, 0xff, 0xbf, 0x88, 0xbd,
|
||||
0x6c, 0xb4, 0x10, 0xbd, 0xfa, 0x5a, 0xeb, 0xb2, 0x6b, 0x74, 0x13, 0x2d,
|
||||
0xa5, 0xdb, 0x60, 0x93, 0xc6, 0xed, 0x39, 0x4f, 0xc5, 0x63, 0xe1, 0x9e,
|
||||
0x57, 0x1f, 0xe7, 0x47, 0xa4, 0xfb, 0x7f, 0xfa, 0x3a, 0x46, 0x50, 0x3a,
|
||||
0xd8, 0xd3, 0x83, 0xf5, 0xe6, 0x5e, 0xf8, 0x09, 0x0d, 0xfa, 0x33, 0xe1,
|
||||
0x50, 0xe4, 0x36, 0x3e, 0x0a, 0x5d, 0xe6, 0xf8, 0x2e, 0x17, 0x87, 0x8f,
|
||||
0xe1, 0x8c, 0x82, 0x73, 0xbd, 0xdd, 0x3b, 0x77, 0x47, 0x9f, 0x42, 0xd7,
|
||||
0xf4, 0x2d, 0x6c, 0xef, 0xcc, 0x22, 0x15, 0x3c, 0xe9, 0x26, 0xea, 0xbc,
|
||||
0xee, 0x09, 0xd3, 0xea, 0x84, 0x0f, 0x46, 0xa8, 0xe0, 0xda, 0xc5, 0x57,
|
||||
0x02, 0x54, 0xb6, 0x88, 0x2b, 0x37, 0xe5, 0x96, 0xc5, 0x33, 0xb7, 0x45,
|
||||
0x5d, 0xb7, 0xc7, 0xfd, 0xa0, 0xfa, 0x85, 0x1b, 0x2f, 0xe1, 0xec, 0x89,
|
||||
0xc6, 0xb2, 0x51, 0x71, 0xcb, 0x08, 0x82, 0x3e, 0xc9, 0xed, 0x80, 0x9d,
|
||||
0x37, 0x31, 0x9d, 0x15, 0xde, 0x24, 0x6f, 0xbd, 0x0e, 0x73, 0xa2, 0xb8,
|
||||
0x7e, 0x29, 0x7e, 0x96, 0xe4, 0xbb, 0xd6, 0x23, 0x17, 0xff, 0x33, 0x97,
|
||||
0x9c, 0x87, 0xe0, 0xe5, 0x0f, 0xb9, 0xb6, 0x31, 0x33, 0xad, 0xf8, 0xd8,
|
||||
0xdb, 0xa0, 0x71, 0x13, 0xe4, 0x1c, 0xce, 0xd0, 0x7e, 0x65, 0x7b, 0xa0,
|
||||
0x38, 0x17, 0x53, 0x4f, 0x71, 0x75, 0x6d, 0x02, 0x61, 0xc4, 0x52, 0xf8,
|
||||
0xe4, 0x2e, 0xbc, 0x52, 0xc1, 0xb1, 0x7e, 0x83, 0x0a, 0xa1, 0xd1, 0xcd,
|
||||
0x2f, 0xa0, 0x30, 0xfd, 0x41, 0x86, 0x7f, 0x26, 0xd1, 0xe7, 0xfc, 0xd7,
|
||||
0xc7, 0x37, 0xe5, 0x11, 0xa6, 0xc0, 0x9a, 0x75, 0x18, 0x04, 0x36, 0xca,
|
||||
0x8e, 0x26, 0x7d, 0xcf, 0xa2, 0x6a, 0x94, 0x9b, 0xc4, 0xf7, 0xc7, 0xeb,
|
||||
0x51, 0x13, 0xa3, 0x6f, 0x8c, 0x80, 0x5f, 0xae, 0xf0, 0x18, 0xa0, 0x88,
|
||||
0xe0, 0x8d, 0xb7, 0x80, 0x4e, 0x8c, 0xec, 0xc8, 0x7b, 0xeb, 0xac, 0x29,
|
||||
0xb7, 0x4a, 0x0f, 0x33, 0xdd, 0x9d, 0x89, 0x0a, 0x10, 0xb0, 0xce, 0x74,
|
||||
0x59, 0xa2, 0x62, 0x91, 0xc9, 0xac, 0x56, 0xcd, 0x69, 0xd3, 0x01, 0x6d,
|
||||
0x51, 0xe7, 0x04, 0xc3, 0xfb, 0xe9, 0x79, 0x1b, 0x72, 0x72, 0x1a, 0x90,
|
||||
0x0a, 0x20, 0x55, 0x85, 0xc1, 0x8b, 0xeb, 0x1e, 0x9f, 0x9f, 0x4a, 0x81,
|
||||
0x47, 0x97, 0x96, 0xbc, 0xc2, 0xe4, 0xc2, 0xfe, 0xa0, 0x20, 0xda, 0x70,
|
||||
0x0c, 0x2b, 0xe2, 0xd4, 0xc8, 0xcb, 0x46, 0x00, 0xb6, 0x7c, 0xfb, 0xbd,
|
||||
0x56, 0x94, 0x3d, 0x7f, 0x64, 0xf7, 0x88, 0xb5, 0xa7, 0xfe, 0xbe, 0x64,
|
||||
0x8a, 0xe4, 0x00, 0x08, 0x82, 0x5b, 0x8f, 0x98, 0x77, 0x87, 0xda, 0xaf,
|
||||
0x16, 0x25, 0x4a, 0x9a, 0xed, 0xfb, 0x50, 0x18, 0x45, 0x46, 0x2b, 0x73,
|
||||
0xff, 0xb9, 0xb9, 0xab, 0xa2, 0x8f, 0x3a, 0xaf, 0xc5, 0x0a, 0x14, 0x91,
|
||||
0xb2, 0x3f, 0xa6, 0x93, 0xf4, 0x81, 0x20, 0x77, 0xfa, 0x51, 0x79, 0x62,
|
||||
0xe8, 0xe6, 0x89, 0x52, 0x39, 0xd5, 0x01, 0xa2, 0x87, 0xa3, 0x53, 0x74,
|
||||
0x3c, 0x36, 0x8a, 0xc3, 0xb4, 0x44, 0x3b, 0x15, 0x21, 0xf6, 0xdc, 0x18,
|
||||
0x02, 0xd2, 0x57, 0xe5, 0x10, 0xf0, 0x3d, 0x61, 0xa7, 0x16, 0x85, 0x6f,
|
||||
0x71, 0x07, 0x75, 0x50, 0x4b, 0x21, 0x53, 0x47, 0x38, 0x35, 0x9e, 0xa7,
|
||||
0xd8, 0xfd, 0x74, 0x59, 0x15, 0x32, 0x7b, 0x89, 0xd0, 0x2c, 0xd9, 0xf6,
|
||||
0x40, 0x49, 0x79, 0xdc, 0xfb, 0x0a, 0x64, 0x59, 0x9b, 0x17, 0x47, 0x36,
|
||||
0xcb, 0xf0, 0xc3, 0xcc, 0x14, 0x8e, 0x1f, 0xa8, 0x12, 0xaa, 0xb7, 0x6a,
|
||||
0xba, 0x45, 0xf9, 0xc4, 0x44, 0xe7, 0xb5, 0x7c, 0xdd, 0xbe, 0x16, 0x76,
|
||||
0x52, 0x92, 0x3d, 0x78, 0xb7, 0xec, 0x81, 0x96, 0xd8, 0x7f, 0x34, 0x2a,
|
||||
0xa2, 0x64, 0x5f, 0xfd, 0xb1, 0x42, 0x4c, 0x79, 0x98, 0xc9, 0x17, 0x48,
|
||||
0x74, 0x12, 0x72, 0x2c, 0xde, 0x91, 0x7e, 0xa9, 0x49, 0x2a, 0xcc, 0x5c,
|
||||
0x60, 0x05, 0x25, 0x09, 0x72, 0x20, 0x80, 0x42, 0x7b, 0x18, 0xc2, 0xfc,
|
||||
0x2a, 0x5e, 0x3e, 0x2d, 0x61, 0xa6, 0xf6, 0x82, 0x42, 0x83, 0x81, 0x66,
|
||||
0x4d, 0xa6, 0xe1, 0xf9, 0xf6, 0x48, 0xd4, 0xc8, 0x69, 0xed, 0xee, 0xb5,
|
||||
0x7a, 0xcb, 0xf6, 0x0a, 0x76, 0x0e, 0x61, 0x8b, 0xf2, 0x1a, 0x8a, 0xa7,
|
||||
0x88, 0xb0, 0x90, 0xd5, 0x23, 0xaa, 0xe0, 0x2b, 0xd6, 0xd0, 0xef, 0x49,
|
||||
0x13, 0x88, 0xc7, 0x50, 0xf0, 0x9e, 0xd5, 0x28, 0xe1, 0xaa, 0x1d, 0xaf,
|
||||
0xd9, 0x73, 0xb3, 0x9e, 0xa7, 0xd8, 0xfc, 0xb9, 0x22, 0x97, 0x0e, 0x21,
|
||||
0xa0, 0xb9, 0xf9, 0xea, 0x1e, 0x95, 0x88, 0xda, 0x85, 0x7c, 0x32, 0x7c,
|
||||
0xbd, 0xef, 0xf8, 0x44, 0x25, 0x5f, 0x23, 0xfd, 0x14, 0x78, 0xc6, 0xdb,
|
||||
0x86, 0xee, 0xf8, 0xda, 0xc0, 0xae, 0x92, 0x6a, 0x03, 0xa9, 0x0a, 0xee,
|
||||
0x4a, 0x22, 0x5a, 0x6c, 0x39, 0xd3, 0x91, 0x7d, 0x91, 0x43, 0xac, 0x79,
|
||||
0xad, 0xab, 0xb7, 0x91, 0xb1, 0x20, 0x84, 0x7f, 0x0a, 0xd7, 0xa8, 0x62,
|
||||
0x95, 0xab, 0x04, 0xb6, 0xb2, 0xf1, 0xd4, 0xb0, 0xac, 0x52, 0x89, 0xb0,
|
||||
0x93, 0xdf, 0xdf, 0x80, 0x26, 0x0c, 0x32, 0x31, 0xb3, 0xba, 0xa1, 0xba,
|
||||
0x6f, 0xa3, 0x14, 0x5c, 0xfa, 0x37, 0x3b, 0x6a, 0xf2, 0xc4, 0x34, 0x27,
|
||||
0x08, 0x1a, 0xe4, 0xfc, 0x89, 0x58, 0x79, 0x34, 0x36, 0xe4, 0xad, 0x4b,
|
||||
0x3f, 0x57, 0x7b, 0xc1, 0x59, 0x2d, 0xb6, 0x54, 0x44, 0xbe, 0x4e, 0x5d,
|
||||
0x0d, 0x6a, 0xf3, 0xcd, 0xbf, 0xcd, 0x4d, 0x9f, 0x9a, 0x50, 0x09, 0xa4,
|
||||
0x6b, 0x8b, 0xb3, 0x01, 0x69, 0x6c, 0x69, 0x5d, 0x28, 0x73, 0x9e, 0xb5,
|
||||
0xc2, 0xc7, 0x6e, 0xff, 0x4c, 0x5c, 0x6b, 0x93, 0x22, 0xc1, 0x9f, 0xa6,
|
||||
0x71, 0xbf, 0x4d, 0x2d, 0x4e, 0x4e, 0x98, 0xa3, 0x6d, 0xab, 0x05, 0xa0,
|
||||
0xde, 0x34, 0x41, 0x28, 0xa4, 0x38, 0x75, 0x4e, 0xdf, 0x7f, 0xc9, 0xdd,
|
||||
0xbf, 0x5a, 0xd4, 0xcd, 0x38, 0x0c, 0x89, 0xe7, 0x0e, 0xfc, 0x0f, 0x27,
|
||||
0x39, 0x21, 0xa4, 0xa6, 0x07, 0x7b, 0x2a, 0x13, 0x56, 0xe7, 0x4e, 0x55,
|
||||
0x57, 0x71, 0x98, 0xb9, 0x3d, 0x59, 0xb5, 0xa8, 0x24, 0x18, 0x08, 0xa2,
|
||||
0x6e, 0x9a, 0xe5, 0x97, 0xa7, 0x38, 0xd9, 0x43, 0x9b, 0x19, 0x17, 0x34,
|
||||
0x03, 0xd6, 0xba, 0xe9, 0x71, 0x38, 0x26, 0x90, 0x78, 0x9e, 0x1c, 0x41,
|
||||
0x8d, 0x60, 0xdd, 0x0e, 0x12, 0x46, 0x37, 0xb4, 0x79, 0x87, 0x33, 0x12,
|
||||
0x24, 0xc4, 0x5a, 0x6c, 0x70, 0xa2, 0xb2, 0x58, 0xbb, 0xe7, 0xd6, 0x88,
|
||||
0x42, 0x2d, 0x49, 0xc8, 0x67, 0x1e, 0xc5, 0xed, 0x16, 0xa8, 0x1f, 0x36,
|
||||
0x2b, 0xfb, 0x0d, 0x51, 0x96, 0xc8, 0x78, 0xf2, 0xab, 0x82, 0xa1, 0xe2,
|
||||
0xaf, 0x8c, 0xa4, 0x13, 0x54, 0x90, 0xf1, 0xe7, 0xbb, 0xd1, 0x09, 0x23,
|
||||
0x76, 0x0e, 0x50, 0x32, 0xc5, 0x54, 0xbb, 0x1e, 0x12, 0x5d, 0x59, 0xf3,
|
||||
0xe9, 0xc9, 0xa4, 0xaa, 0xbc, 0x13, 0x1d, 0xf0, 0x79, 0x54, 0xae, 0x70,
|
||||
0xc0, 0xea, 0xcb, 0x21, 0x32, 0xe6, 0xe6, 0x8e, 0xaa, 0x51, 0x46, 0x25,
|
||||
0x1e, 0xf1, 0x3f, 0x9f, 0xf6, 0xff, 0x19, 0x53, 0x97, 0xbc, 0xa2, 0xb6,
|
||||
0x91, 0x59, 0x27, 0x1e, 0x39, 0x76, 0x76, 0x02, 0x0b, 0x03, 0x25, 0x6b,
|
||||
0x00, 0x02, 0xfa, 0x7d, 0x69, 0x5e, 0xde, 0x64, 0x33, 0xbf, 0xab, 0x3e,
|
||||
0x3f, 0x24, 0x32, 0x68, 0xbf, 0x90, 0x8f, 0x0f, 0xc5, 0x36, 0x58, 0x9e,
|
||||
0x9b, 0x11, 0xd1, 0x2a, 0x8a, 0x0d, 0xac, 0x3a, 0x23, 0xe2, 0x8e, 0xd6,
|
||||
0x0d, 0x4a, 0x8b, 0x45, 0x04, 0x47, 0xd9, 0x5a, 0x46, 0x6c, 0x70, 0x82,
|
||||
0xc7, 0x81, 0x67, 0xdc, 0xa6, 0xfa, 0x6a, 0x86, 0xfd, 0x01, 0xed, 0x90,
|
||||
0xf6, 0xe6, 0x26, 0x6d, 0xac, 0x52, 0x03, 0x4a, 0x91, 0x08, 0x7b, 0xa5,
|
||||
0x9c, 0xca, 0xd3, 0x2d, 0x79, 0xf1, 0xed, 0xcb, 0xaa, 0x8f, 0x77, 0xc8,
|
||||
0x17, 0xa8, 0xfb, 0x6c, 0x15, 0x62, 0xab, 0x34, 0xd1, 0xdd, 0x94, 0x3e,
|
||||
0xd4, 0x0c, 0x47, 0xed, 0x04, 0x91, 0xd2, 0xd7, 0x98, 0xb4, 0x43, 0x57,
|
||||
0xd1, 0x54, 0xef, 0x63, 0xba, 0xe3, 0x8a, 0x72, 0xc5, 0xb9, 0xf4, 0x30,
|
||||
0xfa, 0x16, 0x3c, 0xe1, 0xbb, 0xbe, 0x57, 0x90, 0xb9, 0xa1, 0xa0, 0x23,
|
||||
0xfa, 0xdd, 0xbe, 0x2f, 0xb3, 0xec, 0x41, 0x8b, 0x64, 0xeb, 0xc5, 0x41,
|
||||
0xea, 0xa8, 0x16, 0x76, 0x6f, 0x28, 0xda, 0x2b, 0x5f, 0x03, 0x0b, 0xe8,
|
||||
0x1c, 0x29, 0x71, 0xd8, 0x4e, 0x41, 0xdf, 0x39, 0x8e, 0x6a, 0x95, 0x79,
|
||||
0x85, 0x9c, 0xa9, 0x79, 0xd9, 0x8f, 0x33, 0xaf, 0x15, 0x3b, 0x5a, 0x82,
|
||||
0x56, 0x32, 0x98, 0x0c, 0xf6, 0xf6, 0x64, 0x42, 0xd4, 0x6a, 0x15, 0x0f,
|
||||
0xb9, 0x75, 0x22, 0xbd, 0x9a, 0x58, 0xa6, 0x01, 0x3a, 0x63, 0xf0, 0x80,
|
||||
0x78, 0x22, 0x80, 0xa0, 0x14, 0xe1, 0x37, 0x6b, 0xd4, 0x99, 0x3f, 0xc2,
|
||||
0xba, 0x2b, 0x8f, 0xf3, 0x56, 0xc8, 0x1b, 0xe4, 0x7a, 0x5e, 0x96, 0x60,
|
||||
0xee, 0x74, 0x54, 0xb6, 0x6d, 0x5c, 0x3d, 0x3e, 0x05, 0xf0, 0x9a, 0xf6,
|
||||
0xcd, 0xdd, 0x06, 0xdb, 0x8c, 0x21, 0xb9, 0xf5, 0x28, 0x57, 0x9c, 0x4f,
|
||||
0xb4, 0x08, 0xcf, 0xac, 0x6c, 0xfe, 0x30, 0xaf, 0xa2, 0xef, 0xcf, 0x93,
|
||||
0x15, 0xdd, 0x12, 0x16, 0x19, 0x7d, 0xbc, 0x57, 0xd9, 0xce, 0xbe, 0x0e,
|
||||
0xfc, 0xe1, 0xf0, 0x4a, 0x7c, 0xaa, 0xbf, 0x20, 0x64, 0x00, 0x34, 0x59,
|
||||
0xed, 0xea, 0x12, 0x58, 0x46, 0x4c, 0xc6, 0x2f, 0x77, 0x62, 0x1d, 0x82,
|
||||
0x5c, 0xe8, 0x98, 0x0d, 0xef, 0x5c, 0x0e, 0xec, 0x5d, 0x2e, 0x5f, 0xd2,
|
||||
0x22, 0x43, 0x2d, 0xe1, 0x02, 0xd5, 0x4a, 0x0a, 0x79, 0x6f, 0xa5, 0xec,
|
||||
0x48, 0xaa, 0xee, 0xf8, 0xe3, 0x5f, 0xdd, 0xe7, 0x26, 0x87, 0xb5, 0xc4,
|
||||
0xcf, 0xd9, 0x7f, 0xa8, 0xaa, 0xb6, 0xbe, 0xe9, 0x02, 0x49, 0x5d, 0x5f,
|
||||
0x81, 0x8b, 0xb9, 0xbd, 0xc0, 0xc9, 0xd5, 0xfe, 0x36, 0x3e, 0x49, 0x56,
|
||||
0x63, 0x8b, 0xce, 0xef, 0x48, 0x6e, 0xc0, 0xd4, 0x04, 0x0c, 0x33, 0x45,
|
||||
0x6e, 0x97, 0x9e, 0xa3, 0xae, 0xbc, 0xc2, 0xce, 0xdc, 0xe3, 0xff, 0x48,
|
||||
0x51, 0x68, 0x89, 0xad, 0xae, 0xc7, 0xd1, 0xde, 0xe2, 0xf9, 0xfe, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
|
||||
0x0c, 0x18, 0x20, 0x24, 0x2f, 0x33, 0x3f
|
||||
};
|
||||
#endif /* MLDSA87_KAT_H */
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
/* RSA-2048 SHA-256 PKCS#1 v1.5 verify KAT (openssl-generated). */
|
||||
#ifndef RSA2048_KAT_H
|
||||
#define RSA2048_KAT_H
|
||||
|
||||
static const byte kat_rsa2048_n[256] = {
|
||||
0x9e,0xc7,0x03,0xbc,0x24,0x7e,0xaf,0xbd,0x45,0x36,0xf9,0x52,
|
||||
0x97,0x0c,0x35,0x3a,0xbe,0xe6,0xe8,0x0f,0x2e,0x79,0xa2,0xd8,
|
||||
0xf0,0x7d,0x6c,0x72,0x27,0x7b,0x38,0x58,0xab,0x90,0xe2,0xe0,
|
||||
0x06,0xf1,0x40,0xc9,0x1b,0xba,0x6f,0xcd,0x2b,0xc6,0xad,0x1d,
|
||||
0x7d,0x26,0x0d,0x0b,0x40,0x66,0xe9,0x92,0xb1,0x47,0x2f,0x9d,
|
||||
0x97,0xfc,0x94,0xd0,0xeb,0x4c,0x02,0xa2,0xf2,0xd0,0xe8,0x52,
|
||||
0xc1,0xbe,0x31,0xb5,0x06,0x17,0x80,0x9a,0x31,0x48,0x30,0x3e,
|
||||
0xbd,0x2a,0x66,0x59,0x1a,0x87,0x1d,0xdf,0xea,0xff,0x4c,0xe9,
|
||||
0xb3,0x87,0xd9,0xac,0x47,0x38,0xbd,0x74,0xa1,0x8a,0x36,0x99,
|
||||
0x62,0xfd,0xe0,0xae,0x46,0x72,0x67,0x69,0x94,0x58,0x4e,0xcc,
|
||||
0x15,0xd9,0xea,0x62,0x6d,0x18,0x11,0xfb,0x28,0x1f,0xc1,0x2b,
|
||||
0xca,0x8b,0x6d,0x96,0x62,0x42,0x52,0x8c,0x11,0xc0,0xd3,0xb6,
|
||||
0x22,0xbf,0xc7,0xb1,0x24,0xe1,0x9d,0x39,0x49,0xc5,0xff,0x01,
|
||||
0xbb,0x15,0xc5,0x22,0x6a,0xfa,0xa6,0x74,0xb2,0xf9,0x9e,0xb5,
|
||||
0x1d,0x50,0x80,0xee,0x1f,0xcb,0x24,0xf4,0xb5,0x50,0xf2,0x2b,
|
||||
0xea,0xf6,0x12,0x74,0x12,0xf0,0xf5,0xf2,0x00,0xde,0x58,0x16,
|
||||
0x16,0x38,0x07,0xbb,0xf0,0x45,0x5f,0xab,0xf3,0x18,0xda,0x25,
|
||||
0xdf,0x1f,0xf2,0x0c,0xb6,0x58,0x76,0x78,0x18,0x2a,0x8f,0xf5,
|
||||
0x52,0x52,0xc7,0xc6,0xa0,0xf5,0x02,0x4c,0xfe,0xbd,0xf4,0x02,
|
||||
0xd8,0x78,0x83,0xc0,0xc5,0xc2,0xd2,0x60,0xca,0xbb,0xbf,0xa2,
|
||||
0xbd,0x90,0x66,0xff,0x10,0x28,0xf3,0xa7,0x32,0x2c,0xf1,0x59,
|
||||
0x28,0x41,0x75,0x35,
|
||||
};
|
||||
static const byte kat_rsa2048_e[3] = {
|
||||
0x01,0x00,0x01,
|
||||
};
|
||||
static const byte kat_rsa2048_sig[256] = {
|
||||
0x92,0x96,0x49,0x52,0x64,0x83,0x87,0x39,0x3a,0xae,0x1e,0x1a,
|
||||
0x45,0x3f,0x94,0x5b,0xd2,0x0c,0x44,0x51,0xfa,0x12,0xf3,0x88,
|
||||
0x59,0x35,0x78,0xe5,0x0e,0xcf,0x76,0xa2,0x81,0x71,0x0e,0xe0,
|
||||
0x2c,0x0f,0x1d,0x24,0xae,0x11,0xa0,0x94,0xd2,0x21,0xc0,0xd3,
|
||||
0x18,0x2e,0xfc,0x59,0x09,0x34,0x7b,0x94,0x08,0x83,0x3d,0xe5,
|
||||
0x1f,0x27,0x70,0x5e,0x14,0x11,0x7c,0xdf,0x7a,0xda,0xf7,0x73,
|
||||
0x31,0xe5,0xbc,0xcb,0x86,0xb2,0x0f,0x8c,0xa9,0x06,0xc0,0xd1,
|
||||
0x3b,0xd5,0x9a,0xd8,0x8a,0x51,0xd9,0x51,0xd1,0x48,0xb8,0xff,
|
||||
0xa3,0x61,0x38,0xc4,0x9e,0x7f,0xc0,0x06,0x4c,0x0b,0xec,0xae,
|
||||
0xbc,0xf3,0xc8,0xa0,0x20,0x76,0xf0,0x51,0xf9,0xc2,0xfe,0x01,
|
||||
0xdc,0x31,0xf6,0xdf,0xe7,0xe6,0xf9,0x2c,0x6f,0x93,0x3d,0x3e,
|
||||
0x89,0x73,0x6f,0xc9,0x5f,0xad,0x60,0x1f,0x48,0x81,0x09,0xd6,
|
||||
0xab,0x2b,0xcf,0xb5,0x9a,0x70,0x3d,0x04,0x0f,0x59,0xcc,0xc2,
|
||||
0x7f,0x95,0x9a,0x3e,0xd5,0xb7,0x8b,0x7e,0xb0,0x6e,0xcc,0xee,
|
||||
0xfc,0xe5,0x17,0xa2,0x2c,0xf1,0xf6,0x1f,0xaf,0xf7,0x05,0x2c,
|
||||
0x15,0xea,0xae,0x26,0x8b,0xde,0xb8,0x53,0xf7,0x9a,0x4f,0x09,
|
||||
0x2a,0x27,0x9b,0x78,0x1a,0xaf,0x22,0xf5,0xfa,0x22,0xe8,0x75,
|
||||
0x39,0x79,0x46,0x8f,0xc2,0x40,0xd3,0x0f,0xae,0xad,0xfd,0x84,
|
||||
0x03,0x20,0x30,0xb9,0x65,0xf4,0xab,0x44,0x8b,0x57,0xa6,0xbb,
|
||||
0x44,0xa8,0x86,0xa1,0x4f,0xad,0x94,0x31,0x18,0xdd,0x26,0x3b,
|
||||
0x71,0x39,0x8b,0x22,0x3f,0xcc,0x2f,0x65,0x3f,0x87,0xee,0xfa,
|
||||
0xaf,0x4a,0x91,0x93,
|
||||
};
|
||||
static const byte kat_rsa2048_msg[35] = {
|
||||
0x77,0x6f,0x6c,0x66,0x43,0x72,0x79,0x70,0x74,0x20,0x52,0x53,
|
||||
0x41,0x20,0x76,0x65,0x72,0x69,0x66,0x79,0x20,0x4b,0x41,0x54,
|
||||
0x20,0x6f,0x6e,0x20,0x54,0x49,0x20,0x43,0x32,0x38,0x78,
|
||||
};
|
||||
static const byte kat_rsa2048_digestinfo[51] = {
|
||||
0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,
|
||||
0x04,0x02,0x01,0x05,0x00,0x04,0x20,0x55,0x1e,0x09,0xfe,0xd6,
|
||||
0x65,0x76,0x79,0xbd,0xe6,0x13,0xbb,0xa8,0x7e,0xf4,0xe9,0x3c,
|
||||
0x89,0x57,0x97,0x0c,0x04,0x12,0x5f,0xf7,0x47,0x59,0x5e,0x6b,
|
||||
0x62,0xac,0xc0,
|
||||
};
|
||||
|
||||
#endif /* RSA2048_KAT_H */
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
/* RSA-2048 raw private components (openssl-generated) - TEST ONLY. */
|
||||
#ifndef RSA2048_PRIV_RAW_H
|
||||
#define RSA2048_PRIV_RAW_H
|
||||
static const byte kat_rsapriv_n[256] = {
|
||||
0xb7,0x5a,0x6e,0x91,0x67,0x11,0xf4,0xdd,0x1b,0x64,0x91,0x92,
|
||||
0x49,0x75,0x1a,0xff,0x4b,0x1d,0x94,0xb7,0x06,0x41,0x47,0x75,
|
||||
0x94,0x8d,0x70,0xf4,0xa1,0x21,0x7d,0xf6,0xce,0x80,0xfc,0xac,
|
||||
0x4b,0x16,0xaf,0xba,0x6f,0x9d,0x69,0x27,0x4e,0x50,0x94,0x62,
|
||||
0x68,0xa5,0xc4,0x6a,0x39,0x0f,0x1d,0x4d,0xa3,0x56,0xac,0x72,
|
||||
0xed,0xa0,0x30,0x4c,0x77,0xb0,0x7f,0x0d,0x4b,0x3b,0x4a,0xbe,
|
||||
0x0b,0x84,0x29,0x2b,0xce,0xfb,0x97,0x98,0xba,0x05,0x2c,0x0f,
|
||||
0x17,0x85,0x90,0x82,0x1d,0xb5,0x6a,0x42,0x06,0x02,0xf9,0x0b,
|
||||
0x28,0x98,0xe6,0xc0,0xf4,0x83,0xd7,0xd2,0x62,0x89,0xa6,0x75,
|
||||
0xce,0x0c,0x5c,0xe0,0x02,0xc5,0xd5,0x21,0x25,0xf8,0x03,0xd6,
|
||||
0xe1,0x6c,0xac,0x20,0x00,0x48,0xc9,0x64,0x10,0x8f,0xf3,0x67,
|
||||
0xbd,0xc7,0x01,0xbf,0x0d,0xbb,0x95,0xd9,0x85,0xa4,0xff,0xdc,
|
||||
0xbc,0x23,0x35,0x4e,0xdd,0x81,0x57,0xcf,0xdf,0xf8,0xa1,0x2b,
|
||||
0x62,0xb7,0x2d,0x06,0x66,0x01,0x0b,0x89,0xe2,0x25,0x96,0x36,
|
||||
0xcf,0x38,0x26,0xd2,0x17,0x06,0xc8,0x42,0x55,0xcf,0xa0,0x55,
|
||||
0xd2,0x53,0xc9,0x6d,0x14,0x4e,0x35,0x19,0x3b,0x43,0x2d,0x9d,
|
||||
0x19,0x13,0xa2,0x27,0x57,0x2e,0x06,0xbc,0x48,0x21,0x32,0x3e,
|
||||
0x1f,0x94,0x96,0xf5,0x30,0x97,0x11,0x8b,0xe2,0x1a,0xc8,0x42,
|
||||
0x00,0x0a,0x7e,0xee,0xfc,0xc3,0x60,0x5c,0xe5,0x8a,0x13,0x4b,
|
||||
0x3e,0xb0,0x45,0xc7,0x54,0x09,0x80,0x6c,0xea,0x6d,0x66,0xda,
|
||||
0xad,0x91,0x51,0x1e,0x2d,0xf8,0xe5,0x09,0x5c,0x48,0x5f,0x9f,
|
||||
0x12,0x49,0x02,0x41,
|
||||
};
|
||||
static const byte kat_rsapriv_e[3] = {
|
||||
0x01,0x00,0x01,
|
||||
};
|
||||
static const byte kat_rsapriv_d[256] = {
|
||||
0x06,0xf1,0xd1,0xa8,0xc7,0xb4,0xde,0x27,0xa6,0xc3,0x35,0x21,
|
||||
0x4b,0x8f,0x78,0x2d,0x8d,0xb8,0x89,0xda,0xb1,0xcd,0xb4,0xa9,
|
||||
0x6f,0x2e,0x39,0x46,0x46,0xb9,0x18,0x46,0x8a,0x15,0x48,0x1c,
|
||||
0xb5,0x7e,0x5f,0x3b,0x0a,0x41,0xb5,0xcb,0x23,0x93,0xf9,0x3e,
|
||||
0xcd,0xf4,0x63,0x5f,0x5b,0x98,0x67,0x35,0x7a,0xd7,0x8c,0x52,
|
||||
0x11,0x0e,0x85,0x6d,0xcc,0x05,0xbf,0x16,0x2f,0x90,0x88,0x18,
|
||||
0xf1,0x22,0x39,0x15,0xfb,0xf1,0xbb,0x10,0xf1,0x90,0xc3,0x15,
|
||||
0xb2,0x40,0x20,0x94,0x51,0x10,0x3f,0x3d,0x4f,0x71,0x7a,0xe1,
|
||||
0xd1,0x90,0x93,0x02,0xe1,0x70,0x01,0xf3,0x69,0xc0,0x89,0x71,
|
||||
0xc2,0x53,0x65,0x0c,0x26,0x06,0xbc,0xb7,0x13,0xf3,0x54,0x1f,
|
||||
0xe6,0x2b,0x61,0xcc,0x97,0x7e,0x2a,0x44,0x83,0xa8,0xe0,0x02,
|
||||
0x89,0x30,0x60,0x69,0x94,0x27,0x78,0xb3,0xf4,0x00,0x4b,0x48,
|
||||
0x2a,0x3c,0xd0,0x7b,0x00,0xea,0xd6,0x8b,0x2b,0x5c,0xe5,0x07,
|
||||
0x2f,0x06,0x70,0xf8,0x09,0x56,0xf9,0xb1,0x3c,0x84,0xcd,0xeb,
|
||||
0xf0,0xa4,0x9e,0x4c,0x24,0x72,0x41,0xb0,0xf3,0x81,0x6e,0x81,
|
||||
0xd2,0x31,0xc4,0x25,0x3f,0x60,0x72,0x53,0x4a,0xae,0x55,0xcb,
|
||||
0x88,0x3d,0xcc,0x89,0xb9,0x6f,0x11,0x91,0xa7,0x20,0x63,0x22,
|
||||
0x44,0xd9,0x9a,0xec,0x58,0x50,0xdc,0x7d,0x27,0xde,0x30,0xa4,
|
||||
0x0d,0x23,0x2f,0x6f,0x8a,0xcc,0x4d,0x01,0xed,0x93,0x4d,0xeb,
|
||||
0x1f,0x91,0xec,0xec,0x9d,0xfe,0x0f,0xc3,0x50,0x55,0xbb,0x72,
|
||||
0x12,0xe7,0xff,0x81,0x94,0x6b,0x6e,0xd8,0xeb,0xa3,0xee,0xdb,
|
||||
0xa6,0xb7,0xef,0x71,
|
||||
};
|
||||
static const byte kat_rsapriv_u[128] = {
|
||||
0x85,0x96,0x06,0xc4,0x31,0x12,0xb4,0x0d,0x8b,0x37,0x78,0x7a,
|
||||
0x11,0x31,0xc6,0x9e,0x57,0x66,0x9b,0x18,0xc2,0xf6,0x87,0xd0,
|
||||
0x14,0x42,0x17,0x75,0x64,0x21,0xcf,0x76,0x7c,0x82,0x84,0x66,
|
||||
0xbd,0x1d,0x4f,0x65,0x66,0x84,0xa9,0x74,0xd1,0x49,0x32,0xbc,
|
||||
0x4c,0x33,0xed,0xb4,0x50,0xdf,0x38,0x3e,0x0b,0xa9,0x5c,0xf4,
|
||||
0x5f,0x9f,0x6d,0xfb,0x8c,0x6b,0x8c,0x52,0x6e,0xbb,0x9a,0xcd,
|
||||
0x1c,0xf9,0x8f,0x80,0x6f,0x4d,0x62,0xd3,0xb0,0xc7,0x57,0xde,
|
||||
0x7c,0xf2,0x56,0xeb,0x12,0x65,0xfc,0x32,0xe0,0x14,0x3e,0x01,
|
||||
0xf2,0xcf,0xc1,0x46,0x20,0x8a,0x7e,0xc2,0xeb,0x36,0x23,0x6a,
|
||||
0xa3,0x51,0x68,0xb9,0xef,0x6c,0x37,0x86,0x51,0xa5,0x4d,0x0f,
|
||||
0xbf,0x1d,0x98,0xcc,0xa5,0x5b,0x52,0x91,
|
||||
};
|
||||
static const byte kat_rsapriv_p[128] = {
|
||||
0xf9,0xd7,0x4c,0xb7,0xe5,0xfb,0x52,0x2d,0x03,0x15,0x75,0x09,
|
||||
0xf9,0x9e,0xe4,0xb9,0x2c,0x2d,0x9f,0x71,0xe8,0x69,0x77,0x04,
|
||||
0xd4,0x5e,0x78,0x68,0x21,0x90,0xc9,0x0d,0x30,0xc1,0xb2,0x62,
|
||||
0x26,0x53,0x68,0x8f,0xb6,0x72,0x78,0xf3,0xdf,0x66,0xac,0x55,
|
||||
0xe4,0x5a,0xb4,0x4d,0xf0,0x62,0x35,0xe8,0x70,0x16,0x2b,0x5e,
|
||||
0x0e,0x00,0x94,0x38,0x58,0x74,0x31,0x6d,0xad,0x10,0x34,0x04,
|
||||
0x51,0xaf,0xa1,0x45,0x53,0x13,0x45,0x9a,0x2f,0xbf,0x42,0x8d,
|
||||
0xea,0x4e,0x92,0xde,0x83,0xad,0xa6,0x06,0xb6,0x84,0x13,0x79,
|
||||
0xee,0x35,0x40,0x5f,0xf3,0xdc,0xd2,0xb0,0x26,0x60,0xec,0x7e,
|
||||
0x75,0x85,0x8f,0xdb,0x2a,0x87,0xfb,0x1a,0xc2,0x01,0x24,0x6f,
|
||||
0x4a,0x2c,0x22,0x37,0xa3,0x05,0x0f,0x39,
|
||||
};
|
||||
static const byte kat_rsapriv_q[128] = {
|
||||
0xbb,0xdf,0x8a,0x4f,0x15,0x9b,0x4e,0x6c,0xac,0xd1,0xb7,0x5d,
|
||||
0xa4,0x63,0x9e,0x25,0x98,0xe1,0xe3,0xf3,0xf7,0x67,0x80,0x0d,
|
||||
0xe9,0x12,0x72,0xcd,0xb7,0x88,0x6b,0x17,0x85,0xd8,0x15,0x73,
|
||||
0xed,0x37,0x96,0xd9,0x22,0x90,0x50,0x7b,0x0e,0x68,0xa2,0xb2,
|
||||
0x2d,0xd0,0x66,0x23,0x9a,0xb8,0xca,0xec,0xac,0x80,0x42,0xe4,
|
||||
0xb6,0x70,0x50,0xa5,0xbf,0x6d,0xad,0x0e,0x21,0xfa,0x3e,0x01,
|
||||
0x3e,0x66,0x66,0xb2,0x84,0x11,0x56,0xee,0x04,0xf9,0x09,0x8b,
|
||||
0x2b,0xb7,0x03,0x93,0x9e,0xae,0x6a,0xd7,0x7d,0xc6,0x3e,0x3e,
|
||||
0x76,0x2f,0x91,0x69,0x6c,0x98,0xc4,0x96,0x1d,0xf0,0x2d,0x46,
|
||||
0xb3,0xb5,0x5a,0x7c,0x64,0xfd,0xe5,0xb8,0x59,0x60,0x7b,0x3c,
|
||||
0x17,0xbf,0x02,0x2b,0xf1,0xfa,0x03,0x49,
|
||||
};
|
||||
static const byte kat_rsapriv_dP[128] = {
|
||||
0x9c,0xa9,0xb3,0xd2,0xb0,0xe4,0xa9,0xff,0xcd,0xaa,0x3b,0xcc,
|
||||
0xb8,0x79,0x39,0x45,0x1f,0xfd,0xaf,0xb8,0x96,0x9a,0xe3,0x65,
|
||||
0xe4,0xe1,0x24,0x31,0x6f,0xb2,0xc1,0x4f,0x83,0x1e,0x42,0x84,
|
||||
0x27,0x32,0x30,0x23,0xc5,0xac,0xfc,0x49,0x37,0xf1,0xc2,0xe8,
|
||||
0xcd,0x1b,0x4f,0x6a,0x7b,0xec,0xa9,0x8f,0x0a,0x11,0xec,0xb9,
|
||||
0xba,0xa0,0x04,0x51,0x5c,0xad,0xe7,0x7c,0xb5,0x83,0xae,0x8a,
|
||||
0x72,0xca,0x65,0x9e,0xf9,0xdb,0xe0,0xce,0x31,0x58,0x86,0x1c,
|
||||
0x45,0x2b,0x66,0x0f,0x1f,0x94,0xd8,0xc1,0xe6,0xda,0xe4,0xf7,
|
||||
0x95,0x36,0x51,0x1a,0x99,0xe9,0x03,0x38,0x2f,0xa8,0xa1,0x43,
|
||||
0x1e,0xe0,0x54,0x77,0x82,0xb0,0xe7,0xf5,0x3c,0x67,0xc8,0xf7,
|
||||
0xfc,0x13,0xb6,0x95,0x1a,0xa5,0x06,0x89,
|
||||
};
|
||||
static const byte kat_rsapriv_dQ[128] = {
|
||||
0x6a,0x61,0x20,0x5a,0xb9,0x7c,0x50,0x42,0xde,0xf4,0x7c,0xe4,
|
||||
0xac,0x31,0xb0,0x19,0xcf,0xe0,0x90,0x87,0xd3,0x1e,0x2a,0xf7,
|
||||
0x35,0x73,0x39,0xc8,0x5c,0x55,0x05,0x76,0xb3,0x55,0xf0,0x87,
|
||||
0xcc,0xd9,0x7e,0x34,0x03,0x0b,0x3e,0x56,0xff,0x88,0xa6,0x1f,
|
||||
0x48,0x2b,0xc9,0xb9,0xfd,0x61,0x07,0x9e,0x4d,0xea,0xee,0x75,
|
||||
0xbd,0x0c,0x09,0xce,0x60,0x7f,0x84,0xcf,0x0c,0xd4,0x3a,0x89,
|
||||
0xcf,0xc0,0x82,0x04,0x31,0x1d,0xf4,0x60,0x20,0x36,0xb7,0x7d,
|
||||
0xb3,0x4a,0x14,0xdf,0x60,0xa9,0x98,0x5b,0xde,0x9f,0x03,0x1d,
|
||||
0xb1,0x24,0x2c,0x2d,0x4a,0xcd,0x91,0xfb,0x02,0x86,0xbd,0xcc,
|
||||
0x5b,0xf3,0xa3,0x81,0xee,0x59,0x89,0xdb,0x01,0xd8,0xcc,0xce,
|
||||
0xf1,0x0f,0x39,0xf6,0x92,0x34,0xa3,0xe9,
|
||||
};
|
||||
#endif
|
||||
|
|
@ -0,0 +1,563 @@
|
|||
/* user_settings.h
|
||||
*
|
||||
* Copyright (C) 2006-2026 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL.
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
|
||||
*/
|
||||
|
||||
/* wolfSSL user settings for the TI C2000 C28x DSP (LAUNCHXL-F28P55X).
|
||||
*
|
||||
* IMPORTANT - this is a SCOPED build for a new architecture bring-up:
|
||||
* - The C28x has 16-bit bytes (CHAR_BIT == 16). wolfSSL's byte-packing
|
||||
* code assumes 8-bit octets, so this build is deliberately limited to the
|
||||
* algorithms whose correctness we validate with known-answer tests:
|
||||
* SHA-256, SHA-384/512, SHA3, SHAKE128/256, and ML-DSA-87 verify only.
|
||||
* - RSA / ECC / DH / TFM / SP-bignum are NOT built, which avoids the
|
||||
* big-integer code paths most sensitive to the 16-bit-byte layout.
|
||||
* - The device has no hardware TRNG and no SHA3 accelerator; everything here
|
||||
* is portable C software crypto. ML-DSA verify is deterministic and uses
|
||||
* no entropy. The RNG stub below is for benchmark/test wiring ONLY and is
|
||||
* NOT cryptographically secure - do not ship it.
|
||||
*/
|
||||
|
||||
#ifndef WOLFSSL_USER_SETTINGS_C2000_H
|
||||
#define WOLFSSL_USER_SETTINGS_C2000_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Platform / C28x toolchain */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
#undef SINGLE_THREADED
|
||||
#define SINGLE_THREADED
|
||||
|
||||
#undef WOLFCRYPT_ONLY /* crypto only, no TLS layer */
|
||||
#define WOLFCRYPT_ONLY
|
||||
|
||||
#undef NO_FILESYSTEM
|
||||
#define NO_FILESYSTEM
|
||||
|
||||
#undef NO_WRITEV
|
||||
#define NO_WRITEV
|
||||
|
||||
#undef NO_MAIN_DRIVER /* our main() lives in wolf_main.c */
|
||||
#define NO_MAIN_DRIVER
|
||||
|
||||
#undef NO_DEV_RANDOM
|
||||
#define NO_DEV_RANDOM
|
||||
|
||||
#undef NO_SESSION_CACHE
|
||||
#define NO_SESSION_CACHE
|
||||
|
||||
#undef WOLFSSL_IGNORE_FILE_WARN
|
||||
#define WOLFSSL_IGNORE_FILE_WARN
|
||||
|
||||
#undef BENCH_EMBEDDED /* reduced benchmark sizes for an MCU */
|
||||
#define BENCH_EMBEDDED
|
||||
|
||||
/* C28x integer widths: char/short/int = 16-bit, long = 32-bit,
|
||||
* long long = 64-bit. wolfCrypt needs a true 64-bit word for SHA3/SHA-512
|
||||
* and ML-DSA, which long long provides. */
|
||||
#undef SIZEOF_LONG
|
||||
#define SIZEOF_LONG 4
|
||||
#undef SIZEOF_LONG_LONG
|
||||
#define SIZEOF_LONG_LONG 8
|
||||
|
||||
/* Pull in the toolchain's <limits.h> so CHAR_BIT is the real value (16 on
|
||||
* C28x) instead of wolfSSL's 8-bit fallback, and so UINT_MAX reflects the
|
||||
* 16-bit int. This is critical for correct byte math. */
|
||||
#undef HAVE_LIMITS_H
|
||||
#define HAVE_LIMITS_H
|
||||
|
||||
/* C28x has 16-bit int. WC_16BIT_CPU makes wolfSSL use the correct integer
|
||||
* widths (word16 = unsigned int = 16-bit, word32 = unsigned long = 32-bit);
|
||||
* without it wolfSSL assumes int is 32-bit and word32 comes out only 16 bits,
|
||||
* silently truncating all 32-bit crypto math. C28x also has a native 64-bit
|
||||
* long long, so WORD64_AVAILABLE is preserved via the SIZEOF_LONG_LONG==8
|
||||
* guard added to types.h (for SHA-512/SHA-3/ML-DSA). */
|
||||
#undef WC_16BIT_CPU
|
||||
#define WC_16BIT_CPU
|
||||
|
||||
/* The C28x is little-endian. Leave BIG_ENDIAN_ORDER undefined so the default
|
||||
* little-endian path is used. (Verify on hardware with the SHA KATs.) */
|
||||
|
||||
/* CHAR_BIT==16 portability levers (see README "16-bit byte" section):
|
||||
* ML-DSA bit-packing has fast paths that cast a byte buffer to word32/word64
|
||||
* (gated on WOLFSSL_MLDSA_ALIGNMENT <= 2/4/8). On a 16-bit-byte machine a
|
||||
* wordN spans N/2 cells, not N octets, so every such cast is wrong. Force
|
||||
* the fully portable byte-by-byte path by making the alignment exceed all
|
||||
* the gates (max gate is <= 8).
|
||||
* The Keccak state-aliasing hazard (xorbuf/memcpy over the word64 state) is
|
||||
* handled by the gated octet-wise SHA3 path in sha3.c (WC_SHA3_BYTEWISE). */
|
||||
#undef WOLFSSL_GENERAL_ALIGNMENT
|
||||
#define WOLFSSL_GENERAL_ALIGNMENT 2
|
||||
#undef WOLFSSL_MLDSA_ALIGNMENT
|
||||
#define WOLFSSL_MLDSA_ALIGNMENT 16
|
||||
|
||||
/* Force portable C cores - no x86/ARM assembly. */
|
||||
#undef WOLFSSL_NO_ASM
|
||||
#define WOLFSSL_NO_ASM
|
||||
#undef WC_SHA3_NO_ASM
|
||||
#define WC_SHA3_NO_ASM
|
||||
|
||||
/* Compile misc.c as its own translation unit (extern, not inline). The TI
|
||||
* CGT treats a plain `inline` definition as a C99 extern-inline and emits no
|
||||
* out-of-line copy, so the inline-misc path leaves xorbuf/ByteReverseWords64
|
||||
* unresolved at link. NO_INLINE makes them ordinary extern functions; the
|
||||
* build compiles wolfcrypt/src/misc.c once. */
|
||||
#undef NO_INLINE
|
||||
#define NO_INLINE
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Hashing - the scoped subset */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* SHA-256/224 are on by default (NO_SHA256 not defined). */
|
||||
|
||||
#undef WOLFSSL_SHA512
|
||||
#define WOLFSSL_SHA512
|
||||
#undef WOLFSSL_SHA384
|
||||
#define WOLFSSL_SHA384
|
||||
|
||||
#undef WOLFSSL_SHA3
|
||||
#define WOLFSSL_SHA3
|
||||
#undef WOLFSSL_SHAKE128
|
||||
#define WOLFSSL_SHAKE128
|
||||
#undef WOLFSSL_SHAKE256
|
||||
#define WOLFSSL_SHAKE256
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* ML-DSA-87 (Dilithium L5) - VERIFY ONLY */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
#undef WOLFSSL_HAVE_MLDSA
|
||||
#define WOLFSSL_HAVE_MLDSA
|
||||
|
||||
/* Build only ML-DSA-87 (level 5). */
|
||||
#undef WOLFSSL_NO_ML_DSA_44
|
||||
#define WOLFSSL_NO_ML_DSA_44
|
||||
#undef WOLFSSL_NO_ML_DSA_65
|
||||
#define WOLFSSL_NO_ML_DSA_65
|
||||
|
||||
/* Raw key/sig import - no ASN.1 (both modes). */
|
||||
#undef WOLFSSL_MLDSA_NO_ASN1
|
||||
#define WOLFSSL_MLDSA_NO_ASN1
|
||||
|
||||
#ifdef WOLF_MLDSA_SIGN
|
||||
/* Sign build also exercises the ML-DSA-44/65 parameter sets (smaller than 87)
|
||||
* via keygen+sign+verify round-trips. */
|
||||
#undef WOLFSSL_NO_ML_DSA_44
|
||||
#undef WOLFSSL_NO_ML_DSA_65
|
||||
/* Full ML-DSA-87 (keygen + sign + verify). Build with `make SIGN=1`. ML-DSA-87
|
||||
* keygen/sign/verify need a large working set; enabling EVERY small-memory path
|
||||
* brings the peak heap to ~30 KW (measured on host), which fits the C28x when
|
||||
* the sign linker script gives .sysmem the RAMGS0-3 block. NOTE: the dev RNG
|
||||
* stub below is NOT secure - real signing needs a true TRNG. */
|
||||
#undef WOLFSSL_MLDSA_MAKE_KEY_SMALL_MEM
|
||||
#define WOLFSSL_MLDSA_MAKE_KEY_SMALL_MEM
|
||||
#undef WOLFSSL_MLDSA_SIGN_SMALL_MEM
|
||||
#define WOLFSSL_MLDSA_SIGN_SMALL_MEM
|
||||
#undef WOLFSSL_MLDSA_VERIFY_SMALL_MEM
|
||||
#define WOLFSSL_MLDSA_VERIFY_SMALL_MEM
|
||||
#undef WOLFSSL_MLDSA_SMALL_MEM_POLY64
|
||||
#define WOLFSSL_MLDSA_SMALL_MEM_POLY64
|
||||
/* ML-DSA-87 sign/keygen put large polynomial arrays on the stack by default,
|
||||
* which overflows the C28x's low-RAM (< 0x10000) stack. WOLFSSL_SMALL_STACK
|
||||
* moves those to the heap (sized by the sign linker for ~31 KW peak). */
|
||||
#undef WOLFSSL_SMALL_STACK
|
||||
#define WOLFSSL_SMALL_STACK
|
||||
#else
|
||||
/* Verify path only (auto-derives NO_MAKE_KEY + NO_SIGN + public-key-only),
|
||||
* with the small-memory streaming verifier and no heap (buffers pinned into
|
||||
* the key struct). */
|
||||
#undef WOLFSSL_MLDSA_VERIFY_ONLY
|
||||
#define WOLFSSL_MLDSA_VERIFY_ONLY
|
||||
#undef WOLFSSL_MLDSA_VERIFY_SMALL_MEM
|
||||
#define WOLFSSL_MLDSA_VERIFY_SMALL_MEM
|
||||
#undef WOLFSSL_MLDSA_VERIFY_NO_MALLOC
|
||||
#define WOLFSSL_MLDSA_VERIFY_NO_MALLOC
|
||||
/* Smallest verify RAM: stream the signature's z vector one polynomial at a
|
||||
* time instead of pinning the whole l-vector (saves ~6 KB on ML-DSA-87).
|
||||
* Measured on F28P55x: sizeof(wc_MlDsaKey) 20,048 -> 13,904 bytes. */
|
||||
#undef WOLFSSL_MLDSA_VERIFY_SMALLEST_MEM
|
||||
#define WOLFSSL_MLDSA_VERIFY_SMALLEST_MEM
|
||||
/* Optional on this part: also define WOLFSSL_MLDSA_ASSIGN_KEY to keep the
|
||||
* public key in flash (by reference) instead of copying it into the key
|
||||
* struct - that removes a further ~5 KB of RAM (the 2,592-octet public key is
|
||||
* a 5,184-byte byte[] on the 16-bit-cell C28x), bringing ML-DSA-87 verify to
|
||||
* ~10.7 KB total RAM. Left off by default because the caller must keep the
|
||||
* public-key buffer valid for the key's lifetime. */
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Disabled: big-integer / asymmetric (keeps TFM/ECC/integer out of build) */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
#ifdef WOLF_ECC
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* ECC P-256 (SECP256R1) via SP single-precision math (sp_c32.c), no malloc. */
|
||||
/* Enabled with EXTRA_CFLAGS=--define=WOLF_ECC (ECC=1 build). Covers ECDSA */
|
||||
/* keygen/sign/verify and ECDH. Uses raw mp_int (sign/verify _ex) APIs so no */
|
||||
/* ASN/DER is required for bring-up. */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
#undef HAVE_ECC
|
||||
#define HAVE_ECC
|
||||
#undef ECC_USER_CURVES /* build only the curves we name (just P-256) */
|
||||
#define ECC_USER_CURVES
|
||||
#undef HAVE_ECC256
|
||||
#define HAVE_ECC256
|
||||
#undef HAVE_ECC_VERIFY
|
||||
#define HAVE_ECC_VERIFY
|
||||
#undef HAVE_ECC_SIGN
|
||||
#define HAVE_ECC_SIGN
|
||||
#undef HAVE_ECC_DHE /* ECDH shared secret */
|
||||
#define HAVE_ECC_DHE
|
||||
#undef ECC_TIMING_RESISTANT
|
||||
#define ECC_TIMING_RESISTANT
|
||||
/* SP single-precision P-256 backend (32-bit limbs in sp_c32.c). */
|
||||
#undef WOLFSSL_SP_MATH
|
||||
#define WOLFSSL_SP_MATH
|
||||
#undef WOLFSSL_HAVE_SP_ECC
|
||||
#define WOLFSSL_HAVE_SP_ECC
|
||||
#undef WOLFSSL_SP_NO_MALLOC
|
||||
#define WOLFSSL_SP_NO_MALLOC
|
||||
#undef WOLFSSL_SP_SMALL
|
||||
#define WOLFSSL_SP_SMALL
|
||||
#undef SP_WORD_SIZE
|
||||
#define SP_WORD_SIZE 32
|
||||
/* C28x int is 16-bit (WC_16BIT_CPU) but we use 32-bit SP digits + octet-wise
|
||||
* byte I/O, so opt past the conservative SP-vs-16-bit guard. */
|
||||
#undef WOLFSSL_SP_ALLOW_16BIT_CPU
|
||||
#define WOLFSSL_SP_ALLOW_16BIT_CPU
|
||||
/* NO_BIG_INT stays off: SP provides the mp_int interface. */
|
||||
#else
|
||||
/* No multi-precision integer math at all (no SP/TFM/integer.c). ML-DSA verify
|
||||
* and the hashes use no mp_int, and this avoids the SP-math vs WC_16BIT_CPU
|
||||
* conflict. */
|
||||
#undef NO_BIG_INT
|
||||
#define NO_BIG_INT
|
||||
#endif /* WOLF_ECC */
|
||||
|
||||
#undef NO_RSA
|
||||
#define NO_RSA
|
||||
#undef NO_DH
|
||||
#define NO_DH
|
||||
#undef NO_DSA
|
||||
#define NO_DSA
|
||||
#ifndef WOLF_ECC
|
||||
/* HAVE_ECC intentionally not defined - no ECC. */
|
||||
#endif
|
||||
#ifdef WOLF_MLKEM
|
||||
/* ML-KEM (FIPS 203) via the wolfCrypt C implementation. Build only the
|
||||
* ML-KEM-768 parameter set, force the generic C path (no x86/ARM asm), and use
|
||||
* the small-memory / no-malloc options so it fits the bare-metal RAM budget.
|
||||
* Validated on the C28x by test.c's mlkem_test KAT. */
|
||||
#undef WOLFSSL_HAVE_MLKEM
|
||||
#define WOLFSSL_HAVE_MLKEM
|
||||
#undef WOLFSSL_WC_MLKEM
|
||||
#define WOLFSSL_WC_MLKEM
|
||||
/* All three ML-KEM parameter sets (512/768/1024); each validated by a
|
||||
* self-consistent encap/decap round-trip on hardware. */
|
||||
#undef WOLFSSL_NO_ML_KEM_512
|
||||
#undef WOLFSSL_NO_ML_KEM_1024
|
||||
#undef WC_MLKEM_NO_ASM
|
||||
#define WC_MLKEM_NO_ASM
|
||||
#undef WOLFSSL_MLKEM_NO_MALLOC
|
||||
#define WOLFSSL_MLKEM_NO_MALLOC
|
||||
#undef WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM
|
||||
#define WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM
|
||||
#undef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM
|
||||
#define WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM
|
||||
#else
|
||||
#undef WOLFSSL_HAVE_MLKEM /* no ML-KEM unless MLKEM=1 */
|
||||
#endif
|
||||
#undef NO_ASN
|
||||
#define NO_ASN /* ML-DSA + ECC raw import; no asn.c needed */
|
||||
#undef NO_CERTS
|
||||
#define NO_CERTS
|
||||
#undef NO_PWDBASED
|
||||
#define NO_PWDBASED
|
||||
#undef NO_PKCS7
|
||||
#define NO_PKCS7
|
||||
#undef NO_PKCS12
|
||||
#define NO_PKCS12
|
||||
#undef NO_SIG_WRAPPER
|
||||
#define NO_SIG_WRAPPER
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Disabled: unused symmetric / legacy (shrink the first build) */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
#ifdef WOLF_AES
|
||||
/* AES software (table-driven) with CBC, CTR, CFB and GCM. GCM_SMALL selects
|
||||
* the byte-wise GHASH (cleanest on a 16-bit-byte target; no word64 needed). */
|
||||
#undef NO_AES
|
||||
#undef HAVE_AES_CBC
|
||||
#define HAVE_AES_CBC
|
||||
#undef HAVE_AES_DECRYPT
|
||||
#define HAVE_AES_DECRYPT
|
||||
#undef WOLFSSL_AES_COUNTER
|
||||
#define WOLFSSL_AES_COUNTER
|
||||
#undef WOLFSSL_AES_CFB
|
||||
#define WOLFSSL_AES_CFB
|
||||
#undef HAVE_AESGCM
|
||||
#define HAVE_AESGCM
|
||||
#undef GCM_SMALL
|
||||
#define GCM_SMALL
|
||||
#undef WOLFSSL_AES_DIRECT
|
||||
#define WOLFSSL_AES_DIRECT
|
||||
#undef WOLFSSL_AES_128
|
||||
#define WOLFSSL_AES_128
|
||||
#undef WOLFSSL_AES_192
|
||||
#define WOLFSSL_AES_192
|
||||
#undef WOLFSSL_AES_256
|
||||
#define WOLFSSL_AES_256
|
||||
#else
|
||||
#undef NO_AES /* AES enabled only with AES=1 */
|
||||
#define NO_AES
|
||||
#endif
|
||||
|
||||
/* Curve25519 (X25519) + Ed25519. Enabled with EXTRA_CFLAGS=--define=WOLF_25519
|
||||
* (X25519=1 build). No __uint128_t and no SP-25519 backend on C28x, so the
|
||||
* default fe[10] 32-bit-limb field arithmetic is used; Ed25519 reuses the
|
||||
* already-enabled SHA-512. */
|
||||
#ifdef WOLF_25519
|
||||
#undef HAVE_CURVE25519
|
||||
#define HAVE_CURVE25519
|
||||
#undef HAVE_CURVE25519_KEY_IMPORT
|
||||
#define HAVE_CURVE25519_KEY_IMPORT
|
||||
#undef HAVE_CURVE25519_KEY_EXPORT
|
||||
#define HAVE_CURVE25519_KEY_EXPORT
|
||||
#undef HAVE_ED25519
|
||||
#define HAVE_ED25519
|
||||
#undef HAVE_ED25519_KEY_IMPORT
|
||||
#define HAVE_ED25519_KEY_IMPORT
|
||||
#undef HAVE_ED25519_KEY_EXPORT
|
||||
#define HAVE_ED25519_KEY_EXPORT
|
||||
#endif
|
||||
|
||||
/* Curve448 (X448) + Ed448. Enabled with EXTRA_CFLAGS=--define=WOLF_448
|
||||
* (X448=1 build). The default fe_448 field backend needs __uint128_t for
|
||||
* sc448 (scalar mod-order arithmetic), which the C28x toolchain lacks, so the
|
||||
* CURVE448_SMALL / ED448_SMALL byte-array backends are selected instead. They
|
||||
* are octet-correct on CHAR_BIT != 8 (carry-stores masked with WC_OCTET).
|
||||
* Ed448 reuses the already-enabled SHAKE256. */
|
||||
#ifdef WOLF_448
|
||||
#undef HAVE_CURVE448
|
||||
#define HAVE_CURVE448
|
||||
#undef CURVE448_SMALL
|
||||
#define CURVE448_SMALL
|
||||
#undef HAVE_CURVE448_KEY_IMPORT
|
||||
#define HAVE_CURVE448_KEY_IMPORT
|
||||
#undef HAVE_CURVE448_KEY_EXPORT
|
||||
#define HAVE_CURVE448_KEY_EXPORT
|
||||
#undef HAVE_ED448
|
||||
#define HAVE_ED448
|
||||
#undef ED448_SMALL
|
||||
#define ED448_SMALL
|
||||
#undef HAVE_ED448_KEY_IMPORT
|
||||
#define HAVE_ED448_KEY_IMPORT
|
||||
#undef HAVE_ED448_KEY_EXPORT
|
||||
#define HAVE_ED448_KEY_EXPORT
|
||||
#endif
|
||||
|
||||
#undef NO_DES3
|
||||
#define NO_DES3
|
||||
#undef NO_RC4
|
||||
#define NO_RC4
|
||||
#undef NO_MD4
|
||||
#define NO_MD4
|
||||
#undef NO_MD5
|
||||
#define NO_MD5
|
||||
#undef NO_SHA /* SHA-1 not in scope */
|
||||
#define NO_SHA
|
||||
/* HMAC + HKDF (RFC 2104 / RFC 5869) on top of the SHA-2/SHA-3 hashes.
|
||||
* Enabled with EXTRA_CFLAGS=--define=WOLF_HKDF (HKDF=1 build). */
|
||||
#ifdef WOLF_HKDF
|
||||
#undef NO_HMAC
|
||||
#undef HAVE_HKDF
|
||||
#define HAVE_HKDF
|
||||
#else
|
||||
#undef NO_HMAC /* relax if the harness needs it */
|
||||
#define NO_HMAC
|
||||
#endif
|
||||
|
||||
/* ChaCha20-Poly1305 AEAD (RFC 8439). Enabled with --define=WOLF_CHACHA. */
|
||||
#ifdef WOLF_CHACHA
|
||||
#undef HAVE_CHACHA
|
||||
#define HAVE_CHACHA
|
||||
#undef HAVE_POLY1305
|
||||
#define HAVE_POLY1305
|
||||
#endif
|
||||
|
||||
/* AES-CCM / CMAC / GMAC on top of the AES core (--define=WOLF_AESEXTRA). */
|
||||
#ifdef WOLF_AESEXTRA
|
||||
#undef HAVE_AESCCM
|
||||
#define HAVE_AESCCM
|
||||
#undef WOLFSSL_CMAC
|
||||
#define WOLFSSL_CMAC
|
||||
#undef HAVE_AESGCM /* GMAC is GCM with no plaintext */
|
||||
#define HAVE_AESGCM
|
||||
#undef GCM_SMALL
|
||||
#define GCM_SMALL
|
||||
/* Extra AES modes (all in aes.c; SIV/EAX build on CMAC). */
|
||||
#undef WOLFSSL_AES_XTS
|
||||
#define WOLFSSL_AES_XTS
|
||||
#undef WOLFSSL_AES_OFB
|
||||
#define WOLFSSL_AES_OFB
|
||||
#undef WOLFSSL_AES_SIV
|
||||
#define WOLFSSL_AES_SIV
|
||||
#undef WOLFSSL_AES_EAX
|
||||
#define WOLFSSL_AES_EAX
|
||||
#endif
|
||||
|
||||
/* RSA verify via the SP math backend (--define=WOLF_RSA). */
|
||||
#ifdef WOLF_RSA
|
||||
#undef NO_RSA
|
||||
#undef NO_BIG_INT /* SP provides the mp_int interface (was off) */
|
||||
#undef SP_WORD_SIZE
|
||||
#define SP_WORD_SIZE 32 /* 32-bit SP digits on the 16-bit-int C28x */
|
||||
#undef WOLFSSL_SP_MATH
|
||||
#define WOLFSSL_SP_MATH
|
||||
#undef WOLFSSL_SP_MATH_ALL
|
||||
#undef WOLFSSL_HAVE_SP_RSA
|
||||
#define WOLFSSL_HAVE_SP_RSA
|
||||
#undef WOLFSSL_SP_NO_2048 /* RSA-2048 verify only (KAT is 2048-bit) */
|
||||
#undef WOLFSSL_SP_NO_3072
|
||||
#define WOLFSSL_SP_NO_3072
|
||||
#undef WOLFSSL_SP_4096
|
||||
#undef WOLFSSL_SP_ALLOW_16BIT_CPU
|
||||
#define WOLFSSL_SP_ALLOW_16BIT_CPU
|
||||
#undef WOLFSSL_SP_NO_MALLOC
|
||||
#define WOLFSSL_SP_NO_MALLOC
|
||||
#undef WC_RSA_BLINDING /* verify only; no blinding RNG needed */
|
||||
#undef WOLFSSL_RSA_VERIFY_ONLY
|
||||
#define WOLFSSL_RSA_VERIFY_ONLY
|
||||
#undef WOLFSSL_RSA_PUBLIC_ONLY
|
||||
#define WOLFSSL_RSA_PUBLIC_ONLY
|
||||
#else
|
||||
#undef NO_RSA
|
||||
#define NO_RSA
|
||||
#endif
|
||||
|
||||
/* DH (FFDHE-2048) via the SP math backend (--define=WOLF_DH). Shares the SP
|
||||
* config with WOLF_RSA; uses the same sp_int.c/sp_c32.c 2048-bit modexp. */
|
||||
#ifdef WOLF_DH
|
||||
#undef NO_DH
|
||||
#undef NO_BIG_INT
|
||||
#undef SP_WORD_SIZE
|
||||
#define SP_WORD_SIZE 32
|
||||
#undef WOLFSSL_SP_MATH
|
||||
#define WOLFSSL_SP_MATH
|
||||
#undef WOLFSSL_HAVE_SP_DH
|
||||
#define WOLFSSL_HAVE_SP_DH
|
||||
#undef WOLFSSL_SP_NO_3072 /* FFDHE-2048 only */
|
||||
#define WOLFSSL_SP_NO_3072
|
||||
#undef WOLFSSL_SP_4096
|
||||
#undef WOLFSSL_SP_ALLOW_16BIT_CPU
|
||||
#define WOLFSSL_SP_ALLOW_16BIT_CPU
|
||||
#undef WOLFSSL_SP_NO_MALLOC
|
||||
#define WOLFSSL_SP_NO_MALLOC
|
||||
#undef HAVE_FFDHE_2048
|
||||
#define HAVE_FFDHE_2048
|
||||
#endif
|
||||
|
||||
/* SHA-1 (legacy) - octet-correct on CHAR_BIT!=8 via the same WIDE_BYTE I/O as
|
||||
* SHA-2 (--define=WOLF_SHA1). */
|
||||
#ifdef WOLF_SHA1
|
||||
#undef NO_SHA
|
||||
#endif
|
||||
|
||||
/* RSA-2048 sign (private key, SP CRT path) - --define=WOLF_RSASIGN. Mutually
|
||||
* exclusive with the verify-only WOLF_RSA build. Raw key import keeps it
|
||||
* ASN-free. Deterministic PKCS#1 v1.5 sign (no blinding -> no RNG). */
|
||||
#ifdef WOLF_RSASIGN
|
||||
#undef NO_RSA
|
||||
#undef NO_BIG_INT
|
||||
#undef SP_WORD_SIZE
|
||||
#define SP_WORD_SIZE 32
|
||||
#undef WOLFSSL_SP_MATH
|
||||
#define WOLFSSL_SP_MATH
|
||||
#undef WOLFSSL_HAVE_SP_RSA
|
||||
#define WOLFSSL_HAVE_SP_RSA
|
||||
#undef WOLFSSL_SP_NO_3072
|
||||
#define WOLFSSL_SP_NO_3072
|
||||
#undef WOLFSSL_SP_4096
|
||||
#undef WOLFSSL_SP_ALLOW_16BIT_CPU
|
||||
#define WOLFSSL_SP_ALLOW_16BIT_CPU
|
||||
#undef WOLFSSL_SP_NO_MALLOC
|
||||
#define WOLFSSL_SP_NO_MALLOC
|
||||
#undef WC_RSA_BLINDING
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Memory */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Use the TI runtime heap (malloc/free) for test/benchmark temporaries.
|
||||
* ML-DSA verify itself allocates nothing (WOLFSSL_MLDSA_VERIFY_NO_MALLOC).
|
||||
* NO_WOLFSSL_MEMORY routes XMALLOC straight to malloc/free with no wrapper.
|
||||
*
|
||||
* WOLF_MEM_PROFILE (MEMPROF=1) instead leaves NO_WOLFSSL_MEMORY undefined so
|
||||
* settings.h enables USE_WOLFSSL_MEMORY; wolf_main.c then installs a heap
|
||||
* high-water tracker via wolfSSL_SetAllocators(). It also turns on the stack
|
||||
* high-water paint. Measurement build only. */
|
||||
#ifdef WOLF_MEM_PROFILE
|
||||
#undef WOLF_STACK_PROFILE
|
||||
#define WOLF_STACK_PROFILE
|
||||
#else
|
||||
#undef NO_WOLFSSL_MEMORY
|
||||
#define NO_WOLFSSL_MEMORY
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Time - benchmark elapsed time comes from a CPU timer (wolf_main.c) */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
#undef NO_ASN_TIME
|
||||
#define NO_ASN_TIME
|
||||
|
||||
#undef WOLFSSL_USER_CURRTIME /* benchmark.c uses our current_time() */
|
||||
#define WOLFSSL_USER_CURRTIME
|
||||
|
||||
/* XTIME stub - hashing and ML-DSA verify never use wall-clock time. Define
|
||||
* XTIME directly (not TIME_OVERRIDES) so wolfSSL leaves ours in place and
|
||||
* defaults XGMTIME on its own (nothing in this scoped build calls XGMTIME). */
|
||||
extern long my_time(long* t);
|
||||
#undef XTIME
|
||||
#define XTIME(tl) my_time((tl))
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* RNG - real SHA-256 Hash-DRBG seeded by a DEV-ONLY test seed */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* The F28P550SJ has no hardware TRNG, so there is no real entropy source.
|
||||
* WOLFSSL_GENSEED_FORTEST makes random.c supply a built-in wc_GenerateSeed
|
||||
* (an incrementing test value) that feeds the standard SHA-256 Hash-DRBG.
|
||||
* This exercises the real DRBG code path (what a production build with a TRNG
|
||||
* would use) and lets random_test pass - but the seed is NOT random, so this
|
||||
* is DEV/TEST ONLY and MUST NOT be shipped. Replace wc_GenerateSeed with a
|
||||
* real TRNG before any production use. */
|
||||
#undef WOLFSSL_GENSEED_FORTEST
|
||||
#define WOLFSSL_GENSEED_FORTEST
|
||||
|
||||
/* Run every self-test to completion and report each, so macro_test (a 16-bit
|
||||
* safe-math self-test that currently fails on C28x) does not abort the suite
|
||||
* before the SHA/SHAKE/ML-DSA KATs run. */
|
||||
#undef TEST_ALWAYS_RUN_TO_END
|
||||
#define TEST_ALWAYS_RUN_TO_END
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* WOLFSSL_USER_SETTINGS_C2000_H */
|
||||
|
|
@ -0,0 +1,290 @@
|
|||
# Makefile - headless wolfCrypt test/benchmark build for TI LAUNCHXL-F28P55X
|
||||
# (TMS320F28P550SJ, C2000 C28x DSP), built from flash with cl2000.
|
||||
#
|
||||
# Copyright (C) 2006-2026 wolfSSL Inc. GPLv3 - see project headers.
|
||||
#
|
||||
# Usage:
|
||||
# make CGT_ROOT=/path/to/ti-cgt-c2000_xx.y.z [C2000WARE=/path/to/C2000Ware]
|
||||
#
|
||||
# CGT_ROOT must point at a TI C2000 codegen install (the dir containing
|
||||
# bin/cl2000). It ships with Code Composer Studio or as a standalone package.
|
||||
# C2000WARE defaults to ~/ti/C2000Ware_26_01_00_00.
|
||||
#
|
||||
# This is the SCOPED bring-up build: SHA-2, SHA-3/SHAKE, and ML-DSA-87 verify
|
||||
# only. See README.md.
|
||||
|
||||
CGT_ROOT ?=
|
||||
C2000WARE ?= $(HOME)/ti/C2000Ware_26_01_00_00
|
||||
|
||||
# wolfSSL source tree (this example lives in wolfssl-examples; point WOLFROOT
|
||||
# at a wolfSSL checkout that has the CHAR_BIT!=8 fixes). Override on the
|
||||
# command line, e.g. make WOLFROOT=/path/to/wolfssl.
|
||||
WOLFROOT ?= $(abspath $(CURDIR)/../../../wolfssl-alt)
|
||||
|
||||
DEV := $(C2000WARE)/device_support/f28p55x
|
||||
DRV := $(C2000WARE)/driverlib/f28p55x/driverlib
|
||||
DRVLIB := $(DRV)/ccs/Release
|
||||
|
||||
OUT := out
|
||||
TARGET := $(OUT)/wolfcrypt_f28p55x.out
|
||||
MAP := $(OUT)/wolfcrypt_f28p55x.map
|
||||
|
||||
ifeq ($(CGT_ROOT),)
|
||||
$(error Set CGT_ROOT to your TI C2000 codegen install, e.g. \
|
||||
make CGT_ROOT=$(HOME)/ti/ccs/tools/compiler/ti-cgt-c2000_22.6.2.LTS)
|
||||
endif
|
||||
|
||||
CL := $(CGT_ROOT)/bin/cl2000
|
||||
|
||||
INCS := \
|
||||
-I$(CGT_ROOT)/include \
|
||||
-I$(DRV) \
|
||||
-I$(DEV)/common/include \
|
||||
-I$(DEV)/headers/include \
|
||||
-I$(WOLFROOT) \
|
||||
-I$(CURDIR)/Header
|
||||
|
||||
# --float_support=fpu32 and --abi=eabi must match the prebuilt driverlib.lib.
|
||||
# Define WOLF_C2000_SCI_STDOUT to route printf to SCIA (XDS110 COM); omit it to
|
||||
# use the CCS console (CIO over JTAG) for first light.
|
||||
CFLAGS := \
|
||||
-v28 --float_support=fpu32 --tmu_support=tmu1 --abi=eabi \
|
||||
-O2 \
|
||||
--define=_LAUNCHXL_F28P55X \
|
||||
--define=_FLASH \
|
||||
--define=WOLFSSL_USER_SETTINGS \
|
||||
--gen_func_subsections=on \
|
||||
--diag_warning=225 --display_error_number \
|
||||
$(EXTRA_CFLAGS) \
|
||||
$(INCS)
|
||||
|
||||
# Output routing: SCI/UART is the DEFAULT -- printf streams to SCIA on the XDS110
|
||||
# virtual COM (GPIO28/29) at 115200 8N1, so uart-monitor can tail it with NO
|
||||
# debugger attached (an active JTAG session blocks the backchannel). Build with
|
||||
# CIO=1 to use the CCS/JTAG console (CIO) instead -- required by the DSS JTAG
|
||||
# capture scripts (run_capture.js / regress.sh), which read printf over JTAG.
|
||||
CIO ?= 0
|
||||
ifeq ($(CIO),0)
|
||||
CFLAGS += --define=WOLF_C2000_SCI_STDOUT
|
||||
endif
|
||||
|
||||
LFLAGS := \
|
||||
--reread_libs --warn_sections \
|
||||
-i$(CGT_ROOT)/lib -i$(DRVLIB) \
|
||||
-m $(MAP)
|
||||
|
||||
# wolfCrypt source subset (the only files that compile under CHAR_BIT==16).
|
||||
WC_SRCS := \
|
||||
$(WOLFROOT)/wolfcrypt/src/error.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wc_port.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/memory.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/logging.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/misc.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/coding.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/hash.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sha256.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sha512.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sha3.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wc_mldsa.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/random.c
|
||||
|
||||
# ECC=1 adds ECDSA/ECDH over SECP256R1 via SP single-precision math.
|
||||
ECC ?= 0
|
||||
ifeq ($(ECC),1)
|
||||
CFLAGS += --define=WOLF_ECC
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/ecc.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wolfmath.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sp_int.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sp_c32.c
|
||||
endif
|
||||
|
||||
# MLKEM=1 adds ML-KEM-768 (FIPS 203) via the wolfCrypt C implementation.
|
||||
MLKEM ?= 0
|
||||
ifeq ($(MLKEM),1)
|
||||
CFLAGS += --define=WOLF_MLKEM
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/wc_mlkem.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wc_mlkem_poly.c
|
||||
endif
|
||||
|
||||
# AES=1 adds AES-CBC/CTR/CFB/GCM (software, table-driven; GCM_SMALL GHASH).
|
||||
AES ?= 0
|
||||
ifeq ($(AES),1)
|
||||
CFLAGS += --define=WOLF_AES
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/aes.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wc_encrypt.c
|
||||
endif
|
||||
|
||||
# X25519=1 adds Curve25519 (X25519) + Ed25519 (default fe[10] 32-bit backend).
|
||||
X25519 ?= 0
|
||||
ifeq ($(X25519),1)
|
||||
CFLAGS += --define=WOLF_25519
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/curve25519.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/ed25519.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/fe_operations.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/ge_operations.c
|
||||
endif
|
||||
|
||||
# X448=1 adds Curve448 (X448) + Ed448 (CURVE448_SMALL/ED448_SMALL byte backend).
|
||||
X448 ?= 0
|
||||
ifeq ($(X448),1)
|
||||
CFLAGS += --define=WOLF_448
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/curve448.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/ed448.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/fe_448.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/ge_448.c
|
||||
endif
|
||||
|
||||
# HKDF=1 adds HMAC + HKDF (RFC 2104 / RFC 5869) on top of the SHA-2/3 hashes.
|
||||
HKDF ?= 0
|
||||
ifeq ($(HKDF),1)
|
||||
CFLAGS += --define=WOLF_HKDF
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/hmac.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/kdf.c
|
||||
endif
|
||||
|
||||
# CHACHA=1 adds ChaCha20-Poly1305 AEAD (RFC 8439).
|
||||
CHACHA ?= 0
|
||||
ifeq ($(CHACHA),1)
|
||||
CFLAGS += --define=WOLF_CHACHA
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/chacha.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/poly1305.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/chacha20_poly1305.c
|
||||
endif
|
||||
|
||||
# AESEXTRA=1 adds AES-CCM, CMAC and GMAC on top of the AES core.
|
||||
AESEXTRA ?= 0
|
||||
ifeq ($(AESEXTRA),1)
|
||||
CFLAGS += --define=WOLF_AES --define=WOLF_AESEXTRA
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/cmac.c
|
||||
# aes.c and wc_encrypt.c are also pulled in by AES=1; add them here only when
|
||||
# AES=1 did not, so they are not listed twice in the single cl2000 invocation
|
||||
# (which would multiply-define their symbols at link).
|
||||
ifneq ($(AES),1)
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/aes.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wc_encrypt.c
|
||||
endif
|
||||
endif
|
||||
|
||||
# RSA=1 adds RSA verify (SP math backend, shared with the ECC P-256 build).
|
||||
RSA ?= 0
|
||||
ifeq ($(RSA),1)
|
||||
CFLAGS += --define=WOLF_RSA
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/rsa.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/asn.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wolfmath.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sp_int.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sp_c32.c
|
||||
endif
|
||||
|
||||
# SHA1=1 adds (legacy) SHA-1.
|
||||
SHA1 ?= 0
|
||||
ifeq ($(SHA1),1)
|
||||
CFLAGS += --define=WOLF_SHA1
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/sha.c
|
||||
endif
|
||||
|
||||
# RSASIGN=1 adds RSA-2048 sign (private key, SP CRT path; raw key, no ASN).
|
||||
RSASIGN ?= 0
|
||||
ifeq ($(RSASIGN),1)
|
||||
# KAT-only: the upstream rsa test/benchmark need ASN (wc_RsaPrivateKeyDecode),
|
||||
# which this raw-key, ASN-free build doesn't compile.
|
||||
CFLAGS += --define=WOLF_RSASIGN --define=NO_CRYPT_TEST \
|
||||
--define=NO_CRYPT_BENCHMARK
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/rsa.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wolfmath.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sp_int.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sp_c32.c
|
||||
endif
|
||||
|
||||
# DH=1 adds Diffie-Hellman (FFDHE-2048) via the SP math backend.
|
||||
DH ?= 0
|
||||
ifeq ($(DH),1)
|
||||
CFLAGS += --define=WOLF_DH
|
||||
WC_SRCS += \
|
||||
$(WOLFROOT)/wolfcrypt/src/dh.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/wolfmath.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sp_int.c \
|
||||
$(WOLFROOT)/wolfcrypt/src/sp_c32.c
|
||||
endif
|
||||
|
||||
HARNESS_SRCS := \
|
||||
$(WOLFROOT)/wolfcrypt/test/test.c \
|
||||
$(WOLFROOT)/wolfcrypt/benchmark/benchmark.c
|
||||
|
||||
BSP_SRCS := \
|
||||
$(CURDIR)/Source/wolf_main.c \
|
||||
$(DEV)/common/source/device.c
|
||||
|
||||
ASM_SRCS := \
|
||||
$(DEV)/common/source/f28p55x_codestartbranch.asm
|
||||
|
||||
# SIGN=1 builds the full ML-DSA-87 (keygen + sign + verify) demo. It needs a
|
||||
# 32 KW heap, so the wolfcrypt test/benchmark harness is left out and a
|
||||
# dedicated linker script is used. Default (SIGN=0) is the verify-only build
|
||||
# with the full test/benchmark harness.
|
||||
SIGN ?= 0
|
||||
# BENCH=1 runs ONLY the benchmark (skips wolfcrypt_test). wolfcrypt_test's
|
||||
# heap high-water leaves too little for the benchmark's block buffers on this
|
||||
# RAM-limited part, so run them in separate images: default = KATs + test, and
|
||||
# BENCH=1 = KATs + benchmark.
|
||||
BENCH ?= 0
|
||||
ifeq ($(SIGN),1)
|
||||
CFLAGS += --define=WOLF_MLDSA_SIGN --define=NO_CRYPT_TEST \
|
||||
--define=NO_CRYPT_BENCHMARK
|
||||
LNKCMD := $(CURDIR)/28p55x_wolf_sign_lnk.cmd
|
||||
HARNESS_SRCS :=
|
||||
else
|
||||
LNKCMD := $(CURDIR)/28p55x_wolf_flash_lnk.cmd
|
||||
ifeq ($(BENCH),1)
|
||||
CFLAGS += --define=NO_CRYPT_TEST
|
||||
endif
|
||||
endif
|
||||
|
||||
# MEMPROF=1 installs a heap high-water tracker (via wolfSSL_SetAllocators) and
|
||||
# the stack paint, and prints per-op "MEMPROF ..." RAM lines. Measurement-only
|
||||
# (uses USE_WOLFSSL_MEMORY instead of NO_WOLFSSL_MEMORY). Combine with SIGN=1
|
||||
# or MLKEM=1 (or default for ML-DSA verify).
|
||||
MEMPROF ?= 0
|
||||
ifeq ($(MEMPROF),1)
|
||||
CFLAGS += --define=WOLF_MEM_PROFILE
|
||||
endif
|
||||
|
||||
ALL_SRCS := $(WC_SRCS) $(HARNESS_SRCS) $(BSP_SRCS) $(ASM_SRCS)
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
$(TARGET): $(ALL_SRCS) $(LNKCMD) user_settings_dep
|
||||
@mkdir -p $(OUT)
|
||||
$(CL) $(CFLAGS) \
|
||||
$(ALL_SRCS) \
|
||||
-z $(LFLAGS) \
|
||||
--output_file=$(TARGET) \
|
||||
$(LNKCMD) \
|
||||
-l driverlib.lib -l libc.a
|
||||
|
||||
# touch-only dependency so editing user_settings.h forces a rebuild
|
||||
user_settings_dep: Header/user_settings.h
|
||||
|
||||
# Compile-only guard (no link, no C2000Ware): mirrors the upstream CI job at
|
||||
# wolfssl/.github/workflows/ti-c2000-compile.yml. Builds the CHAR_BIT!=8
|
||||
# wolfCrypt subset with cl2000 to catch regressions locally.
|
||||
.PHONY: compile-ci
|
||||
compile-ci:
|
||||
CGT_ROOT=$(CGT_ROOT) $(WOLFROOT)/IDE/C2000/compile.sh
|
||||
|
||||
clean:
|
||||
rm -rf $(OUT) *.obj *.map *.asm
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
# wolfCrypt on TI C2000 C28x (LAUNCHXL-F28P55X)
|
||||
|
||||
Bare-metal wolfCrypt test/benchmark for the TI LAUNCHXL-F28P55X board (TMS320F28P550SJ, C2000 C28x DSP, 150 MHz, 133 KB RAM, 1088 KB flash). The C28x is a word-addressed DSP where `CHAR_BIT == 16`; this example exercises the wolfSSL `CHAR_BIT != 8` support and is validated on hardware with known-answer tests (KATs).
|
||||
|
||||
## What this build includes
|
||||
|
||||
The default build runs a KAT suite plus `wolfcrypt_test` and (optionally) `benchmark`. Optional algorithms are enabled with `make` toggles (see Build options). Everything below is validated on hardware:
|
||||
|
||||
- SHA-224/256, SHA-384/512, SHA-512/224, SHA-512/256
|
||||
- SHA3-224/256/384/512, SHAKE128, SHAKE256 (split-64 Keccak permutation, ~53% faster than the generic C path on C28x)
|
||||
- ML-DSA-87 (Dilithium level 5) verify, and the full keygen+sign+verify round-trip (`SIGN=1`)
|
||||
- ML-KEM-768 (FIPS 203) keygen/encap/decap round-trip (`MLKEM=1`)
|
||||
- AES-128/192/256 CBC/CTR/CFB/GCM (`AES=1`); AES-CMAC, AES-CCM, AES-GMAC (`AESEXTRA=1`)
|
||||
- HMAC-SHA256 + HKDF (`HKDF=1`)
|
||||
- ChaCha20-Poly1305 AEAD + Poly1305 (`CHACHA=1`)
|
||||
- X25519 + Ed25519 (`X25519=1`)
|
||||
- ECDSA + ECDH over SECP256R1 via SP math (`ECC=1`)
|
||||
- RSA-2048 PKCS#1 v1.5 verify via SP math (`RSA=1`)
|
||||
|
||||
## The 16-bit-byte (CHAR_BIT == 16) story
|
||||
|
||||
On the C28x a `char`/`unsigned char` (wolfSSL's `byte`) holds 16 bits, the minimum addressable unit is 16 bits, and `(byte)x` masks to 16 bits, not 8. wolfCrypt octet handling that assumed an 8-bit byte was made `CHAR_BIT`-agnostic behind the `WOLFSSL_WIDE_BYTE` gate (auto-enabled for `CHAR_BIT != 8` and known 16-bit-char TI toolchains), with zero change on 8-bit targets. The fixes fall into a few recurring classes:
|
||||
|
||||
- Byte/word aliasing: serializing a `word32`/`word64` by casting it to `byte*` reads/writes cells, not octets. Replaced with explicit shift-based octet I/O (shared helpers in `wolfcrypt/src/misc.c`: `WordsFromBytesBE32`, `BytesFromWordsBE32`, `BytesFromWordsLE32`, the 64-bit variants, and octet-correct `readUnalignedWord32/64`).
|
||||
- `(byte)x` not truncating to an octet: masked with `WC_OCTET(x)` (`(byte)((x) & 0xFF)`), a no-op on 8-bit.
|
||||
- Integer-promotion bugs: `1U << n` is 16-bit on C28x (use `1UL`); `sizeof(t) * 8` for a bit width is wrong when `CHAR_BIT != 8` (use `CHAR_BIT * sizeof(t)`).
|
||||
- `sizeof` counting cells, not octets: e.g. `CHACHA_CHUNK_BYTES` must be `16 * 4`, not `16 * sizeof(word32)` (which is 32 on C28x and halves the ChaCha block).
|
||||
|
||||
These changes live in the wolfSSL tree (see `IDE/C2000/README.md` there for the full list); this example is the on-hardware harness that validates them.
|
||||
|
||||
## Toolchain
|
||||
|
||||
- **C2000Ware** (driverlib + device support). Assumed at `~/ti/C2000Ware_26_01_00_00`; override with `C2000WARE=`.
|
||||
- **TI C2000 codegen** (`cl2000`, the classic CGT). Ships with Code Composer Studio or standalone. Point `CGT_ROOT` at the dir containing `bin/cl2000`.
|
||||
- For flashing: **DSLite** (bundled with CCS) or **UniFlash**, driving the onboard XDS110. A ready `ccxml/F28P550SJ.ccxml` is included.
|
||||
|
||||
## Build
|
||||
|
||||
Headless, from this directory:
|
||||
|
||||
```
|
||||
make CGT_ROOT=/path/to/ti-cgt-c2000_xx.y.z
|
||||
```
|
||||
|
||||
Output: `out/wolfcrypt_f28p55x.out` (load image) and `out/wolfcrypt_f28p55x.map`. Point `WOLFROOT` at a wolfSSL checkout with the `CHAR_BIT != 8` support if it is not the default `../../../wolfssl-alt`.
|
||||
|
||||
### Build options
|
||||
|
||||
Each is `make <NAME>=1` (default 0 unless noted), additive on top of the default SHA + ML-DSA-verify build:
|
||||
|
||||
| Option | Adds |
|
||||
|---|---|
|
||||
| `ECC=1` | ECDSA/ECDH over SECP256R1 (SP math) |
|
||||
| `MLKEM=1` | ML-KEM-768 (FIPS 203) |
|
||||
| `AES=1` | AES-CBC/CTR/CFB/GCM (table-driven, `GCM_SMALL`) |
|
||||
| `AESEXTRA=1` | AES-CMAC, AES-CCM, AES-GMAC (implies the AES core) |
|
||||
| `X25519=1` | Curve25519 (X25519) + Ed25519 |
|
||||
| `HKDF=1` | HMAC + HKDF (RFC 2104 / RFC 5869) |
|
||||
| `CHACHA=1` | ChaCha20-Poly1305 AEAD (RFC 8439) |
|
||||
| `RSA=1` | RSA-2048 verify (SP math, 2048-only, verify/public-only) |
|
||||
| `SIGN=1` | Full ML-DSA-87 keygen+sign+verify demo (dedicated linker script, 32 KW heap, no test/bench harness) |
|
||||
| `BENCH=1` | Run only `benchmark` instead of `wolfcrypt_test` (they need separate images on this RAM-limited part) |
|
||||
|
||||
Other knobs: `CGT_ROOT` (required), `C2000WARE`, `WOLFROOT`, and `CIO=1` (route `printf` to the CCS/JTAG console via CIO instead of the default SCI/UART).
|
||||
|
||||
CCS GUI alternative: create an empty F28P550SJ project, add the `WC_SRCS` subset from the `Makefile`, `Source/wolf_main.c`, the device-support `device.c` + `f28p55x_codestartbranch.asm`, link `driverlib.lib`, set the predefines (`_LAUNCHXL_F28P55X`, `_FLASH`, `WOLFSSL_USER_SETTINGS`) and include paths, and use `28p55x_wolf_flash_lnk.cmd`.
|
||||
|
||||
## Console output
|
||||
|
||||
`printf` goes to the **SCI/UART by default**: `stdout` is redirected to **SCIA on GPIO28/29**, the XDS110 virtual COM, at **115200 8N1**, so output appears on a serial terminal (or `uart-monitor`) with no debugger attached. Build with **`CIO=1`** to route output to the CCS console via CIO over JTAG instead (useful under an active debug session, and required by the DSS capture scripts). Every stdout byte is also mirrored to the `g_log[]` RAM buffer, readable over JTAG even when the UART is not.
|
||||
|
||||
## Flash and run
|
||||
|
||||
Boot-mode switch S3 default (GPIO24 + GPIO32 both high) boots from flash. With CCS DSLite:
|
||||
|
||||
```
|
||||
DSLite flash -c ccxml/F28P550SJ.ccxml -e -f -v out/wolfcrypt_f28p55x.out
|
||||
```
|
||||
|
||||
For clean **UART** output the JTAG probe must be RELEASED while the target runs: an active debug session garbles the XDS110 backchannel, and DSLite leaves the CPU halted after flashing. So flash, then reset+run and DETACH the debugger (leave it running) -- the board free-runs from flash and loops `main()`. Then read the serial port (e.g. `uart-monitor tail /dev/ttyACM<N>` at 115200 8N1). The `ti-c2000-c28x` skill automates this: `run_uart.sh [CHACHA=1 ...]` builds (SCI default), flashes, resets+runs+detaches (`run_detach.js`), and prints the clean UART. For JTAG-console capture instead, build `CIO=1` and use `run_capture.js` (holds JTAG, reads CIO).
|
||||
|
||||
## Benchmark results
|
||||
|
||||
Measured at 150 MHz (SHA-256 Hash-DRBG via `WOLFSSL_GENSEED_FORTEST`; build with `BENCH=1`). Representative throughput:
|
||||
|
||||
| Primitive | Throughput |
|
||||
|---|---|
|
||||
| SHA-256 | ~284 KiB/s |
|
||||
| SHA-384 / SHA-512 (+512-224/256) | ~166 KiB/s |
|
||||
| SHA3-224 / 256 / 384 / 512 | ~279 / 264 / 206 / 146 KiB/s |
|
||||
| SHAKE128 / SHAKE256 | ~319 / 264 KiB/s |
|
||||
| RNG (Hash-DRBG) | ~122 KiB/s |
|
||||
|
||||
ML-DSA-87 (asymmetric, @150 MHz): verify ~225 ms/op; keygen and signing also run (`SIGN=1`). ML-DSA-87 verify memory: ~10.7 KB total (key/workspace struct + ~2 KB stack, zero heap) with `WOLFSSL_MLDSA_VERIFY_SMALLEST_MEM` + `WOLFSSL_MLDSA_ASSIGN_KEY`.
|
||||
|
||||
## Memory notes
|
||||
|
||||
- Clock: 150 MHz from the 20 MHz crystal Y2 (`device.h` `DEVICE_SETCLOCK_CFG`), flash `RWAIT=3`.
|
||||
- The C28x stack pointer is 16-bit, so the stack must live below address `0x10000`. `28p55x_wolf_flash_lnk.cmd` puts a 16 KW stack in RAMLS0-7, RAM-resident hot code (`BlockSha3` + the ML-DSA NTTs) in RAMGS0, an 8 KW heap in RAMGS1, and `.bss`/`.data` in the high RAMGS2-3 / RAMLS8-9 blocks. Flash output sections span all five banks.
|
||||
- Big SP/`*_NO_MALLOC` structs (ecc_key, RsaKey, ChaChaPoly_Aead) belong in `.bss`/static, not on the stack: the SP point/modexp call tree plus a stack-allocated key can overflow the 16 KW stack.
|
||||
- `wc_RsaSSL_Verify` in the `RSA_VERIFY_ONLY` / `SP_NO_MALLOC` config runs the modexp in place in the caller's buffer, so the output buffer must be at least the key size (256 B for RSA-2048).
|
||||
|
||||
## RNG caveat
|
||||
|
||||
The F28P55x has **no hardware TRNG**. The example uses `WOLFSSL_GENSEED_FORTEST` (random.c's built-in incrementing test seed feeding the real SHA-256 Hash-DRBG): exercises the real DRBG path but is **development-only, not cryptographically secure**. For production, wire a real entropy source into `wc_GenerateSeed()`.
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<configurations XML_version="1.2" id="configurations_0">
|
||||
|
||||
<configuration XML_version="1.2" id="Texas Instruments XDS110 USB Debug Probe_0">
|
||||
|
||||
<instance XML_version="1.2" desc="Texas Instruments XDS110 USB Debug Probe_0" href="connections/TIXDS110_Connection.xml" id="Texas Instruments XDS110 USB Debug Probe_0" xml="TIXDS110_Connection.xml" xmlpath="connections"/>
|
||||
|
||||
<connection XML_version="1.2" id="Texas Instruments XDS110 USB Debug Probe_0">
|
||||
|
||||
<instance XML_version="1.2" href="drivers/tixds510icepick_c.xml" id="drivers" xml="tixds510icepick_c.xml" xmlpath="drivers"/>
|
||||
|
||||
<instance XML_version="1.2" href="drivers/tixds510c28x.xml" id="drivers" xml="tixds510c28x.xml" xmlpath="drivers"/>
|
||||
|
||||
<instance XML_version="1.2" href="drivers/tixds510cla2.xml" id="drivers" xml="tixds510cla2.xml" xmlpath="drivers"/>
|
||||
|
||||
<instance XML_version="1.2" href="drivers/tixds510cs_child.xml" id="drivers" xml="tixds510cs_child.xml" xmlpath="drivers"/>
|
||||
|
||||
<instance XML_version="1.2" href="drivers/tixds510ajsm.xml" id="drivers" xml="tixds510ajsm.xml" xmlpath="drivers"/>
|
||||
<property Type="choicelist" Value="4" id="SWD Mode Settings"/>
|
||||
<platform XML_version="1.2" id="platform_0">
|
||||
<instance XML_version="1.2" desc="TMS320F28P550SJ9_0" href="devices/f28p550sj9.xml" id="TMS320F28P550SJ9_0" xml="tms320f28p550sj9.xml" xmlpath="devices"/>
|
||||
<device HW_revision="1" XML_version="1.2" description="" id="TMS320F28P550SJ9_0" partnum="TMS320F28P550SJ9" simulation="no">
|
||||
<router HW_revision="1.0" XML_version="1.2" description="ICEPick_C router" id="IcePick_C_0" isa="ICEPICK_C">
|
||||
<subpath id="Subpath_1">
|
||||
<property Type="numericfield" Value="0x11" desc="Port Number_0" id="Port Number"/>
|
||||
</subpath>
|
||||
</router>
|
||||
</device>
|
||||
</platform>
|
||||
</connection>
|
||||
</configuration>
|
||||
</configurations>
|
||||
Loading…
Reference in New Issue