Some checks failed
Blockchain Synchronization Verification / sync-verification (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
Contract Performance Benchmarks / benchmark-gas-usage (push) Has been cancelled
Contract Performance Benchmarks / benchmark-execution-time (push) Has been cancelled
Contract Performance Benchmarks / benchmark-throughput (push) Has been cancelled
Coverage Phase 1 (70% Target) / test-coverage-70 (push) Has been cancelled
Coverage Phase 2 (85% Target) / test-coverage-85 (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-sync (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-transactions (push) Has been cancelled
Cross-Chain Functionality Tests / test-multi-chain-consensus (push) Has been cancelled
Deploy to Testnet / deploy-testnet (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
Documentation Validation / validate-policies-strict (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Multi-Chain Island Architecture Tests / test-multi-chain-island (push) Has been cancelled
Multi-Node Blockchain Health Monitoring / health-check (push) Has been cancelled
Node Failover Simulation / failover-test (push) Has been cancelled
P2P Network Verification / p2p-verification (push) Has been cancelled
Package Tests / Python package - aitbc-agent-sdk (push) Has been cancelled
Package Tests / Python package - aitbc-core (push) Has been cancelled
Package Tests / Python package - aitbc-crypto (push) Has been cancelled
Package Tests / Python package - aitbc-sdk (push) Has been cancelled
Package Tests / JavaScript package - aitbc-sdk-js (push) Has been cancelled
Package Tests / JavaScript package - aitbc-token (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Smart Contract Tests / test-solidity (map[name:aitbc-contracts path:contracts]) (push) Has been cancelled
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Has been cancelled
Smart Contract Tests / test-foundry (push) Has been cancelled
Smart Contract Tests / lint-solidity (push) Has been cancelled
Smart Contract Tests / deploy-contracts (push) Has been cancelled
Staking Tests / test-staking-service (push) Has been cancelled
Contract Performance Benchmarks / compare-benchmarks (push) Has been cancelled
Cross-Chain Functionality Tests / aggregate-results (push) Has been cancelled
Staking Tests / test-staking-integration (push) Has been cancelled
Staking Tests / test-staking-contract (push) Has been cancelled
Staking Tests / run-staking-test-runner (push) Has been cancelled
Multi-Node Stress Testing / stress-test (push) Successful in 3s
Cross-Node Transaction Testing / transaction-test (push) Successful in 3s
- Add get_authenticated_address() helper to extract wallet address from X-Wallet-Address header or JWT token - Add authentication to dispute filing, evidence submission, verification, voting, and arbitrator authorization endpoints - Replace hardcoded zero addresses with authenticated addresses from request headers - Add DEV_MODE fallback for development without authentication - Add --mock flag to experimental resource
41 lines
1.2 KiB
Python
Executable File
41 lines
1.2 KiB
Python
Executable File
from __future__ import annotations
|
|
|
|
from typing import Dict, Any
|
|
|
|
import base64
|
|
from hashlib import sha256
|
|
|
|
from nacl.signing import SigningKey, VerifyKey
|
|
|
|
from .receipt import canonical_json
|
|
|
|
|
|
class ReceiptSigner:
|
|
def __init__(self, signing_key: bytes):
|
|
self._key = SigningKey(signing_key)
|
|
|
|
def sign(self, payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
message = canonical_json(payload).encode("utf-8")
|
|
signature = self._key.sign(message)
|
|
return {
|
|
"alg": "Ed25519",
|
|
"key_id": base64.urlsafe_b64encode(self._key.verify_key.encode()).decode("utf-8").rstrip("="),
|
|
"sig": base64.urlsafe_b64encode(signature.signature).decode("utf-8").rstrip("="),
|
|
}
|
|
|
|
|
|
class ReceiptVerifier:
|
|
def __init__(self, verify_key: bytes):
|
|
self._key = VerifyKey(verify_key)
|
|
|
|
def verify(self, payload: Dict[str, Any], signature: Dict[str, Any]) -> bool:
|
|
if signature.get("alg") != "Ed25519":
|
|
return False
|
|
sig_bytes = base64.urlsafe_b64decode(signature["sig"] + "==")
|
|
message = canonical_json(payload).encode("utf-8")
|
|
try:
|
|
self._key.verify(message, sig_bytes)
|
|
return True
|
|
except Exception:
|
|
return False
|