Use LEAF certificate instead of bare public key

This commit is contained in:
kormax
2026-05-05 18:40:18 +03:00
parent 1167bd9701
commit 7abc9a1563
4 changed files with 45 additions and 4 deletions
@@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICKDCCAYmgAwIBAgIBAjAKBggqhkjOPQQDAjBGMQwwCgYDVQQKDANOWFAxHTAb
BgNVBAMMFE5YUCBMRUFGIFJvb3RDQXZFNTAwMRcwFQYDVQQFEw42MzcwOTMyMDEz
MDAwMDAgFw0yNTA2MzAxMzM0NDRaGA8yMDY1MDYzMDEzMzQ0NFowRjEMMAoGA1UE
CgwDTlhQMR0wGwYDVQQDDBROWFAgTEVBRiBSb290Q0F2RTIwMDEXMBUGA1UEBRMO
NjM3MDkzMjAxMzEwMDAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQtJ4G+QcIn
WKYTgQ9n7HjfEXbEdlshK0khjGxYQIpa2j2ZcyCdgiiROogWlzz+XJ6/2MZpdTLN
1bU+4TTS8Rs8o2YwZDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB
BjAdBgNVHQ4EFgQUdktaJUHxC+YHsMDqW+Cu4yoZt94wHwYDVR0jBBgwFoAUJm5E
Yuw6nFX1IreUXpdhFNdmY5QwCgYIKoZIzj0EAwIDgYwAMIGIAkIA1PsrUHpbSGEH
ETjfYygzBoqLCS+Ed6jzfAYCsEjPAEdIN7v+bej86yKckN2+FSiG5/LJwJi5nTLg
fbRrFH+M+yACQgDH9nudmERpYiOiEHwWHZFHOHyXT8di6KEmPqR7WN2mSFAqYN2n
psI8ZlIxiHmLs2kEUqIR36XxLk4LBIiMInLvHw==
-----END CERTIFICATE-----
@@ -0,0 +1,15 @@
-----BEGIN CERTIFICATE-----
MIICajCCAcygAwIBAgIBATAKBggqhkjOPQQDBDBGMQwwCgYDVQQKDANOWFAxHTAb
BgNVBAMMFE5YUCBMRUFGIFJvb3RDQXZFNTAwMRcwFQYDVQQFEw42MzcwOTMyMDEz
MDAwMDAgFw0yNTA2MzAxMzI3NDlaGA8yMDc1MDYzMDEzMjc0OVowRjEMMAoGA1UE
CgwDTlhQMR0wGwYDVQQDDBROWFAgTEVBRiBSb290Q0F2RTUwMDEXMBUGA1UEBRMO
NjM3MDkzMjAxMzAwMDAwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABAC3O2rxBVGV
IVtqIP43XLA7/Jg3vaYXZPBppyjHcdnn5zylnLP3B9igEld/SWCosMdrpKuqddps
EiTeIMJIUu9VRQDS6leU5itYBrAsHccq/KUpUDigSj6HI0WiVRzLpUyYXOUIYq+l
zytBQb0jXRXT4ddOyw5x0nL6wLjJADPZ+Qi8c6NmMGQwEgYDVR0TAQH/BAgwBgEB
/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFCZuRGLsOpxV9SK3lF6XYRTX
ZmOUMB8GA1UdIwQYMBaAFCZuRGLsOpxV9SK3lF6XYRTXZmOUMAoGCCqGSM49BAME
A4GLADCBhwJCAP0JGHZUujRaVqvLH3NZFxhxRGjAJ0c4Sg/NRMq2XQTrJmwZ6P/A
5yuscF/TtVk1GpqRuyMiNyCHZrzkR61/kh8JAkF1xB2/wdgpfdmnJMZQw0p4ofim
g8YJjVLRj3Ug5lPvWbG7TS7BGZcsLxPMZp2UvB1K+O1YqNuxLWxIm/xIPHWmjQ==
-----END CERTIFICATE-----
+16 -4
View File
@@ -85,7 +85,7 @@
#define LEAF_VERIFIED_DEFAULT_AID 0xF51CD6U
#define LEAF_VERIFIED_CERT_FILE 0x02
#define LEAF_VERIFIED_MAX_CERT_LEN 4096
#define LEAF_COMMUNITY_ROOT_KEY_PATH "duox_trust/leaf_community/leaf_community-root-public-key.der"
#define LEAF_COMMUNITY_ROOT_CERT_PATH "duox_trust/nxp/nxp-leaf-e200-sn63709320131000-c02.pem"
#define DUOX_VDE_DEFAULT_AID 0x1010F6U
#define DUOX_VDE_CERT_FILE 0x00
@@ -8119,12 +8119,24 @@ static int CmdHF14ADesLeaf(const char *Cmd) {
SetAPDULogging(APDULogging);
CLIParserFree(ctx);
uint8_t leaf_root_pubkey[65] = {0};
int pk_res = ensure_ec_public_key(LEAF_COMMUNITY_ROOT_KEY_PATH, MBEDTLS_ECP_DP_SECP256R1, leaf_root_pubkey, sizeof(leaf_root_pubkey));
duox_certificate_anchor_t leaf_root_anchor = {0};
int pk_res = duox_load_certificate_anchor_from_input(LEAF_COMMUNITY_ROOT_CERT_PATH, DUOX_DEFAULT_CA_DIR, &leaf_root_anchor);
mbedtls_ecp_group_id leaf_root_curveid = MBEDTLS_ECP_DP_NONE;
const uint8_t *leaf_root_anchor_pubkey = NULL;
size_t leaf_root_pubkey_len = 0;
if (pk_res == PM3_SUCCESS) {
pk_res = duox_certificate_anchor_public_key(&leaf_root_anchor, &leaf_root_curveid, &leaf_root_anchor_pubkey, &leaf_root_pubkey_len);
}
if (pk_res != PM3_SUCCESS) {
PrintAndLogEx(ERR, "Failed to load LEAF Root CA public key from " _YELLOW_("%s") " (%d)", LEAF_COMMUNITY_ROOT_KEY_PATH, pk_res);
PrintAndLogEx(ERR, "Failed to load LEAF Root CA certificate from " _YELLOW_("%s") " (%d)", LEAF_COMMUNITY_ROOT_CERT_PATH, pk_res);
return pk_res;
}
if (leaf_root_curveid != MBEDTLS_ECP_DP_SECP256R1 || leaf_root_anchor_pubkey == NULL || leaf_root_pubkey_len != 65) {
PrintAndLogEx(ERR, "LEAF Root CA certificate has unsupported public key");
return PM3_ECRYPTO;
}
uint8_t leaf_root_pubkey[65] = {0};
memcpy(leaf_root_pubkey, leaf_root_anchor_pubkey, sizeof(leaf_root_pubkey));
if (!challenge_provided) {
int res = pcrypto_rng_fill_oneshot(challenge, sizeof(challenge), "hf_mfdes_leaf");