RANNTA PQ CloudOpen Console
Menu

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
@noble/post-quantum 0.7.1
Algorithm
ML-DSA-65
Context
RANNTA-PQ-CLOUD-ML-DSA-65-V1
Positive local verification
PASS
One-byte mutation
Rejected · PASS
TypeScript 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
PASS
Replay rejection
PASS
One-byte mutation rejection
PASS
classical_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.