taler-typescript-core

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

commit 0bbaafcd36ce68f95faee0b91738a169848c7a90
parent e2fe2d6db16b422ee6d69ef03f1393e1f0f42749
Author: Florian Dold <florian@dold.me>
Date:   Thu,  7 Oct 2021 15:09:40 +0200

anastasis: implement user id derivation

Diffstat:
Mpackages/anastasis-core/src/crypto.test.ts | 7++++++-
Mpackages/anastasis-core/src/crypto.ts | 21+++++++++++++++++++--
2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/packages/anastasis-core/src/crypto.test.ts b/packages/anastasis-core/src/crypto.test.ts @@ -1,4 +1,5 @@ import test from "ava"; +import { userIdentifierDerive } from "./crypto.js"; // Vector generated with taler-anastasis-tvg const userIdVector = { @@ -12,5 +13,9 @@ const userIdVector = { }; test("user ID derivation", async (t) => { - t.fail(); + const res = await userIdentifierDerive( + userIdVector.input_id_data, + userIdVector.input_server_salt, + ); + t.is(res, userIdVector.output_id); }); diff --git a/packages/anastasis-core/src/crypto.ts b/packages/anastasis-core/src/crypto.ts @@ -1,10 +1,27 @@ +import { + canonicalJson, + decodeCrock, + encodeCrock, + stringToBytes, +} from "@gnu-taler/taler-util"; import { argon2id } from "hash-wasm"; -async function userIdentifierDerive( +export async function userIdentifierDerive( idData: any, serverSalt: string, ): Promise<string> { - throw Error("not implemented"); + const canonIdData = canonicalJson(idData); + const hashInput = stringToBytes(canonIdData); + const result = await argon2id({ + hashLength: 64, + iterations: 3, + memorySize: 1024 /* kibibytes */, + parallelism: 1, + password: hashInput, + salt: decodeCrock(serverSalt), + outputType: "binary", + }); + return encodeCrock(result); } // interface Keypair {