diff options
author | Florian Dold <florian.dold@gmail.com> | 2019-12-05 23:07:46 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2019-12-05 23:07:46 +0100 |
commit | 7b54439fd62bd2a5e15b3068a8fbaffeb0a57468 (patch) | |
tree | 09b32371728d4a0e40f1fb24b415b6dc1f488962 /src/crypto/workers/cryptoImplementation.ts | |
parent | 8115ac660cd9d12ef69ca80fc2e4cf8eec6b1ba1 (diff) | |
download | wallet-core-7b54439fd62bd2a5e15b3068a8fbaffeb0a57468.tar.xz |
validate wire fees and acct info
Diffstat (limited to 'src/crypto/workers/cryptoImplementation.ts')
-rw-r--r-- | src/crypto/workers/cryptoImplementation.ts | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/crypto/workers/cryptoImplementation.ts b/src/crypto/workers/cryptoImplementation.ts index 00d81ce27..fa5a30d68 100644 --- a/src/crypto/workers/cryptoImplementation.ts +++ b/src/crypto/workers/cryptoImplementation.ts @@ -68,15 +68,17 @@ import { rsaVerify, } from "../talerCrypto"; import { randomBytes } from "../primitives/nacl-fast"; +import { kdf } from "../primitives/kdf"; enum SignaturePurpose { RESERVE_WITHDRAW = 1200, WALLET_COIN_DEPOSIT = 1201, MASTER_DENOMINATION_KEY_VALIDITY = 1025, + MASTER_WIRE_FEES = 1028, + MASTER_WIRE_DETAILS = 1030, WALLET_COIN_MELT = 1202, TEST = 4242, MERCHANT_PAYMENT_OK = 1104, - MASTER_WIRE_FEES = 1028, WALLET_COIN_PAYBACK = 1203, WALLET_COIN_LINK = 1204, } @@ -157,9 +159,7 @@ export class CryptoImplementation { * Create a pre-coin of the given denomination to be withdrawn from then given * reserve. */ - createPlanchet( - req: PlanchetCreationRequest, - ): PlanchetCreationResult { + createPlanchet(req: PlanchetCreationRequest): PlanchetCreationResult { const reservePub = decodeCrock(req.reservePub); const reservePriv = decodeCrock(req.reservePriv); const denomPub = decodeCrock(req.denomPub); @@ -264,6 +264,7 @@ export class CryptoImplementation { .put(timestampToBuffer(wf.startStamp)) .put(timestampToBuffer(wf.endStamp)) .put(amountToBuffer(wf.wireFee)) + .put(amountToBuffer(wf.closingFee)) .build(); const sig = decodeCrock(wf.sig); const pub = decodeCrock(masterPub); @@ -292,6 +293,23 @@ export class CryptoImplementation { return eddsaVerify(p, sig, pub); } + isValidWireAccount( + paytoUri: string, + sig: string, + masterPub: string, + ): boolean { + const h = kdf( + 64, + stringToBytes("exchange-wire-signature"), + stringToBytes(paytoUri + "\0"), + new Uint8Array(0), + ); + const p = buildSigPS(SignaturePurpose.MASTER_WIRE_DETAILS) + .put(h) + .build(); + return eddsaVerify(p, decodeCrock(sig), decodeCrock(masterPub)); + } + /** * Create a new EdDSA key pair. */ |