UNPKG

trustbroker-client

Version:

Official Client SDK for the TrustBroker Data Exchange Platform.

65 lines 2.34 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.canonicalizeBody = canonicalizeBody; exports.toBuffer = toBuffer; exports.delay = delay; exports.signPayload = signPayload; exports.verifySignature = verifySignature; const crypto_1 = __importDefault(require("crypto")); /** * Canonicalizes an object for consistent cryptographic signing. * Sorts keys recursively to ensure deterministic output. */ function canonicalizeBody(data) { if (data === null || typeof data !== 'object') return JSON.stringify(data); if (Array.isArray(data)) return `[${data.map(canonicalizeBody).join(',')}]`; const sortedKeys = Object.keys(data).sort(); const entries = sortedKeys.map((key) => { return `"${key}":${canonicalizeBody(data[key])}`; }); return `{${entries.join(',')}}`; } /** * Convert any payload into a canonical Buffer. * Uses sorted keys to ensure deterministic signature input. */ function toBuffer(payload) { if (Buffer.isBuffer(payload)) return payload; if (typeof payload === 'string') return Buffer.from(payload, 'utf8'); const canonical = canonicalizeBody(payload); return Buffer.from(canonical, 'utf8'); } /** Simple async delay helper */ function delay(ms) { return new Promise((res) => setTimeout(res, ms)); } /** * Signs a payload using a private key. * Returns the Base64-encoded signature. */ function signPayload(payload, privateKeyPem) { const canonical = JSON.stringify(payload, Object.keys(payload).sort()); const signer = crypto_1.default.createSign('RSA-SHA256'); signer.update(canonical); signer.end(); return signer.sign(privateKeyPem, 'base64'); } /** * Verifies a payload's signature using a public key. */ function verifySignature(payload, signature, publicKey) { const canonical = JSON.stringify(payload, Object.keys(payload).sort()); const verifier = crypto_1.default.createVerify('RSA-SHA256'); verifier.update(canonical); verifier.end(); const publicKeyPem = Buffer.from(publicKey, 'base64').toString('utf8'); return verifier.verify(publicKeyPem, signature, 'base64'); } //# sourceMappingURL=utilits.js.map