@shockpkg/ria-packager
Version:
Package for creating Adobe AIR packages
1 lines • 7.96 kB
Source Map (JSON)
{"version":3,"sources":["security/keystore/pkcs12.ts"],"names":["fse","forge","SecurityCertificateX509","SecurityKeyPrivateRsa","SecurityKeystore","forgeOidCertBag","pki","oids","certBag","forgeOidPkcs8ShroudedKeyBag","pkcs8ShroudedKeyBag","SecurityKeystorePkcs12","constructor","reset","_certificate","_keyPrivate","getCertificate","r","Error","getKeyPrivate","readData","data","password","der","util","decode64","toString","asn1","fromDer","p12","pkcs12","pkcs12FromAsn1","certificates","keyPrivates","safeContent","safeContents","safeBag","safeBags","type","cert","push","key","length","certificate","_createCertificateX509","keyPrivate","_SecurityKeyPrivateRsa","readFile","path","readForgeCertificate","readForgeKeyPrivate"],"mappings":"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","sourcesContent":["import fse from 'fs-extra';\nimport forge from 'node-forge';\n\nimport {SecurityCertificateX509} from '../certificate/x509';\nimport {SecurityKeyPrivateRsa} from '../key/private/rsa';\nimport {SecurityKeystore} from '../keystore';\n\nconst forgeOidCertBag = forge.pki.oids.certBag;\nconst forgeOidPkcs8ShroudedKeyBag = forge.pki.oids.pkcs8ShroudedKeyBag;\n\n/**\n * SecurityKeystorePkcs12 constructor.\n */\nexport class SecurityKeystorePkcs12 extends SecurityKeystore {\n\t/**\n\t * Certificate.\n\t */\n\tprotected _certificate: SecurityCertificateX509 | null = null;\n\n\t/**\n\t * Private key.\n\t */\n\tprotected _keyPrivate: SecurityKeyPrivateRsa | null = null;\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Reset the internal state.\n\t */\n\tpublic reset() {\n\t\tthis._certificate = null;\n\t\tthis._keyPrivate = null;\n\t}\n\n\t/**\n\t * Get certificate or throw if none.\n\t *\n\t * @returns Certificate instance.\n\t */\n\tpublic getCertificate() {\n\t\tconst r = this._certificate;\n\t\tif (!r) {\n\t\t\tthrow new Error('No certificate');\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Get private key or throw if none.\n\t *\n\t * @returns Private key instance.\n\t */\n\tpublic getKeyPrivate() {\n\t\tconst r = this._keyPrivate;\n\t\tif (!r) {\n\t\t\tthrow new Error('No private key');\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Read data from buffer.\n\t *\n\t * @param data File data.\n\t * @param password The password if necessary.\n\t */\n\tpublic readData(data: Readonly<Buffer>, password: string | null = null) {\n\t\tthis.reset();\n\n\t\tconst der = forge.util.decode64(data.toString('base64'));\n\t\tconst asn1 = forge.asn1.fromDer(der);\n\t\tconst p12 = password ?\n\t\t\tforge.pkcs12.pkcs12FromAsn1(asn1, true, password) :\n\t\t\tforge.pkcs12.pkcs12FromAsn1(asn1, true);\n\n\t\tconst certificates: forge.pki.Certificate[] = [];\n\t\tconst keyPrivates: forge.pki.PrivateKey[] = [];\n\t\tfor (const safeContent of p12.safeContents) {\n\t\t\tfor (const safeBag of safeContent.safeBags) {\n\t\t\t\tswitch (safeBag.type) {\n\t\t\t\t\tcase forgeOidCertBag: {\n\t\t\t\t\t\tconst {cert} = safeBag;\n\t\t\t\t\t\tif (!cert) {\n\t\t\t\t\t\t\tthrow new Error('Internal error');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcertificates.push(cert);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase forgeOidPkcs8ShroudedKeyBag: {\n\t\t\t\t\t\tconst {key} = safeBag;\n\t\t\t\t\t\tif (!key) {\n\t\t\t\t\t\t\tthrow new Error('Internal error');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkeyPrivates.push(key as any);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\t// Do nothing.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (certificates.length > 1) {\n\t\t\tthrow new Error(\n\t\t\t\t`Found multiple certificates: ${certificates.length}`\n\t\t\t);\n\t\t}\n\t\tif (keyPrivates.length > 1) {\n\t\t\tthrow new Error(\n\t\t\t\t`Found multiple private keys: ${keyPrivates.length}`\n\t\t\t);\n\t\t}\n\n\t\tconst certificate = certificates.length ?\n\t\t\tthis._createCertificateX509(certificates[0]) :\n\t\t\tnull;\n\n\t\tconst keyPrivate = keyPrivates.length ?\n\t\t\tthis._SecurityKeyPrivateRsa(keyPrivates[0]) :\n\t\t\tnull;\n\n\t\tthis._certificate = certificate;\n\t\tthis._keyPrivate = keyPrivate;\n\t}\n\n\t/**\n\t * Read data from file.\n\t *\n\t * @param path File path.\n\t * @param password The password if necessary.\n\t */\n\tpublic async readFile(path: string, password: string | null = null) {\n\t\tconst data = await fse.readFile(path);\n\t\tthis.readData(data, password);\n\t}\n\n\t/**\n\t * Create CertificateX509.\n\t *\n\t * @param certificate Force certificate.\n\t * @returns New CertificateX509.\n\t */\n\tprotected _createCertificateX509(\n\t\tcertificate: Readonly<forge.pki.Certificate>\n\t) {\n\t\tconst r = new SecurityCertificateX509();\n\t\tr.readForgeCertificate(certificate);\n\t\treturn r;\n\t}\n\n\t/**\n\t * Create KeyPrivateRsa.\n\t *\n\t * @param keyPrivate Force private key.\n\t * @returns New KeyPrivateRsa.\n\t */\n\tprotected _SecurityKeyPrivateRsa(\n\t\tkeyPrivate: Readonly<forge.pki.PrivateKey>\n\t) {\n\t\tconst r = new SecurityKeyPrivateRsa();\n\t\tr.readForgeKeyPrivate(keyPrivate);\n\t\treturn r;\n\t}\n}\n"],"file":"pkcs12.mjs","sourceRoot":"../../../src"}