UNPKG

cosette

Version:

isomorphic Typescript COSE implementation

174 lines 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.uint8ArrayEquals = exports.runningInNode = exports.xor = exports.TranslateKey = exports.TranslateHeaders = exports.EMPTY_BUFFER = exports.HeaderParameters = exports.AlgFromTags = void 0; const ALGO_TAGS = [ ["RS512", -259], ["RS384", -258], ["RS256", -257], ["ES512", -36], ["PS256", -37], ["PS384", -38], ["PS512", -39], ["ECDH-SS", -27], ["ECDH-ES-512", -26], ["ECDH-ES", -25], ["ES256", -7], ["direct", -6], ["A128GCM", 1], ["A192GCM", 2], ["A256GCM", 3], ["SHA-256_64", 4], ["SHA-256-64", 4], ["HS256/64", 4], ["SHA-256", 5], ["HS256", 5], ["SHA-384", 6], ["HS384", 6], ["SHA-512", 7], ["HS512", 7], ["AES-CCM-16-64-128", 10], ["AES-CCM-16-128/64", 10], ["AES-CCM-16-64-256", 11], ["AES-CCM-16-256/64", 11], ["AES-CCM-64-64-128", 12], ["AES-CCM-64-128/64", 12], ["AES-CCM-64-64-256", 13], ["AES-CCM-64-256/64", 13], ["AES-MAC-128/64", 14], ["AES-MAC-256/64", 15], ["AES-MAC-128/128", 25], ["AES-MAC-256/128", 26], ["AES-CCM-16-128-128", 30], ["AES-CCM-16-128/128", 30], ["AES-CCM-16-128-256", 31], ["AES-CCM-16-256/128", 31], ["AES-CCM-64-128-128", 32], ["AES-CCM-64-128/128", 32], ["AES-CCM-64-128-256", 33], ["AES-CCM-64-256/128", 33], ]; const AlgToTags = new Map(ALGO_TAGS); const AlgFromTagsMap = new Map(ALGO_TAGS.map(([alg, tag]) => [tag, alg])); function AlgFromTags(tag) { const cose_name = AlgFromTagsMap.get(tag); if (!cose_name) throw new Error('Unknown algorithm, ' + tag); return cose_name; } exports.AlgFromTags = AlgFromTags; const Translators = { kid: value => new TextEncoder().encode(value).buffer, alg: (value) => { if (!AlgToTags.has(value)) throw new Error('Unknown \'alg\' parameter, ' + value); return AlgToTags.get(value); } }; exports.HeaderParameters = { partyUNonce: -22, static_key_id: -3, static_key: -2, ephemeral_key: -1, alg: 1, crit: 2, content_type: 3, ctyp: 3, kid: 4, IV: 5, Partial_IV: 6, counter_signature: 7 }; ; exports.EMPTY_BUFFER = new ArrayBuffer(0); function TranslateHeaders(header) { const result = new Map(); for (const param in header) { if (!exports.HeaderParameters[param]) { throw new Error('Unknown parameter, \'' + param + '\''); } let value = header[param]; if (Translators[param]) { value = Translators[param](header[param]); } if (value !== undefined && value !== null) { result.set(exports.HeaderParameters[param], value); } } return result; } exports.TranslateHeaders = TranslateHeaders; ; const KeyParameters = { crv: -1, k: -1, x: -2, y: -3, d: -4, kty: 1 }; const KeyTypes = { OKP: 1, EC2: 2, RSA: 3, Symmetric: 4 }; const KeyCrv = { 'P-256': 1, 'P-384': 2, 'P-521': 3, X25519: 4, X448: 5, Ed25519: 6, Ed448: 7 }; const KeyTranslators = { kty: (value) => { if (!(KeyTypes[value])) { throw new Error('Unknown \'kty\' parameter, ' + value); } return KeyTypes[value]; }, crv: (value) => { if (!(KeyCrv[value])) { throw new Error('Unknown \'crv\' parameter, ' + value); } return KeyCrv[value]; } }; function TranslateKey(key) { const result = new Map(); for (const param in key) { if (!KeyParameters[param]) { throw new Error('Unknown parameter, \'' + param + '\''); } let value = key[param]; if (KeyTranslators[param]) { value = KeyTranslators[param](value); } result.set(KeyParameters[param], value); } return result; } exports.TranslateKey = TranslateKey; ; function xor(a, b) { const buffer = new Uint8Array(Math.max(a.length, b.length)); for (let i = 1; i <= buffer.length; ++i) { const av = (a.length - i) < 0 ? 0 : a[a.length - i]; const bv = (b.length - i) < 0 ? 0 : b[b.length - i]; buffer[buffer.length - i] = av ^ bv; } return buffer; } exports.xor = xor; ; function runningInNode() { return Object.prototype.toString.call(global.process) === '[object process]'; } exports.runningInNode = runningInNode; ; function uint8ArrayEquals(a, b) { return a.length === b.length && a.every((v, i) => b[i] === v); } exports.uint8ArrayEquals = uint8ArrayEquals; //# sourceMappingURL=common.js.map