@filemap/events-sdk
Version:
SDK for Filemap events. Desktop client for Filemap dev server.
38 lines • 1.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ieeeP1363ToDer = void 0;
function ieeeP1363ToDer(ieeeSignature) {
const signature = Buffer.from(ieeeSignature, 'base64');
if (signature.length !== 64) {
throw new Error(`Invalid signature length: ${signature.length}. Expected 64 bytes for P-256.`);
}
const r = signature.subarray(0, 32);
const s = signature.subarray(32, 64);
const der = encodeDER(r, s);
return der.toString('base64');
}
exports.ieeeP1363ToDer = ieeeP1363ToDer;
function encodeDER(r, s) {
function trimInteger(buf) {
let i = 0;
while (i < buf.length - 1 && buf[i] === 0 && !(buf[i + 1] & 0x80)) {
i++;
}
return buf.slice(i);
}
const rTrimmed = trimInteger(r);
const sTrimmed = trimInteger(s);
const rEncoded = (rTrimmed[0] & 0x80) ? Buffer.concat([Buffer.from([0]), rTrimmed]) : rTrimmed;
const sEncoded = (sTrimmed[0] & 0x80) ? Buffer.concat([Buffer.from([0]), sTrimmed]) : sTrimmed;
const sequence = Buffer.concat([
Buffer.from([0x02, rEncoded.length]),
rEncoded,
Buffer.from([0x02, sEncoded.length]),
sEncoded
]);
return Buffer.concat([
Buffer.from([0x30, sequence.length]),
sequence
]);
}
//# sourceMappingURL=signature-format-converter.js.map