Skip to content

Commit

Permalink
feat: add parent fingerprint value
Browse files Browse the repository at this point in the history
  • Loading branch information
emmanuelm41 committed Jan 20, 2025
1 parent ed98d86 commit 1a594fb
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 10 deletions.
1 change: 1 addition & 0 deletions app/src/coin.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ extern "C" {
// data for extended public key
#define CHAIN_CODE_LEN_SECP256K1 32u
#define VERSION_LEN 4u
#define PARENT_FINGERPRINT_LEN 4u
#define INDEX_LEN 4u
#define DEPTH_LEN 1u

Expand Down
10 changes: 9 additions & 1 deletion app/src/crypto.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ typedef struct {
typedef struct {
uint32_t version;
uint8_t depth;
uint32_t parentFingerprint;
uint32_t index;
uint8_t chainCode[CHAIN_CODE_LEN_SECP256K1];
uint8_t publicKey[PK_LEN_SECP256K1];
Expand Down Expand Up @@ -230,6 +231,13 @@ zxerr_t crypto_fillAddress_extended_secp256k1(uint8_t *buffer, uint16_t buffer_l
);
io_seproxyhal_io_heartbeat();

// FIXME this needs to be calculated over the pk calculated for the previous level (parent pk), instead of the current level (current pk)
uint8_t sha256_pk[CX_SHA256_SIZE] = {0};
uint8_t ripe_sha256_pk[CX_RIPEMD160_SIZE] = {0};
cx_hash_sha256(answer->publicKey, PK_LEN_SECP256K1, sha256_pk, CX_SHA256_SIZE); // SHA256
CHECK_ZXERR(ripemd160(sha256_pk, CX_SHA256_SIZE, ripe_sha256_pk)); // RIPEMD-160

memcpy(&answer->parentFingerprint, ripe_sha256_pk, PARENT_FINGERPRINT_LEN);

answer->depth = hdPath.len;
answer->index = hdPath.secp256k1_path[hdPath.len - 1];
Expand All @@ -239,7 +247,7 @@ zxerr_t crypto_fillAddress_extended_secp256k1(uint8_t *buffer, uint16_t buffer_l
answer->version = PK_VERSION_TESTNET;
}

*replyLen = PK_LEN_SECP256K1 + CHAIN_CODE_LEN_SECP256K1 + DEPTH_LEN + INDEX_LEN + VERSION_LEN;
*replyLen = PK_LEN_SECP256K1 + CHAIN_CODE_LEN_SECP256K1 + DEPTH_LEN + INDEX_LEN + VERSION_LEN + PARENT_FINGERPRINT_LEN;
return zxerr_ok;
}

Expand Down
2 changes: 1 addition & 1 deletion js
Submodule js updated 3 files
+1 −0 src/consts.ts
+6 −2 src/index.ts
+1 −0 src/types.ts
26 changes: 18 additions & 8 deletions tests_zemu/tests/addresses.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,21 @@ describe('Addresses', function () {
const app = new ZCashApp(sim.getTransport())
const expectedPk = '0378e0db93ebe9b03fb04f08931038822b75db3a6089f54443b4e8ca1865811b79'
const expectedChainCode = 'd293abfd48452b107be8a5895c721addca628c0ae36353bac34d13a1d8c5e73e'
const expectedExtendedPk = '2JcqaJaGEDfcv3TLvsnVL3tcM47pQ3nN24B7tVGcUEhPqaawqCrCtvvwWcgT7ExDmK2eGDtoikKsrqkwXpVjw77c4SaJyxBqrJm3W'
const expectedIndex = 0x80000000 + 5
const expectedDepth = 3
const expectedVersion = 0x0488B21E
const expectedFingerprint = "f4abeb80"
const expectedExtendedPk = '9XpNiCCC7BPCmQdqhAWdTVZJpNsDQUfxnnXDYpnqFgtyPxB4mBsMjp12a1s4SUM9qjSc9jn1W5btMvGPQYgPHBasdp2jJYdQkS3K8xQx4g'

const addr = await app.getAddressTransparentExtended(`m/44'/133'/5'`, false)
console.log(addr)

expect(addr?.version).toEqual(0x0488B21E)
expect(addr?.version).toEqual(expectedVersion)
expect(addr?.parentFingerprint.toString("hex")).toEqual(expectedFingerprint)
expect(addr?.chainCode.toString('hex')).toEqual(expectedChainCode)
expect(addr?.publicKey.toString('hex')).toEqual(expectedPk)
expect(addr?.index).toEqual(0x80000000 + 5)
expect(addr?.depth).toEqual(3)
expect(addr?.index).toEqual(expectedIndex)
expect(addr?.depth).toEqual(expectedDepth)
expect(addr?.extendedPk).toEqual(expectedExtendedPk)
} finally {
await sim.close()
Expand Down Expand Up @@ -105,19 +110,24 @@ describe('Addresses', function () {
const app = new ZCashApp(sim.getTransport())
const expectedPk = '0378e0db93ebe9b03fb04f08931038822b75db3a6089f54443b4e8ca1865811b79'
const expectedChainCode = 'd293abfd48452b107be8a5895c721addca628c0ae36353bac34d13a1d8c5e73e'
const expectedExtendedPk = '2JcqaJaGEDfcv3TLvsnVL3tcM47pQ3nN24B7tVGcUEhPqaawqCrCtvvwWcgT7ExDmK2eGDtoikKsrqkwXpVjw77c4SaJyxBqrJm3W'
const expectedIndex = 0x80000000 + 5
const expectedDepth = 3
const expectedVersion = 0x0488B21E
const expectedFingerprint = "f4abeb80"
const expectedExtendedPk = '9XpNiCCC7BPCmQdqhAWdTVZJpNsDQUfxnnXDYpnqFgtyPxB4mBsMjp12a1s4SUM9qjSc9jn1W5btMvGPQYgPHBasdp2jJYdQkS3K8xQx4g'

const addrReq = app.getAddressTransparentExtended(`m/44'/133'/5'`, true)
await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot())
await sim.compareSnapshotsAndApprove('.', `${m.prefix.toLowerCase()}-show_address_unshielded_extended`)

const addr = await addrReq

expect(addr?.version).toEqual(0x0488B21E)
expect(addr?.version).toEqual(expectedVersion)
expect(addr?.parentFingerprint.toString("hex")).toEqual(expectedFingerprint)
expect(addr?.chainCode.toString('hex')).toEqual(expectedChainCode)
expect(addr?.publicKey.toString('hex')).toEqual(expectedPk)
expect(addr?.index).toEqual(0x80000000 + 5)
expect(addr?.depth).toEqual(3)
expect(addr?.index).toEqual(expectedIndex)
expect(addr?.depth).toEqual(expectedDepth)
expect(addr?.extendedPk).toEqual(expectedExtendedPk)
} finally {
await sim.close()
Expand Down

0 comments on commit 1a594fb

Please sign in to comment.