@shockpkg/ria-packager
Version:
Package for creating Adobe AIR packages
1 lines • 15.5 kB
Source Map (JSON)
{"version":3,"file":"timestamper.mjs","names":["forge","NAME","VERSION","SecurityTimestamper","headers","fetch","constructor","url","timestamp","digested","digest","encodedRequest","_encodeRequest","response","_sendRequest","_decodeResponse","message","_ensureFetch","method","body","status","Error","Uint8Array","arrayBuffer","toLowerCase","iod","pki","oids","sha1","sha256","certReq","hashAlgoDef","asn1","create","Class","UNIVERSAL","Type","SEQUENCE","OID","oidToDer","getBytes","NULL","messageImprintDef","OCTETSTRING","String","fromCharCode","reqPolicy","asn1ReqPolicy","nonceDER","asn1Extn","tsaReqDef","INTEGER","BOOLEAN","filter","Boolean","util","binary","raw","decode","toDer","bytes","object","fromDer","ByteStringBuffer","validator","name","tagClass","type","constructed","value","captureAsn1","optional","UTF8","BITSTRING","capture","errors","success","validate","length","error","pkiStatus","pkiStatusCode","charCodeAt","tst"],"sources":["../../src/security/timestamper.ts"],"sourcesContent":["import forge from 'node-forge';\n\nimport {NAME, VERSION} from '../meta.ts';\nimport {IFetch} from '../types.ts';\n\n/**\n * SecurityTimestamper object.\n */\nexport class SecurityTimestamper {\n\t/**\n\t * The timestamp server URL.\n\t */\n\tpublic url: string;\n\n\t/**\n\t * The default headers for HTTP requests.\n\t */\n\tpublic headers: {[header: string]: string} = {\n\t\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t\t'User-Agent': `${NAME}/${VERSION}`\n\t};\n\n\t/**\n\t * A fetch-like interface requiring only a sebset of features.\n\t */\n\tpublic fetch: IFetch | null =\n\t\ttypeof fetch === 'undefined' ? null : (fetch as IFetch);\n\n\t/**\n\t * SecurityTimestamper constructor.\n\t *\n\t * @param url The timestamp server URL.\n\t */\n\tconstructor(url: string) {\n\t\tthis.url = url;\n\t}\n\n\t/**\n\t * Timestamp data digested with specified algorithm.\n\t *\n\t * @param digested The data to timestamp.\n\t * @param digest Digest algorithm.\n\t * @returns Timestamp data.\n\t */\n\tpublic async timestamp(digested: Readonly<Uint8Array>, digest: string) {\n\t\tconst encodedRequest = this._encodeRequest(digested, digest);\n\t\tconst response = await this._sendRequest(encodedRequest);\n\t\treturn this._decodeResponse(response);\n\t}\n\n\t/**\n\t * Send message request and return response or error on failure.\n\t *\n\t * @param message Encoded message.\n\t * @returns Encoded response.\n\t */\n\tprotected async _sendRequest(message: Readonly<Uint8Array>) {\n\t\tconst {url, headers} = this;\n\t\tconst fetch = this._ensureFetch();\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders,\n\t\t\tbody: message\n\t\t});\n\t\tif (response.status !== 200) {\n\t\t\tthrow new Error(`Status code: ${response.status}: ${url}`);\n\t\t}\n\t\treturn new Uint8Array(await response.arrayBuffer());\n\t}\n\n\t/**\n\t * Encode request.\n\t *\n\t * @param digested Digested message.\n\t * @param digest Digest algorithm.\n\t * @returns Encoded request.\n\t */\n\tprotected _encodeRequest(digested: Readonly<Uint8Array>, digest: string) {\n\t\tdigest = digest.toLowerCase();\n\t\tlet iod = '';\n\t\tswitch (digest) {\n\t\t\tcase 'sha1': {\n\t\t\t\tiod = forge.pki.oids.sha1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'sha256': {\n\t\t\t\tiod = forge.pki.oids.sha256;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(`Unsupported digest algorithm: ${digest}`);\n\t\t\t}\n\t\t}\n\n\t\tconst certReq = true;\n\n\t\tconst hashAlgoDef = forge.asn1.create(\n\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\tforge.asn1.Type.SEQUENCE,\n\t\t\ttrue,\n\t\t\t[\n\t\t\t\tforge.asn1.create(\n\t\t\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\t\t\tforge.asn1.Type.OID,\n\t\t\t\t\tfalse,\n\t\t\t\t\tforge.asn1.oidToDer(iod).getBytes()\n\t\t\t\t),\n\t\t\t\tforge.asn1.create(\n\t\t\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\t\t\tforge.asn1.Type.NULL,\n\t\t\t\t\tfalse,\n\t\t\t\t\t''\n\t\t\t\t)\n\t\t\t]\n\t\t);\n\n\t\tconst messageImprintDef = forge.asn1.create(\n\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\tforge.asn1.Type.SEQUENCE,\n\t\t\ttrue,\n\t\t\t[\n\t\t\t\thashAlgoDef,\n\t\t\t\tforge.asn1.create(\n\t\t\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\t\t\tforge.asn1.Type.OCTETSTRING,\n\t\t\t\t\tfalse,\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-code-point\n\t\t\t\t\tString.fromCharCode(...digested)\n\t\t\t\t)\n\t\t\t]\n\t\t);\n\n\t\t// Could be set to some bytes.\n\t\t// ie: reqPolicy = 'some bytes';\n\t\tconst reqPolicy = null;\n\t\tconst asn1ReqPolicy = reqPolicy\n\t\t\t? forge.asn1.create(\n\t\t\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\t\t\tforge.asn1.Type.OID,\n\t\t\t\t\tfalse,\n\t\t\t\t\treqPolicy\n\t\t\t\t)\n\t\t\t: null;\n\n\t\t// Always null.\n\t\tconst nonceDER = null;\n\n\t\t// This could be a DER encodable, if extensions is set to be?\n\t\t// Just null for now.\n\t\t// const extensions = null;\n\t\t// const asn1Extn = extensions ? extensions : null;\n\t\tconst asn1Extn = null;\n\n\t\tconst tsaReqDef = forge.asn1.create(\n\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\tforge.asn1.Type.SEQUENCE,\n\t\t\ttrue,\n\t\t\t[\n\t\t\t\tforge.asn1.create(\n\t\t\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\t\t\tforge.asn1.Type.INTEGER,\n\t\t\t\t\tfalse,\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-code-point\n\t\t\t\t\tString.fromCharCode(1)\n\t\t\t\t),\n\t\t\t\tmessageImprintDef,\n\t\t\t\tasn1ReqPolicy,\n\t\t\t\tnonceDER,\n\t\t\t\tforge.asn1.create(\n\t\t\t\t\tforge.asn1.Class.UNIVERSAL,\n\t\t\t\t\tforge.asn1.Type.BOOLEAN,\n\t\t\t\t\tfalse,\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-code-point\n\t\t\t\t\tString.fromCharCode(certReq ? 0xff : 0)\n\t\t\t\t),\n\t\t\t\tasn1Extn\n\t\t\t].filter(Boolean) as forge.asn1.Asn1[]\n\t\t);\n\n\t\treturn forge.util.binary.raw.decode(\n\t\t\tforge.asn1.toDer(tsaReqDef).bytes()\n\t\t);\n\t}\n\n\t/**\n\t * Decode response.\n\t *\n\t * @param response Encoded response.\n\t * @returns Decoded response.\n\t */\n\tprotected _decodeResponse(response: Readonly<Uint8Array>) {\n\t\tconst object = forge.asn1.fromDer(\n\t\t\tnew forge.util.ByteStringBuffer(response as Uint8Array<ArrayBuffer>)\n\t\t);\n\n\t\tconst validator = {\n\t\t\tname: 'root',\n\t\t\ttagClass: forge.asn1.Class.UNIVERSAL,\n\t\t\ttype: forge.asn1.Type.SEQUENCE,\n\t\t\tconstructed: true,\n\t\t\tvalue: [\n\t\t\t\t{\n\t\t\t\t\tname: 'root.statusInfo',\n\t\t\t\t\ttagClass: forge.asn1.Class.UNIVERSAL,\n\t\t\t\t\ttype: forge.asn1.Type.SEQUENCE,\n\t\t\t\t\tconstructed: true,\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'root.statusInfo.pkiStatus',\n\t\t\t\t\t\t\ttagClass: forge.asn1.Class.UNIVERSAL,\n\t\t\t\t\t\t\ttype: forge.asn1.Type.INTEGER,\n\t\t\t\t\t\t\tconstructed: false,\n\t\t\t\t\t\t\tcaptureAsn1: 'root.statusInfo.pkiStatus',\n\t\t\t\t\t\t\toptional: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'root.statusInfo.pkiFreeText',\n\t\t\t\t\t\t\ttagClass: forge.asn1.Class.UNIVERSAL,\n\t\t\t\t\t\t\ttype: forge.asn1.Type.UTF8,\n\t\t\t\t\t\t\tconstructed: false,\n\t\t\t\t\t\t\tcaptureAsn1: 'root.statusInfo.pkiFreeText',\n\t\t\t\t\t\t\toptional: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'root.statusInfo.pkiFailureInfo',\n\t\t\t\t\t\t\ttagClass: forge.asn1.Class.UNIVERSAL,\n\t\t\t\t\t\t\ttype: forge.asn1.Type.BITSTRING,\n\t\t\t\t\t\t\tconstructed: false,\n\t\t\t\t\t\t\tcaptureAsn1: 'root.statusInfo.pkiFailureInfo',\n\t\t\t\t\t\t\toptional: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'root.tst',\n\t\t\t\t\ttagClass: forge.asn1.Class.UNIVERSAL,\n\t\t\t\t\ttype: forge.asn1.Type.SEQUENCE,\n\t\t\t\t\tconstructed: true,\n\t\t\t\t\tcaptureAsn1: 'root.tst',\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tconst capture: {[key: string]: unknown} = {};\n\t\tconst errors: string[] = [];\n\n\t\tconst success = (\n\t\t\tforge.asn1 as unknown as {\n\t\t\t\tvalidate: (\n\t\t\t\t\ta: unknown,\n\t\t\t\t\tb: unknown,\n\t\t\t\t\tc: unknown,\n\t\t\t\t\td: unknown\n\t\t\t\t) => boolean;\n\t\t\t}\n\t\t).validate(object, validator, capture, errors);\n\t\tif (!success || errors.length) {\n\t\t\tconst error = errors[0] || 'Unknown error';\n\t\t\tthrow new Error(`Decode error: ${error}`);\n\t\t}\n\n\t\tconst pkiStatus = capture['root.statusInfo.pkiStatus'] as {\n\t\t\tvalue: string;\n\t\t};\n\t\tif (!pkiStatus) {\n\t\t\tthrow new Error('Missing PKI status');\n\t\t}\n\n\t\tif (pkiStatus.value.length !== 1) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected PKI status length: ${pkiStatus.value.length}`\n\t\t\t);\n\t\t}\n\n\t\t// eslint-disable-next-line unicorn/prefer-code-point\n\t\tconst pkiStatusCode = pkiStatus.value.charCodeAt(0);\n\t\tif (pkiStatusCode !== 0 && pkiStatusCode !== 1) {\n\t\t\tthrow new Error(`Unexpected PKI status code: ${pkiStatusCode}`);\n\t\t}\n\n\t\tconst tst = capture['root.tst'] as forge.asn1.Asn1;\n\t\tif (!tst) {\n\t\t\tthrow new Error('Missing PKI TSTInfo');\n\t\t}\n\n\t\treturn forge.util.binary.raw.decode(forge.asn1.toDer(tst).bytes());\n\t}\n\n\t/**\n\t * Ensure fetch-like function is set.\n\t *\n\t * @returns The fetch-like function.\n\t */\n\tprotected _ensureFetch(): IFetch {\n\t\tconst {fetch} = this;\n\t\tif (!fetch) {\n\t\t\tthrow new Error('Default fetch not available');\n\t\t}\n\t\treturn fetch;\n\t}\n}\n"],"mappings":"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","ignoreList":[]}