Independent Verification
The verification boundary is reproducible outside PQ Cloud. The final Phase 2 production run generated and verified ML-DSA-65 evidence customer-side with @noble/post-quantum 0.7.1 before submitting only the public key, canonical payload and signature to PQ Cloud.
Recorded customer-side implementation
Library
ML-DSA-65Context
PASSOne-byte mutation
Rejected · PASSTypeScript SDK build
PASS
@noble/post-quantum 0.7.1AlgorithmML-DSA-65Context
RANNTA-PQ-CLOUD-ML-DSA-65-V1Positive local verificationPASSOne-byte mutation
Rejected · PASSTypeScript SDK build
PASS
Inputs
- Canonical payload bytes exactly as signed.
- ML-DSA-65 public key: 1952 bytes in the recorded run.
- ML-DSA-65 signature: 3309 bytes in the recorded run.
- Context:
RANNTA-PQ-CLOUD-ML-DSA-65-V1.
Recorded reproduction path — @noble/post-quantum
import { ml_dsa65 } from "@noble/post-quantum/ml-dsa.js";
const ok = ml_dsa65.verify(
signature,
canonicalPayloadBytes,
publicKey,
{ context: new TextEncoder().encode("RANNTA-PQ-CLOUD-ML-DSA-65-V1") }
);
if (!ok) throw new Error("Rejected");The same recorded run then changed the signed message without re-signing. Local verification rejected the mutated payload, and the production /v1/hybrid/verify endpoint independently rejected the corresponding one-byte mutation case.
Production cross-check
HybridRequired valid request
PASSReplay rejection
PASSOne-byte mutation rejection
PASSclassical_verified=false rejection
PASS
PASSReplay rejection
PASSOne-byte mutation rejection
PASSclassical_verified=false rejection
PASS
Evidence identity
- Release build ID:
RANNTA-PQ-CLOUD-PHASE2-20260911-01. - Final E2E harness source commit:
0ddce50395b6b9ffd6e03d4aa882e1fe50d5d4b4. - PQ private key serialized or sent to RANNTA: NO.