@ltonetwork/http-message-signatures
Version:
Implementation of the IETF HTTP Message Signatures draft standard
62 lines • 3.21 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sign = sign;
const build_1 = require("./build");
const base64_1 = require("./base64");
const defaultRequestComponents = ['@method', '@path', '@query', '@authority', 'content-type', 'digest'];
const defaultResponseComponents = ['@status', 'content-type', 'digest'];
const keyTypeToAlg = {
ed25519: 'ed25519',
secp256k1: 'ecdsa-secp256k1',
secp256r1: 'ecdsa-p256',
};
function signWithLTO(account) {
return {
sign: (data) => account.sign(data),
keyid: account.publicKey,
alg: keyTypeToAlg[account.keyType],
};
}
function sign(message, opts) {
return __awaiter(this, void 0, void 0, function* () {
const { signer: _signer, components: _components, key: _key } = opts, params = __rest(opts, ["signer", "components", "key"]);
const signer = 'keyType' in _signer ? signWithLTO(_signer) : _signer;
const components = _components !== null && _components !== void 0 ? _components : ('status' in message ? defaultResponseComponents : defaultRequestComponents);
const key = _key || 'sig1';
const signParams = Object.assign({ created: new Date(), keyid: signer.keyid, alg: signer.alg }, params);
const signatureInputString = (0, build_1.buildSignatureInputString)(components, signParams);
const dataToSign = (0, build_1.buildSignedData)(message, components, signatureInputString);
const signature = yield signer.sign(dataToSign);
const sigBase64 = (0, base64_1.encode)(signature);
if (typeof message.headers.set === 'function') {
message.headers.set('Signature', `${key}=:${sigBase64}:`);
message.headers.set('Signature-Input', `${key}=${signatureInputString}`);
}
else {
message.headers['Signature'] = `${key}=:${sigBase64}:`;
message.headers['Signature-Input'] = `${key}=${signatureInputString}`;
}
return message;
});
}
//# sourceMappingURL=sign.js.map