diff options
author | Florian Dold <florian@dold.me> | 2022-01-11 12:48:32 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2022-01-11 14:48:02 +0100 |
commit | a05e891d6e1468fdd99f710301e286857a46aea3 (patch) | |
tree | 5ea22817eb2cec888ff52a80dcd3a9986bd768fa /packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts | |
parent | fb22009ec4799a624f00c228fbd7435b44c1cbac (diff) | |
download | wallet-core-a05e891d6e1468fdd99f710301e286857a46aea3.tar.xz |
towards new recoup API
Diffstat (limited to 'packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts')
-rw-r--r-- | packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts | 73 |
1 files changed, 51 insertions, 22 deletions
diff --git a/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts b/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts index 9e2dc18f3..b366fa9ec 100644 --- a/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts +++ b/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts @@ -25,12 +25,7 @@ */ // FIXME: Crypto should not use DB Types! -import { - CoinRecord, - DenominationRecord, - WireFee, - CoinSourceType, -} from "../../db.js"; +import { DenominationRecord, WireFee } from "../../db.js"; import { buildSigPS, @@ -39,6 +34,7 @@ import { ExchangeProtocolVersion, FreshCoin, hashDenomPub, + RecoupRefreshRequest, RecoupRequest, RefreshPlanchetInfo, TalerSignaturePurpose, @@ -78,6 +74,8 @@ import { Timestamp, timestampTruncateToSecond } from "@gnu-taler/taler-util"; import { Logger } from "@gnu-taler/taler-util"; import { + CreateRecoupRefreshReqRequest, + CreateRecoupReqRequest, DerivedRefreshSession, DerivedTipPlanchet, DeriveRefreshSessionRequest, @@ -261,33 +259,64 @@ export class CryptoImplementation { /** * Create and sign a message to recoup a coin. */ - createRecoupRequest(coin: CoinRecord): RecoupRequest { + createRecoupRequest(req: CreateRecoupReqRequest): RecoupRequest { const p = buildSigPS(TalerSignaturePurpose.WALLET_COIN_RECOUP) - .put(decodeCrock(coin.coinPub)) - .put(decodeCrock(coin.denomPubHash)) - .put(decodeCrock(coin.blindingKey)) + .put(decodeCrock(req.denomPubHash)) + .put(decodeCrock(req.blindingKey)) + .put(amountToBuffer(Amounts.jsonifyAmount(req.recoupAmount))) .build(); - const coinPriv = decodeCrock(coin.coinPriv); + const coinPriv = decodeCrock(req.coinPriv); const coinSig = eddsaSign(p, coinPriv); - if (coin.denomPub.cipher === DenomKeyType.LegacyRsa) { + if (req.denomPub.cipher === DenomKeyType.LegacyRsa) { const paybackRequest: RecoupRequest = { - coin_blind_key_secret: coin.blindingKey, - coin_pub: coin.coinPub, + coin_blind_key_secret: req.blindingKey, coin_sig: encodeCrock(coinSig), - denom_pub_hash: coin.denomPubHash, - denom_sig: coin.denomSig.rsa_signature, - refreshed: coin.coinSource.type === CoinSourceType.Refresh, + denom_pub_hash: req.denomPubHash, + denom_sig: req.denomSig.rsa_signature, + amount: Amounts.stringify(req.recoupAmount), }; return paybackRequest; } else { const paybackRequest: RecoupRequest = { - coin_blind_key_secret: coin.blindingKey, - coin_pub: coin.coinPub, + coin_blind_key_secret: req.blindingKey, + coin_sig: encodeCrock(coinSig), + denom_pub_hash: req.denomPubHash, + denom_sig: req.denomSig, + amount: Amounts.stringify(req.recoupAmount), + }; + return paybackRequest; + } + } + + /** + * Create and sign a message to recoup a coin. + */ + createRecoupRefreshRequest(req: CreateRecoupRefreshReqRequest): RecoupRefreshRequest { + const p = buildSigPS(TalerSignaturePurpose.WALLET_COIN_RECOUP_REFRESH) + .put(decodeCrock(req.denomPubHash)) + .put(decodeCrock(req.blindingKey)) + .put(amountToBuffer(Amounts.jsonifyAmount(req.recoupAmount))) + .build(); + + const coinPriv = decodeCrock(req.coinPriv); + const coinSig = eddsaSign(p, coinPriv); + if (req.denomPub.cipher === DenomKeyType.LegacyRsa) { + const paybackRequest: RecoupRefreshRequest = { + coin_blind_key_secret: req.blindingKey, + coin_sig: encodeCrock(coinSig), + denom_pub_hash: req.denomPubHash, + denom_sig: req.denomSig.rsa_signature, + amount: Amounts.stringify(req.recoupAmount), + }; + return paybackRequest; + } else { + const paybackRequest: RecoupRefreshRequest = { + coin_blind_key_secret: req.blindingKey, coin_sig: encodeCrock(coinSig), - denom_pub_hash: coin.denomPubHash, - denom_sig: coin.denomSig, - refreshed: coin.coinSource.type === CoinSourceType.Refresh, + denom_pub_hash: req.denomPubHash, + denom_sig: req.denomSig, + amount: Amounts.stringify(req.recoupAmount), }; return paybackRequest; } |