vess-mdl
Version:
Parse and and validate MDOC CBOR encoded binaries according to ISO 18013-5.
101 lines • 8.53 kB
JavaScript
"use strict";
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _IssuerSignedItem_dataItem, _IssuerSignedItem_isValid;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IssuerSignedItem = void 0;
const uncrypto_1 = require("uncrypto");
const cbor_1 = require("../cbor");
const DataItem_1 = require("../cbor/DataItem");
const buffer_utils_1 = require("../buffer_utils");
const utils_1 = require("./utils");
const MDL_NAMESPACE = 'org.iso.18013.5.1';
const supportedDigestAlgorithms = ['SHA-256', 'SHA-384', 'SHA-512'];
class IssuerSignedItem {
constructor(dataItem) {
_IssuerSignedItem_dataItem.set(this, void 0);
_IssuerSignedItem_isValid.set(this, void 0);
__classPrivateFieldSet(this, _IssuerSignedItem_dataItem, dataItem, "f");
}
encode() {
return __classPrivateFieldGet(this, _IssuerSignedItem_dataItem, "f").buffer;
}
get dataItem() {
return __classPrivateFieldGet(this, _IssuerSignedItem_dataItem, "f");
}
get decodedData() {
if (!__classPrivateFieldGet(this, _IssuerSignedItem_dataItem, "f").data.has('digestID')) {
throw new Error('Invalid data item');
}
return __classPrivateFieldGet(this, _IssuerSignedItem_dataItem, "f").data;
}
get digestID() {
return this.decodedData.get('digestID');
}
get random() {
return this.decodedData.get('random');
}
get elementIdentifier() {
return this.decodedData.get('elementIdentifier');
}
get elementValue() {
return this.decodedData.get('elementValue');
}
async calculateDigest(alg) {
const bytes = (0, cbor_1.cborEncode)(__classPrivateFieldGet(this, _IssuerSignedItem_dataItem, "f"));
const result = await uncrypto_1.subtle.digest(alg, bytes);
return result;
}
async isValid(nameSpace, { decodedPayload: { valueDigests, digestAlgorithm }, }) {
if (typeof __classPrivateFieldGet(this, _IssuerSignedItem_isValid, "f") !== 'undefined') {
return __classPrivateFieldGet(this, _IssuerSignedItem_isValid, "f");
}
if (!supportedDigestAlgorithms.includes(digestAlgorithm)) {
__classPrivateFieldSet(this, _IssuerSignedItem_isValid, false, "f");
return false;
}
const digest = await this.calculateDigest(digestAlgorithm);
const digests = valueDigests.get(nameSpace);
if (typeof digests === 'undefined') {
return false;
}
const expectedDigest = digests.get(this.digestID);
__classPrivateFieldSet(this, _IssuerSignedItem_isValid, expectedDigest &&
(0, buffer_utils_1.areEqual)(new Uint8Array(digest), expectedDigest), "f");
return __classPrivateFieldGet(this, _IssuerSignedItem_isValid, "f");
}
matchCertificate(nameSpace, { countryName, stateOrProvince }) {
if (nameSpace !== MDL_NAMESPACE) {
return undefined;
}
if (this.elementIdentifier === 'issuing_country') {
return countryName === this.elementValue;
}
if (this.elementIdentifier === 'issuing_jurisdiction' && stateOrProvince) {
return stateOrProvince === this.elementValue;
}
return undefined;
}
static create(digestID, elementIdentifier, elementValue) {
const random = (0, utils_1.getRandomBytes)(32);
const dataItem = DataItem_1.DataItem.fromData(new Map([
['digestID', digestID],
['elementIdentifier', elementIdentifier],
['elementValue', elementValue],
['random', random],
]));
return new IssuerSignedItem(dataItem);
}
}
exports.IssuerSignedItem = IssuerSignedItem;
_IssuerSignedItem_dataItem = new WeakMap(), _IssuerSignedItem_isValid = new WeakMap();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNzdWVyU2lnbmVkSXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZG9jL0lzc3VlclNpZ25lZEl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQWtDO0FBQ2xDLGtDQUFxQztBQUNyQywrQ0FBNEM7QUFFNUMsa0RBQTJDO0FBQzNDLG1DQUF5QztBQUV6QyxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQztBQUUxQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUtwRSxNQUFhLGdCQUFnQjtJQUkzQixZQUNFLFFBQThCO1FBSnZCLDZDQUFnQztRQUN6Qyw0Q0FBOEI7UUFLNUIsdUJBQUEsSUFBSSw4QkFBYSxRQUFRLE1BQUEsQ0FBQztJQUM1QixDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sdUJBQUEsSUFBSSxrQ0FBVSxDQUFDLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sdUJBQUEsSUFBSSxrQ0FBVSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsSUFBSSxDQUFDLHVCQUFBLElBQUksa0NBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLHVCQUFBLElBQUksa0NBQVUsQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBVyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBZSxDQUFDO0lBQ3RELENBQUM7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