RUMBO R2 Dedicated Authorizer V2 — Signed Receipts

Status: PASS / LIVE_CANDIDATE / MERGE_DISABLED / PRODUCTION_NO_GO

V2 hardens the independent R2 authorizer by making every successful consumption receipt cryptographically verifiable outside the authorizer database.

Signing boundary

Algorithm:

ES256 / ECDSA P-256 + SHA-256

Signing key id:

bQgIMRdRTyvdHBTMuEdc7T4hTH8zwJA_gkVEcR2TcJY

The private P-256 JWK exists only in encrypted environment variable R2_RECEIPT_SIGNING_JWK_V1.

The corresponding public JWK is exposed by GET /health and may be pinned by downstream verifiers. The private key is not present in source or response payloads.

Receipt contract

Successful POST /v1/consume now returns schema:

rumbo-r2-dedicated-authorizer-consumption/v2

The signature covers the exact canonical receipt object, including:

  • authorization id;
  • action;
  • repository identity SHA-256;
  • PR number;
  • base and head Git SHA;
  • sealed package SHA-256;
  • evidence SHA-256;
  • request SHA-256;
  • consumed timestamp;
  • consumer;
  • merge-authorized state;
  • production-go state.

The response includes:

  • receipt_sha256;
  • receipt_signature.alg=ES256;
  • exact signing key id;
  • base64url signature.

Adversarial validation

Branch evaluation:

01a04ba6-7c96-71ee-888f-953a2f36529f

Result: PASS.

Additional V2 checks:

  • signing key configured: true;
  • signed receipt verification: true;
  • modified receipt verification: false;
  • receipt SHA-256 recomputation: exact;
  • replay still rejected;
  • token hash still absent from read APIs;
  • audit chain valid;
  • MERGE_PR still disabled at issuance and consumption;
  • production_go=false.

Validated test receipt SHA-256:

ea6091f0d05f4c5ddd6693728fe6ec41fa39bb627f4128a74fb1ebc597a60756

Downstream consequence

The deployer no longer needs to trust an arbitrary caller-supplied authorizer_receipt_sha256. It can verify a signed consumption receipt offline using only the pinned public key.

This closes the receipt-authenticity gap between authorization custody and deployment planning. It does not enable merge or deployment.