UNPKG

@meeco/cryppo

Version:

In-browser encryption and decryption. Clone of Ruby Cryppo

50 lines 2.17 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.signWithPrivateKey = signWithPrivateKey; exports.loadRsaSignature = loadRsaSignature; exports.verifyWithPublicKey = verifyWithPublicKey; const node_forge_1 = __importDefault(require("node-forge")); const util_js_1 = require("../util.js"); const { md, pki } = node_forge_1.default; function signWithPrivateKey(privateKeyPem, data) { const mdDigest = md.sha256.create(); const key = pki.privateKeyFromPem(privateKeyPem); mdDigest.update((0, util_js_1.bytesToBinaryString)(data)); const signature = key.sign(mdDigest); const keySize = (0, util_js_1.keyLengthFromPrivateKeyPem)(privateKeyPem); const serialized = `Sign.Rsa${keySize}.${(0, util_js_1.encodeSafe64)(signature)}.${(0, util_js_1.encodeSafe64)((0, util_js_1.bytesToBinaryString)(data))}`; return { signature, data, keySize, serialized, }; } function loadRsaSignature(serializedPayload) { const decomposedPayload = serializedPayload.split('.'); const [signed, signingStrategy, encodedSignature, encodedData] = decomposedPayload; const regex = /Rsa\d{1,4}/g; if (signed === 'Sign' && regex.test(signingStrategy)) { const bits = parseInt(signingStrategy.replace('Rsa', ''), 10); const data = (0, util_js_1.decodeSafe64)(encodedData); return { serialized: serializedPayload, signature: (0, util_js_1.decodeSafe64)(encodedSignature), data: (0, util_js_1.binaryStringToBytes)(data), keySize: bits, }; } else { throw new Error('String is not a serialized RSA signature'); } } function verifyWithPublicKey(publicKeyPem, signatureObj) { const key = pki.publicKeyFromPem(publicKeyPem); const mdDigest = md.sha256.create(); mdDigest.update((0, util_js_1.bytesToBinaryString)(signatureObj.data)); return key.verify(mdDigest.digest().bytes(), signatureObj.signature); } //# sourceMappingURL=rsa-signature.js.map