taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 1124c709acbe1fdff7608b2d2c458e0afc3b7b7c
parent 52b8785d95694e373d8efdb2aa1680e51172bd81
Author: Florian Dold <florian@dold.me>
Date:   Wed, 16 Jun 2021 11:44:05 +0200

use same salt derivation as C code for forgettable fields

Diffstat:
Mpackages/taler-wallet-core/src/util/contractTerms.test.ts | 25+++++++++++++++++++++++++
Mpackages/taler-wallet-core/src/util/contractTerms.ts | 3++-
2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/packages/taler-wallet-core/src/util/contractTerms.test.ts b/packages/taler-wallet-core/src/util/contractTerms.test.ts @@ -95,3 +95,28 @@ test("contract terms canon hashing (nested)", (t) => { t.true(ContractTermsUtil.validateForgettable(c3)); t.true(ContractTermsUtil.validateForgettable(c4)); }); + +test("contract terms reference vector", (t) => { + const j = { + k1: 1, + $forgettable: { + k1: "SALT", + }, + k2: { + n1: true, + $forgettable: { + n1: "salt", + }, + }, + k3: { + n1: "string", + }, + }; + + const h = ContractTermsUtil.hashContractTerms(j); + + t.deepEqual( + h, + "VDE8JPX0AEEE3EX1K8E11RYEWSZQKGGZCV6BWTE4ST1C8711P7H850Z7F2Q2HSSYETX87ERC2JNHWB7GTDWTDWMM716VKPSRBXD7SRR", + ); +}); diff --git a/packages/taler-wallet-core/src/util/contractTerms.ts b/packages/taler-wallet-core/src/util/contractTerms.ts @@ -65,7 +65,7 @@ export namespace ContractTermsUtil { const membValCanon = stringToBytes( canonicalJson(scrub(dup[x])) + "\0", ); - const membSalt = decodeCrock(dup.$forgettable[x]); + const membSalt = stringToBytes(dup.$forgettable[x] + "\0"); const h = kdf(64, membValCanon, membSalt, new Uint8Array([])); dup.$forgotten[x] = encodeCrock(h); } @@ -230,6 +230,7 @@ export namespace ContractTermsUtil { export function hashContractTerms(contractTerms: unknown): string { const cleaned = scrub(contractTerms); const canon = canonicalJson(cleaned) + "\0"; + console.warn(`canon '${canon}'`) return encodeCrock(hash(stringToBytes(canon))); } }