taler-typescript-core

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

commit 193d93545ee3cebef77e55deabd5931a4bc49706
parent bad14bd70143aaa680bde62fa97e5f941e6284a2
Author: Iván Ávalos <avalos@disroot.org>
Date:   Mon, 30 Jun 2025 20:33:01 +0200

wallet-core: rsaVerify via wex.cryptoApi

Diffstat:
Mpackages/taler-wallet-core/src/crypto/cryptoImplementation.ts | 39---------------------------------------
Mpackages/taler-wallet-core/src/pay-merchant.ts | 17++++++++++++-----
2 files changed, 12 insertions(+), 44 deletions(-)

diff --git a/packages/taler-wallet-core/src/crypto/cryptoImplementation.ts b/packages/taler-wallet-core/src/crypto/cryptoImplementation.ts @@ -182,10 +182,6 @@ export interface TalerCryptoInterface { req: PaymentSignatureValidationRequest, ): Promise<ValidationResult>; - isValidTokenIssueSignature( - req: TokenSignatureValidationRequest, - ): Promise<ValidationResult>; - isValidWireFee(req: WireFeeValidationRequest): Promise<ValidationResult>; isValidGlobalFees( @@ -359,11 +355,6 @@ export const nullCrypto: TalerCryptoInterface = { ): Promise<ValidationResult> { throw new Error("Function not implemented."); }, - isValidTokenIssueSignature: function ( - req: TokenSignatureValidationRequest, - ): Promise<ValidationResult> { - throw new Error("Function not implemented."); - }, isValidWireFee: function ( req: WireFeeValidationRequest, ): Promise<ValidationResult> { @@ -710,12 +701,6 @@ export interface PaymentSignatureValidationRequest { merchantPub: string; } -export interface TokenSignatureValidationRequest { - tokenUsePub: string; - tokenIssuePub: TokenIssuePublicKey; - sig: UnblindedDenominationSignature; -} - export interface ContractTermsValidationRequest { contractTermsHash: string; sig: string; @@ -1189,30 +1174,6 @@ export const nativeCryptoR: TalerCryptoInterfaceR = { }, /** - * Check if a token issue signature is valid. - */ - async isValidTokenIssueSignature( - tci: TalerCryptoInterfaceR, - req: TokenSignatureValidationRequest, - ): Promise<ValidationResult> { - if (req.sig.cipher !== req.tokenIssuePub.cipher) { - throw Error(`token issue signature mismatch`); - } - - if (req.sig.cipher === DenomKeyType.Rsa) { - const { valid } = await tci.rsaVerify(tci, { - hm: req.tokenUsePub, - pk: req.tokenIssuePub.rsa_pub, - sig: req.sig.rsa_signature, - }); - - return { valid }; - } - - throw Error(`verification for ${req.sig.cipher} signature not implemented`); - }, - - /** * Check if a wire fee is correctly signed. */ async isValidWireFee( diff --git a/packages/taler-wallet-core/src/pay-merchant.ts b/packages/taler-wallet-core/src/pay-merchant.ts @@ -49,6 +49,7 @@ import { ConfirmPayResult, ConfirmPayResultType, ContractTermsUtil, + DenomKeyType, Duration, encodeCrock, ForcedCoinSel, @@ -3425,11 +3426,17 @@ export async function validateAndStoreToken( evSig: blindedEv.blind_sig, }); - const { valid } = await wex.cryptoApi.isValidTokenIssueSignature({ - sig: tokenIssueSig, - tokenUsePub, - tokenIssuePub, - }); + if (tokenIssueSig.cipher !== tokenIssuePub.cipher) + throw Error("token issue signature mismatch"); + + if (!(tokenIssuePub.cipher === DenomKeyType.Rsa)) + throw Error("unsupported cipher"); + + const valid = await wex.cryptoApi.rsaVerify({ + hm: tokenUsePub, + pk: tokenIssuePub.rsa_pub, + sig: tokenIssueSig.rsa_signature, + }) if (!valid) { logger.error("token issue signature invalid");