open-standards/openpay/crates/op-3ds2/Cargo.toml
Transaction Science f42cb4fae1
Some checks failed
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 8s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 5s
jouleclaw fabrics / cuda (linux, RTX 4050 + Vulkan loader) (pull_request) Successful in 18s
jouleclaw fabrics / vulkan (linux, RTX 4050 + Vulkan loader) (pull_request) Successful in 15s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 58s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 5s
WAI conformance / does this change touch it (pull_request) Successful in 5s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Successful in 1m0s
WAI energy receipts / does this change touch it (pull_request) Successful in 5s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 1m18s
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Successful in 5s
WAI neural sink gates / does this change touch it (pull_request) Successful in 5s
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Successful in 5s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 5s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 1m35s
wai-quantum command line / does this change touch it (pull_request) Successful in 5s
wai-quantum CUDA member / does this change touch it (pull_request) Successful in 6s
wai-quantum signal processor / does this change touch it (pull_request) Successful in 6s
wai-quantum dataflow member / does this change touch it (pull_request) Successful in 7s
wai-quantum FPGA member / does this change touch it (pull_request) Successful in 6s
wai-quantum HIP member / does this change touch it (pull_request) Successful in 5s
wai-quantum Metal member / does this change touch it (pull_request) Successful in 6s
wai-quantum npu-cores member / does this change touch it (pull_request) Successful in 5s
wai-quantum neural-processor member / does this change touch it (pull_request) Successful in 5s
wai-quantum OpenCL member / does this change touch it (pull_request) Successful in 5s
wai-quantum-qpu / does this change touch it (pull_request) Successful in 6s
wai-quantum service / does this change touch it (pull_request) Successful in 5s
wai-quantum CUDA member / member · CUDA (jetson-hub) (pull_request) Successful in 24s
wai-quantum matrix-extension member / does this change touch it (pull_request) Successful in 8s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 8s
wai-quantum tensor-engine member / does this change touch it (pull_request) Successful in 7s
wai-quantum HIP member / member · HIP (framework-128gb) (pull_request) Successful in 21s
wai-quantum portable tensor program / does this change touch it (pull_request) Successful in 6s
wai-quantum CPU vector units / does this change touch it (pull_request) Successful in 7s
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 7s
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Successful in 6s
wai-web wasm32 / does this change touch it (pull_request) Successful in 7s
wai-quantum OpenCL member / member · OpenCL GPU and CPU (jetson-hub) (pull_request) Successful in 22s
wai-quantum portable tensor program / tensor program · GPUs (jetson-hub) (pull_request) Successful in 23s
wai-quantum on every processor / emulated · aarch64-unknown-linux-gnu (pull_request) Successful in 1m36s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 58s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Failing after 56s
wai-quantum npu-cores member / member · npu-cores, neural processor (framework-128gb silicon) (pull_request) Successful in 1m14s
wai-quantum OpenCL member / member · OpenCL GPU (framework-128gb) (pull_request) Successful in 13s
wai-quantum portable tensor program / tensor program · integrated GPU (framework-128gb) (pull_request) Successful in 8s
wai-quantum CPU vector units / member · vector units, avx2 and avx512 (framework-128gb silicon) (pull_request) Successful in 10s
standards workspaces build + test / joulecontract-rs (joulecontract/joulecontract-rs, joulecontract-rs, linux-arm64, true) (pull_request) Successful in 1m5s
wai-quantum on every processor / emulated · armv7-unknown-linux-gnueabihf (pull_request) Successful in 1m38s
standards workspaces build + test / map-rs (map-conformance, map/map-rs, map-rs, linux-arm64) (pull_request) Successful in 1m12s
standards workspaces build + test / aac-rs (aac-conformance, aac/aac-rs, aac-rs, linux-arm64) (pull_request) Successful in 3m27s
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Successful in 1m0s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m26s
wai-quantum on every processor / emulated · loongarch64-unknown-linux-gnu (pull_request) Successful in 2m18s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 15s
standards workspaces build + test / openpay (openpay, openpay, linux-arm64) (pull_request) Failing after 1m19s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 12s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 24s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 9m16s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m38s
wai-quantum on every processor / emulated · powerpc64-unknown-linux-gnu (pull_request) Successful in 3m38s
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Successful in 7m39s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 13m15s
wai-quantum on every processor / emulated · powerpc64le-unknown-linux-gnu (pull_request) Successful in 4m9s
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Successful in 4m12s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 7m13s
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Successful in 4m1s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m12s
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Successful in 6m8s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 6s
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Successful in 4m7s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 15m54s
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Successful in 20m19s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 32s
standards workspaces build + test / eoc-rs (eoc/eoc-rs, -p eoc-meter --features cuda, eoc-rs, linux) (pull_request) Successful in 2m21s
standards workspaces build + test / jcp-rs (jcp-conformance, jcp/jcp-rs, -p jcp-energy --features nvml, jcp-rs, linux) (pull_request) Successful in 2m1s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m42s
wai-quantum HIP member / member · HIP absent (linux-arm64) (pull_request) Successful in 58s
standards workspaces build + test / joule-ui-rs (joule-ui/joule-ui-rs, joule-ui-rs, linux) (pull_request) Successful in 1m15s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m32s
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 1m14s
wai-quantum npu-cores member / member · npu-cores absent (linux-arm64) (pull_request) Successful in 22s
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Successful in 16s
standards workspaces build + test / proof-rs (proof-conformance, proof/proof-rs, proof-rs, linux, true) (pull_request) Successful in 1m54s
standards workspaces build + test / sandbox-rs (sandbox-conformance, sandbox/sandbox-rs, -p sandbox-tee --features amd-kds,intel-pcs, sandbox-rs, linux) (pull_request) Successful in 2m46s
standards workspaces build + test / smart-byte-rs (smart-byte/smart-byte-rs, smart-byte-rs, linux) (pull_request) Successful in 4m17s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m15s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 29s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 34m34s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 11m6s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 20m19s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m29s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 1m47s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 7m28s
wai-pack / wai-pack · linux (pull_request) Successful in 1m29s
wai-quantum CUDA member / member · CUDA absent (linux) (pull_request) Successful in 32s
wai-quantum command line / command line · linux (pull_request) Successful in 1m10s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:b140) (pull_request) Successful in 3m45s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:401e) (pull_request) Successful in 4m51s
wai-quantum FPGA member / member · FPGA simulation absent (linux) (pull_request) Successful in 22s
wai-quantum Metal member / member · Metal absent (linux) (pull_request) Successful in 26s
wai-quantum neural-processor member / member · neural processor absent (linux) (pull_request) Successful in 21s
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Successful in 24s
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Successful in 25s
wai-quantum service / service · linux (pull_request) Successful in 43s
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Successful in 19s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m24s
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Successful in 13m56s
wai-quantum portable tensor program / tensor program · CPU, mutants, GPU builds (pull_request) Successful in 30s
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Successful in 19s
wai-quantum tensor-engine member / member · tensor engine, the kernel toolchain's simulator (linux) (pull_request) Successful in 8m12s
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Successful in 25s
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Successful in 25s
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Successful in 17s
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Successful in 17s
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Successful in 18s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 2m45s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 5m35s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m22s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m19s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m50s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m37s
jouleclaw fabrics / metal (macOS, Apple GPU) (pull_request) Successful in 56s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 5m53s
standards workspaces build + test / macOS energy backends (pull_request) Failing after 5m12s
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Successful in 3m11s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 13m54s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 32s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m56s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 9m15s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 2m54s
wai-quantum command line / command line · macos (pull_request) Has been cancelled
wai-quantum dataflow member / member · dataflow device absent (macos) (pull_request) Has been cancelled
wai-quantum FPGA member / member · FPGA datapath, simulated (macos) (pull_request) Has been cancelled
wai-pack / wai-pack · macos (pull_request) Successful in 1m5s
wai-quantum Metal member / member · Metal (macos) (pull_request) Has been cancelled
wai-quantum neural-processor member / member · neural processor (macos) (pull_request) Has been cancelled
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Has been cancelled
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (pull_request) Has been cancelled
wai-quantum portable tensor program / tensor program · Metal and the arm64 CPU (macos) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Has been cancelled
wai-quantum service / service · macos (pull_request) Has been cancelled
sec: drop the unused rsa dependency from op-3ds2, removing the one advisory with no fix
RUSTSEC-2023-0071 (Marvin attack: key recovery through timing sidechannels in
RSA decryption) is the only finding in this sweep with **no fixed version
available** — there is nothing to upgrade to.

It needed neither a mitigation nor a risk acceptance, because the dependency
was never used. `rsa::`, `use rsa` and `extern crate rsa` appear in none of
op-3ds2's 20 source files, nor anywhere else in the openpay workspace. The
declaration described an intent ("RSA for legacy issuer ACS public keys") that
was never implemented; the only asymmetric crypto actually present is P-256
ECDH/ECDSA. Removing the line drops rsa 0.9.10 and pkcs1 0.7.5 from the graph.

The adjacent comment still advertised RSA support, which would now mislead a
reader into thinking it was dropped rather than never built. It is rewritten to
say so, and to record that the crate cannot simply be re-added: the Marvin
defect is unfixed upstream, so a future legacy-ACS path needs a constant-time
implementation, not a version bump.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-22 09:50:04 -04:00

74 lines
3.1 KiB
TOML

[package]
name = "op-3ds2"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "OpenPay 3-D Secure 2.x: full 3DS Requestor / Server / DS / ACS message stack for protocol versions 2.1.0, 2.2.0, and 2.3.0. SCA exemption evaluator covering PSD2 RTS + PSD3 (2026) update. Browser-fingerprint collection, app-based 3DS, decoupled authentication, data-only, and 3RI flows."
publish = false
[dependencies]
op-core = { path = "../op-core" }
# Core serde + JSON. EMVCo 3DS 2.x messages are JSON over HTTPS; the
# only XML-flavoured corner is a small set of legacy 2.1.0 transitional
# payloads which we round-trip through quick-xml when present.
serde = { workspace = true }
serde_json = { workspace = true }
# Time handling. Chrono is the de-facto choice in 2026 for DateTime<Utc>
# round-tripping over JSON; we use it for trusted-beneficiary
# enrolment timestamps and challenge timeouts.
chrono = { version = "0.4", default-features = false, features = ["clock", "serde", "std"] }
# UUIDs for messageVersion / threeDSServerTransID / acsTransID /
# dsTransID. EMVCo spec mandates UUIDv4 format for all transaction IDs.
uuid = { workspace = true }
# Base64 for CAVV, TAVV, deviceInfo, and the various opaque blobs that
# travel inside 3DS messages.
base64 = "0.22"
# SHA-256 for the AReq -> AReq hash used in the 3DS Method invocation
# and for CAVV verification.
sha2 = "0.11"
# NOTE: the encrypted deviceInfo block (SDK device data, AES-CBC under a
# session key established via ECDH-P-256) is not implemented yet, so no
# aes/cbc dependency is declared. Add them when that lands -- and match the
# cipher 0.4 generation the rest of the workspace uses (aes 0.8 / cbc 0.1),
# so the build keeps a single aes + cipher in the graph.
# P-256 for the ECDH-based session key establishment used by the SDK
# device-binding flow. There is deliberately no RSA here: the legacy
# issuer-ACS public-key path was never implemented, and the `rsa` crate it
# would have used carries RUSTSEC-2023-0071 (Marvin timing sidechannel) with
# no fixed version available. Reintroducing it needs a constant-time
# implementation, not a version bump.
p256 = { version = "0.13", features = ["ecdh", "ecdsa"] }
# X.509 parsing for DS / ACS certificate chain validation. Each card
# scheme issues its own DS certificate; we parse and pin against the
# scheme root.
x509-parser = "0.18"
# quick-xml for the small set of legacy XML payloads (DS version-check
# in the 2.1.0 transition window and some scheme-specific extensions).
quick-xml = { workspace = true }
# Async runtime + HTTP client for DS / ACS calls.
tokio = { workspace = true }
reqwest = { version = "0.13", default-features = false, features = ["rustls", "json"] }
# Object-safe async trait surface (DirectoryServer / AcsServer are
# trait objects). Native async-fn-in-trait is stable on 1.95 but
# the dyn-compat form still needs the macro shim.
async-trait = "0.1"
thiserror = { workspace = true }
tracing = { workspace = true }
[dev-dependencies]
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
serde_json = { workspace = true }