Skip to content

Commit d6ac35f

Browse files
Now handle another key id for trusted names coming from CAL
Adapted Python client
1 parent bace382 commit d6ac35f

File tree

2 files changed

+29
-17
lines changed

2 files changed

+29
-17
lines changed

client/src/ledger_app_clients/ethereum/client.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ def perform_privacy_operation(self,
255255
bip32_path,
256256
pubkey))
257257

258-
def _provide_trusted_name_common(self, payload: bytes) -> RAPDU:
258+
def _provide_trusted_name_common(self, payload: bytes, name_source: TrustedNameSource) -> RAPDU:
259259
if self._pki_client is None:
260260
print(f"Ledger-PKI Not supported on '{self._firmware.name}'")
261261
else:
@@ -272,10 +272,16 @@ def _provide_trusted_name_common(self, payload: bytes) -> RAPDU:
272272

273273
self._pki_client.send_certificate(PKIPubKeyUsage.PUBKEY_USAGE_COIN_META, bytes.fromhex(cert_apdu))
274274
payload += format_tlv(FieldTag.STRUCT_TYPE, 3) # TrustedName
275-
payload += format_tlv(FieldTag.SIGNER_KEY_ID, 0) # test key
275+
if name_source == TrustedNameSource.CAL:
276+
key_id = 6
277+
key = Key.CAL
278+
else:
279+
key_id = 3
280+
key = Key.TRUSTED_NAME
281+
payload += format_tlv(FieldTag.SIGNER_KEY_ID, key_id) # test key
276282
payload += format_tlv(FieldTag.SIGNER_ALGO, 1) # secp256k1
277283
payload += format_tlv(FieldTag.DER_SIGNATURE,
278-
sign_data(Key.TRUSTED_NAME, payload))
284+
sign_data(key, payload))
279285
chunks = self._cmd_builder.provide_trusted_name(payload)
280286
for chunk in chunks[:-1]:
281287
self._exchange(chunk)
@@ -287,7 +293,7 @@ def provide_trusted_name_v1(self, addr: bytes, name: str, challenge: int) -> RAP
287293
payload += format_tlv(FieldTag.COIN_TYPE, 0x3c) # ETH in slip-44
288294
payload += format_tlv(FieldTag.TRUSTED_NAME, name)
289295
payload += format_tlv(FieldTag.ADDRESS, addr)
290-
return self._provide_trusted_name_common(payload)
296+
return self._provide_trusted_name_common(payload, TrustedNameSource.ENS)
291297

292298
def provide_trusted_name_v2(self,
293299
addr: bytes,
@@ -311,7 +317,7 @@ def provide_trusted_name_v2(self,
311317
if not_valid_after is not None:
312318
assert len(not_valid_after) == 3
313319
payload += format_tlv(FieldTag.NOT_VALID_AFTER, struct.pack("BBB", *not_valid_after))
314-
return self._provide_trusted_name_common(payload)
320+
return self._provide_trusted_name_common(payload, name_source)
315321

316322
def set_plugin(self,
317323
plugin_name: str,

src_features/provideTrustedName/cmd_provide_trusted_name.c

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ typedef enum {
6363
NFT_ID = 0x72,
6464
} e_tlv_tag;
6565

66-
typedef enum { KEY_ID_TEST = 0x00, KEY_ID_PROD = 0x03 } e_key_id;
66+
typedef enum { TN_KEY_ID_DOMAIN_SVC = 0x03, TN_KEY_ID_CAL = 0x06 } e_tn_key_id;
6767

6868
typedef struct {
6969
uint8_t *buf;
@@ -90,7 +90,7 @@ typedef struct {
9090
} s_trusted_name_info;
9191

9292
typedef struct {
93-
e_key_id key_id;
93+
e_tn_key_id key_id;
9494
uint8_t input_sig_size;
9595
const uint8_t *input_sig;
9696
cx_sha256_t hash_ctx;
@@ -592,16 +592,22 @@ static bool handle_nft_id(const s_tlv_data *data,
592592
static bool verify_signature(const s_sig_ctx *sig_ctx) {
593593
uint8_t hash[INT256_LENGTH];
594594
cx_err_t error = CX_INTERNAL_ERROR;
595-
#ifdef HAVE_TRUSTED_NAME_TEST_KEY
596-
e_key_id valid_key_id = KEY_ID_TEST;
597-
#else
598-
e_key_id valid_key_id = KEY_ID_PROD;
599-
#endif
600595
bool ret_code = false;
596+
const uint8_t *pk;
597+
size_t pk_size;
601598

602-
if (sig_ctx->key_id != valid_key_id) {
603-
PRINTF("Error: Unknown metadata key ID %u\n", sig_ctx->key_id);
604-
return false;
599+
switch (sig_ctx->key_id) {
600+
case TN_KEY_ID_DOMAIN_SVC:
601+
pk = TRUSTED_NAME_PUB_KEY;
602+
pk_size = sizeof(TRUSTED_NAME_PUB_KEY);
603+
break;
604+
case TN_KEY_ID_CAL:
605+
pk = LEDGER_SIGNATURE_PUBLIC_KEY;
606+
pk_size = sizeof(LEDGER_SIGNATURE_PUBLIC_KEY);
607+
break;
608+
default:
609+
PRINTF("Error: Unknown metadata key ID %u\n", sig_ctx->key_id);
610+
return false;
605611
}
606612

607613
CX_CHECK(
@@ -610,8 +616,8 @@ static bool verify_signature(const s_sig_ctx *sig_ctx) {
610616
CX_CHECK(check_signature_with_pubkey("Domain Name",
611617
hash,
612618
sizeof(hash),
613-
TRUSTED_NAME_PUB_KEY,
614-
sizeof(TRUSTED_NAME_PUB_KEY),
619+
pk,
620+
pk_size,
615621
#ifdef HAVE_LEDGER_PKI
616622
CERTIFICATE_PUBLIC_KEY_USAGE_TRUSTED_NAME,
617623
#endif

0 commit comments

Comments
 (0)