libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 06749d5d4e173f9c121c168a987d7dcf4f48148f
parent 743b40b1062b0c62d5f1475acd7c121378baccaa
Author: Antoine A <>
Date:   Fri, 31 Jul 2026 11:04:31 +0200

common: fix prepared transfer unregistration timestamp check

Diffstat:
Mlibeufin-bank/src/main/kotlin/tech/libeufin/bank/api/PreparedTransferApi.kt | 3++-
Mlibeufin-nexus/src/main/kotlin/tech/libeufin/nexus/api/PreparedTransferApi.kt | 5+++--
2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/libeufin-bank/src/main/kotlin/tech/libeufin/bank/api/PreparedTransferApi.kt b/libeufin-bank/src/main/kotlin/tech/libeufin/bank/api/PreparedTransferApi.kt @@ -118,7 +118,8 @@ fun Routing.preparedTransferApi(db: Database, cfg: BankConfig) { logger.error("${req.nbo().joinToString(", ") { (it.toInt() and 0xFF).toString() }}") - if (req.timestamp.instant.isBefore(Instant.now().minus(Duration.ofMinutes(15)))) + val now = Instant.now() + if (req.timestamp.instant.isBefore(now.minus(Duration.ofMinutes(15))) || req.timestamp.instant.isAfter(now)) throw conflict( "timestamp too old", TalerErrorCode.BANK_OLD_TIMESTAMP diff --git a/libeufin-nexus/src/main/kotlin/tech/libeufin/nexus/api/PreparedTransferApi.kt b/libeufin-nexus/src/main/kotlin/tech/libeufin/nexus/api/PreparedTransferApi.kt @@ -124,12 +124,13 @@ fun Routing.preparedTransferAPI(db: Database, cfg: NexusConfig) = conditional(cf }) { val req = call.receive<Unregistration>(); - if (req.timestamp.instant.isBefore(Instant.now().minus(Duration.ofMinutes(15)))) + val now = Instant.now() + if (req.timestamp.instant.isBefore(now.minus(Duration.ofMinutes(15))) || req.timestamp.instant.isAfter(now)) throw conflict( "timestamp too old", TalerErrorCode.BANK_OLD_TIMESTAMP ) - + if (!req.verify()) throw forbidden( "invalid signature",