From d4d94c6fb720701ee79fcff54ef3b1bf7c8389bb Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Tue, 11 Dec 2018 14:05:26 +0100 Subject: [PATCH 01/22] Remove non-AES CFB quick check --- src/crypto/cfb.js | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/crypto/cfb.js b/src/crypto/cfb.js index 87e3dbcf..41e871cb 100644 --- a/src/crypto/cfb.js +++ b/src/crypto/cfb.js @@ -181,7 +181,7 @@ export default { cipherfn = new cipher[cipherfn](key); const block_size = cipherfn.blockSize; - let iblock = new Uint8Array(block_size); + const iblock = new Uint8Array(block_size); let ablock = new Uint8Array(block_size); let i; @@ -189,30 +189,10 @@ export default { let n; let text = new Uint8Array(ciphertext.length - block_size); - // initialisation vector - for (i = 0; i < block_size; i++) { - iblock[i] = 0; - } - - iblock = cipherfn.encrypt(iblock); - for (i = 0; i < block_size; i++) { - ablock[i] = ciphertext[i]; - iblock[i] ^= ablock[i]; - } - - ablock = cipherfn.encrypt(ablock); - - // test check octets - if (iblock[block_size - 2] !== (ablock[0] ^ ciphertext[block_size]) || - iblock[block_size - 1] !== (ablock[1] ^ ciphertext[block_size + 1])) { - throw new Error('CFB decrypt: invalid key'); - } - /* RFC4880: Tag 18 and Resync: * [...] Unlike the Symmetrically Encrypted Data Packet, no * special CFB resynchronization is done after encrypting this prefix * data. See "OpenPGP CFB Mode" below for more details. - */ j = 0; From 65772d86b30803fbd93f78e75ff19081889684e5 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Fri, 14 Dec 2018 16:23:17 +0100 Subject: [PATCH 02/22] Make fromUserIds/toUserIds params plural, and accept arrays of User IDs Each User ID object is used for the key object at the corresponding index in the privateKeys/publicKeys arrays. --- src/cleartext.js | 12 ++++++------ src/key.js | 15 ++++++++------- src/message.js | 39 ++++++++++++++++++++------------------- src/openpgp.js | 38 +++++++++++++++++++------------------- test/general/key.js | 10 +++++----- 5 files changed, 58 insertions(+), 56 deletions(-) diff --git a/src/cleartext.js b/src/cleartext.js index dc50601d..93850a54 100644 --- a/src/cleartext.js +++ b/src/cleartext.js @@ -68,12 +68,12 @@ CleartextMessage.prototype.getSigningKeyIds = function() { * @param {Array} privateKeys private keys with decrypted secret key data for signing * @param {Signature} signature (optional) any existing detached signature * @param {Date} date (optional) The creation time of the signature that should be created - * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' } + * @param {Array} userIds (optional) user IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }] * @returns {Promise} new cleartext message with signed content * @async */ -CleartextMessage.prototype.sign = async function(privateKeys, signature=null, date=new Date(), userId={}) { - return new CleartextMessage(this.text, await this.signDetached(privateKeys, signature, date, userId)); +CleartextMessage.prototype.sign = async function(privateKeys, signature=null, date=new Date(), userIds=[]) { + return new CleartextMessage(this.text, await this.signDetached(privateKeys, signature, date, userIds)); }; /** @@ -81,15 +81,15 @@ CleartextMessage.prototype.sign = async function(privateKeys, signature=null, da * @param {Array} privateKeys private keys with decrypted secret key data for signing * @param {Signature} signature (optional) any existing detached signature * @param {Date} date (optional) The creation time of the signature that should be created - * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' } + * @param {Array} userIds (optional) user IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }] * @returns {Promise} new detached signature of message content * @async */ -CleartextMessage.prototype.signDetached = async function(privateKeys, signature=null, date=new Date(), userId={}) { +CleartextMessage.prototype.signDetached = async function(privateKeys, signature=null, date=new Date(), userIds=[]) { const literalDataPacket = new packet.Literal(); literalDataPacket.setText(this.text); - return new Signature(await createSignaturePackets(literalDataPacket, privateKeys, signature, date, userId)); + return new Signature(await createSignaturePackets(literalDataPacket, privateKeys, signature, date, userIds)); }; /** diff --git a/src/key.js b/src/key.js index b43450df..d8ce9a84 100644 --- a/src/key.js +++ b/src/key.js @@ -1684,16 +1684,16 @@ export async function getPreferredHashAlgo(key, keyPacket, date=new Date(), user * @param {symmetric|aead} type Type of preference to return * @param {Array} keys Set of keys * @param {Date} date (optional) use the given date for verification instead of the current time - * @param {Object} userId (optional) user ID + * @param {Array} userIds (optional) user IDs * @returns {Promise} Preferred symmetric algorithm * @async */ -export async function getPreferredAlgo(type, keys, date=new Date(), userId={}) { +export async function getPreferredAlgo(type, keys, date=new Date(), userIds=[]) { const prefProperty = type === 'symmetric' ? 'preferredSymmetricAlgorithms' : 'preferredAeadAlgorithms'; const defaultAlgo = type === 'symmetric' ? config.encryption_cipher : config.aead_mode; const prioMap = {}; - await Promise.all(keys.map(async function(key) { - const primaryUser = await key.getPrimaryUser(date, userId); + await Promise.all(keys.map(async function(key, i) { + const primaryUser = await key.getPrimaryUser(date, userIds[i]); if (!primaryUser || !primaryUser.selfCertification[prefProperty]) { return defaultAlgo; } @@ -1722,14 +1722,15 @@ export async function getPreferredAlgo(type, keys, date=new Date(), userId={}) { * Returns whether aead is supported by all keys in the set * @param {Array} keys Set of keys * @param {Date} date (optional) use the given date for verification instead of the current time + * @param {Array} userIds (optional) user IDs * @returns {Promise} * @async */ -export async function isAeadSupported(keys, date=new Date(), userId={}) { +export async function isAeadSupported(keys, date=new Date(), userIds=[]) { let supported = true; // TODO replace when Promise.some or Promise.any are implemented - await Promise.all(keys.map(async function(key) { - const primaryUser = await key.getPrimaryUser(date, userId); + await Promise.all(keys.map(async function(key, i) { + const primaryUser = await key.getPrimaryUser(date, userIds[i]); if (!primaryUser || !primaryUser.selfCertification.features || !(primaryUser.selfCertification.features[0] & enums.features.aead)) { supported = false; diff --git a/src/message.js b/src/message.js index d8818616..959747bd 100644 --- a/src/message.js +++ b/src/message.js @@ -262,12 +262,12 @@ Message.prototype.getText = function() { * @param {Object} sessionKey (optional) session key in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] } * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs * @param {Date} date (optional) override the creation date of the literal package - * @param {Object} userId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' } + * @param {Array} userIds (optional) user IDs to encrypt for, e.g. [{ name:'Robert Receiver', email:'robert@openpgp.org' }] * @param {Boolean} streaming (optional) whether to process data as a stream * @returns {Promise} new message with encrypted content * @async */ -Message.prototype.encrypt = async function(keys, passwords, sessionKey, wildcard=false, date=new Date(), userId={}, streaming) { +Message.prototype.encrypt = async function(keys, passwords, sessionKey, wildcard=false, date=new Date(), userIds=[], streaming) { let symAlgo; let aeadAlgo; let symEncryptedPacket; @@ -280,9 +280,9 @@ Message.prototype.encrypt = async function(keys, passwords, sessionKey, wildcard aeadAlgo = sessionKey.aeadAlgorithm; sessionKey = sessionKey.data; } else if (keys && keys.length) { - symAlgo = enums.read(enums.symmetric, await getPreferredAlgo('symmetric', keys, date, userId)); - if (config.aead_protect && config.aead_protect_version === 4 && await isAeadSupported(keys, date, userId)) { - aeadAlgo = enums.read(enums.aead, await getPreferredAlgo('aead', keys, date, userId)); + symAlgo = enums.read(enums.symmetric, await getPreferredAlgo('symmetric', keys, date, userIds)); + if (config.aead_protect && config.aead_protect_version === 4 && await isAeadSupported(keys, date, userIds)) { + aeadAlgo = enums.read(enums.aead, await getPreferredAlgo('aead', keys, date, userIds)); } } else if (passwords && passwords.length) { symAlgo = enums.read(enums.symmetric, config.encryption_cipher); @@ -295,7 +295,7 @@ Message.prototype.encrypt = async function(keys, passwords, sessionKey, wildcard sessionKey = await crypto.generateSessionKey(symAlgo); } - const msg = await encryptSessionKey(sessionKey, symAlgo, aeadAlgo, keys, passwords, wildcard, date, userId); + const msg = await encryptSessionKey(sessionKey, symAlgo, aeadAlgo, keys, passwords, wildcard, date, userIds); if (config.aead_protect && (config.aead_protect_version !== 4 || aeadAlgo)) { symEncryptedPacket = new packet.SymEncryptedAEADProtected(); @@ -330,16 +330,16 @@ Message.prototype.encrypt = async function(keys, passwords, sessionKey, wildcard * @param {Array} passwords (optional) for message encryption * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs * @param {Date} date (optional) override the date - * @param {Object} userId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' } + * @param {Array} userIds (optional) user IDs to encrypt for, e.g. [{ name:'Robert Receiver', email:'robert@openpgp.org' }] * @returns {Promise} new message with encrypted content * @async */ -export async function encryptSessionKey(sessionKey, symAlgo, aeadAlgo, publicKeys, passwords, wildcard=false, date=new Date(), userId={}) { +export async function encryptSessionKey(sessionKey, symAlgo, aeadAlgo, publicKeys, passwords, wildcard=false, date=new Date(), userIds=[]) { const packetlist = new packet.List(); if (publicKeys) { const results = await Promise.all(publicKeys.map(async function(publicKey) { - const encryptionKey = await publicKey.getEncryptionKey(undefined, date, userId); + const encryptionKey = await publicKey.getEncryptionKey(undefined, date, userIds); if (!encryptionKey) { throw new Error('Could not find valid key packet for encryption in key ' + publicKey.getKeyId().toHex()); @@ -399,11 +399,11 @@ export async function encryptSessionKey(sessionKey, symAlgo, aeadAlgo, publicKey * @param {Array} privateKeys private keys with decrypted secret key data for signing * @param {Signature} signature (optional) any existing detached signature to add to the message * @param {Date} date (optional) override the creation time of the signature - * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' } + * @param {Array} userIds (optional) user IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }] * @returns {Promise} new message with signed content * @async */ -Message.prototype.sign = async function(privateKeys=[], signature=null, date=new Date(), userId={}) { +Message.prototype.sign = async function(privateKeys=[], signature=null, date=new Date(), userIds=[]) { const packetlist = new packet.List(); const literalDataPacket = this.packets.findPacket(enums.packet.literal); @@ -437,14 +437,14 @@ Message.prototype.sign = async function(privateKeys=[], signature=null, date=new if (privateKey.isPublic()) { throw new Error('Need private key for signing'); } - const signingKey = await privateKey.getSigningKey(undefined, date, userId); + const signingKey = await privateKey.getSigningKey(undefined, date, userIds); if (!signingKey) { throw new Error('Could not find valid key packet for signing in key ' + privateKey.getKeyId().toHex()); } const onePassSig = new packet.OnePassSignature(); onePassSig.signatureType = signatureType; - onePassSig.hashAlgorithm = await getPreferredHashAlgo(privateKey, signingKey.keyPacket, date, userId); + onePassSig.hashAlgorithm = await getPreferredHashAlgo(privateKey, signingKey.keyPacket, date, userIds); onePassSig.publicKeyAlgorithm = signingKey.keyPacket.algorithm; onePassSig.issuerKeyId = signingKey.getKeyId(); if (i === privateKeys.length - 1) { @@ -486,16 +486,16 @@ Message.prototype.compress = function(compression) { * @param {Array} privateKeys private keys with decrypted secret key data for signing * @param {Signature} signature (optional) any existing detached signature * @param {Date} date (optional) override the creation time of the signature - * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' } + * @param {Array} userIds (optional) user IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }] * @returns {Promise} new detached signature of message content * @async */ -Message.prototype.signDetached = async function(privateKeys=[], signature=null, date=new Date(), userId={}) { +Message.prototype.signDetached = async function(privateKeys=[], signature=null, date=new Date(), userIds=[]) { const literalDataPacket = this.packets.findPacket(enums.packet.literal); if (!literalDataPacket) { throw new Error('No literal data packet to sign.'); } - return new Signature(await createSignaturePackets(literalDataPacket, privateKeys, signature, date, userId)); + return new Signature(await createSignaturePackets(literalDataPacket, privateKeys, signature, date, userIds)); }; /** @@ -504,18 +504,19 @@ Message.prototype.signDetached = async function(privateKeys=[], signature=null, * @param {Array} privateKeys private keys with decrypted secret key data for signing * @param {Signature} signature (optional) any existing detached signature to append * @param {Date} date (optional) override the creationtime of the signature - * @param {Object} userId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' } + * @param {Array} userIds (optional) user IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }] * @returns {Promise} list of signature packets * @async */ -export async function createSignaturePackets(literalDataPacket, privateKeys, signature=null, date=new Date(), userId={}) { +export async function createSignaturePackets(literalDataPacket, privateKeys, signature=null, date=new Date(), userIds=[]) { const packetlist = new packet.List(); // If data packet was created from Uint8Array, use binary, otherwise use text const signatureType = literalDataPacket.text === null ? enums.signature.binary : enums.signature.text; - await Promise.all(privateKeys.map(async privateKey => { + await Promise.all(privateKeys.map(async (privateKey, i) => { + const userId = userIds[i]; if (privateKey.isPublic()) { throw new Error('Need private key for signing'); } diff --git a/src/openpgp.js b/src/openpgp.js index abf03ab6..d9bd12e7 100644 --- a/src/openpgp.js +++ b/src/openpgp.js @@ -288,8 +288,8 @@ export function encryptKey({ privateKey, passphrase }) { * @param {Boolean} returnSessionKey (optional) if the unencrypted session key should be added to returned object * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs * @param {Date} date (optional) override the creation date of the message signature - * @param {Object} fromUserId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' } - * @param {Object} toUserId (optional) user ID to encrypt for, e.g. { name:'Robert Receiver', email:'robert@openpgp.org' } + * @param {Array} fromUserIds (optional) array of user IDs to sign with, one per key in `privateKeys`, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }] + * @param {Array} toUserIds (optional) array of user IDs to encrypt for, one per key in `publicKeys`, e.g. [{ name:'Robert Receiver', email:'robert@openpgp.org' }] * @returns {Promise} Object containing encrypted (and optionally signed) message in the form: * * { @@ -302,11 +302,11 @@ export function encryptKey({ privateKey, passphrase }) { * @async * @static */ -export function encrypt({ message, publicKeys, privateKeys, passwords, sessionKey, compression=config.compression, armor=true, streaming=message&&message.fromStream, detached=false, signature=null, returnSessionKey=false, wildcard=false, date=new Date(), fromUserId={}, toUserId={} }) { - checkMessage(message); publicKeys = toArray(publicKeys); privateKeys = toArray(privateKeys); passwords = toArray(passwords); +export function encrypt({ message, publicKeys, privateKeys, passwords, sessionKey, compression=config.compression, armor=true, streaming=message&&message.fromStream, detached=false, signature=null, returnSessionKey=false, wildcard=false, date=new Date(), fromUserIds=[], toUserIds=[] }) { + checkMessage(message); publicKeys = toArray(publicKeys); privateKeys = toArray(privateKeys); passwords = toArray(passwords); fromUserIds = toArray(fromUserIds); toUserIds = toArray(toUserIds); if (!nativeAEAD() && asyncProxy) { // use web worker if web crypto apis are not supported - return asyncProxy.delegate('encrypt', { message, publicKeys, privateKeys, passwords, sessionKey, compression, armor, streaming, detached, signature, returnSessionKey, wildcard, date, fromUserId, toUserId }); + return asyncProxy.delegate('encrypt', { message, publicKeys, privateKeys, passwords, sessionKey, compression, armor, streaming, detached, signature, returnSessionKey, wildcard, date, fromUserIds, toUserIds }); } const result = {}; return Promise.resolve().then(async function() { @@ -315,14 +315,14 @@ export function encrypt({ message, publicKeys, privateKeys, passwords, sessionKe } if (privateKeys.length || signature) { // sign the message only if private keys or signature is specified if (detached) { - const detachedSignature = await message.signDetached(privateKeys, signature, date, fromUserId); + const detachedSignature = await message.signDetached(privateKeys, signature, date, fromUserIds); result.signature = armor ? detachedSignature.armor() : detachedSignature; } else { - message = await message.sign(privateKeys, signature, date, fromUserId); + message = await message.sign(privateKeys, signature, date, fromUserIds); } } message = message.compress(compression); - return message.encrypt(publicKeys, passwords, sessionKey, wildcard, date, toUserId, streaming); + return message.encrypt(publicKeys, passwords, sessionKey, wildcard, date, toUserIds, streaming); }).then(async encrypted => { if (armor) { @@ -405,7 +405,7 @@ export function decrypt({ message, privateKeys, passwords, sessionKeys, publicKe * @param {'web'|'node'|false} streaming (optional) whether to return data as a stream. Defaults to the type of stream `message` was created from, if any. * @param {Boolean} detached (optional) if the return value should contain a detached signature * @param {Date} date (optional) override the creation date of the signature - * @param {Object} fromUserId (optional) user ID to sign with, e.g. { name:'Steve Sender', email:'steve@openpgp.org' } + * @param {Array} fromUserIds (optional) array of user IDs to sign with, one per key in `privateKeys`, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }] * @returns {Promise} Object containing signed message in the form: * * { @@ -422,23 +422,23 @@ export function decrypt({ message, privateKeys, passwords, sessionKeys, publicKe * @async * @static */ -export function sign({ message, privateKeys, armor=true, streaming=message&&message.fromStream, detached=false, date=new Date(), fromUserId={} }) { +export function sign({ message, privateKeys, armor=true, streaming=message&&message.fromStream, detached=false, date=new Date(), fromUserIds=[] }) { checkCleartextOrMessage(message); - privateKeys = toArray(privateKeys); + privateKeys = toArray(privateKeys); fromUserIds = toArray(fromUserIds); if (asyncProxy) { // use web worker if available return asyncProxy.delegate('sign', { - message, privateKeys, armor, streaming, detached, date, fromUserId + message, privateKeys, armor, streaming, detached, date, fromUserIds }); } const result = {}; return Promise.resolve().then(async function() { if (detached) { - const signature = await message.signDetached(privateKeys, undefined, date, fromUserId); + const signature = await message.signDetached(privateKeys, undefined, date, fromUserIds); result.signature = armor ? signature.armor() : signature; } else { - message = await message.sign(privateKeys, undefined, date, fromUserId); + message = await message.sign(privateKeys, undefined, date, fromUserIds); if (armor) { result.data = message.armor(); } else { @@ -509,21 +509,21 @@ export function verify({ message, publicKeys, streaming=message&&message.fromStr * @param {String|Array} passwords (optional) passwords for the message * @param {Boolean} wildcard (optional) use a key ID of 0 instead of the public key IDs * @param {Date} date (optional) override the date - * @param {Object} toUserId (optional) user ID to encrypt for, e.g. { name:'Phil Zimmermann', email:'phil@openpgp.org' } + * @param {Array} toUserIds (optional) array of user IDs to encrypt for, one per key in `publicKeys`, e.g. [{ name:'Phil Zimmermann', email:'phil@openpgp.org' }] * @returns {Promise} the encrypted session key packets contained in a message object * @async * @static */ -export function encryptSessionKey({ data, algorithm, aeadAlgorithm, publicKeys, passwords, wildcard=false, date=new Date(), toUserId={} }) { - checkBinary(data); checkString(algorithm, 'algorithm'); publicKeys = toArray(publicKeys); passwords = toArray(passwords); +export function encryptSessionKey({ data, algorithm, aeadAlgorithm, publicKeys, passwords, wildcard=false, date=new Date(), toUserIds=[] }) { + checkBinary(data); checkString(algorithm, 'algorithm'); publicKeys = toArray(publicKeys); passwords = toArray(passwords); toUserIds = toArray(toUserIds); if (asyncProxy) { // use web worker if available - return asyncProxy.delegate('encryptSessionKey', { data, algorithm, aeadAlgorithm, publicKeys, passwords, wildcard, date, toUserId }); + return asyncProxy.delegate('encryptSessionKey', { data, algorithm, aeadAlgorithm, publicKeys, passwords, wildcard, date, toUserIds }); } return Promise.resolve().then(async function() { - return { message: await messageLib.encryptSessionKey(data, algorithm, aeadAlgorithm, publicKeys, passwords, wildcard, date, toUserId) }; + return { message: await messageLib.encryptSessionKey(data, algorithm, aeadAlgorithm, publicKeys, passwords, wildcard, date, toUserIds) }; }).catch(onError.bind(null, 'Error encrypting session key')); } diff --git a/test/general/key.js b/test/general/key.js index a2ce51a3..3501b8a6 100644 --- a/test/general/key.js +++ b/test/general/key.js @@ -2271,9 +2271,9 @@ VYGdb3eNlV8CfoEC publicKey.users[0].selfCertifications[0].isPrimaryUserID = true; // Set second user to prefer aes128. We will select this user. publicKey.users[1].selfCertifications[0].preferredSymmetricAlgorithms = [openpgp.enums.symmetric.aes128]; - const encrypted = await openpgp.encrypt({message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, toUserId: {name: 'Test User', email: 'b@c.com'}, armor: false}); + const encrypted = await openpgp.encrypt({message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, toUserIds: {name: 'Test User', email: 'b@c.com'}, armor: false}); expect(encrypted.message.packets[0].sessionKeyAlgorithm).to.equal('aes128'); - await expect(openpgp.encrypt({message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, toUserId: {name: 'Test User', email: 'c@c.com'}, armor: false})).to.be.rejectedWith('Could not find user that matches that user ID'); + await expect(openpgp.encrypt({message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, toUserIds: {name: 'Test User', email: 'c@c.com'}, armor: false})).to.be.rejectedWith('Could not find user that matches that user ID'); }); it('Sign - specific user', async function() { @@ -2289,11 +2289,11 @@ VYGdb3eNlV8CfoEC privateKey.users[0].userId.parse('Test User '); // Set second user to prefer aes128. We will select this user. privateKey.users[1].selfCertifications[0].preferredHashAlgorithms = [openpgp.enums.hash.sha512]; - const signed = await openpgp.sign({message: openpgp.cleartext.fromText('hello'), privateKeys: privateKey, fromUserId: {name: 'Test McTestington', email: 'test@example.com'}, armor: false}); + const signed = await openpgp.sign({message: openpgp.cleartext.fromText('hello'), privateKeys: privateKey, fromUserIds: {name: 'Test McTestington', email: 'test@example.com'}, armor: false}); expect(signed.message.signature.packets[0].hashAlgorithm).to.equal(openpgp.enums.hash.sha512); - const encrypted = await openpgp.encrypt({message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, fromUserId: {name: 'Test McTestington', email: 'test@example.com'}, detached: true, armor: false}); + const encrypted = await openpgp.encrypt({message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, fromUserIds: {name: 'Test McTestington', email: 'test@example.com'}, detached: true, armor: false}); expect(encrypted.signature.packets[0].hashAlgorithm).to.equal(openpgp.enums.hash.sha512); - await expect(openpgp.encrypt({message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, fromUserId: {name: 'Not Test McTestington', email: 'test@example.com'}, detached: true, armor: false})).to.be.rejectedWith('Could not find user that matches that user ID'); + await expect(openpgp.encrypt({message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, fromUserIds: {name: 'Not Test McTestington', email: 'test@example.com'}, detached: true, armor: false})).to.be.rejectedWith('Could not find user that matches that user ID'); }); it('Find a valid subkey binding signature among many invalid ones', async function() { From d74a2af4d33821cba233285df1731759d16aa358 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Fri, 14 Dec 2018 16:38:49 +0100 Subject: [PATCH 03/22] Return primary key expiry based on userId param in getExpirationTime --- src/key.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/key.js b/src/key.js index d8ce9a84..96dd8106 100644 --- a/src/key.js +++ b/src/key.js @@ -501,7 +501,7 @@ Key.prototype.verifyPrimaryKey = async function(date=new Date(), userId={}) { * @async */ Key.prototype.getExpirationTime = async function(capabilities, keyId, userId) { - const primaryUser = await this.getPrimaryUser(null); + const primaryUser = await this.getPrimaryUser(null, userId); if (!primaryUser) { throw new Error('Could not find primary user'); } From cb3f6447084672610f0132cc8f0a2dddcbf2c501 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Tue, 11 Dec 2018 15:05:55 +0100 Subject: [PATCH 04/22] Validate ECC public keys --- src/crypto/public_key/elliptic/curves.js | 9 ++++- test/crypto/elliptic.js | 42 ++++++++++++++++++++---- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/crypto/public_key/elliptic/curves.js b/src/crypto/public_key/elliptic/curves.js index f19f6662..2186ea9c 100644 --- a/src/crypto/public_key/elliptic/curves.js +++ b/src/crypto/public_key/elliptic/curves.js @@ -177,7 +177,14 @@ Curve.prototype.keyFromSecret = function (secret) { // Only for ed25519 }; Curve.prototype.keyFromPublic = function (pub) { - return new KeyPair(this, { pub: pub }); + const keyPair = new KeyPair(this, { pub: pub }); + if ( + this.keyType === enums.publicKey.ecdsa && + keyPair.keyPair.validate().result !== true + ) { + throw new Error('Invalid elliptic public key'); + } + return keyPair; }; Curve.prototype.genKeyPair = async function () { diff --git a/test/crypto/elliptic.js b/test/crypto/elliptic.js index 9e1b72c8..f4852b89 100644 --- a/test/crypto/elliptic.js +++ b/test/crypto/elliptic.js @@ -223,7 +223,17 @@ describe('Elliptic Curve Cryptography', async function () { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]); - const secp256k1_dummy_point = new Uint8Array([ + const secp256k1_point = new Uint8Array([ + 0x04, + 0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, + 0x55, 0xA0, 0x62, 0x95, 0xCE, 0x87, 0x0B, 0x07, + 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9, + 0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98, + 0x48, 0x3A, 0xDA, 0x77, 0x26, 0xA3, 0xC4, 0x65, + 0x5D, 0xA4, 0xFB, 0xFC, 0x0E, 0x11, 0x08, 0xA8, + 0xFD, 0x17, 0xB4, 0x48, 0xA6, 0x85, 0x54, 0x19, + 0x9C, 0x47, 0xD0, 0x8F, 0xFB, 0x10, 0xD4, 0xB8]); + const secp256k1_invalid_point = new Uint8Array([ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -233,7 +243,7 @@ describe('Elliptic Curve Cryptography', async function () { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]); - const secp256k1_invalid_point = new Uint8Array([ + const secp256k1_invalid_point_format = new Uint8Array([ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -255,13 +265,18 @@ describe('Elliptic Curve Cryptography', async function () { 'secp256k1', 8, [], [], [], [] )).to.be.rejectedWith(Error, /Unknown point format/), expect(verify_signature( - 'secp256k1', 8, [], [], [], secp256k1_invalid_point + 'secp256k1', 8, [], [], [], secp256k1_invalid_point_format )).to.be.rejectedWith(Error, /Unknown point format/) ]); }); + it('Invalid point', function (done) { + expect(verify_signature( + 'secp256k1', 8, [], [], [], secp256k1_invalid_point + )).to.be.rejectedWith(Error, /Invalid elliptic public key/).notify(done); + }); it('Invalid signature', function (done) { expect(verify_signature( - 'secp256k1', 8, [], [], [], secp256k1_dummy_point + 'secp256k1', 8, [], [], [], secp256k1_point )).to.eventually.be.false.notify(done); }); @@ -331,11 +346,21 @@ describe('Elliptic Curve Cryptography', async function () { ]); const secp256k1_point = new Uint8Array([ 0x04, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, + 0x55, 0xA0, 0x62, 0x95, 0xCE, 0x87, 0x0B, 0x07, + 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9, + 0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98, + 0x48, 0x3A, 0xDA, 0x77, 0x26, 0xA3, 0xC4, 0x65, + 0x5D, 0xA4, 0xFB, 0xFC, 0x0E, 0x11, 0x08, 0xA8, + 0xFD, 0x17, 0xB4, 0x48, 0xA6, 0x85, 0x54, 0x19, + 0x9C, 0x47, 0xD0, 0x8F, 0xFB, 0x10, 0xD4, 0xB8]); + const secp256k1_invalid_point = new Uint8Array([ + 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]); @@ -354,6 +379,11 @@ describe('Elliptic Curve Cryptography', async function () { 'secp256k1', 2, 7, [], [], [], [] )).to.be.rejectedWith(Error, /Unknown point format/).notify(done); }); + it('Invalid elliptic public key', function (done) { + expect(decrypt_message( + 'secp256k1', 2, 7, secp256k1_value, secp256k1_invalid_point, secp256k1_data, [] + )).to.be.rejectedWith(Error, /Invalid elliptic public key/).notify(done); + }); it('Invalid key data integrity', function (done) { expect(decrypt_message( 'secp256k1', 2, 7, secp256k1_value, secp256k1_point, secp256k1_data, [] From 19be0831b92155d79d7cd404e182e5822405ce2d Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Fri, 14 Dec 2018 17:48:29 +0100 Subject: [PATCH 05/22] Add userIds parameter to signPrimaryUser and verifyPrimaryUser --- src/key.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/key.js b/src/key.js index 96dd8106..20df7a3c 100644 --- a/src/key.js +++ b/src/key.js @@ -290,7 +290,7 @@ async function getLatestValidSignature(signatures, primaryKey, signatureType, da /** * Returns last created key or key by given keyId that is available for signing and verification * @param {module:type/keyid} keyId, optional - * @param {Date} date use the given date for verification instead of the current time + * @param {Date} date (optional) use the given date for verification instead of the current time * @param {Object} userId, optional user ID * @returns {Promise} key or null if no signing key has been found * @async @@ -528,7 +528,7 @@ Key.prototype.getExpirationTime = async function(capabilities, keyId, userId) { * Returns primary user and most significant (latest valid) self signature * - if multiple primary users exist, returns the one with the latest self signature * - otherwise, returns the user with the latest self signature - * @param {Date} date use the given date for verification instead of the current time + * @param {Date} date (optional) use the given date for verification instead of the current time * @param {Object} userId (optional) user ID to get instead of the primary user, if it exists * @returns {Promise<{user: module:key.User, * selfCertification: module:packet.Signature}>} The primary user and the self signature @@ -739,11 +739,13 @@ Key.prototype.applyRevocationCertificate = async function(revocationCertificate) /** * Signs primary user of key * @param {Array} privateKey decrypted private keys for signing + * @param {Date} date (optional) use the given date for verification instead of the current time + * @param {Object} userId (optional) user ID to get instead of the primary user, if it exists * @returns {Promise} new public key with new certificate signature * @async */ -Key.prototype.signPrimaryUser = async function(privateKeys) { - const { index, user } = await this.getPrimaryUser() || {}; +Key.prototype.signPrimaryUser = async function(privateKeys, date, userId) { + const { index, user } = await this.getPrimaryUser(date, userId) || {}; if (!user) { throw new Error('Could not find primary user'); } @@ -773,13 +775,15 @@ Key.prototype.signAllUsers = async function(privateKeys) { * - if no arguments are given, verifies the self certificates; * - otherwise, verifies all certificates signed with given keys. * @param {Array} keys array of keys to verify certificate signatures + * @param {Date} date (optional) use the given date for verification instead of the current time + * @param {Object} userId (optional) user ID to get instead of the primary user, if it exists * @returns {Promise>} List of signer's keyid and validity of signature * @async */ -Key.prototype.verifyPrimaryUser = async function(keys) { +Key.prototype.verifyPrimaryUser = async function(keys, date, userId) { const primaryKey = this.keyPacket; - const { user } = await this.getPrimaryUser() || {}; + const { user } = await this.getPrimaryUser(date, userId) || {}; if (!user) { throw new Error('Could not find primary user'); } From cd61531b41f5de3ecd1f43f00ffa85e74d212484 Mon Sep 17 00:00:00 2001 From: Meitar M Date: Sat, 15 Dec 2018 15:14:40 -0500 Subject: [PATCH 06/22] Fix revocation example in README, use `revocationCertificate`. There is no longer any `revocationSignature` member of OpenPGP.js `key` objects, and the `options` object passed to the `revokeKey()` method no longer accepts a `revocationSignature` member, either. These have been changed to `revocationCertificate`, so this commit updates the examples that use this part of the API to reflect the current implementation. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d760c924..9ba75db4 100644 --- a/README.md +++ b/README.md @@ -379,17 +379,17 @@ var options = { openpgp.generateKey(options).then(function(key) { var privkey = key.privateKeyArmored; // '-----BEGIN PGP PRIVATE KEY BLOCK ... ' var pubkey = key.publicKeyArmored; // '-----BEGIN PGP PUBLIC KEY BLOCK ... ' - var revocationSignature = key.revocationSignature; // '-----BEGIN PGP PUBLIC KEY BLOCK ... ' + var revocationCertificate = key.revocationCertificate; // '-----BEGIN PGP PUBLIC KEY BLOCK ... ' }); ``` #### Revoke a key -Using a revocation signature: +Using a revocation certificate: ```js var options = { key: openpgp.key.readArmored(pubkey).keys[0], - revocationSignature: revocationSignature + revocationCertificate: revocationCertificate }; ``` From 3b9676f2e9a4984d7607a8552d884dd2365478b2 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Tue, 11 Dec 2018 17:49:49 +0100 Subject: [PATCH 07/22] Reject messages encrypted with a symmetric algo not in preferred algos --- src/message.js | 48 +++++++++++++++-------- test/security/index.js | 1 + test/security/preferred_algo_mismatch.js | 49 ++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 17 deletions(-) create mode 100644 test/security/preferred_algo_mismatch.js diff --git a/src/message.js b/src/message.js index d8818616..b40a11c6 100644 --- a/src/message.js +++ b/src/message.js @@ -153,6 +153,7 @@ Message.prototype.decrypt = async function(privateKeys, passwords, sessionKeys, Message.prototype.decryptSessionKeys = async function(privateKeys, passwords) { let keyPackets = []; + let exception; if (passwords) { const symESKeyPacketlist = this.packets.filterByTag(enums.packet.symEncryptedSessionKey); if (!symESKeyPacketlist) { @@ -181,23 +182,36 @@ Message.prototype.decryptSessionKeys = async function(privateKeys, passwords) { throw new Error('No public key encrypted session key packet found.'); } await Promise.all(pkESKeyPacketlist.map(async function(keyPacket) { - const privateKeyPackets = new packet.List(); - privateKeys.forEach(privateKey => { - privateKeyPackets.concat(privateKey.getKeys(keyPacket.publicKeyId).map(key => key.keyPacket)); - }); - await Promise.all(privateKeyPackets.map(async function(privateKeyPacket) { - if (!privateKeyPacket) { - return; - } - if (!privateKeyPacket.isDecrypted()) { - throw new Error('Private key is not decrypted.'); - } - try { - await keyPacket.decrypt(privateKeyPacket); - keyPackets.push(keyPacket); - } catch (err) { - util.print_debug_error(err); + await Promise.all(privateKeys.map(async function(privateKey) { + const primaryUser = await privateKey.getPrimaryUser(); // TODO: Pass userId from somewhere. + let algos = [ + enums.symmetric.aes256, // Old OpenPGP.js default fallback + enums.symmetric.aes128, // RFC4880bis fallback + enums.symmetric.tripledes // RFC4880 fallback + ]; + if (primaryUser && primaryUser.selfCertification.preferredSymmetricAlgorithms) { + algos = algos.concat(primaryUser.selfCertification.preferredSymmetricAlgorithms); } + + const privateKeyPackets = privateKey.getKeys(keyPacket.publicKeyId).map(key => key.keyPacket); + await Promise.all(privateKeyPackets.map(async function(privateKeyPacket) { + if (!privateKeyPacket) { + return; + } + if (!privateKeyPacket.isDecrypted()) { + throw new Error('Private key is not decrypted.'); + } + try { + await keyPacket.decrypt(privateKeyPacket); + if (!algos.includes(enums.write(enums.symmetric, keyPacket.sessionKeyAlgorithm))) { + throw new Error('A non-preferred symmetric algorithm was used.'); + } + keyPackets.push(keyPacket); + } catch (err) { + util.print_debug_error(err); + exception = err; + } + })); })); stream.cancel(keyPacket.encrypted); // Don't keep copy of encrypted data in memory. keyPacket.encrypted = null; @@ -222,7 +236,7 @@ Message.prototype.decryptSessionKeys = async function(privateKeys, passwords) { return keyPackets.map(packet => ({ data: packet.sessionKey, algorithm: packet.sessionKeyAlgorithm })); } - throw new Error('Session key decryption failed.'); + throw exception || new Error('Session key decryption failed.'); }; /** diff --git a/test/security/index.js b/test/security/index.js index 5ca983e1..d515963f 100644 --- a/test/security/index.js +++ b/test/security/index.js @@ -2,4 +2,5 @@ describe('Security', function () { require('./message_signature_bypass'); require('./unsigned_subpackets'); require('./subkey_trust'); + require('./preferred_algo_mismatch'); }); diff --git a/test/security/preferred_algo_mismatch.js b/test/security/preferred_algo_mismatch.js new file mode 100644 index 00000000..74cb644d --- /dev/null +++ b/test/security/preferred_algo_mismatch.js @@ -0,0 +1,49 @@ +const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : require('../../dist/openpgp'); + +const { key, cleartext, enums, packet: { List, Signature } } = openpgp; + +const chai = require('chai'); +chai.use(require('chai-as-promised')); + +const expect = chai.expect; + +const messageArmor = `-----BEGIN PGP MESSAGE----- +Version: OpenPGP.js VERSION +Comment: https://openpgpjs.org + +wYwD3eCUoDfD5yoBA/4rhxaaw+E2ma+LdmLVDBRqxglhIgnM6EgNxzf8J5Ty +ecQBLOf3BjjC72mJ9RqMmvQ16aG4EXXDAUmCP1sBLj+b7V1t4keeyTn+2nXu +7Wgu2yq9CvZahRLsayt3y8VodZwTi3K/+gmx1f8EhdLPONQgGkYAqZ3Tyyd0 +KF3pknplvdI+AXqRs0n2vVr89oIdmQPJFSHEoJtltbSNxhwShdzDvOor2FKJ +vhGWNysion2aBg0fIbgDUKeXKp8YN44LDTk= +=RYrv +-----END PGP MESSAGE-----`; + +const privateKeyArmor = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: OpenPGP.js VERSION +Comment: https://openpgpjs.org + +xcEYBFvbA08BBACl8U5VEY7TNq1PAzwU0f3soqNfFpKtNFt+LY3q5sasouJ7 +zE4/TPYrAaAoM5/yOjfvbfJP5myBUCtkdtIRIY2iP2uOPhfaly8U+zH25Qnq +bmgLfvu4ytPAPrKZF8f98cIeJmHD81SPRgDMuB2U9wwgN6stgVBBCUS+lu/L +/4pyuwARAQABAAP+Jz6BIvcrCuJ0bCo8rEPZRHxWHKfO+m1Wcem+FV6Mf8lp +vJNdsfS2hwc0ZC2JVxTTo6kh1CmPYamfCXxcQ7bmsqWkkq/6d17zKE6BqE/n +spW7qTnZ14VPC0iPrBetAWRlCk+m0cEkRnBxqPOVBNd6VPcZyM7GUOGf/kiw +AsHf+nECANkN1tsqLJ3+pH2MRouF7yHevQ9OGg+rwetBO2a8avvcsAuoFjVw +hERpkHv/PQjKAE7KcBzqLLad0QbrQW+sUcMCAMO3to0tSBJrNA9YkrViT76I +siiahSB/FC9JlO+T46xncRleZeBHc0zoVAP+W/PjRo2CR4ydtwjjalrxcKX9 +E6kCALfDyhkRNzZLxg2XOGDWyeXqe80VWnMBqTZK73nZlACRcUoXuvjRc15Q +K2c3/nZ7LMyQidj8XsTq4sz1zfWz4Cejj80cVGVzdCBVc2VyIDx0ZXN0QGV4 +YW1wbGUuY29tPsK1BBABCAApBQJb2wNPAgsJCRDd4JSgN8PnKgQVCAoCAxYC +AQIZAQIbDwIeBwMiAQIAABGjA/4y6HjthMU03AC3bIUyYPv6EJc9czS5wysa +5rKuNhzka0Klb0INcX1YZ8usPIIl1rtr8f8xxCdSiqhJpn+uqIPVROHi0XLG +ej3gSJM5i1lIt1jxyJlvVI/7W0vzuE85KDzGXQFNFyO/T9D7T1SDHnS8KbBh +EnxUPL95HuMKoVkf4w== +=oopr +-----END PGP PRIVATE KEY BLOCK-----`; + +it('Does not accept message encrypted with algo not mentioned in preferred algorithms', async function() { + const message = await openpgp.message.readArmored(messageArmor); + const privKey = (await openpgp.key.readArmored(privateKeyArmor)).keys[0]; + await expect(openpgp.decrypt({ message, privateKeys: [privKey] })).to.be.rejectedWith('A non-preferred symmetric algorithm was used.'); +}); From 8720adcf65ee6ec653757329208b2e89d00707f0 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Tue, 11 Dec 2018 18:11:10 +0100 Subject: [PATCH 08/22] Check signature public key algorithm against issuer key algorithm --- src/packet/public_key.js | 5 +++++ src/packet/public_key_encrypted_session_key.js | 3 +++ src/packet/signature.js | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/src/packet/public_key.js b/src/packet/public_key.js index ca43ea05..2d6c6895 100644 --- a/src/packet/public_key.js +++ b/src/packet/public_key.js @@ -62,6 +62,11 @@ function PublicKey(date=new Date()) { * @type {Date} */ this.created = util.normalizeDate(date); + /** + * Public key algorithm. + * @type {String} + */ + this.algorithm = null; /** * Algorithm specific params * @type {Array} diff --git a/src/packet/public_key_encrypted_session_key.js b/src/packet/public_key_encrypted_session_key.js index 260497da..bf91be5e 100644 --- a/src/packet/public_key_encrypted_session_key.js +++ b/src/packet/public_key_encrypted_session_key.js @@ -52,7 +52,10 @@ function PublicKeyEncryptedSessionKey() { this.version = 3; this.publicKeyId = new type_keyid(); + this.publicKeyAlgorithm = null; + this.sessionKey = null; + this.sessionKeyAlgorithm = null; /** @type {Array} */ this.encrypted = []; diff --git a/src/packet/signature.js b/src/packet/signature.js index 0faf2875..bd78c8f3 100644 --- a/src/packet/signature.js +++ b/src/packet/signature.js @@ -666,6 +666,10 @@ Signature.prototype.verify = async function (key, signatureType, data) { const publicKeyAlgorithm = enums.write(enums.publicKey, this.publicKeyAlgorithm); const hashAlgorithm = enums.write(enums.hash, this.hashAlgorithm); + if (publicKeyAlgorithm !== enums.write(enums.publicKey, key.algorithm)) { + throw new Error('Public key algorithm used to sign signature does not match issuer key algorithm.'); + } + let toHash; let hash; if (this.hashed) { From e727097bb068e348fceba31a59cd1d660b403600 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Tue, 11 Dec 2018 18:40:06 +0100 Subject: [PATCH 09/22] Always look at the same literal data packet in getText() and verify() --- src/message.js | 9 ++++++--- src/packet/packetlist.js | 18 ++---------------- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/message.js b/src/message.js index b40a11c6..5bdff7ca 100644 --- a/src/message.js +++ b/src/message.js @@ -244,7 +244,8 @@ Message.prototype.decryptSessionKeys = async function(privateKeys, passwords) { * @returns {(Uint8Array|null)} literal body of the message as Uint8Array */ Message.prototype.getLiteralData = function() { - const literal = this.packets.findPacket(enums.packet.literal); + const msg = this.unwrapCompressed(); + const literal = msg.packets.findPacket(enums.packet.literal); return (literal && literal.getBytes()) || null; }; @@ -253,7 +254,8 @@ Message.prototype.getLiteralData = function() { * @returns {(String|null)} filename of literal data packet as string */ Message.prototype.getFilename = function() { - const literal = this.packets.findPacket(enums.packet.literal); + const msg = this.unwrapCompressed(); + const literal = msg.packets.findPacket(enums.packet.literal); return (literal && literal.getFilename()) || null; }; @@ -262,7 +264,8 @@ Message.prototype.getFilename = function() { * @returns {(String|null)} literal body of the message interpreted as text */ Message.prototype.getText = function() { - const literal = this.packets.findPacket(enums.packet.literal); + const msg = this.unwrapCompressed(); + const literal = msg.packets.findPacket(enums.packet.literal); if (literal) { return literal.getText(); } diff --git a/src/packet/packetlist.js b/src/packet/packetlist.js index b56c2cd2..03f8c7da 100644 --- a/src/packet/packetlist.js +++ b/src/packet/packetlist.js @@ -168,24 +168,10 @@ List.prototype.filterByTag = function (...args) { /** * Traverses packet tree and returns first matching packet * @param {module:enums.packet} type The packet type - * @returns {module:packet/packet|null} + * @returns {module:packet/packet|undefined} */ List.prototype.findPacket = function (type) { - const packetlist = this.filterByTag(type); - if (packetlist.length) { - return packetlist[0]; - } - let found = null; - for (let i = 0; i < this.length; i++) { - if (this[i].packets.length) { - found = this[i].packets.findPacket(type); - if (found) { - return found; - } - } - } - - return null; + return this.find(packet => packet.tag === type); }; /** From 9b83f6fcb2a89d15494e742631b01714a26c231d Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Wed, 12 Dec 2018 17:23:03 +0100 Subject: [PATCH 10/22] Return generic error on PKESK checksum mismatch when decrypting --- src/packet/public_key_encrypted_session_key.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packet/public_key_encrypted_session_key.js b/src/packet/public_key_encrypted_session_key.js index bf91be5e..fc93e430 100644 --- a/src/packet/public_key_encrypted_session_key.js +++ b/src/packet/public_key_encrypted_session_key.js @@ -153,7 +153,7 @@ PublicKeyEncryptedSessionKey.prototype.decrypt = async function (key) { key = util.str_to_Uint8Array(decoded.substring(1, decoded.length - 2)); if (!util.equalsUint8Array(checksum, util.write_checksum(key))) { - throw new Error('Checksum mismatch'); + throw new Error('Decryption error'); } else { this.sessionKey = key; this.sessionKeyAlgorithm = enums.read(enums.symmetric, decoded.charCodeAt(0)); From 06608318d4215ff9320de9630df1848853b803fe Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Wed, 12 Dec 2018 17:48:23 +0100 Subject: [PATCH 11/22] Fix CMAC of the empty string This is currently never called, as EAX always adds a prefix to the CMAC'ed message. --- src/crypto/cmac.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crypto/cmac.js b/src/crypto/cmac.js index b6d31ec7..d3675fbd 100644 --- a/src/crypto/cmac.js +++ b/src/crypto/cmac.js @@ -48,7 +48,7 @@ function rightXorMut(data, padding) { function pad(data, padding, padding2) { // if |M| in {n, 2n, 3n, ...} - if (data.length % blockLength === 0) { + if (data.length && data.length % blockLength === 0) { // then return M xor→ B, return rightXorMut(data, padding); } From 926047f0b3e55467f059f90afa85282dde5db812 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Mon, 17 Dec 2018 11:54:25 -0500 Subject: [PATCH 12/22] Default to RFC4880bis-mandated symmetric algos --- src/key.js | 2 +- test/general/key.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/key.js b/src/key.js index b43450df..a7b83c66 100644 --- a/src/key.js +++ b/src/key.js @@ -1690,7 +1690,7 @@ export async function getPreferredHashAlgo(key, keyPacket, date=new Date(), user */ export async function getPreferredAlgo(type, keys, date=new Date(), userId={}) { const prefProperty = type === 'symmetric' ? 'preferredSymmetricAlgorithms' : 'preferredAeadAlgorithms'; - const defaultAlgo = type === 'symmetric' ? config.encryption_cipher : config.aead_mode; + const defaultAlgo = type === 'symmetric' ? enums.symmetric.aes128 : enums.aead.eax; const prioMap = {}; await Promise.all(keys.map(async function(key) { const primaryUser = await key.getPrimaryUser(date, userId); diff --git a/test/general/key.js b/test/general/key.js index a2ce51a3..9734b3aa 100644 --- a/test/general/key.js +++ b/test/general/key.js @@ -2147,14 +2147,14 @@ describe('Key', function() { expect(prefAlgo).to.equal(openpgp.enums.symmetric.aes256); }); - it("getPreferredAlgo('symmetric') - two key - AES128", async function() { + it("getPreferredAlgo('symmetric') - two key - AES192", async function() { const keys = (await openpgp.key.readArmored(twoKeys)).keys; const key1 = keys[0]; const key2 = keys[1]; const primaryUser = await key2.getPrimaryUser(); - primaryUser.selfCertification.preferredSymmetricAlgorithms = [6,7,3]; + primaryUser.selfCertification.preferredSymmetricAlgorithms = [6,8,3]; const prefAlgo = await openpgp.key.getPreferredAlgo('symmetric', [key1, key2]); - expect(prefAlgo).to.equal(openpgp.enums.symmetric.aes128); + expect(prefAlgo).to.equal(openpgp.enums.symmetric.aes192); }); it("getPreferredAlgo('symmetric') - two key - one without pref", async function() { @@ -2164,7 +2164,7 @@ describe('Key', function() { const primaryUser = await key2.getPrimaryUser(); primaryUser.selfCertification.preferredSymmetricAlgorithms = null; const prefAlgo = await openpgp.key.getPreferredAlgo('symmetric', [key1, key2]); - expect(prefAlgo).to.equal(openpgp.config.encryption_cipher); + expect(prefAlgo).to.equal(openpgp.enums.symmetric.aes128); }); it("getPreferredAlgo('aead') - one key - OCB", async function() { @@ -2188,7 +2188,7 @@ describe('Key', function() { const primaryUser2 = await key2.getPrimaryUser(); primaryUser2.selfCertification.features = [7]; // Monkey-patch AEAD feature flag const prefAlgo = await openpgp.key.getPreferredAlgo('aead', [key1, key2]); - expect(prefAlgo).to.equal(openpgp.config.aead_mode); + expect(prefAlgo).to.equal(openpgp.enums.aead.eax); const supported = await openpgp.key.isAeadSupported([key1, key2]); expect(supported).to.be.true; }); @@ -2201,7 +2201,7 @@ describe('Key', function() { primaryUser.selfCertification.features = [7]; // Monkey-patch AEAD feature flag primaryUser.selfCertification.preferredAeadAlgorithms = [2,1]; const prefAlgo = await openpgp.key.getPreferredAlgo('aead', [key1, key2]); - expect(prefAlgo).to.equal(openpgp.config.aead_mode); + expect(prefAlgo).to.equal(openpgp.enums.aead.eax); const supported = await openpgp.key.isAeadSupported([key1, key2]); expect(supported).to.be.false; }); From 804e91140a83cdc1e2d8477b690a756162fd8102 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Mon, 17 Dec 2018 12:12:01 -0500 Subject: [PATCH 13/22] Add config values to preferred algorithms --- src/key.js | 53 ++++++++++++++++++++++++++++++--------------- test/general/key.js | 43 ++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 18 deletions(-) diff --git a/src/key.js b/src/key.js index a7b83c66..7b98420f 100644 --- a/src/key.js +++ b/src/key.js @@ -1451,6 +1451,19 @@ async function wrapKeyObject(secretKeyPacket, secretSubkeyPackets, options) { packetlist.push(secretKeyPacket); await Promise.all(options.userIds.map(async function(userId, index) { + function createdPreferredAlgos(algos, configAlgo) { + if (configAlgo) { // Not `uncompressed` / `plaintext` + const configIndex = algos.indexOf(configAlgo); + if (configIndex >= 1) { // If it is included and not in first place, + algos.splice(configIndex, 1); // remove it. + } + if (configIndex !== 0) { // If it was included and not in first place, or wasn't included, + algos.unshift(configAlgo); // add it to the front. + } + } + return algos; + } + const userIdPacket = new packet.Userid(); userIdPacket.format(userId); @@ -1462,26 +1475,30 @@ async function wrapKeyObject(secretKeyPacket, secretSubkeyPackets, options) { signaturePacket.publicKeyAlgorithm = secretKeyPacket.algorithm; signaturePacket.hashAlgorithm = await getPreferredHashAlgo(null, secretKeyPacket); signaturePacket.keyFlags = [enums.keyFlags.certify_keys | enums.keyFlags.sign_data]; - signaturePacket.preferredSymmetricAlgorithms = []; - // prefer aes256, aes128, then aes192 (no WebCrypto support: https://www.chromium.org/blink/webcrypto#TOC-AES-support) - signaturePacket.preferredSymmetricAlgorithms.push(enums.symmetric.aes256); - signaturePacket.preferredSymmetricAlgorithms.push(enums.symmetric.aes128); - signaturePacket.preferredSymmetricAlgorithms.push(enums.symmetric.aes192); - signaturePacket.preferredSymmetricAlgorithms.push(enums.symmetric.cast5); - signaturePacket.preferredSymmetricAlgorithms.push(enums.symmetric.tripledes); + signaturePacket.preferredSymmetricAlgorithms = createdPreferredAlgos([ + // prefer aes256, aes128, then aes192 (no WebCrypto support: https://www.chromium.org/blink/webcrypto#TOC-AES-support) + enums.symmetric.aes256, + enums.symmetric.aes128, + enums.symmetric.aes192, + enums.symmetric.cast5, + enums.symmetric.tripledes + ], config.encryption_cipher); if (config.aead_protect && config.aead_protect_version === 4) { - signaturePacket.preferredAeadAlgorithms = []; - signaturePacket.preferredAeadAlgorithms.push(enums.aead.eax); - signaturePacket.preferredAeadAlgorithms.push(enums.aead.ocb); + signaturePacket.preferredAeadAlgorithms = createdPreferredAlgos([ + enums.aead.eax, + enums.aead.ocb + ], config.aead_mode); } - signaturePacket.preferredHashAlgorithms = []; - // prefer fast asm.js implementations (SHA-256). SHA-1 will not be secure much longer...move to bottom of list - signaturePacket.preferredHashAlgorithms.push(enums.hash.sha256); - signaturePacket.preferredHashAlgorithms.push(enums.hash.sha512); - signaturePacket.preferredHashAlgorithms.push(enums.hash.sha1); - signaturePacket.preferredCompressionAlgorithms = []; - signaturePacket.preferredCompressionAlgorithms.push(enums.compression.zlib); - signaturePacket.preferredCompressionAlgorithms.push(enums.compression.zip); + signaturePacket.preferredHashAlgorithms = createdPreferredAlgos([ + // prefer fast asm.js implementations (SHA-256). SHA-1 will not be secure much longer...move to bottom of list + enums.hash.sha256, + enums.hash.sha512, + enums.hash.sha1 + ], config.prefer_hash_algorithm); + signaturePacket.preferredCompressionAlgorithms = createdPreferredAlgos([ + enums.compression.zlib, + enums.compression.zip + ], config.compression); if (index === 0) { signaturePacket.isPrimaryUserID = true; } diff --git a/test/general/key.js b/test/general/key.js index 9734b3aa..bc84ba4f 100644 --- a/test/general/key.js +++ b/test/general/key.js @@ -1357,6 +1357,49 @@ function versionSpecificTests() { }); }); + it('Preferences of generated key - with config values', async function() { + const encryption_cipherVal = openpgp.config.encryption_cipher; + const prefer_hash_algorithmVal = openpgp.config.prefer_hash_algorithm; + const compressionVal = openpgp.config.compression; + const aead_modeVal = openpgp.config.aead_mode; + openpgp.config.encryption_cipher = openpgp.enums.symmetric.aes192; + openpgp.config.prefer_hash_algorithm = openpgp.enums.hash.sha384; + openpgp.config.compression = openpgp.enums.compression.zlib; + openpgp.config.aead_mode = openpgp.enums.aead.experimental_gcm; + + const testPref = function(key) { + // key flags + const keyFlags = openpgp.enums.keyFlags; + expect(key.users[0].selfCertifications[0].keyFlags[0] & keyFlags.certify_keys).to.equal(keyFlags.certify_keys); + expect(key.users[0].selfCertifications[0].keyFlags[0] & keyFlags.sign_data).to.equal(keyFlags.sign_data); + expect(key.subKeys[0].bindingSignatures[0].keyFlags[0] & keyFlags.encrypt_communication).to.equal(keyFlags.encrypt_communication); + expect(key.subKeys[0].bindingSignatures[0].keyFlags[0] & keyFlags.encrypt_storage).to.equal(keyFlags.encrypt_storage); + const sym = openpgp.enums.symmetric; + expect(key.users[0].selfCertifications[0].preferredSymmetricAlgorithms).to.eql([sym.aes192, sym.aes256, sym.aes128, sym.cast5, sym.tripledes]); + if (openpgp.config.aead_protect && openpgp.config.aead_protect_version === 4) { + const aead = openpgp.enums.aead; + expect(key.users[0].selfCertifications[0].preferredAeadAlgorithms).to.eql([aead.experimental_gcm, aead.eax, aead.ocb]); + } + const hash = openpgp.enums.hash; + expect(key.users[0].selfCertifications[0].preferredHashAlgorithms).to.eql([hash.sha384, hash.sha256, hash.sha512, hash.sha1]); + const compr = openpgp.enums.compression; + expect(key.users[0].selfCertifications[0].preferredCompressionAlgorithms).to.eql([compr.zlib, compr.zip]); + expect(key.users[0].selfCertifications[0].features).to.eql(openpgp.config.aead_protect && openpgp.config.aead_protect_version === 4 ? [7] : [1]); + }; + const opt = {numBits: 512, userIds: 'test ', passphrase: 'hello'}; + if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys + try { + const key = await openpgp.generateKey(opt); + testPref(key.key); + testPref((await openpgp.key.readArmored(key.publicKeyArmored)).keys[0]); + } finally { + openpgp.config.encryption_cipher = encryption_cipherVal; + openpgp.config.prefer_hash_algorithm = prefer_hash_algorithmVal; + openpgp.config.compression = compressionVal; + openpgp.config.aead_mode = aead_modeVal; + } + }); + it('Generated key is not unlocked by default', function() { const opt = {numBits: 512, userIds: 'test ', passphrase: '123'}; if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys From f0f9a5c2a4f561abd88240166f6351072af8df09 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Mon, 17 Dec 2018 13:30:44 -0500 Subject: [PATCH 14/22] Fix key generation tests on Node The Node tests set the key bit size to 512, which is not big enough to sign a SHA384 hash + header. --- test/general/key.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/general/key.js b/test/general/key.js index bc84ba4f..71c7789a 100644 --- a/test/general/key.js +++ b/test/general/key.js @@ -1363,7 +1363,7 @@ function versionSpecificTests() { const compressionVal = openpgp.config.compression; const aead_modeVal = openpgp.config.aead_mode; openpgp.config.encryption_cipher = openpgp.enums.symmetric.aes192; - openpgp.config.prefer_hash_algorithm = openpgp.enums.hash.sha384; + openpgp.config.prefer_hash_algorithm = openpgp.enums.hash.sha224; openpgp.config.compression = openpgp.enums.compression.zlib; openpgp.config.aead_mode = openpgp.enums.aead.experimental_gcm; @@ -1381,7 +1381,7 @@ function versionSpecificTests() { expect(key.users[0].selfCertifications[0].preferredAeadAlgorithms).to.eql([aead.experimental_gcm, aead.eax, aead.ocb]); } const hash = openpgp.enums.hash; - expect(key.users[0].selfCertifications[0].preferredHashAlgorithms).to.eql([hash.sha384, hash.sha256, hash.sha512, hash.sha1]); + expect(key.users[0].selfCertifications[0].preferredHashAlgorithms).to.eql([hash.sha224, hash.sha256, hash.sha512, hash.sha1]); const compr = openpgp.enums.compression; expect(key.users[0].selfCertifications[0].preferredCompressionAlgorithms).to.eql([compr.zlib, compr.zip]); expect(key.users[0].selfCertifications[0].features).to.eql(openpgp.config.aead_protect && openpgp.config.aead_protect_version === 4 ? [7] : [1]); From d24bdd5fa21b501b2fd3defacab5af24c63dd322 Mon Sep 17 00:00:00 2001 From: Sanjana Rajan Date: Mon, 17 Dec 2018 19:44:08 +0100 Subject: [PATCH 15/22] Release new version --- bower.json | 2 +- dist/compat/openpgp.js | 1392 ++++++++++++++++------------- dist/compat/openpgp.min.js | 4 +- dist/compat/openpgp.worker.min.js | 2 +- dist/openpgp.js | 563 ++++++------ dist/openpgp.min.js | 4 +- dist/openpgp.worker.min.js | 2 +- npm-shrinkwrap.json | 2 +- package.json | 2 +- 9 files changed, 1040 insertions(+), 933 deletions(-) diff --git a/bower.json b/bower.json index 8ac58877..eed4c6c7 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "openpgp", - "version": "4.2.2", + "version": "4.3.0", "license": "LGPL-3.0+", "homepage": "https://openpgpjs.org/", "authors": [ diff --git a/dist/compat/openpgp.js b/dist/compat/openpgp.js index d69a80b8..02b5343f 100644 --- a/dist/compat/openpgp.js +++ b/dist/compat/openpgp.js @@ -25583,6 +25583,8 @@ if (hadRuntime) { ); },{}],329:[function(_dereq_,module,exports){ +'use strict'; + /* node-bzip - a pure-javascript Node.JS module for decoding bzip2 data @@ -25615,14 +25617,14 @@ Robert Sedgewick, and Jon L. Bentley. var BITMASK = [0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF]; // offset in bytes -var BitReader = function(stream) { +var BitReader = function BitReader(stream) { this.stream = stream; this.bitOffset = 0; this.curByte = 0; this.hasByte = false; }; -BitReader.prototype._ensureByte = function() { +BitReader.prototype._ensureByte = function () { if (!this.hasByte) { this.curByte = this.stream.readByte(); this.hasByte = true; @@ -25630,7 +25632,7 @@ BitReader.prototype._ensureByte = function() { }; // reads bits from the buffer -BitReader.prototype.read = function(bits) { +BitReader.prototype.read = function (bits) { var result = 0; while (bits > 0) { this._ensureByte(); @@ -25645,7 +25647,7 @@ BitReader.prototype.read = function(bits) { } else { result <<= bits; var shift = remaining - bits; - result |= (this.curByte & (BITMASK[bits] << shift)) >> shift; + result |= (this.curByte & BITMASK[bits] << shift) >> shift; this.bitOffset += bits; bits = 0; } @@ -25654,7 +25656,7 @@ BitReader.prototype.read = function(bits) { }; // seek to an arbitrary point in the buffer (expressed in bits) -BitReader.prototype.seek = function(pos) { +BitReader.prototype.seek = function (pos) { var n_bit = pos % 8; var n_byte = (pos - n_bit) / 8; this.bitOffset = n_bit; @@ -25663,8 +25665,9 @@ BitReader.prototype.seek = function(pos) { }; // reads 6 bytes worth of data using the read method -BitReader.prototype.pi = function() { - var buf = new Uint8Array(6), i; +BitReader.prototype.pi = function () { + var buf = new Uint8Array(6), + i; for (i = 0; i < buf.length; i++) { buf[i] = this.read(8); } @@ -25672,12 +25675,16 @@ BitReader.prototype.pi = function() { }; function bufToHex(buf) { - return Array.prototype.map.call(buf, x => ('00' + x.toString(16)).slice(-2)).join(''); + return Array.prototype.map.call(buf, function (x) { + return ('00' + x.toString(16)).slice(-2); + }).join(''); } module.exports = BitReader; },{}],330:[function(_dereq_,module,exports){ +"use strict"; + /* CRC32, used in Bzip2 implementation. * This is a port of CRC32.java from the jbzip2 implementation at * https://code.google.com/p/jbzip2 @@ -25708,47 +25715,14 @@ module.exports = BitReader; * Copyright (c) 2013 C. Scott Ananian * with the same licensing terms as Matthew Francis' original implementation. */ -module.exports = (function() { +module.exports = function () { /** * A static CRC lookup table */ - var crc32Lookup = new Uint32Array([ - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, - 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, - 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, - 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, - 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, - 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, - 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, - 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, - 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, - 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, - 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, - 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, - 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, - 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, - 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, - 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, - 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, - 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, - 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, - 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, - 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, - 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 - ]); + var crc32Lookup = new Uint32Array([0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4]); - var CRC32 = function() { + var CRC32 = function CRC32() { /** * The current CRC */ @@ -25757,16 +25731,16 @@ module.exports = (function() { /** * @return The current CRC */ - this.getCRC = function() { - return (~crc) >>> 0; // return an unsigned value + this.getCRC = function () { + return ~crc >>> 0; // return an unsigned value }; /** * Update the CRC with a single byte * @param value The value to update the CRC with */ - this.updateCRC = function(value) { - crc = (crc << 8) ^ crc32Lookup[((crc >>> 24) ^ value) & 0xff]; + this.updateCRC = function (value) { + crc = crc << 8 ^ crc32Lookup[(crc >>> 24 ^ value) & 0xff]; }; /** @@ -25774,16 +25748,18 @@ module.exports = (function() { * @param value The value to update the CRC with * @param count The number of bytes */ - this.updateCRCRun = function(value, count) { + this.updateCRCRun = function (value, count) { while (count-- > 0) { - crc = (crc << 8) ^ crc32Lookup[((crc >>> 24) ^ value) & 0xff]; + crc = crc << 8 ^ crc32Lookup[(crc >>> 24 ^ value) & 0xff]; } }; }; return CRC32; -})(); +}(); },{}],331:[function(_dereq_,module,exports){ +'use strict'; + /* seek-bzip - a pure-javascript module for seeking within bzip2 data @@ -25832,10 +25808,11 @@ var GROUP_SIZE = 50; var WHOLEPI = "314159265359"; var SQRTPI = "177245385090"; -var mtf = function(array, index) { - var src = array[index], i; +var mtf = function mtf(array, index) { + var src = array[index], + i; for (i = index; i > 0; i--) { - array[i] = array[i-1]; + array[i] = array[i - 1]; } array[0] = src; return src; @@ -25853,30 +25830,32 @@ var Err = { END_OF_BLOCK: -8 }; var ErrorMessages = {}; -ErrorMessages[Err.LAST_BLOCK] = "Bad file checksum"; -ErrorMessages[Err.NOT_BZIP_DATA] = "Not bzip data"; -ErrorMessages[Err.UNEXPECTED_INPUT_EOF] = "Unexpected input EOF"; +ErrorMessages[Err.LAST_BLOCK] = "Bad file checksum"; +ErrorMessages[Err.NOT_BZIP_DATA] = "Not bzip data"; +ErrorMessages[Err.UNEXPECTED_INPUT_EOF] = "Unexpected input EOF"; ErrorMessages[Err.UNEXPECTED_OUTPUT_EOF] = "Unexpected output EOF"; -ErrorMessages[Err.DATA_ERROR] = "Data error"; -ErrorMessages[Err.OUT_OF_MEMORY] = "Out of memory"; +ErrorMessages[Err.DATA_ERROR] = "Data error"; +ErrorMessages[Err.OUT_OF_MEMORY] = "Out of memory"; ErrorMessages[Err.OBSOLETE_INPUT] = "Obsolete (pre 0.9.5) bzip format not supported."; -var _throw = function(status, optDetail) { +var _throw = function _throw(status, optDetail) { var msg = ErrorMessages[status] || 'unknown error'; - if (optDetail) { msg += ': '+optDetail; } + if (optDetail) { + msg += ': ' + optDetail; + } var e = new TypeError(msg); e.errorCode = status; throw e; }; -var Bunzip = function(inputStream, outputStream) { +var Bunzip = function Bunzip(inputStream, outputStream) { this.writePos = this.writeCurrent = this.writeCount = 0; this._start_bunzip(inputStream, outputStream); }; -Bunzip.prototype._init_block = function() { +Bunzip.prototype._init_block = function () { var moreBlocks = this._get_next_block(); - if ( !moreBlocks ) { + if (!moreBlocks) { this.writeCount = -1; return false; /* no more blocks */ } @@ -25884,16 +25863,13 @@ Bunzip.prototype._init_block = function() { return true; }; /* XXX micro-bunzip uses (inputStream, inputBuffer, len) as arguments */ -Bunzip.prototype._start_bunzip = function(inputStream, outputStream) { +Bunzip.prototype._start_bunzip = function (inputStream, outputStream) { /* Ensure that file starts with "BZh['1'-'9']." */ var buf = new Uint8Array(4); - if (inputStream.read(buf, 0, 4) !== 4 || - String.fromCharCode(buf[0], buf[1], buf[2]) !== 'BZh') - _throw(Err.NOT_BZIP_DATA, 'bad magic'); + if (inputStream.read(buf, 0, 4) !== 4 || String.fromCharCode(buf[0], buf[1], buf[2]) !== 'BZh') _throw(Err.NOT_BZIP_DATA, 'bad magic'); var level = buf[3] - 0x30; - if (level < 1 || level > 9) - _throw(Err.NOT_BZIP_DATA, 'level out of range'); + if (level < 1 || level > 9) _throw(Err.NOT_BZIP_DATA, 'level out of range'); this.reader = new BitReader(inputStream); @@ -25904,78 +25880,75 @@ Bunzip.prototype._start_bunzip = function(inputStream, outputStream) { this.outputStream = outputStream; this.streamCRC = 0; }; -Bunzip.prototype._get_next_block = function() { +Bunzip.prototype._get_next_block = function () { var i, j, k; var reader = this.reader; // this is get_next_block() function from micro-bunzip: /* Read in header signature and CRC, then validate signature. (last block signature means CRC is for whole file, return now) */ var h = reader.pi(); - if (h === SQRTPI) { // last block + if (h === SQRTPI) { + // last block return false; /* no more blocks */ } - if (h !== WHOLEPI) - _throw(Err.NOT_BZIP_DATA); + if (h !== WHOLEPI) _throw(Err.NOT_BZIP_DATA); this.targetBlockCRC = reader.read(32) >>> 0; // (convert to unsigned) - this.streamCRC = (this.targetBlockCRC ^ - ((this.streamCRC << 1) | (this.streamCRC>>>31))) >>> 0; + this.streamCRC = (this.targetBlockCRC ^ (this.streamCRC << 1 | this.streamCRC >>> 31)) >>> 0; /* We can add support for blockRandomised if anybody complains. There was some code for this in busybox 1.0.0-pre3, but nobody ever noticed that it didn't actually work. */ - if (reader.read(1)) - _throw(Err.OBSOLETE_INPUT); + if (reader.read(1)) _throw(Err.OBSOLETE_INPUT); var origPointer = reader.read(24); - if (origPointer > this.dbufSize) - _throw(Err.DATA_ERROR, 'initial position out of bounds'); + if (origPointer > this.dbufSize) _throw(Err.DATA_ERROR, 'initial position out of bounds'); /* mapping table: if some byte values are never used (encoding things like ascii text), the compression code removes the gaps to have fewer symbols to deal with, and writes a sparse bitfield indicating which values were present. We make a translation table to convert the symbols back to the corresponding bytes. */ var t = reader.read(16); - var symToByte = new Uint8Array(256), symTotal = 0; + var symToByte = new Uint8Array(256), + symTotal = 0; for (i = 0; i < 16; i++) { - if (t & (1 << (0xF - i))) { + if (t & 1 << 0xF - i) { var o = i * 16; k = reader.read(16); - for (j = 0; j < 16; j++) - if (k & (1 << (0xF - j))) - symToByte[symTotal++] = o + j; + for (j = 0; j < 16; j++) { + if (k & 1 << 0xF - j) symToByte[symTotal++] = o + j; + } } } /* How many different huffman coding groups does this block use? */ var groupCount = reader.read(3); - if (groupCount < MIN_GROUPS || groupCount > MAX_GROUPS) - _throw(Err.DATA_ERROR); + if (groupCount < MIN_GROUPS || groupCount > MAX_GROUPS) _throw(Err.DATA_ERROR); /* nSelectors: Every GROUP_SIZE many symbols we select a new huffman coding group. Read in the group selector list, which is stored as MTF encoded bit runs. (MTF=Move To Front, as each value is used it's moved to the start of the list.) */ var nSelectors = reader.read(15); - if (nSelectors === 0) - _throw(Err.DATA_ERROR); + if (nSelectors === 0) _throw(Err.DATA_ERROR); var mtfSymbol = new Uint8Array(256); - for (i = 0; i < groupCount; i++) + for (i = 0; i < groupCount; i++) { mtfSymbol[i] = i; - - var selectors = new Uint8Array(nSelectors); // was 32768... + }var selectors = new Uint8Array(nSelectors); // was 32768... for (i = 0; i < nSelectors; i++) { /* Get next value */ - for (j = 0; reader.read(1); j++) + for (j = 0; reader.read(1); j++) { if (j >= groupCount) _throw(Err.DATA_ERROR); - /* Decode MTF to get the next selector */ + } /* Decode MTF to get the next selector */ selectors[i] = mtf(mtfSymbol, j); } /* Read the huffman coding tables for each group, which code for symTotal literal symbols, plus two run symbols (RUNA, RUNB) */ var symCount = symTotal + 2; - var groups = [], hufGroup; + var groups = [], + hufGroup; for (j = 0; j < groupCount; j++) { - var length = new Uint8Array(symCount), temp = new Uint16Array(MAX_HUFCODE_BITS + 1); + var length = new Uint8Array(symCount), + temp = new Uint16Array(MAX_HUFCODE_BITS + 1); /* Read huffman code lengths for each symbol. They're stored in a way similar to mtf; record a starting value for the first symbol, and an offset from the previous value for everys symbol after that. */ @@ -25985,24 +25958,17 @@ Bunzip.prototype._get_next_block = function() { if (t < 1 || t > MAX_HUFCODE_BITS) _throw(Err.DATA_ERROR); /* If first bit is 0, stop. Else second bit indicates whether to increment or decrement the value. */ - if(!reader.read(1)) - break; - if(!reader.read(1)) - t++; - else - t--; + if (!reader.read(1)) break; + if (!reader.read(1)) t++;else t--; } length[i] = t; } /* Find largest and smallest lengths in this group */ - var minLen, maxLen; + var minLen, maxLen; minLen = maxLen = length[0]; for (i = 1; i < symCount; i++) { - if (length[i] > maxLen) - maxLen = length[i]; - else if (length[i] < minLen) - minLen = length[i]; + if (length[i] > maxLen) maxLen = length[i];else if (length[i] < minLen) minLen = length[i]; } /* Calculate permute[], base[], and limit[] tables from length[]. @@ -26026,17 +25992,17 @@ Bunzip.prototype._get_next_block = function() { var pp = 0; for (i = minLen; i <= maxLen; i++) { temp[i] = hufGroup.limit[i] = 0; - for (t = 0; t < symCount; t++) - if (length[t] === i) - hufGroup.permute[pp++] = t; + for (t = 0; t < symCount; t++) { + if (length[t] === i) hufGroup.permute[pp++] = t; + } } /* Count symbols coded for at each bit length */ - for (i = 0; i < symCount; i++) + for (i = 0; i < symCount; i++) { temp[length[i]]++; - /* Calculate limit[] (the largest symbol-coding value at each bit - * length, which is (previous limit<<1)+symbols at this level), and - * base[] (number of symbols to ignore at each bit length, which is - * limit minus the cumulative count of symbols coded for already). */ + } /* Calculate limit[] (the largest symbol-coding value at each bit + * length, which is (previous limit<<1)+symbols at this level), and + * base[] (number of symbols to ignore at each bit length, which is + * limit minus the cumulative count of symbols coded for already). */ pp = t = 0; for (i = minLen; i < maxLen; i++) { pp += temp[i]; @@ -26061,31 +26027,39 @@ Bunzip.prototype._get_next_block = function() { /* Initialize symbol occurrence counters and symbol Move To Front table */ var byteCount = new Uint32Array(256); - for (i = 0; i < 256; i++) + for (i = 0; i < 256; i++) { mtfSymbol[i] = i; - /* Loop through compressed symbols. */ - var runPos = 0, dbufCount = 0, selector = 0, uc; + } /* Loop through compressed symbols. */ + var runPos = 0, + dbufCount = 0, + selector = 0, + uc; var dbuf = this.dbuf = new Uint32Array(this.dbufSize); symCount = 0; for (;;) { /* Determine which huffman coding group to use. */ - if (!(symCount--)) { + if (!symCount--) { symCount = GROUP_SIZE - 1; - if (selector >= nSelectors) { _throw(Err.DATA_ERROR); } + if (selector >= nSelectors) { + _throw(Err.DATA_ERROR); + } hufGroup = groups[selectors[selector++]]; } /* Read next huffman-coded symbol. */ i = hufGroup.minLen; j = reader.read(i); - for (;;i++) { - if (i > hufGroup.maxLen) { _throw(Err.DATA_ERROR); } - if (j <= hufGroup.limit[i]) - break; - j = (j << 1) | reader.read(1); + for (;; i++) { + if (i > hufGroup.maxLen) { + _throw(Err.DATA_ERROR); + } + if (j <= hufGroup.limit[i]) break; + j = j << 1 | reader.read(1); } /* Huffman decode value to get nextSym (with bounds checking) */ j -= hufGroup.base[i]; - if (j < 0 || j >= MAX_SYMBOLS) { _throw(Err.DATA_ERROR); } + if (j < 0 || j >= MAX_SYMBOLS) { + _throw(Err.DATA_ERROR); + } var nextSym = hufGroup.permute[j]; /* We have now decoded the symbol, which indicates either a new literal byte, or a repeated run of the most recent literal byte. First, @@ -26093,7 +26067,7 @@ Bunzip.prototype._get_next_block = function() { how many times to repeat the last literal. */ if (nextSym === SYMBOL_RUNA || nextSym === SYMBOL_RUNB) { /* If this is the start of a new run, zero out counter */ - if (!runPos){ + if (!runPos) { runPos = 1; t = 0; } @@ -26104,10 +26078,7 @@ Bunzip.prototype._get_next_block = function() { the basic or 0/1 method (except all bits 0, which would use no symbols, but a run of length 0 doesn't mean anything in this context). Thus space is saved. */ - if (nextSym === SYMBOL_RUNA) - t += runPos; - else - t += 2 * runPos; + if (nextSym === SYMBOL_RUNA) t += runPos;else t += 2 * runPos; runPos <<= 1; continue; } @@ -26115,17 +26086,19 @@ Bunzip.prototype._get_next_block = function() { how many times to repeat the last literal, so append that many copies to our buffer of decoded symbols (dbuf) now. (The last literal used is the one at the head of the mtfSymbol array.) */ - if (runPos){ + if (runPos) { runPos = 0; - if (dbufCount + t > this.dbufSize) { _throw(Err.DATA_ERROR); } + if (dbufCount + t > this.dbufSize) { + _throw(Err.DATA_ERROR); + } uc = symToByte[mtfSymbol[0]]; byteCount[uc] += t; - while (t--) + while (t--) { dbuf[dbufCount++] = uc; + } } /* Is this the terminating symbol? */ - if (nextSym > symTotal) - break; + if (nextSym > symTotal) break; /* At this point, nextSym indicates a new literal character. Subtract one to get the position in the MTF array at which this literal is currently to be found. (Note that the result can't be -1 or 0, @@ -26133,7 +26106,9 @@ Bunzip.prototype._get_next_block = function() { first symbol in the mtf array, position 0, would have been handled as part of a run above. Therefore 1 unused mtf position minus 2 non-literal nextSym values equals -1.) */ - if (dbufCount >= this.dbufSize) { _throw(Err.DATA_ERROR); } + if (dbufCount >= this.dbufSize) { + _throw(Err.DATA_ERROR); + } i = nextSym - 1; uc = mtf(mtfSymbol, i); uc = symToByte[uc]; @@ -26147,7 +26122,9 @@ Bunzip.prototype._get_next_block = function() { Now undo the Burrows-Wheeler transform on dbuf. See http://dogma.net/markn/articles/bwt/bwt.htm */ - if (origPointer < 0 || origPointer >= dbufCount) { _throw(Err.DATA_ERROR); } + if (origPointer < 0 || origPointer >= dbufCount) { + _throw(Err.DATA_ERROR); + } /* Turn byteCount into cumulative occurrence counts of 0 to n-1. */ j = 0; for (i = 0; i < 256; i++) { @@ -26158,16 +26135,18 @@ Bunzip.prototype._get_next_block = function() { /* Figure out what order dbuf would be in if we sorted it. */ for (i = 0; i < dbufCount; i++) { uc = dbuf[i] & 0xff; - dbuf[byteCount[uc]] |= (i << 8); + dbuf[byteCount[uc]] |= i << 8; byteCount[uc]++; } /* Decode first byte by hand to initialize "previous" byte. Note that it doesn't get output, and if the first three characters are identical it doesn't qualify as a run (hence writeRunCountdown=5). */ - var pos = 0, current = 0, run = 0; + var pos = 0, + current = 0, + run = 0; if (dbufCount) { pos = dbuf[origPointer]; - current = (pos & 0xff); + current = pos & 0xff; pos >>= 8; run = -1; } @@ -26184,17 +26163,22 @@ Bunzip.prototype._get_next_block = function() { error (all errors are negative numbers). If out_fd!=-1, outbuf and len are ignored, data is written to out_fd and return is RETVAL_OK or error. */ -Bunzip.prototype._read_bunzip = function(outputBuffer, len) { - var copies, previous, outbyte; - /* james@jamestaylor.org: writeCount goes to -1 when the buffer is fully - decoded, which results in this returning RETVAL_LAST_BLOCK, also - equal to -1... Confusing, I'm returning 0 here to indicate no - bytes written into the buffer */ - if (this.writeCount < 0) { return 0; } +Bunzip.prototype._read_bunzip = function (outputBuffer, len) { + var copies, previous, outbyte; + /* james@jamestaylor.org: writeCount goes to -1 when the buffer is fully + decoded, which results in this returning RETVAL_LAST_BLOCK, also + equal to -1... Confusing, I'm returning 0 here to indicate no + bytes written into the buffer */ + if (this.writeCount < 0) { + return 0; + } var gotcount = 0; - var dbuf = this.dbuf, pos = this.writePos, current = this.writeCurrent; - var dbufCount = this.writeCount, outputsize = this.outputsize; + var dbuf = this.dbuf, + pos = this.writePos, + current = this.writeCurrent; + var dbufCount = this.writeCount, + outputsize = this.outputsize; var run = this.writeRun; while (dbufCount) { @@ -26203,7 +26187,7 @@ Bunzip.prototype._read_bunzip = function(outputBuffer, len) { pos = dbuf[pos]; current = pos & 0xff; pos >>= 8; - if (run++ === 3){ + if (run++ === 3) { copies = current; outbyte = previous; current = -1; @@ -26216,33 +26200,38 @@ Bunzip.prototype._read_bunzip = function(outputBuffer, len) { this.outputStream.writeByte(outbyte); this.nextoutput++; } - if (current != previous) - run = 0; + if (current != previous) run = 0; } this.writeCount = dbufCount; // check CRC if (this.blockCRC.getCRC() !== this.targetBlockCRC) { - _throw(Err.DATA_ERROR, "Bad block CRC "+ - "(got "+this.blockCRC.getCRC().toString(16)+ - " expected "+this.targetBlockCRC.toString(16)+")"); + _throw(Err.DATA_ERROR, "Bad block CRC " + "(got " + this.blockCRC.getCRC().toString(16) + " expected " + this.targetBlockCRC.toString(16) + ")"); } return this.nextoutput; }; -var coerceInputStream = function(input) { - if ('readByte' in input) { return input; } +var coerceInputStream = function coerceInputStream(input) { + if ('readByte' in input) { + return input; + } var inputStream = new Stream(); inputStream.pos = 0; - inputStream.readByte = function() { return input[this.pos++]; }; - inputStream.seek = function(pos) { this.pos = pos; }; - inputStream.eof = function() { return this.pos >= input.length; }; + inputStream.readByte = function () { + return input[this.pos++]; + }; + inputStream.seek = function (pos) { + this.pos = pos; + }; + inputStream.eof = function () { + return this.pos >= input.length; + }; return inputStream; }; -var coerceOutputStream = function(output) { +var coerceOutputStream = function coerceOutputStream(output) { var outputStream = new Stream(); var resizeOk = true; if (output) { - if (typeof(output)==='number') { + if (typeof output === 'number') { outputStream.buffer = new Uint8Array(output); resizeOk = false; } else if ('writeByte' in output) { @@ -26255,19 +26244,18 @@ var coerceOutputStream = function(output) { outputStream.buffer = new Uint8Array(16384); } outputStream.pos = 0; - outputStream.writeByte = function(_byte) { + outputStream.writeByte = function (_byte) { if (resizeOk && this.pos >= this.buffer.length) { - var newBuffer = new Uint8Array(this.buffer.length*2); + var newBuffer = new Uint8Array(this.buffer.length * 2); newBuffer.set(this.buffer); this.buffer = newBuffer; } this.buffer[this.pos++] = _byte; }; - outputStream.getBuffer = function() { + outputStream.getBuffer = function () { // trim buffer if (this.pos !== this.buffer.length) { - if (!resizeOk) - throw new TypeError('outputsize does not match decoded input'); + if (!resizeOk) throw new TypeError('outputsize does not match decoded input'); var newBuffer = new Uint8Array(this.pos); newBuffer.set(this.buffer.subarray(0, this.pos)); this.buffer = newBuffer; @@ -26282,7 +26270,7 @@ var coerceOutputStream = function(output) { Bunzip.Err = Err; // 'input' can be a stream or a buffer // 'output' can be a stream or a buffer or a number (buffer size) -Bunzip.decode = function(input, output, multistream) { +Bunzip.decode = function (input, output, multistream) { // make a stream from a buffer, if necessary var inputStream = coerceInputStream(input); var outputStream = coerceOutputStream(output); @@ -26295,22 +26283,17 @@ Bunzip.decode = function(input, output, multistream) { } else { var targetStreamCRC = bz.reader.read(32) >>> 0; // (convert to unsigned) if (targetStreamCRC !== bz.streamCRC) { - _throw(Err.DATA_ERROR, "Bad stream CRC "+ - "(got "+bz.streamCRC.toString(16)+ - " expected "+targetStreamCRC.toString(16)+")"); + _throw(Err.DATA_ERROR, "Bad stream CRC " + "(got " + bz.streamCRC.toString(16) + " expected " + targetStreamCRC.toString(16) + ")"); } - if (multistream && - 'eof' in inputStream && - !inputStream.eof()) { + if (multistream && 'eof' in inputStream && !inputStream.eof()) { // note that start_bunzip will also resync the bit reader to next byte bz._start_bunzip(inputStream, outputStream); } else break; } } - if ('getBuffer' in outputStream) - return outputStream.getBuffer(); + if ('getBuffer' in outputStream) return outputStream.getBuffer(); }; -Bunzip.decodeBlock = function(input, pos, output) { +Bunzip.decodeBlock = function (input, pos, output) { // make a stream from a buffer, if necessary var inputStream = coerceInputStream(input); var outputStream = coerceOutputStream(output); @@ -26329,19 +26312,18 @@ Bunzip.decodeBlock = function(input, pos, output) { bz._read_bunzip(); // XXX keep writing? } - if ('getBuffer' in outputStream) - return outputStream.getBuffer(); + if ('getBuffer' in outputStream) return outputStream.getBuffer(); }; /* Reads bzip2 file from stream or buffer `input`, and invoke * `callback(position, size)` once for each bzip2 block, * where position gives the starting position (in *bits*) * and size gives uncompressed size of the block (in *bytes*). */ -Bunzip.table = function(input, callback, multistream) { +Bunzip.table = function (input, callback, multistream) { // make a stream from a buffer, if necessary var inputStream = new Stream(); inputStream.delegate = coerceInputStream(input); inputStream.pos = 0; - inputStream.readByte = function() { + inputStream.readByte = function () { this.pos++; return this.delegate.readByte(); }; @@ -26350,15 +26332,19 @@ Bunzip.table = function(input, callback, multistream) { } var outputStream = new Stream(); outputStream.pos = 0; - outputStream.writeByte = function() { this.pos++; }; + outputStream.writeByte = function () { + this.pos++; + }; var bz = new Bunzip(inputStream, outputStream); var blockSize = bz.dbufSize; while (true) { if ('eof' in inputStream && inputStream.eof()) break; - var position = inputStream.pos*8 + bz.reader.bitOffset; - if (bz.reader.hasByte) { position -= 8; } + var position = inputStream.pos * 8 + bz.reader.bitOffset; + if (bz.reader.hasByte) { + position -= 8; + } if (bz._init_block()) { var start = outputStream.pos; @@ -26366,13 +26352,10 @@ Bunzip.table = function(input, callback, multistream) { callback(position, outputStream.pos - start); } else { var crc = bz.reader.read(32); // (but we ignore the crc) - if (multistream && - 'eof' in inputStream && - !inputStream.eof()) { + if (multistream && 'eof' in inputStream && !inputStream.eof()) { // note that start_bunzip will also resync the bit reader to next byte bz._start_bunzip(inputStream, outputStream); - console.assert(bz.dbufSize === blockSize, - "shouldn't change block size within multistream file"); + console.assert(bz.dbufSize === blockSize, "shouldn't change block size within multistream file"); } else break; } } @@ -26386,46 +26369,47 @@ Bunzip.license = pjson.license; module.exports = Bunzip; },{"../package.json":333,"./bitreader":329,"./crc32":330,"./stream":332}],332:[function(_dereq_,module,exports){ +"use strict"; + /* very simple input/output stream interface */ -var Stream = function() { -}; +var Stream = function Stream() {}; // input streams ////////////// /** Returns the next byte, or -1 for EOF. */ -Stream.prototype.readByte = function() { +Stream.prototype.readByte = function () { throw new Error("abstract method readByte() not implemented"); }; /** Attempts to fill the buffer; returns number of bytes read, or * -1 for EOF. */ -Stream.prototype.read = function(buffer, bufOffset, length) { +Stream.prototype.read = function (buffer, bufOffset, length) { var bytesRead = 0; while (bytesRead < length) { var c = this.readByte(); - if (c < 0) { // EOF - return (bytesRead===0) ? -1 : bytesRead; + if (c < 0) { + // EOF + return bytesRead === 0 ? -1 : bytesRead; } buffer[bufOffset++] = c; bytesRead++; } return bytesRead; }; -Stream.prototype.seek = function(new_pos) { +Stream.prototype.seek = function (new_pos) { throw new Error("abstract method seek() not implemented"); }; // output streams /////////// -Stream.prototype.writeByte = function(_byte) { +Stream.prototype.writeByte = function (_byte) { throw new Error("abstract method readByte() not implemented"); }; -Stream.prototype.write = function(buffer, bufOffset, length) { +Stream.prototype.write = function (buffer, bufOffset, length) { var i; - for (i=0; i= 1) { + // If it is included and not in first place, + algos.splice(configIndex, 1); // remove it. + } + if (configIndex !== 0) { + // If it was included and not in first place, or wasn't included, + algos.unshift(configAlgo); // add it to the front. + } + } + return algos; + }; + userIdPacket = new _packet2.default.Userid(); userIdPacket.format(userId); @@ -40050,33 +40037,23 @@ var wrapKeyObject = function () { signaturePacket.signatureType = _enums2.default.signature.cert_generic; signaturePacket.publicKeyAlgorithm = secretKeyPacket.algorithm; - _context53.next = 10; + _context53.next = 11; return getPreferredHashAlgo(null, secretKeyPacket); - case 10: + case 11: signaturePacket.hashAlgorithm = _context53.sent; signaturePacket.keyFlags = [_enums2.default.keyFlags.certify_keys | _enums2.default.keyFlags.sign_data]; - signaturePacket.preferredSymmetricAlgorithms = []; + signaturePacket.preferredSymmetricAlgorithms = createdPreferredAlgos([ // prefer aes256, aes128, then aes192 (no WebCrypto support: https://www.chromium.org/blink/webcrypto#TOC-AES-support) - signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes256); - signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes128); - signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.aes192); - signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.cast5); - signaturePacket.preferredSymmetricAlgorithms.push(_enums2.default.symmetric.tripledes); + _enums2.default.symmetric.aes256, _enums2.default.symmetric.aes128, _enums2.default.symmetric.aes192, _enums2.default.symmetric.cast5, _enums2.default.symmetric.tripledes], _config2.default.encryption_cipher); if (_config2.default.aead_protect && _config2.default.aead_protect_version === 4) { - signaturePacket.preferredAeadAlgorithms = []; - signaturePacket.preferredAeadAlgorithms.push(_enums2.default.aead.eax); - signaturePacket.preferredAeadAlgorithms.push(_enums2.default.aead.ocb); + signaturePacket.preferredAeadAlgorithms = createdPreferredAlgos([_enums2.default.aead.eax, _enums2.default.aead.ocb], _config2.default.aead_mode); } - signaturePacket.preferredHashAlgorithms = []; + signaturePacket.preferredHashAlgorithms = createdPreferredAlgos([ // prefer fast asm.js implementations (SHA-256). SHA-1 will not be secure much longer...move to bottom of list - signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha256); - signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha512); - signaturePacket.preferredHashAlgorithms.push(_enums2.default.hash.sha1); - signaturePacket.preferredCompressionAlgorithms = []; - signaturePacket.preferredCompressionAlgorithms.push(_enums2.default.compression.zlib); - signaturePacket.preferredCompressionAlgorithms.push(_enums2.default.compression.zip); + _enums2.default.hash.sha256, _enums2.default.hash.sha512, _enums2.default.hash.sha1], _config2.default.prefer_hash_algorithm); + signaturePacket.preferredCompressionAlgorithms = createdPreferredAlgos([_enums2.default.compression.zlib, _enums2.default.compression.zip], _config2.default.compression); if (index === 0) { signaturePacket.isPrimaryUserID = true; } @@ -40093,13 +40070,13 @@ var wrapKeyObject = function () { signaturePacket.keyExpirationTime = options.keyExpirationTime; signaturePacket.keyNeverExpires = false; } - _context53.next = 32; + _context53.next = 23; return signaturePacket.sign(secretKeyPacket, dataToSign); - case 32: + case 23: return _context53.abrupt('return', { userIdPacket: userIdPacket, signaturePacket: signaturePacket }); - case 33: + case 24: case 'end': return _context53.stop(); } @@ -40462,7 +40439,7 @@ var getPreferredAlgo = exports.getPreferredAlgo = function () { switch (_context61.prev = _context61.next) { case 0: prefProperty = type === 'symmetric' ? 'preferredSymmetricAlgorithms' : 'preferredAeadAlgorithms'; - defaultAlgo = type === 'symmetric' ? _config2.default.encryption_cipher : _config2.default.aead_mode; + defaultAlgo = type === 'symmetric' ? _enums2.default.symmetric.aes128 : _enums2.default.aead.eax; prioMap = {}; _context61.next = 5; return _promise2.default.all(keys.map(function () { @@ -44003,40 +43980,40 @@ var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); * @async */ var encryptSessionKey = exports.encryptSessionKey = function () { - var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(sessionKey, symAlgo, aeadAlgo, publicKeys, passwords) { + var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(sessionKey, symAlgo, aeadAlgo, publicKeys, passwords) { var wildcard = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; var date = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : new Date(); var userId = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : {}; var packetlist, results, testDecrypt, sum, encryptPassword, _results; - return _regenerator2.default.wrap(function _callee11$(_context11) { + return _regenerator2.default.wrap(function _callee12$(_context12) { while (1) { - switch (_context11.prev = _context11.next) { + switch (_context12.prev = _context12.next) { case 0: packetlist = new _packet2.default.List(); if (!publicKeys) { - _context11.next = 6; + _context12.next = 6; break; } - _context11.next = 4; + _context12.next = 4; return _promise2.default.all(publicKeys.map(function () { - var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(publicKey) { + var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(publicKey) { var encryptionKey, pkESKeyPacket; - return _regenerator2.default.wrap(function _callee8$(_context8) { + return _regenerator2.default.wrap(function _callee9$(_context9) { while (1) { - switch (_context8.prev = _context8.next) { + switch (_context9.prev = _context9.next) { case 0: - _context8.next = 2; + _context9.next = 2; return publicKey.getEncryptionKey(undefined, date, userId); case 2: - encryptionKey = _context8.sent; + encryptionKey = _context9.sent; if (encryptionKey) { - _context8.next = 5; + _context9.next = 5; break; } @@ -44049,65 +44026,65 @@ var encryptSessionKey = exports.encryptSessionKey = function () { pkESKeyPacket.publicKeyAlgorithm = encryptionKey.keyPacket.algorithm; pkESKeyPacket.sessionKey = sessionKey; pkESKeyPacket.sessionKeyAlgorithm = symAlgo; - _context8.next = 12; + _context9.next = 12; return pkESKeyPacket.encrypt(encryptionKey.keyPacket); case 12: delete pkESKeyPacket.sessionKey; // delete plaintext session key after encryption - return _context8.abrupt('return', pkESKeyPacket); + return _context9.abrupt('return', pkESKeyPacket); case 14: case 'end': - return _context8.stop(); + return _context9.stop(); } } - }, _callee8, this); + }, _callee9, this); })); - return function (_x26) { - return _ref9.apply(this, arguments); + return function (_x27) { + return _ref10.apply(this, arguments); }; }())); case 4: - results = _context11.sent; + results = _context12.sent; packetlist.concat(results); case 6: if (!passwords) { - _context11.next = 14; + _context12.next = 14; break; } testDecrypt = function () { - var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(keyPacket, password) { - return _regenerator2.default.wrap(function _callee9$(_context9) { + var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(keyPacket, password) { + return _regenerator2.default.wrap(function _callee10$(_context10) { while (1) { - switch (_context9.prev = _context9.next) { + switch (_context10.prev = _context10.next) { case 0: - _context9.prev = 0; - _context9.next = 3; + _context10.prev = 0; + _context10.next = 3; return keyPacket.decrypt(password); case 3: - return _context9.abrupt('return', 1); + return _context10.abrupt('return', 1); case 6: - _context9.prev = 6; - _context9.t0 = _context9['catch'](0); - return _context9.abrupt('return', 0); + _context10.prev = 6; + _context10.t0 = _context10['catch'](0); + return _context10.abrupt('return', 0); case 9: case 'end': - return _context9.stop(); + return _context10.stop(); } } - }, _callee9, this, [[0, 6]]); + }, _callee10, this, [[0, 6]]); })); - return function testDecrypt(_x27, _x28) { - return _ref10.apply(this, arguments); + return function testDecrypt(_x28, _x29) { + return _ref11.apply(this, arguments); }; }(); @@ -44116,12 +44093,12 @@ var encryptSessionKey = exports.encryptSessionKey = function () { }; encryptPassword = function () { - var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(sessionKey, symAlgo, aeadAlgo, password) { + var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(sessionKey, symAlgo, aeadAlgo, password) { var symEncryptedSessionKeyPacket, _results2; - return _regenerator2.default.wrap(function _callee10$(_context10) { + return _regenerator2.default.wrap(function _callee11$(_context11) { while (1) { - switch (_context10.prev = _context10.next) { + switch (_context11.prev = _context11.next) { case 0: symEncryptedSessionKeyPacket = new _packet2.default.SymEncryptedSessionKey(); @@ -44130,71 +44107,71 @@ var encryptSessionKey = exports.encryptSessionKey = function () { if (aeadAlgo) { symEncryptedSessionKeyPacket.aeadAlgorithm = aeadAlgo; } - _context10.next = 6; + _context11.next = 6; return symEncryptedSessionKeyPacket.encrypt(password); case 6: if (!_config2.default.password_collision_check) { - _context10.next = 12; + _context11.next = 12; break; } - _context10.next = 9; + _context11.next = 9; return _promise2.default.all(passwords.map(function (pwd) { return testDecrypt(symEncryptedSessionKeyPacket, pwd); })); case 9: - _results2 = _context10.sent; + _results2 = _context11.sent; if (!(_results2.reduce(sum) !== 1)) { - _context10.next = 12; + _context11.next = 12; break; } - return _context10.abrupt('return', encryptPassword(sessionKey, symAlgo, password)); + return _context11.abrupt('return', encryptPassword(sessionKey, symAlgo, password)); case 12: delete symEncryptedSessionKeyPacket.sessionKey; // delete plaintext session key after encryption - return _context10.abrupt('return', symEncryptedSessionKeyPacket); + return _context11.abrupt('return', symEncryptedSessionKeyPacket); case 14: case 'end': - return _context10.stop(); + return _context11.stop(); } } - }, _callee10, this); + }, _callee11, this); })); - return function encryptPassword(_x29, _x30, _x31, _x32) { - return _ref11.apply(this, arguments); + return function encryptPassword(_x30, _x31, _x32, _x33) { + return _ref12.apply(this, arguments); }; }(); - _context11.next = 12; + _context12.next = 12; return _promise2.default.all(passwords.map(function (pwd) { return encryptPassword(sessionKey, symAlgo, aeadAlgo, pwd); })); case 12: - _results = _context11.sent; + _results = _context12.sent; packetlist.concat(_results); case 14: - return _context11.abrupt('return', new Message(packetlist)); + return _context12.abrupt('return', new Message(packetlist)); case 15: case 'end': - return _context11.stop(); + return _context12.stop(); } } - }, _callee11, this); + }, _callee12, this); })); - return function encryptSessionKey(_x18, _x19, _x20, _x21, _x22) { - return _ref8.apply(this, arguments); + return function encryptSessionKey(_x19, _x20, _x21, _x22, _x23) { + return _ref9.apply(this, arguments); }; }(); @@ -44220,7 +44197,7 @@ var encryptSessionKey = exports.encryptSessionKey = function () { * @async */ var createSignaturePackets = exports.createSignaturePackets = function () { - var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(literalDataPacket, privateKeys) { + var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(literalDataPacket, privateKeys) { var signature = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var _this = this; @@ -44228,57 +44205,57 @@ var createSignaturePackets = exports.createSignaturePackets = function () { var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date(); var userId = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; var packetlist, signatureType, existingSigPacketlist; - return _regenerator2.default.wrap(function _callee16$(_context16) { + return _regenerator2.default.wrap(function _callee17$(_context17) { while (1) { - switch (_context16.prev = _context16.next) { + switch (_context17.prev = _context17.next) { case 0: packetlist = new _packet2.default.List(); // If data packet was created from Uint8Array, use binary, otherwise use text signatureType = literalDataPacket.text === null ? _enums2.default.signature.binary : _enums2.default.signature.text; - _context16.next = 4; + _context17.next = 4; return _promise2.default.all(privateKeys.map(function () { - var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(privateKey) { + var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(privateKey) { var signingKey; - return _regenerator2.default.wrap(function _callee15$(_context15) { + return _regenerator2.default.wrap(function _callee16$(_context16) { while (1) { - switch (_context15.prev = _context15.next) { + switch (_context16.prev = _context16.next) { case 0: if (!privateKey.isPublic()) { - _context15.next = 2; + _context16.next = 2; break; } throw new Error('Need private key for signing'); case 2: - _context15.next = 4; + _context16.next = 4; return privateKey.getSigningKey(undefined, date, userId); case 4: - signingKey = _context15.sent; + signingKey = _context16.sent; if (signingKey) { - _context15.next = 7; + _context16.next = 7; break; } throw new Error('Could not find valid signing key packet in key ' + privateKey.getKeyId().toHex()); case 7: - return _context15.abrupt('return', (0, _key.createSignaturePacket)(literalDataPacket, privateKey, signingKey.keyPacket, { signatureType: signatureType }, date, userId)); + return _context16.abrupt('return', (0, _key.createSignaturePacket)(literalDataPacket, privateKey, signingKey.keyPacket, { signatureType: signatureType }, date, userId)); case 8: case 'end': - return _context15.stop(); + return _context16.stop(); } } - }, _callee15, _this); + }, _callee16, _this); })); - return function (_x48) { - return _ref16.apply(this, arguments); + return function (_x49) { + return _ref17.apply(this, arguments); }; }())).then(function (signatureList) { signatureList.forEach(function (signaturePacket) { @@ -44293,18 +44270,18 @@ var createSignaturePackets = exports.createSignaturePackets = function () { packetlist.concat(existingSigPacketlist); } - return _context16.abrupt('return', packetlist); + return _context17.abrupt('return', packetlist); case 6: case 'end': - return _context16.stop(); + return _context17.stop(); } } - }, _callee16, this); + }, _callee17, this); })); - return function createSignaturePackets(_x43, _x44) { - return _ref15.apply(this, arguments); + return function createSignaturePackets(_x44, _x45) { + return _ref16.apply(this, arguments); }; }(); @@ -44330,77 +44307,165 @@ var createSignaturePackets = exports.createSignaturePackets = function () { * @async */ var createVerificationObject = function () { - var _ref22 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee22(signature, literalDataList, keys) { + var _ref23 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee25(signature, literalDataList, keys) { + var _this3 = this; + var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date(); - var keyPacket, verifiedSig; - return _regenerator2.default.wrap(function _callee22$(_context22) { + var primaryKey, signingKey, signaturePacket, verifiedSig; + return _regenerator2.default.wrap(function _callee25$(_context25) { while (1) { - switch (_context22.prev = _context22.next) { + switch (_context25.prev = _context25.next) { case 0: - keyPacket = null; - _context22.next = 3; + primaryKey = null; + signingKey = null; + _context25.next = 4; return _promise2.default.all(keys.map(function () { - var _ref23 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee21(key) { + var _ref24 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee22(key) { var result; - return _regenerator2.default.wrap(function _callee21$(_context21) { + return _regenerator2.default.wrap(function _callee22$(_context22) { while (1) { - switch (_context21.prev = _context21.next) { + switch (_context22.prev = _context22.next) { case 0: - _context21.next = 2; - return key.getSigningKey(signature.issuerKeyId, date); + _context22.next = 2; + return key.getSigningKey(signature.issuerKeyId, null); case 2: - result = _context21.sent; + result = _context22.sent; if (result) { - keyPacket = result.keyPacket; + primaryKey = key; + signingKey = result; } case 4: case 'end': - return _context21.stop(); + return _context22.stop(); } } - }, _callee21, this); + }, _callee22, this); })); - return function (_x59) { - return _ref23.apply(this, arguments); + return function (_x60) { + return _ref24.apply(this, arguments); }; }())); - case 3: + case 4: + signaturePacket = signature.correspondingSig || signature; verifiedSig = { keyid: signature.issuerKeyId, - verified: keyPacket ? signature.verify(keyPacket, signature.signatureType, literalDataList[0]) : _promise2.default.resolve(null) + verified: (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee23() { + var verified, sig; + return _regenerator2.default.wrap(function _callee23$(_context23) { + while (1) { + switch (_context23.prev = _context23.next) { + case 0: + if (signingKey) { + _context23.next = 2; + break; + } + + return _context23.abrupt('return', null); + + case 2: + _context23.next = 4; + return signature.verify(signingKey.keyPacket, signature.signatureType, literalDataList[0]); + + case 4: + verified = _context23.sent; + _context23.next = 7; + return signaturePacket; + + case 7: + sig = _context23.sent; + _context23.t0 = sig.isExpired(date); + + if (_context23.t0) { + _context23.next = 18; + break; + } + + _context23.t1 = sig.created >= signingKey.getCreationTime(); + + if (!_context23.t1) { + _context23.next = 17; + break; + } + + _context23.t2 = sig.created; + _context23.next = 15; + return signingKey === primaryKey ? signingKey.getExpirationTime() : signingKey.getExpirationTime(primaryKey, date); + + case 15: + _context23.t3 = _context23.sent; + _context23.t1 = _context23.t2 < _context23.t3; + + case 17: + _context23.t0 = !_context23.t1; + + case 18: + if (!_context23.t0) { + _context23.next = 20; + break; + } + + return _context23.abrupt('return', null); + + case 20: + return _context23.abrupt('return', verified); + + case 21: + case 'end': + return _context23.stop(); + } + } + }, _callee23, _this3); + }))(), + signature: (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee24() { + var sig, packetlist; + return _regenerator2.default.wrap(function _callee24$(_context24) { + while (1) { + switch (_context24.prev = _context24.next) { + case 0: + _context24.next = 2; + return signaturePacket; + + case 2: + sig = _context24.sent; + packetlist = new _packet2.default.List(); + + packetlist.push(sig); + return _context24.abrupt('return', new _signature.Signature(packetlist)); + + case 6: + case 'end': + return _context24.stop(); + } + } + }, _callee24, _this3); + }))() }; - - verifiedSig.signature = _promise2.default.resolve(signature.correspondingSig || signature).then(function (signature) { - var packetlist = new _packet2.default.List(); - packetlist.push(signature); - return new _signature.Signature(packetlist); - }); - // Mark potential promise rejections as "handled". This is needed because in // some cases, we reject them before the user has a reasonable chance to // handle them (e.g. `await readToEnd(result.data); await result.verified` and // the data stream errors). + verifiedSig.signature.catch(function () {}); verifiedSig.verified.catch(function () {}); - return _context22.abrupt('return', verifiedSig); + return _context25.abrupt('return', verifiedSig); - case 8: + case 9: case 'end': - return _context22.stop(); + return _context25.stop(); } } - }, _callee22, this); + }, _callee25, this); })); - return function createVerificationObject(_x55, _x56, _x57) { - return _ref22.apply(this, arguments); + return function createVerificationObject(_x56, _x57, _x58) { + return _ref23.apply(this, arguments); }; }(); @@ -44418,45 +44483,45 @@ var createVerificationObject = function () { var createVerificationObjects = exports.createVerificationObjects = function () { - var _ref24 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee24(signatureList, literalDataList, keys) { + var _ref27 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee27(signatureList, literalDataList, keys) { var date = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date(); - return _regenerator2.default.wrap(function _callee24$(_context24) { + return _regenerator2.default.wrap(function _callee27$(_context27) { while (1) { - switch (_context24.prev = _context24.next) { + switch (_context27.prev = _context27.next) { case 0: - return _context24.abrupt('return', _promise2.default.all(signatureList.filter(function (signature) { + return _context27.abrupt('return', _promise2.default.all(signatureList.filter(function (signature) { return ['text', 'binary'].includes(_enums2.default.read(_enums2.default.signature, signature.signatureType)); }).map(function () { - var _ref25 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee23(signature) { - return _regenerator2.default.wrap(function _callee23$(_context23) { + var _ref28 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee26(signature) { + return _regenerator2.default.wrap(function _callee26$(_context26) { while (1) { - switch (_context23.prev = _context23.next) { + switch (_context26.prev = _context26.next) { case 0: - return _context23.abrupt('return', createVerificationObject(signature, literalDataList, keys, date)); + return _context26.abrupt('return', createVerificationObject(signature, literalDataList, keys, date)); case 1: case 'end': - return _context23.stop(); + return _context26.stop(); } } - }, _callee23, this); + }, _callee26, this); })); - return function (_x64) { - return _ref25.apply(this, arguments); + return function (_x65) { + return _ref28.apply(this, arguments); }; }()))); case 1: case 'end': - return _context24.stop(); + return _context27.stop(); } } - }, _callee24, this); + }, _callee27, this); })); - return function createVerificationObjects(_x60, _x61, _x62) { - return _ref24.apply(this, arguments); + return function createVerificationObjects(_x61, _x62, _x63) { + return _ref27.apply(this, arguments); }; }(); @@ -44474,11 +44539,11 @@ var createVerificationObjects = exports.createVerificationObjects = function () * @static */ var readArmored = exports.readArmored = function () { - var _ref27 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee26(armoredText) { + var _ref30 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee29(armoredText) { var streamType, input; - return _regenerator2.default.wrap(function _callee26$(_context26) { + return _regenerator2.default.wrap(function _callee29$(_context29) { while (1) { - switch (_context26.prev = _context26.next) { + switch (_context29.prev = _context29.next) { case 0: //TODO how do we want to handle bad text? Exception throwing //TODO don't accept non-message armored texts @@ -44487,23 +44552,23 @@ var readArmored = exports.readArmored = function () { if (streamType === 'node') { armoredText = _webStreamTools2.default.nodeToWeb(armoredText); } - _context26.next = 4; + _context29.next = 4; return _armor2.default.decode(armoredText); case 4: - input = _context26.sent; - return _context26.abrupt('return', read(input.data, streamType)); + input = _context29.sent; + return _context29.abrupt('return', read(input.data, streamType)); case 6: case 'end': - return _context26.stop(); + return _context29.stop(); } } - }, _callee26, this); + }, _callee29, this); })); - return function readArmored(_x66) { - return _ref27.apply(this, arguments); + return function readArmored(_x67) { + return _ref30.apply(this, arguments); }; }(); @@ -44518,12 +44583,12 @@ var readArmored = exports.readArmored = function () { var read = exports.read = function () { - var _ref28 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee27(input) { + var _ref31 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee30(input) { var fromStream = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util2.default.isStream(input); var streamType, packetlist, message; - return _regenerator2.default.wrap(function _callee27$(_context27) { + return _regenerator2.default.wrap(function _callee30$(_context30) { while (1) { - switch (_context27.prev = _context27.next) { + switch (_context30.prev = _context30.next) { case 0: streamType = _util2.default.isStream(input); @@ -44531,25 +44596,25 @@ var read = exports.read = function () { input = _webStreamTools2.default.nodeToWeb(input); } packetlist = new _packet2.default.List(); - _context27.next = 5; + _context30.next = 5; return packetlist.read(input); case 5: message = new Message(packetlist); message.fromStream = fromStream; - return _context27.abrupt('return', message); + return _context30.abrupt('return', message); case 8: case 'end': - return _context27.stop(); + return _context30.stop(); } } - }, _callee27, this); + }, _callee30, this); })); - return function read(_x67) { - return _ref28.apply(this, arguments); + return function read(_x68) { + return _ref31.apply(this, arguments); }; }(); @@ -44806,30 +44871,31 @@ Message.prototype.decrypt = function () { * @async */ Message.prototype.decryptSessionKeys = function () { - var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(privateKeys, passwords) { - var keyPackets, symESKeyPacketlist, pkESKeyPacketlist, seen; - return _regenerator2.default.wrap(function _callee6$(_context6) { + var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(privateKeys, passwords) { + var keyPackets, exception, symESKeyPacketlist, pkESKeyPacketlist, seen; + return _regenerator2.default.wrap(function _callee7$(_context7) { while (1) { - switch (_context6.prev = _context6.next) { + switch (_context7.prev = _context7.next) { case 0: keyPackets = []; + exception = void 0; if (!passwords) { - _context6.next = 9; + _context7.next = 10; break; } symESKeyPacketlist = this.packets.filterByTag(_enums2.default.packet.symEncryptedSessionKey); if (symESKeyPacketlist) { - _context6.next = 5; + _context7.next = 6; break; } throw new Error('No symmetrically encrypted session key packet found.'); - case 5: - _context6.next = 7; + case 6: + _context7.next = 8; return _promise2.default.all(passwords.map(function () { var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(password, i) { var packets; @@ -44904,85 +44970,125 @@ Message.prototype.decryptSessionKeys = function () { }; }())); - case 7: - _context6.next = 18; + case 8: + _context7.next = 19; break; - case 9: + case 10: if (!privateKeys) { - _context6.next = 17; + _context7.next = 18; break; } pkESKeyPacketlist = this.packets.filterByTag(_enums2.default.packet.publicKeyEncryptedSessionKey); if (pkESKeyPacketlist) { - _context6.next = 13; + _context7.next = 14; break; } throw new Error('No public key encrypted session key packet found.'); - case 13: - _context6.next = 15; + case 14: + _context7.next = 16; return _promise2.default.all(pkESKeyPacketlist.map(function () { - var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(keyPacket) { - var privateKeyPackets; - return _regenerator2.default.wrap(function _callee5$(_context5) { + var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(keyPacket) { + return _regenerator2.default.wrap(function _callee6$(_context6) { while (1) { - switch (_context5.prev = _context5.next) { + switch (_context6.prev = _context6.next) { case 0: - privateKeyPackets = new _packet2.default.List(); - - privateKeys.forEach(function (privateKey) { - privateKeyPackets.concat(privateKey.getKeys(keyPacket.publicKeyId).map(function (key) { - return key.keyPacket; - })); - }); - _context5.next = 4; - return _promise2.default.all(privateKeyPackets.map(function () { - var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(privateKeyPacket) { - return _regenerator2.default.wrap(function _callee4$(_context4) { + _context6.next = 2; + return _promise2.default.all(privateKeys.map(function () { + var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(privateKey) { + var primaryUser, algos, privateKeyPackets; + return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { - switch (_context4.prev = _context4.next) { + switch (_context5.prev = _context5.next) { case 0: - if (privateKeyPacket) { - _context4.next = 2; - break; - } - - return _context4.abrupt('return'); + _context5.next = 2; + return privateKey.getPrimaryUser(); case 2: - if (privateKeyPacket.isDecrypted()) { - _context4.next = 4; - break; + primaryUser = _context5.sent; + // TODO: Pass userId from somewhere. + algos = [_enums2.default.symmetric.aes256, // Old OpenPGP.js default fallback + _enums2.default.symmetric.aes128, // RFC4880bis fallback + _enums2.default.symmetric.tripledes // RFC4880 fallback + ]; + + if (primaryUser && primaryUser.selfCertification.preferredSymmetricAlgorithms) { + algos = algos.concat(primaryUser.selfCertification.preferredSymmetricAlgorithms); } - throw new Error('Private key is not decrypted.'); + privateKeyPackets = privateKey.getKeys(keyPacket.publicKeyId).map(function (key) { + return key.keyPacket; + }); + _context5.next = 8; + return _promise2.default.all(privateKeyPackets.map(function () { + var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(privateKeyPacket) { + return _regenerator2.default.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + if (privateKeyPacket) { + _context4.next = 2; + break; + } - case 4: - _context4.prev = 4; - _context4.next = 7; - return keyPacket.decrypt(privateKeyPacket); + return _context4.abrupt('return'); - case 7: - keyPackets.push(keyPacket); - _context4.next = 13; - break; + case 2: + if (privateKeyPacket.isDecrypted()) { + _context4.next = 4; + break; + } - case 10: - _context4.prev = 10; - _context4.t0 = _context4['catch'](4); + throw new Error('Private key is not decrypted.'); - _util2.default.print_debug_error(_context4.t0); + case 4: + _context4.prev = 4; + _context4.next = 7; + return keyPacket.decrypt(privateKeyPacket); - case 13: + case 7: + if (algos.includes(_enums2.default.write(_enums2.default.symmetric, keyPacket.sessionKeyAlgorithm))) { + _context4.next = 9; + break; + } + + throw new Error('A non-preferred symmetric algorithm was used.'); + + case 9: + keyPackets.push(keyPacket); + _context4.next = 16; + break; + + case 12: + _context4.prev = 12; + _context4.t0 = _context4['catch'](4); + + _util2.default.print_debug_error(_context4.t0); + exception = _context4.t0; + + case 16: + case 'end': + return _context4.stop(); + } + } + }, _callee4, this, [[4, 12]]); + })); + + return function (_x12) { + return _ref7.apply(this, arguments); + }; + }())); + + case 8: case 'end': - return _context4.stop(); + return _context5.stop(); } } - }, _callee4, this, [[4, 10]]); + }, _callee5, this); })); return function (_x11) { @@ -44990,16 +45096,16 @@ Message.prototype.decryptSessionKeys = function () { }; }())); - case 4: + case 2: _webStreamTools2.default.cancel(keyPacket.encrypted); // Don't keep copy of encrypted data in memory. keyPacket.encrypted = null; - case 6: + case 4: case 'end': - return _context5.stop(); + return _context6.stop(); } } - }, _callee5, this); + }, _callee6, this); })); return function (_x10) { @@ -45007,16 +45113,16 @@ Message.prototype.decryptSessionKeys = function () { }; }())); - case 15: - _context6.next = 18; + case 16: + _context7.next = 19; break; - case 17: + case 18: throw new Error('No key or password specified.'); - case 18: + case 19: if (!keyPackets.length) { - _context6.next = 21; + _context7.next = 22; break; } @@ -45034,19 +45140,19 @@ Message.prototype.decryptSessionKeys = function () { }); } - return _context6.abrupt('return', keyPackets.map(function (packet) { + return _context7.abrupt('return', keyPackets.map(function (packet) { return { data: packet.sessionKey, algorithm: packet.sessionKeyAlgorithm }; })); - case 21: - throw new Error('Session key decryption failed.'); - case 22: + throw exception || new Error('Session key decryption failed.'); + + case 23: case 'end': - return _context6.stop(); + return _context7.stop(); } } - }, _callee6, this); + }, _callee7, this); })); return function (_x5, _x6) { @@ -45059,7 +45165,8 @@ Message.prototype.decryptSessionKeys = function () { * @returns {(Uint8Array|null)} literal body of the message as Uint8Array */ Message.prototype.getLiteralData = function () { - var literal = this.packets.findPacket(_enums2.default.packet.literal); + var msg = this.unwrapCompressed(); + var literal = msg.packets.findPacket(_enums2.default.packet.literal); return literal && literal.getBytes() || null; }; @@ -45068,7 +45175,8 @@ Message.prototype.getLiteralData = function () { * @returns {(String|null)} filename of literal data packet as string */ Message.prototype.getFilename = function () { - var literal = this.packets.findPacket(_enums2.default.packet.literal); + var msg = this.unwrapCompressed(); + var literal = msg.packets.findPacket(_enums2.default.packet.literal); return literal && literal.getFilename() || null; }; @@ -45077,7 +45185,8 @@ Message.prototype.getFilename = function () { * @returns {(String|null)} literal body of the message interpreted as text */ Message.prototype.getText = function () { - var literal = this.packets.findPacket(_enums2.default.packet.literal); + var msg = this.unwrapCompressed(); + var literal = msg.packets.findPacket(_enums2.default.packet.literal); if (literal) { return literal.getText(); } @@ -45097,27 +45206,27 @@ Message.prototype.getText = function () { * @async */ Message.prototype.encrypt = function () { - var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(keys, passwords, sessionKey) { + var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(keys, passwords, sessionKey) { var wildcard = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var date = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new Date(); var userId = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; var streaming = arguments[6]; var symAlgo, aeadAlgo, symEncryptedPacket, msg; - return _regenerator2.default.wrap(function _callee7$(_context7) { + return _regenerator2.default.wrap(function _callee8$(_context8) { while (1) { - switch (_context7.prev = _context7.next) { + switch (_context8.prev = _context8.next) { case 0: symAlgo = void 0; aeadAlgo = void 0; symEncryptedPacket = void 0; if (!sessionKey) { - _context7.next = 11; + _context8.next = 11; break; } if (!(!_util2.default.isUint8Array(sessionKey.data) || !_util2.default.isString(sessionKey.algorithm))) { - _context7.next = 6; + _context8.next = 6; break; } @@ -45127,64 +45236,64 @@ Message.prototype.encrypt = function () { symAlgo = sessionKey.algorithm; aeadAlgo = sessionKey.aeadAlgorithm; sessionKey = sessionKey.data; - _context7.next = 38; + _context8.next = 38; break; case 11: if (!(keys && keys.length)) { - _context7.next = 32; + _context8.next = 32; break; } - _context7.t0 = _enums2.default; - _context7.t1 = _enums2.default.symmetric; - _context7.next = 16; + _context8.t0 = _enums2.default; + _context8.t1 = _enums2.default.symmetric; + _context8.next = 16; return (0, _key.getPreferredAlgo)('symmetric', keys, date, userId); case 16: - _context7.t2 = _context7.sent; - symAlgo = _context7.t0.read.call(_context7.t0, _context7.t1, _context7.t2); - _context7.t3 = _config2.default.aead_protect && _config2.default.aead_protect_version === 4; + _context8.t2 = _context8.sent; + symAlgo = _context8.t0.read.call(_context8.t0, _context8.t1, _context8.t2); + _context8.t3 = _config2.default.aead_protect && _config2.default.aead_protect_version === 4; - if (!_context7.t3) { - _context7.next = 23; + if (!_context8.t3) { + _context8.next = 23; break; } - _context7.next = 22; + _context8.next = 22; return (0, _key.isAeadSupported)(keys, date, userId); case 22: - _context7.t3 = _context7.sent; + _context8.t3 = _context8.sent; case 23: - if (!_context7.t3) { - _context7.next = 30; + if (!_context8.t3) { + _context8.next = 30; break; } - _context7.t4 = _enums2.default; - _context7.t5 = _enums2.default.aead; - _context7.next = 28; + _context8.t4 = _enums2.default; + _context8.t5 = _enums2.default.aead; + _context8.next = 28; return (0, _key.getPreferredAlgo)('aead', keys, date, userId); case 28: - _context7.t6 = _context7.sent; - aeadAlgo = _context7.t4.read.call(_context7.t4, _context7.t5, _context7.t6); + _context8.t6 = _context8.sent; + aeadAlgo = _context8.t4.read.call(_context8.t4, _context8.t5, _context8.t6); case 30: - _context7.next = 38; + _context8.next = 38; break; case 32: if (!(passwords && passwords.length)) { - _context7.next = 37; + _context8.next = 37; break; } symAlgo = _enums2.default.read(_enums2.default.symmetric, _config2.default.encryption_cipher); aeadAlgo = _enums2.default.read(_enums2.default.aead, _config2.default.aead_mode); - _context7.next = 38; + _context8.next = 38; break; case 37: @@ -45192,22 +45301,22 @@ Message.prototype.encrypt = function () { case 38: if (sessionKey) { - _context7.next = 42; + _context8.next = 42; break; } - _context7.next = 41; + _context8.next = 41; return _crypto2.default.generateSessionKey(symAlgo); case 41: - sessionKey = _context7.sent; + sessionKey = _context8.sent; case 42: - _context7.next = 44; + _context8.next = 44; return encryptSessionKey(sessionKey, symAlgo, aeadAlgo, keys, passwords, wildcard, date, userId); case 44: - msg = _context7.sent; + msg = _context8.sent; if (_config2.default.aead_protect && (_config2.default.aead_protect_version !== 4 || aeadAlgo)) { @@ -45220,14 +45329,14 @@ Message.prototype.encrypt = function () { } symEncryptedPacket.packets = this.packets; - _context7.next = 49; + _context8.next = 49; return symEncryptedPacket.encrypt(symAlgo, sessionKey, streaming); case 49: msg.packets.push(symEncryptedPacket); symEncryptedPacket.packets = new _packet2.default.List(); // remove packets after encryption - return _context7.abrupt('return', { + return _context8.abrupt('return', { message: msg, sessionKey: { data: sessionKey, @@ -45238,31 +45347,31 @@ Message.prototype.encrypt = function () { case 52: case 'end': - return _context7.stop(); + return _context8.stop(); } } - }, _callee7, this); + }, _callee8, this); })); - return function (_x12, _x13, _x14) { - return _ref7.apply(this, arguments); + return function (_x13, _x14, _x15) { + return _ref8.apply(this, arguments); }; }();Message.prototype.sign = function () { - var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13() { + var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14() { var privateKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date(); var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var packetlist, literalDataPacket, i, existingSigPacketlist, signatureType, signaturePacket, onePassSig; - return _regenerator2.default.wrap(function _callee13$(_context13) { + return _regenerator2.default.wrap(function _callee14$(_context14) { while (1) { - switch (_context13.prev = _context13.next) { + switch (_context14.prev = _context14.next) { case 0: packetlist = new _packet2.default.List(); literalDataPacket = this.packets.findPacket(_enums2.default.packet.literal); if (literalDataPacket) { - _context13.next = 4; + _context14.next = 4; break; } @@ -45293,30 +45402,30 @@ Message.prototype.encrypt = function () { } } - _context13.next = 10; + _context14.next = 10; return _promise2.default.all((0, _from2.default)(privateKeys).reverse().map(function () { - var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(privateKey, i) { + var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(privateKey, i) { var signingKey, onePassSig; - return _regenerator2.default.wrap(function _callee12$(_context12) { + return _regenerator2.default.wrap(function _callee13$(_context13) { while (1) { - switch (_context12.prev = _context12.next) { + switch (_context13.prev = _context13.next) { case 0: if (!privateKey.isPublic()) { - _context12.next = 2; + _context13.next = 2; break; } throw new Error('Need private key for signing'); case 2: - _context12.next = 4; + _context13.next = 4; return privateKey.getSigningKey(undefined, date, userId); case 4: - signingKey = _context12.sent; + signingKey = _context13.sent; if (signingKey) { - _context12.next = 7; + _context13.next = 7; break; } @@ -45326,29 +45435,29 @@ Message.prototype.encrypt = function () { onePassSig = new _packet2.default.OnePassSignature(); onePassSig.signatureType = signatureType; - _context12.next = 11; + _context13.next = 11; return (0, _key.getPreferredHashAlgo)(privateKey, signingKey.keyPacket, date, userId); case 11: - onePassSig.hashAlgorithm = _context12.sent; + onePassSig.hashAlgorithm = _context13.sent; onePassSig.publicKeyAlgorithm = signingKey.keyPacket.algorithm; onePassSig.issuerKeyId = signingKey.getKeyId(); if (i === privateKeys.length - 1) { onePassSig.flags = 1; } - return _context12.abrupt('return', onePassSig); + return _context13.abrupt('return', onePassSig); case 16: case 'end': - return _context12.stop(); + return _context13.stop(); } } - }, _callee12, this); + }, _callee13, this); })); - return function (_x37, _x38) { - return _ref13.apply(this, arguments); + return function (_x38, _x39) { + return _ref14.apply(this, arguments); }; }())).then(function (onePassSignatureList) { onePassSignatureList.forEach(function (onePassSig) { @@ -45359,27 +45468,27 @@ Message.prototype.encrypt = function () { case 10: packetlist.push(literalDataPacket); - _context13.t0 = packetlist; - _context13.next = 14; + _context14.t0 = packetlist; + _context14.next = 14; return createSignaturePackets(literalDataPacket, privateKeys, signature, date); case 14: - _context13.t1 = _context13.sent; + _context14.t1 = _context14.sent; - _context13.t0.concat.call(_context13.t0, _context13.t1); + _context14.t0.concat.call(_context14.t0, _context14.t1); - return _context13.abrupt('return', new Message(packetlist)); + return _context14.abrupt('return', new Message(packetlist)); case 17: case 'end': - return _context13.stop(); + return _context14.stop(); } } - }, _callee13, this); + }, _callee14, this); })); return function () { - return _ref12.apply(this, arguments); + return _ref13.apply(this, arguments); }; }(); @@ -45413,61 +45522,61 @@ Message.prototype.compress = function (compression) { * @async */ Message.prototype.signDetached = function () { - var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14() { + var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15() { var privateKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var signature = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var date = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Date(); var userId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var literalDataPacket; - return _regenerator2.default.wrap(function _callee14$(_context14) { + return _regenerator2.default.wrap(function _callee15$(_context15) { while (1) { - switch (_context14.prev = _context14.next) { + switch (_context15.prev = _context15.next) { case 0: literalDataPacket = this.packets.findPacket(_enums2.default.packet.literal); if (literalDataPacket) { - _context14.next = 3; + _context15.next = 3; break; } throw new Error('No literal data packet to sign.'); case 3: - _context14.t0 = _signature.Signature; - _context14.next = 6; + _context15.t0 = _signature.Signature; + _context15.next = 6; return createSignaturePackets(literalDataPacket, privateKeys, signature, date, userId); case 6: - _context14.t1 = _context14.sent; - return _context14.abrupt('return', new _context14.t0(_context14.t1)); + _context15.t1 = _context15.sent; + return _context15.abrupt('return', new _context15.t0(_context15.t1)); case 8: case 'end': - return _context14.stop(); + return _context15.stop(); } } - }, _callee14, this); + }, _callee15, this); })); return function () { - return _ref14.apply(this, arguments); + return _ref15.apply(this, arguments); }; }();Message.prototype.verify = function () { - var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee20(keys) { + var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee21(keys) { var _this2 = this; var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date(); var streaming = arguments[2]; var msg, literalDataList, onePassSigList, signatureList; - return _regenerator2.default.wrap(function _callee20$(_context20) { + return _regenerator2.default.wrap(function _callee21$(_context21) { while (1) { - switch (_context20.prev = _context20.next) { + switch (_context21.prev = _context21.next) { case 0: msg = this.unwrapCompressed(); literalDataList = msg.packets.filterByTag(_enums2.default.packet.literal); if (!(literalDataList.length !== 1)) { - _context20.next = 4; + _context21.next = 4; break; } @@ -45478,145 +45587,145 @@ Message.prototype.signDetached = function () { signatureList = msg.packets.filterByTag(_enums2.default.packet.signature); if (!(onePassSigList.length && !signatureList.length && msg.packets.stream)) { - _context20.next = 11; + _context21.next = 11; break; } - _context20.next = 9; + _context21.next = 9; return _promise2.default.all(onePassSigList.map(function () { - var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee18(onePassSig) { - return _regenerator2.default.wrap(function _callee18$(_context18) { + var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee19(onePassSig) { + return _regenerator2.default.wrap(function _callee19$(_context19) { while (1) { - switch (_context18.prev = _context18.next) { + switch (_context19.prev = _context19.next) { case 0: onePassSig.correspondingSig = new _promise2.default(function (resolve, reject) { onePassSig.correspondingSigResolve = resolve; onePassSig.correspondingSigReject = reject; }); - onePassSig.signatureData = _webStreamTools2.default.fromAsync((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17() { - return _regenerator2.default.wrap(function _callee17$(_context17) { + onePassSig.signatureData = _webStreamTools2.default.fromAsync((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee18() { + return _regenerator2.default.wrap(function _callee18$(_context18) { while (1) { - switch (_context17.prev = _context17.next) { + switch (_context18.prev = _context18.next) { case 0: - _context17.next = 2; + _context18.next = 2; return onePassSig.correspondingSig; case 2: - return _context17.abrupt('return', _context17.sent.signatureData); + return _context18.abrupt('return', _context18.sent.signatureData); case 3: case 'end': - return _context17.stop(); + return _context18.stop(); } } - }, _callee17, _this2); + }, _callee18, _this2); }))); - _context18.next = 4; + _context19.next = 4; return onePassSig.hash(onePassSig.signatureType, literalDataList[0], undefined, streaming); case 4: - onePassSig.hashed = _context18.sent; + onePassSig.hashed = _context19.sent; case 5: case 'end': - return _context18.stop(); + return _context19.stop(); } } - }, _callee18, _this2); + }, _callee19, _this2); })); - return function (_x51) { - return _ref18.apply(this, arguments); + return function (_x52) { + return _ref19.apply(this, arguments); }; }())); case 9: msg.packets.stream = _webStreamTools2.default.transformPair(msg.packets.stream, function () { - var _ref20 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee19(readable, writable) { - var reader, writer, i, _ref21, signature; + var _ref21 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee20(readable, writable) { + var reader, writer, i, _ref22, signature; - return _regenerator2.default.wrap(function _callee19$(_context19) { + return _regenerator2.default.wrap(function _callee20$(_context20) { while (1) { - switch (_context19.prev = _context19.next) { + switch (_context20.prev = _context20.next) { case 0: reader = _webStreamTools2.default.getReader(readable); writer = _webStreamTools2.default.getWriter(writable); - _context19.prev = 2; + _context20.prev = 2; i = 0; case 4: if (!(i < onePassSigList.length)) { - _context19.next = 13; + _context20.next = 13; break; } - _context19.next = 7; + _context20.next = 7; return reader.read(); case 7: - _ref21 = _context19.sent; - signature = _ref21.value; + _ref22 = _context20.sent; + signature = _ref22.value; onePassSigList[i].correspondingSigResolve(signature); case 10: i++; - _context19.next = 4; + _context20.next = 4; break; case 13: - _context19.next = 15; + _context20.next = 15; return reader.readToEnd(); case 15: - _context19.next = 17; + _context20.next = 17; return writer.ready; case 17: - _context19.next = 19; + _context20.next = 19; return writer.close(); case 19: - _context19.next = 26; + _context20.next = 26; break; case 21: - _context19.prev = 21; - _context19.t0 = _context19['catch'](2); + _context20.prev = 21; + _context20.t0 = _context20['catch'](2); onePassSigList.forEach(function (onePassSig) { - onePassSig.correspondingSigReject(_context19.t0); + onePassSig.correspondingSigReject(_context20.t0); }); - _context19.next = 26; - return writer.abort(_context19.t0); + _context20.next = 26; + return writer.abort(_context20.t0); case 26: case 'end': - return _context19.stop(); + return _context20.stop(); } } - }, _callee19, _this2, [[2, 21]]); + }, _callee20, _this2, [[2, 21]]); })); - return function (_x52, _x53) { - return _ref20.apply(this, arguments); + return function (_x53, _x54) { + return _ref21.apply(this, arguments); }; }()); - return _context20.abrupt('return', createVerificationObjects(onePassSigList, literalDataList, keys, date)); + return _context21.abrupt('return', createVerificationObjects(onePassSigList, literalDataList, keys, date)); case 11: - return _context20.abrupt('return', createVerificationObjects(signatureList, literalDataList, keys, date)); + return _context21.abrupt('return', createVerificationObjects(signatureList, literalDataList, keys, date)); case 12: case 'end': - return _context20.stop(); + return _context21.stop(); } } - }, _callee20, this); + }, _callee21, this); })); - return function (_x49) { - return _ref17.apply(this, arguments); + return function (_x50) { + return _ref18.apply(this, arguments); }; }(); @@ -45651,44 +45760,44 @@ Message.prototype.verifyDetached = function (signature, keys) { * @param {String|Uint8Array} detachedSignature The detached ASCII-armored or Uint8Array PGP signature */ Message.prototype.appendSignature = function () { - var _ref26 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee25(detachedSignature) { - return _regenerator2.default.wrap(function _callee25$(_context25) { + var _ref29 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee28(detachedSignature) { + return _regenerator2.default.wrap(function _callee28$(_context28) { while (1) { - switch (_context25.prev = _context25.next) { + switch (_context28.prev = _context28.next) { case 0: - _context25.t0 = this.packets; + _context28.t0 = this.packets; if (!_util2.default.isUint8Array(detachedSignature)) { - _context25.next = 5; + _context28.next = 5; break; } - _context25.t1 = detachedSignature; - _context25.next = 8; + _context28.t1 = detachedSignature; + _context28.next = 8; break; case 5: - _context25.next = 7; + _context28.next = 7; return _armor2.default.decode(detachedSignature); case 7: - _context25.t1 = _context25.sent.data; + _context28.t1 = _context28.sent.data; case 8: - _context25.t2 = _context25.t1; - _context25.next = 11; - return _context25.t0.read.call(_context25.t0, _context25.t2); + _context28.t2 = _context28.t1; + _context28.next = 11; + return _context28.t0.read.call(_context28.t0, _context28.t2); case 11: case 'end': - return _context25.stop(); + return _context28.stop(); } } - }, _callee25, this); + }, _callee28, this); })); - return function (_x65) { - return _ref26.apply(this, arguments); + return function (_x66) { + return _ref29.apply(this, arguments); }; }(); @@ -49362,24 +49471,12 @@ List.prototype.filterByTag = function () { /** * Traverses packet tree and returns first matching packet * @param {module:enums.packet} type The packet type - * @returns {module:packet/packet|null} + * @returns {module:packet/packet|undefined} */ List.prototype.findPacket = function (type) { - var packetlist = this.filterByTag(type); - if (packetlist.length) { - return packetlist[0]; - } - var found = null; - for (var i = 0; i < this.length; i++) { - if (this[i].packets.length) { - found = this[i].packets.findPacket(type); - if (found) { - return found; - } - } - } - - return null; + return this.find(function (packet) { + return packet.tag === type; + }); }; /** @@ -49538,6 +49635,11 @@ function PublicKey() { * @type {Date} */ this.created = _util2.default.normalizeDate(date); + /** + * Public key algorithm. + * @type {String} + */ + this.algorithm = null; /** * Algorithm specific params * @type {Array} @@ -49811,7 +49913,10 @@ function PublicKeyEncryptedSessionKey() { this.version = 3; this.publicKeyId = new _keyid2.default(); + this.publicKeyAlgorithm = null; + this.sessionKey = null; + this.sessionKeyAlgorithm = null; /** @type {Array} */ this.encrypted = []; @@ -49983,7 +50088,7 @@ PublicKeyEncryptedSessionKey.prototype.decrypt = function () { break; } - throw new Error('Checksum mismatch'); + throw new Error('Decryption error'); case 12: this.sessionKey = key; @@ -51536,43 +51641,52 @@ Signature.prototype.verify = function () { case 0: publicKeyAlgorithm = _enums2.default.write(_enums2.default.publicKey, this.publicKeyAlgorithm); hashAlgorithm = _enums2.default.write(_enums2.default.hash, this.hashAlgorithm); + + if (!(publicKeyAlgorithm !== _enums2.default.write(_enums2.default.publicKey, key.algorithm))) { + _context5.next = 4; + break; + } + + throw new Error('Public key algorithm used to sign signature does not match issuer key algorithm.'); + + case 4: toHash = void 0; hash = void 0; if (!this.hashed) { - _context5.next = 8; + _context5.next = 10; break; } hash = this.hashed; - _context5.next = 12; + _context5.next = 14; break; - case 8: + case 10: toHash = this.toHash(signatureType, data); - _context5.next = 11; + _context5.next = 13; return this.hash(signatureType, data, toHash); - case 11: + case 13: hash = _context5.sent; - case 12: - _context5.next = 14; + case 14: + _context5.next = 16; return _webStreamTools2.default.readToEnd(hash); - case 14: + case 16: hash = _context5.sent; if (!(this.signedHashValue[0] !== hash[0] || this.signedHashValue[1] !== hash[1])) { - _context5.next = 19; + _context5.next = 21; break; } this.verified = false; - _context5.next = 31; + _context5.next = 33; break; - case 19: + case 21: mpicount = 0; // Algorithm-Specific Fields for RSA signatures: // - multiprecision number (MPI) of RSA signature value m**d mod n. @@ -51592,10 +51706,10 @@ Signature.prototype.verify = function () { endian = publicKeyAlgorithm === _enums2.default.publicKey.eddsa ? 'le' : 'be'; mpi = []; i = 0; - _context5.next = 26; + _context5.next = 28; return _webStreamTools2.default.readToEnd(this.signature); - case 26: + case 28: this.signature = _context5.sent; for (j = 0; j < mpicount; j++) { @@ -51603,16 +51717,16 @@ Signature.prototype.verify = function () { i += mpi[j].read(this.signature.subarray(i, this.signature.length), endian); } - _context5.next = 30; + _context5.next = 32; return _crypto2.default.signature.verify(publicKeyAlgorithm, hashAlgorithm, mpi, key.params, toHash, hash); - case 30: + case 32: this.verified = _context5.sent; - case 31: + case 33: return _context5.abrupt('return', this.verified); - case 32: + case 34: case 'end': return _context5.stop(); } diff --git a/dist/compat/openpgp.min.js b/dist/compat/openpgp.min.js index 4120064b..5748eeb7 100644 --- a/dist/compat/openpgp.min.js +++ b/dist/compat/openpgp.min.js @@ -1,2 +1,2 @@ -/*! OpenPGP.js v4.2.2 - 2018-12-07 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).openpgp=e()}}(function(){return function(){return function e(t,r,n){function a(s,o){if(!r[s]){if(!t[s]){var u="function"==typeof require&&require;if(!o&&u)return u(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=r[s]={exports:{}};t[s][0].call(f.exports,function(e){return a(t[s][1][e]||e)},f,f.exports,e,t,r,n)}return r[s].exports}for(var i="function"==typeof require&&require,s=0;s0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");mt(this)}},n(e,[{key:"closed",get:function(){return!1===pt(this)?Promise.reject(Xt("closed")):this._closedPromise}}]),e}(),lt=function(){function e(e){if(!Qe(e))throw new TypeError("ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a byte source");if(!1===Tt(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");if(et(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");bt(this,e),this._readIntoRequests=[]}var t=e.prototype;return t.cancel=function(e){return ht(this)?void 0===this._ownerReadableStream?Promise.reject(Yt("cancel")):yt(this,e):Promise.reject($t("cancel"))},t.read=function(e){return ht(this)?void 0===this._ownerReadableStream?Promise.reject(Yt("read from")):ArrayBuffer.isView(e)?!0===Pe(e.buffer)?Promise.reject(new TypeError("Cannot read into a view onto a detached ArrayBuffer")):0===e.byteLength?Promise.reject(new TypeError("view must have non-zero byteLength")):function(e,t){var r=e._ownerReadableStream;return r._disturbed=!0,"errored"===r._state?Promise.reject(r._storedError):function(e,t){var r=e._controlledReadableByteStream,n=1;t.constructor!==DataView&&(n=t.constructor.BYTES_PER_ELEMENT);var a=t.constructor,i={buffer:Me(t.buffer),byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:n,ctor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(i),tt(r);if("closed"===r._state){var s=new t.constructor(i.buffer,i.byteOffset,0);return Promise.resolve(Se(s,!0))}if(e._queueTotalSize>0){if(!0===zt(e,i)){var o=Ot(i);return Nt(e),Promise.resolve(Se(o,!1))}if(!0===e._closeRequested){var u=new TypeError("Insufficient bytes to fill elements in the given buffer");return Gt(e,u),Promise.reject(u)}}e._pendingPullIntos.push(i);var c=tt(r);return Bt(e),c}(r._readableStreamController,t)}(this,e):Promise.reject(new TypeError("view must be an array buffer view")):Promise.reject($t("read"))},t.releaseLock=function(){if(!ht(this))throw $t("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");mt(this)}},n(e,[{key:"closed",get:function(){return ht(this)?this._closedPromise:Promise.reject($t("closed"))}}]),e}();function ht(e){return!!Be(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")}function pt(e){return!!Be(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readRequests")}function bt(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?function(e){e._closedPromise=new Promise(function(t,r){e._closedPromise_resolve=t,e._closedPromise_reject=r})}(e):"closed"===t._state?function(e){e._closedPromise=Promise.resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0}(e):(function(e,t){e._closedPromise=Promise.reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0}(e,t._storedError),e._closedPromise.catch(function(){}))}function yt(e,t){return nt(e._ownerReadableStream,t)}function mt(e){"readable"===e._ownerReadableStream._state?Jt(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){e._closedPromise=Promise.reject(t)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._closedPromise.catch(function(){}),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function vt(e){var t=e._ownerReadableStream;return t._disturbed=!0,"closed"===t._state?Promise.resolve(Se(void 0,!0)):"errored"===t._state?Promise.reject(t._storedError):t._readableStreamController[Ve]()}var gt=function(){function e(){throw new TypeError}var t=e.prototype;return t.close=function(){if(!1===_t(this))throw Qt("close");if(!1===jt(this))throw new TypeError("The stream is not in a state that permits close");xt(this)},t.enqueue=function(e){if(!1===_t(this))throw Qt("enqueue");if(!1===jt(this))throw new TypeError("The stream is not in a state that permits enqueue");return At(this,e)},t.error=function(e){if(!1===_t(this))throw Qt("error");St(this,e)},t[He]=function(e){return Ke(this),this._cancelAlgorithm(e)},t[Ve]=function(){var e=this._controlledReadableStream;if(this._queue.length>0){var t=Ue(this);return!0===this._closeRequested&&0===this._queue.length?at(e):wt(this),Promise.resolve(Se(t,!1))}var r=rt(e);return wt(this),r},n(e,[{key:"desiredSize",get:function(){if(!1===_t(this))throw Qt("desiredSize");return Et(this)}}]),e}();function _t(e){return!!Be(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")}function wt(e){!1!==kt(e)&&(!0!==e._pulling?(e._pulling=!0,e._pullAlgorithm().then(function(){if(e._pulling=!1,!0===e._pullAgain)return e._pullAgain=!1,wt(e)},function(t){St(e,t)}).catch(Ie)):e._pullAgain=!0)}function kt(e){var t=e._controlledReadableStream;return!1!==jt(e)&&!1!==e._started&&(!0===et(t)&&ut(t)>0||Et(e)>0)}function xt(e){var t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&at(t)}function At(e,t){var r=e._controlledReadableStream;if(!0===et(r)&&ut(r)>0)st(r,t,!1);else{var n;try{n=e._strategySizeAlgorithm(t)}catch(t){throw St(e,t),t}try{Oe(e,t,n)}catch(t){throw St(e,t),t}}wt(e)}function St(e,t){var r=e._controlledReadableStream;"readable"===r._state&&(Ke(e),it(r,t))}function Et(e){var t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function jt(e){var t=e._controlledReadableStream._state;return!1===e._closeRequested&&"readable"===t}function Pt(e,t,r,n,a,i,s){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,Ke(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=s,t._strategyHWM=i,t._pullAlgorithm=n,t._cancelAlgorithm=a,e._readableStreamController=t;var o=r();Promise.resolve(o).then(function(){t._started=!0,wt(t)},function(e){St(t,e)}).catch(Ie)}var Mt=function(){function e(){throw new TypeError("ReadableStreamBYOBRequest cannot be used directly")}var t=e.prototype;return t.respond=function(e){if(!1===Rt(this))throw er("respond");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");if(!0===Pe(this._view.buffer))throw new TypeError("The BYOB request's buffer has been detached and so cannot be used as a response");!function(e,t){if(t=Number(t),!1===Ee(t))throw new RangeError("bytesWritten must be a finite");qt(e,t)}(this._associatedReadableByteStreamController,e)},t.respondWithNewView=function(e){if(!1===Rt(this))throw er("respond");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");if(!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(!0===Pe(e.buffer))throw new TypeError("The supplied view's buffer has been detached and so cannot be used as a response");!function(e,t){var r=e._pendingPullIntos[0];if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.byteLength!==t.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");r.buffer=t.buffer,qt(e,t.byteLength)}(this._associatedReadableByteStreamController,e)},n(e,[{key:"view",get:function(){if(!1===Rt(this))throw er("view");return this._view}}]),e}(),Ct=function(){function e(){throw new TypeError("ReadableByteStreamController constructor cannot be used directly")}var t=e.prototype;return t.close=function(){if(!1===Tt(this))throw tr("close");if(!0===this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");var e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError("The stream (in "+e+" state) is not in the readable state and cannot be closed");!function(e){var t=e._controlledReadableByteStream;if(e._queueTotalSize>0)e._closeRequested=!0;else{if(e._pendingPullIntos.length>0)if(e._pendingPullIntos[0].bytesFilled>0){var r=new TypeError("Insufficient bytes to fill elements in the given buffer");throw Gt(e,r),r}at(t)}}(this)},t.enqueue=function(e){if(!1===Tt(this))throw tr("enqueue");if(!0===this._closeRequested)throw new TypeError("stream is closed or draining");var t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError("The stream (in "+t+" state) is not in the readable state and cannot be enqueued to");if(!ArrayBuffer.isView(e))throw new TypeError("You can only enqueue array buffer views when using a ReadableByteStreamController");if(!0===Pe(e.buffer))throw new TypeError("Cannot enqueue a view onto a detached ArrayBuffer");!function(e,t){var r=e._controlledReadableByteStream,n=t.buffer,a=t.byteOffset,i=t.byteLength,s=Me(n);if(!0===ft(r))if(0===ut(r))Kt(e,s,a,i);else{st(r,new Uint8Array(s,a,i),!1)}else!0===ct(r)?(Kt(e,s,a,i),Lt(e)):Kt(e,s,a,i);Bt(e)}(this,e)},t.error=function(e){if(!1===Tt(this))throw tr("error");Gt(this,e)},t[He]=function(e){return this._pendingPullIntos.length>0&&(this._pendingPullIntos[0].bytesFilled=0),Ke(this),this._cancelAlgorithm(e)},t[Ve]=function(){var e=this._controlledReadableByteStream;if(this._queueTotalSize>0){var t,r=this._queue.shift();this._queueTotalSize-=r.byteLength,Nt(this);try{t=new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}catch(e){return Promise.reject(e)}return Promise.resolve(Se(t,!1))}var n=this._autoAllocateChunkSize;if(void 0!==n){var a;try{a=new ArrayBuffer(n)}catch(e){return Promise.reject(e)}var i={buffer:a,byteOffset:0,byteLength:n,bytesFilled:0,elementSize:1,ctor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(i)}var s=rt(e);return Bt(this),s},n(e,[{key:"byobRequest",get:function(){if(!1===Tt(this))throw tr("byobRequest");if(void 0===this._byobRequest&&this._pendingPullIntos.length>0){var e=this._pendingPullIntos[0],t=new Uint8Array(e.buffer,e.byteOffset+e.bytesFilled,e.byteLength-e.bytesFilled),r=Object.create(Mt.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(r,this,t),this._byobRequest=r}return this._byobRequest}},{key:"desiredSize",get:function(){if(!1===Tt(this))throw tr("desiredSize");return Ht(this)}}]),e}();function Tt(e){return!!Be(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")}function Rt(e){return!!Be(e)&&!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")}function Bt(e){!1!==function(e){var t=e._controlledReadableByteStream;return"readable"===t._state&&(!0!==e._closeRequested&&(!1!==e._started&&(!0===ft(t)&&ut(t)>0||(!0===ct(t)&&ot(t)>0||Ht(e)>0))))}(e)&&(!0!==e._pulling?(e._pulling=!0,e._pullAlgorithm().then(function(){e._pulling=!1,!0===e._pullAgain&&(e._pullAgain=!1,Bt(e))},function(t){Gt(e,t)}).catch(Ie)):e._pullAgain=!0)}function It(e){Ft(e),e._pendingPullIntos=[]}function Ut(e,t){var r=!1;"closed"===e._state&&(r=!0);var n=Ot(t);"default"===t.readerType?st(e,n,r):function(e,t,r){e._reader._readIntoRequests.shift()._resolve(Se(t,r))}(e,n,r)}function Ot(e){var t=e.bytesFilled,r=e.elementSize;return new e.ctor(e.buffer,e.byteOffset,t/r)}function Kt(e,t,r,n){e._queue.push({buffer:t,byteOffset:r,byteLength:n}),e._queueTotalSize+=n}function zt(e,t){var r=t.elementSize,n=t.bytesFilled-t.bytesFilled%r,a=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),i=t.bytesFilled+a,s=i-i%r,o=a,u=!1;s>n&&(o=s-t.bytesFilled,u=!0);for(var c=e._queue;o>0;){var f=c[0],d=Math.min(o,f.byteLength),l=t.byteOffset+t.bytesFilled;xe(t.buffer,l,f.buffer,f.byteOffset,d),f.byteLength===d?c.shift():(f.byteOffset+=d,f.byteLength-=d),e._queueTotalSize-=d,Dt(e,d,t),o-=d}return u}function Dt(e,t,r){Ft(e),r.bytesFilled+=t}function Nt(e){0===e._queueTotalSize&&!0===e._closeRequested?at(e._controlledReadableByteStream):Bt(e)}function Ft(e){void 0!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=void 0,e._byobRequest=void 0)}function Lt(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;var t=e._pendingPullIntos[0];!0===zt(e,t)&&(Wt(e),Ut(e._controlledReadableByteStream,t))}}function qt(e,t){var r=e._pendingPullIntos[0];if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream");!function(e,t){t.buffer=Me(t.buffer);var r=e._controlledReadableByteStream;if(!0===ct(r))for(;ot(r)>0;)Ut(r,Wt(e))}(e,r)}else!function(e,t,r){if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range");if(Dt(e,t,r),!(r.bytesFilled0){var a=r.byteOffset+r.bytesFilled,i=r.buffer.slice(a-n,a);Kt(e,i,0,i.byteLength)}r.buffer=Me(r.buffer),r.bytesFilled-=n,Ut(e._controlledReadableByteStream,r),Lt(e)}}(e,t,r);Bt(e)}function Wt(e){var t=e._pendingPullIntos.shift();return Ft(e),t}function Gt(e,t){var r=e._controlledReadableByteStream;"readable"===r._state&&(It(e),Ke(e),it(r,t))}function Ht(e){var t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function Vt(e,t,r,n,a,i,s){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,It(t),t._queue=t._queueTotalSize=void 0,Ke(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=Ce(i),t._pullAlgorithm=n,t._cancelAlgorithm=a,t._autoAllocateChunkSize=s,t._pendingPullIntos=[],e._readableStreamController=t;var o=r();Promise.resolve(o).then(function(){t._started=!0,Bt(t)},function(e){Gt(t,e)}).catch(Ie)}function Zt(e){return new TypeError("ReadableStream.prototype."+e+" can only be used on a ReadableStream")}function Yt(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function Xt(e){return new TypeError("ReadableStreamDefaultReader.prototype."+e+" can only be used on a ReadableStreamDefaultReader")}function Jt(e,t){e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0}function $t(e){return new TypeError("ReadableStreamBYOBReader.prototype."+e+" can only be used on a ReadableStreamBYOBReader")}function Qt(e){return new TypeError("ReadableStreamDefaultController.prototype."+e+" can only be used on a ReadableStreamDefaultController")}function er(e){return new TypeError("ReadableStreamBYOBRequest.prototype."+e+" can only be used on a ReadableStreamBYOBRequest")}function tr(e){return new TypeError("ReadableByteStreamController.prototype."+e+" can only be used on a ReadableByteStreamController")}var rr=Ye.ReadableStream,nr=v.createDataProperty,ar=function(){function e(e){var t=e.highWaterMark;nr(this,"highWaterMark",t)}return e.prototype.size=function(e){return e.byteLength},e}(),ir=v.createDataProperty,sr=function(){function e(e){var t=e.highWaterMark;ir(this,"highWaterMark",t)}return e.prototype.size=function(){return 1},e}(),or=(j("streams:transform-stream:verbose"),v.InvokeOrNoop),ur=v.CreateAlgorithmFromUnderlyingMethod,cr=v.PromiseCall,fr=v.typeIsObject,dr=v.ValidateAndNormalizeHighWaterMark,lr=(v.IsNonNegativeNumber,v.MakeSizeAlgorithmFromSizeFunction),hr=Ye.CreateReadableStream,pr=Ye.ReadableStreamDefaultControllerClose,br=Ye.ReadableStreamDefaultControllerEnqueue,yr=Ye.ReadableStreamDefaultControllerError,mr=Ye.ReadableStreamDefaultControllerGetDesiredSize,vr=Ye.ReadableStreamDefaultControllerHasBackpressure,gr=Ye.ReadableStreamDefaultControllerCanCloseOrEnqueue,_r=q.CreateWritableStream,wr=q.WritableStreamDefaultControllerErrorIfNeeded,kr=function(){function e(e,t,r){if(void 0===e&&(e={}),void 0===t&&(t={}),void 0===r&&(r={}),void 0!==e.readableType)throw new RangeError("Invalid readable type specified");if(void 0!==e.writableType)throw new RangeError("Invalid writable type specified");var n=t.size,a=lr(n),i=t.highWaterMark;void 0===i&&(i=1),i=dr(i);var s,o=r.size,u=lr(o),c=r.highWaterMark;void 0===c&&(c=0),c=dr(c),xr(this,new Promise(function(e){s=e}),i,a,c,u),function(e,t){var r=Object.create(Pr.prototype),n=function(e){try{return Tr(r,e),Promise.resolve()}catch(e){return Promise.reject(e)}},a=t.transform;if(void 0!==a){if("function"!=typeof a)throw new TypeError("transform is not a method");n=function(n){return cr(a,t,[n,r]).catch(function(t){throw Sr(e,t),t})}}var i=ur(t,"flush",0,[r]);Cr(e,r,n,i)}(this,e);var f=or(e,"start",[this._transformStreamController]);s(f)}return n(e,[{key:"readable",get:function(){if(!1===Ar(this))throw Br("readable");return this._readable}},{key:"writable",get:function(){if(!1===Ar(this))throw Br("writable");return this._writable}}]),e}();function xr(e,t,r,n,a,i){function s(){return t}e._writable=_r(s,function(t){return function(e,t){var r=e._transformStreamController;return!0===e._backpressure?e._backpressureChangePromise.then(function(){var n=e._writable;if("erroring"===n._state)throw n._storedError;return r._transformAlgorithm(t)}):r._transformAlgorithm(t)}(e,t)},function(){return function(e){var t=e._readable;return e._transformStreamController._flushAlgorithm().then(function(){if("errored"===t._state)throw t._storedError;var e=t._readableStreamController;!0===gr(e)&&pr(e)}).catch(function(r){throw Sr(e,r),t._storedError})}(e)},function(t){return function(e,t){return Sr(e,t),Promise.resolve()}(e,t)},r,n),e._readable=hr(s,function(){return function(e){return jr(e,!1),e._backpressureChangePromise}(e)},function(t){return Er(e,t),Promise.resolve()},a,i),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,jr(e,!0),e._transformStreamController=void 0}function Ar(e){return!!fr(e)&&!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")}function Sr(e,t){yr(e._readable._readableStreamController,t),Er(e,t)}function Er(e,t){wr(e._writable._writableStreamController,t),!0===e._backpressure&&jr(e,!1)}function jr(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=new Promise(function(t){e._backpressureChangePromise_resolve=t}),e._backpressure=t}var Pr=function(){function e(){throw new TypeError("TransformStreamDefaultController instances cannot be created directly")}var t=e.prototype;return t.enqueue=function(e){if(!1===Mr(this))throw Rr("enqueue");Tr(this,e)},t.error=function(e){if(!1===Mr(this))throw Rr("error");!function(e,t){Sr(e._controlledTransformStream,t)}(this,e)},t.terminate=function(){if(!1===Mr(this))throw Rr("terminate");var e,t;e=this._controlledTransformStream,t=e._readable._readableStreamController,!0===gr(t)&&pr(t),Er(e,new TypeError("TransformStream terminated"))},n(e,[{key:"desiredSize",get:function(){if(!1===Mr(this))throw Rr("desiredSize");var e=this._controlledTransformStream._readable._readableStreamController;return mr(e)}}]),e}();function Mr(e){return!!fr(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")}function Cr(e,t,r,n){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=n}function Tr(e,t){var r=e._controlledTransformStream,n=r._readable._readableStreamController;if(!1===gr(n))throw new TypeError("Readable side is not in a state that permits enqueue");try{br(n,t)}catch(e){throw Er(r,e),r._readable._storedError}vr(n)!==r._backpressure&&jr(r,!0)}function Rr(e){return new TypeError("TransformStreamDefaultController.prototype."+e+" can only be used on a TransformStreamDefaultController")}function Br(e){return new TypeError("TransformStream.prototype."+e+" can only be used on a TransformStream")}var Ir=kr;void 0!==u&&a(u,{ReadableStream:rr,WritableStream:ke,ByteLengthQueuingStrategy:ar,CountQueuingStrategy:sr,TransformStream:Ir}),t.ReadableStream=rr,t.WritableStream=ke,t.ByteLengthQueuingStrategy=ar,t.CountQueuingStrategy=sr,t.TransformStream=Ir,Object.defineProperty(t,"__esModule",{value:!0})})("object"==typeof r&&void 0!==t?r:this.WebStreamsPolyfill={})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(e,t,r){"use strict";var n=i(e("babel-runtime/helpers/classCallCheck")),a=i(e("babel-runtime/helpers/createClass"));function i(e){return e&&e.__esModule?e:{default:e}}var s=e("email-addresses");function o(e){if("group"===e.type)return new u(e.name,e.addresses.map(o));var t=void 0;e.parts.comments&&(t=e.parts.comments.map(function(e){return e.tokens.trim()}).join(" ").trim());var r=e.local;return!e.name&&/:/.test(r)&&(r='"'+r+'"'),new c(e.name,r+"@"+e.domain,t)}r.parse=function(e,t){if(!e)throw"Nothing to parse";e=e.trim();var r=s({input:e,rfc6532:!0,partial:!1,simple:!1,strict:!1,rejectTLD:!1,startAt:t||null});if(!r)throw"No results";return r.addresses.map(o)},r.parseFrom=function(e){return r.parse(e,"from")},r.parseSender=function(e){return r.parse(e,"sender")},r.parseReplyTo=function(e){return r.parse(e,"reply-to")};var u=function(){function e(t,r){(0,n.default)(this,e),this.phrase=t,this.addresses=r}return(0,a.default)(e,[{key:"format",value:function(){return this.phrase+":"+this.addresses.map(function(e){return e.format()}).join(",")}},{key:"name",value:function(){var e=this.phrase;e&&e.length||(e=this.comment);var t=f(e);return t}}]),e}(),c=function(){function e(t,r,a){(0,n.default)(this,e),this.phrase=t||"",this.address=r||"",this.comment=a||""}return(0,a.default)(e,[{key:"host",value:function(){var e=/.*@(.*)$/.exec(this.address);return e?e[1]:null}},{key:"user",value:function(){var e=/^(.*)@/.exec(this.address);return e?e[1]:null}},{key:"format",value:function(){var e=this.phrase,t=this.address,r=this.comment,n=[],a=new RegExp("^[\\-\\w !#$%&'*+/=?^`{|}~]+$");return e&&e.length?(n.push(a.test(e.trim())?e:function(e){if(/^"/.test(e))return!0;var t=void 0;for(;t=/^[\s\S]*?([\s\S])"/.exec(e);){if("\\"!==t[1])return!0;e=e.substr(t[0].length)}return!1}(e)?e:'"'+e+'"'),t&&t.length&&n.push("<"+t+">")):t&&t.length&&n.push(t),r&&/\S/.test(r)&&(r=r.replace(/^\s*\(?/,"(").replace(/\)?\s*$/,")")),r&&r.length&&n.push(r),n.join(" ")}},{key:"name",value:function(){var e=this.phrase,t=this.address;e&&e.length||(e=this.comment);var r=f(e);if(""===r){var n=/([^%.@_]+([._][^%.@_]+)+)[@%]/.exec(t);n&&(r=n[1].replace(/[._]+/g," "),r=f(r))}if(""===r&&/\/g=/i.test(t)){var a=/\/g=([^/]*)/i.exec(t);r=f(a[1]+" "+(a=/\/s=([^/]*)/i.exec(t))[1])}return r}}]),e}();function f(e){return/=?.*?\?=/.test(e)?"":(e=(e=e.trim()).replace(/\s+/," "),/^[\d ]+$/.test(e)?"":(e=e.replace(/^\((.*)\)$/,"$1").replace(/^"(.*)"$/,"$1").replace(/\(.*?\)/g,"").replace(/\\/g,"").replace(/^"(.*)"$/,"$1").replace(/^([^\s]+) ?, ?(.*)$/,"$2 $1").replace(/,.*/,""),(r.isAllUpper(e)||r.isAllLower(e))&&(e=r.nameCase(e)),e=e.replace(/\[[^\]]*\]/g,"").replace(/(^[\s'"]+|[\s'"]+$)/g,"").replace(/\s{2,}/g," ")))}r.Address=c,r.isAllLower=function(e){return e===e.toLowerCase()},r.isAllUpper=function(e){return e===e.toUpperCase()},r.nameCase=function(e){return e.toLowerCase().replace(/\b(\w+)/g,function(e,t){return t.charAt(0).toUpperCase()+t.slice(1)}).replace(/\bMc(\w)/gi,function(e,t){return"Mc"+t.toUpperCase()}).replace(/\bo'(\w)/gi,function(e,t){return"O'"+t.toUpperCase()}).replace(/\b(x*(ix)?v*(iv)?i*)\b/gi,function(e,t){return t.toUpperCase()})}},{"babel-runtime/helpers/classCallCheck":34,"babel-runtime/helpers/createClass":35,"email-addresses":294}],3:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.AES_asm=function(){var e,t,r=!1;function n(r,n){var a=e[(t[r]+t[n])%255];return 0!==r&&0!==n||(a=0),a}var a,i,s,o,u=!1;function c(){function c(r){var n,a,i;for(a=i=function(r){var n=e[255-t[r]];return 0===r&&(n=0),n}(r),n=0;n<4;n++)i^=a=255&(a<<1|a>>>7);return i^=99}r||function(){e=[],t=[];var n,a,i=1;for(n=0;n<255;n++)e[n]=i,a=128&i,i<<=1,i&=255,128===a&&(i^=27),i^=e[n],t[e[n]]=n;e[255]=e[0],t[0]=0,r=!0}(),a=[],i=[],s=[[],[],[],[]],o=[[],[],[],[]];for(var f=0;f<256;f++){var d=c(f);a[f]=d,i[d]=f,s[0][f]=n(2,d)<<24|d<<16|d<<8|n(3,d),o[0][d]=n(14,f)<<24|n(9,f)<<16|n(13,f)<<8|n(11,f);for(var l=1;l<4;l++)s[l][f]=s[l-1][f]>>>8|s[l-1][f]<<24,o[l][d]=o[l-1][d]>>>8|o[l-1][d]<<24}u=!0}var f=function(e,t){u||c();var r=new Uint32Array(t);r.set(a,512),r.set(i,768);for(var n=0;n<4;n++)r.set(s[n],4096+1024*n>>2),r.set(o[n],8192+1024*n>>2);var f=function(e,t,r){"use asm";var n=0,a=0,i=0,s=0,o=0,u=0,c=0,f=0,d=0,l=0,h=0,p=0,b=0,y=0,m=0,v=0,g=0,_=0,w=0,k=0,x=0;var A=new e.Uint32Array(r),S=new e.Uint8Array(r);function E(e,t,r,o,u,c,f,d){e=e|0;t=t|0;r=r|0;o=o|0;u=u|0;c=c|0;f=f|0;d=d|0;var l=0,h=0,p=0,b=0,y=0,m=0,v=0,g=0;l=r|0x400,h=r|0x800,p=r|0xc00;u=u^A[(e|0)>>2],c=c^A[(e|4)>>2],f=f^A[(e|8)>>2],d=d^A[(e|12)>>2];for(g=16;(g|0)<=o<<4;g=g+16|0){b=A[(r|u>>22&1020)>>2]^A[(l|c>>14&1020)>>2]^A[(h|f>>6&1020)>>2]^A[(p|d<<2&1020)>>2]^A[(e|g|0)>>2],y=A[(r|c>>22&1020)>>2]^A[(l|f>>14&1020)>>2]^A[(h|d>>6&1020)>>2]^A[(p|u<<2&1020)>>2]^A[(e|g|4)>>2],m=A[(r|f>>22&1020)>>2]^A[(l|d>>14&1020)>>2]^A[(h|u>>6&1020)>>2]^A[(p|c<<2&1020)>>2]^A[(e|g|8)>>2],v=A[(r|d>>22&1020)>>2]^A[(l|u>>14&1020)>>2]^A[(h|c>>6&1020)>>2]^A[(p|f<<2&1020)>>2]^A[(e|g|12)>>2];u=b,c=y,f=m,d=v}n=A[(t|u>>22&1020)>>2]<<24^A[(t|c>>14&1020)>>2]<<16^A[(t|f>>6&1020)>>2]<<8^A[(t|d<<2&1020)>>2]^A[(e|g|0)>>2],a=A[(t|c>>22&1020)>>2]<<24^A[(t|f>>14&1020)>>2]<<16^A[(t|d>>6&1020)>>2]<<8^A[(t|u<<2&1020)>>2]^A[(e|g|4)>>2],i=A[(t|f>>22&1020)>>2]<<24^A[(t|d>>14&1020)>>2]<<16^A[(t|u>>6&1020)>>2]<<8^A[(t|c<<2&1020)>>2]^A[(e|g|8)>>2],s=A[(t|d>>22&1020)>>2]<<24^A[(t|u>>14&1020)>>2]<<16^A[(t|c>>6&1020)>>2]<<8^A[(t|f<<2&1020)>>2]^A[(e|g|12)>>2]}function j(e,t,r,n){e=e|0;t=t|0;r=r|0;n=n|0;E(0x0000,0x0800,0x1000,x,e,t,r,n)}function P(e,t,r,n){e=e|0;t=t|0;r=r|0;n=n|0;var i=0;E(0x0400,0x0c00,0x2000,x,e,n,r,t);i=a,a=s,s=i}function M(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;E(0x0000,0x0800,0x1000,x,o^e,u^t,c^r,f^d);o=n,u=a,c=i,f=s}function C(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;var l=0;E(0x0400,0x0c00,0x2000,x,e,d,r,t);l=a,a=s,s=l;n=n^o,a=a^u,i=i^c,s=s^f;o=e,u=t,c=r,f=d}function T(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;E(0x0000,0x0800,0x1000,x,o,u,c,f);o=n=n^e,u=a=a^t,c=i=i^r,f=s=s^d}function R(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;E(0x0000,0x0800,0x1000,x,o,u,c,f);n=n^e,a=a^t,i=i^r,s=s^d;o=e,u=t,c=r,f=d}function B(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;E(0x0000,0x0800,0x1000,x,o,u,c,f);o=n,u=a,c=i,f=s;n=n^e,a=a^t,i=i^r,s=s^d}function I(e,t,r,o){e=e|0;t=t|0;r=r|0;o=o|0;E(0x0000,0x0800,0x1000,x,d,l,h,p);p=~v&p|v&p+1;h=~m&h|m&h+((p|0)==0);l=~y&l|y&l+((h|0)==0);d=~b&d|b&d+((l|0)==0);n=n^e;a=a^t;i=i^r;s=s^o}function U(e,t,r,n){e=e|0;t=t|0;r=r|0;n=n|0;var a=0,i=0,s=0,d=0,l=0,h=0,p=0,b=0,y=0,m=0;e=e^o,t=t^u,r=r^c,n=n^f;a=g|0,i=_|0,s=w|0,d=k|0;for(;(y|0)<128;y=y+1|0){if(a>>>31){l=l^e,h=h^t,p=p^r,b=b^n}a=a<<1|i>>>31,i=i<<1|s>>>31,s=s<<1|d>>>31,d=d<<1;m=n&1;n=n>>>1|r<<31,r=r>>>1|t<<31,t=t>>>1|e<<31,e=e>>>1;if(m)e=e^0xe1000000}o=l,u=h,c=p,f=b}function O(e){e=e|0;x=e}function K(e,t,r,o){e=e|0;t=t|0;r=r|0;o=o|0;n=e,a=t,i=r,s=o}function z(e,t,r,n){e=e|0;t=t|0;r=r|0;n=n|0;o=e,u=t,c=r,f=n}function D(e,t,r,n){e=e|0;t=t|0;r=r|0;n=n|0;d=e,l=t,h=r,p=n}function N(e,t,r,n){e=e|0;t=t|0;r=r|0;n=n|0;b=e,y=t,m=r,v=n}function F(e,t,r,n){e=e|0;t=t|0;r=r|0;n=n|0;p=~v&p|v&n,h=~m&h|m&r,l=~y&l|y&t,d=~b&d|b&e}function L(e){e=e|0;if(e&15)return-1;S[e|0]=n>>>24,S[e|1]=n>>>16&255,S[e|2]=n>>>8&255,S[e|3]=n&255,S[e|4]=a>>>24,S[e|5]=a>>>16&255,S[e|6]=a>>>8&255,S[e|7]=a&255,S[e|8]=i>>>24,S[e|9]=i>>>16&255,S[e|10]=i>>>8&255,S[e|11]=i&255,S[e|12]=s>>>24,S[e|13]=s>>>16&255,S[e|14]=s>>>8&255,S[e|15]=s&255;return 16}function q(e){e=e|0;if(e&15)return-1;S[e|0]=o>>>24,S[e|1]=o>>>16&255,S[e|2]=o>>>8&255,S[e|3]=o&255,S[e|4]=u>>>24,S[e|5]=u>>>16&255,S[e|6]=u>>>8&255,S[e|7]=u&255,S[e|8]=c>>>24,S[e|9]=c>>>16&255,S[e|10]=c>>>8&255,S[e|11]=c&255,S[e|12]=f>>>24,S[e|13]=f>>>16&255,S[e|14]=f>>>8&255,S[e|15]=f&255;return 16}function W(){j(0,0,0,0);g=n,_=a,w=i,k=s}function G(e,t,r){e=e|0;t=t|0;r=r|0;var o=0;if(t&15)return-1;while((r|0)>=16){V[e&7](S[t|0]<<24|S[t|1]<<16|S[t|2]<<8|S[t|3],S[t|4]<<24|S[t|5]<<16|S[t|6]<<8|S[t|7],S[t|8]<<24|S[t|9]<<16|S[t|10]<<8|S[t|11],S[t|12]<<24|S[t|13]<<16|S[t|14]<<8|S[t|15]);S[t|0]=n>>>24,S[t|1]=n>>>16&255,S[t|2]=n>>>8&255,S[t|3]=n&255,S[t|4]=a>>>24,S[t|5]=a>>>16&255,S[t|6]=a>>>8&255,S[t|7]=a&255,S[t|8]=i>>>24,S[t|9]=i>>>16&255,S[t|10]=i>>>8&255,S[t|11]=i&255,S[t|12]=s>>>24,S[t|13]=s>>>16&255,S[t|14]=s>>>8&255,S[t|15]=s&255;o=o+16|0,t=t+16|0,r=r-16|0}return o|0}function H(e,t,r){e=e|0;t=t|0;r=r|0;var n=0;if(t&15)return-1;while((r|0)>=16){Z[e&1](S[t|0]<<24|S[t|1]<<16|S[t|2]<<8|S[t|3],S[t|4]<<24|S[t|5]<<16|S[t|6]<<8|S[t|7],S[t|8]<<24|S[t|9]<<16|S[t|10]<<8|S[t|11],S[t|12]<<24|S[t|13]<<16|S[t|14]<<8|S[t|15]);n=n+16|0,t=t+16|0,r=r-16|0}return n|0}var V=[j,P,M,C,T,R,B,I];var Z=[M,U];return{set_rounds:O,set_state:K,set_iv:z,set_nonce:D,set_mask:N,set_counter:F,get_state:L,get_iv:q,gcm_init:W,cipher:G,mac:H}}({Uint8Array:Uint8Array,Uint32Array:Uint32Array},e,t);return f.set_key=function(e,t,n,i,s,u,c,d,l){var h=r.subarray(0,60),p=r.subarray(256,316);h.set([t,n,i,s,u,c,d,l]);for(var b=e,y=1;b<4*e+28;b++){var m=h[b-1];(b%e==0||8===e&&b%e==4)&&(m=a[m>>>24]<<24^a[m>>>16&255]<<16^a[m>>>8&255]<<8^a[255&m]),b%e==0&&(m=m<<8^m>>>24^y<<24,y=y<<1^(128&y?27:0)),h[b]=h[b-e]^m}for(var v=0;v=b-4?m:o[0][a[m>>>24]]^o[1][a[m>>>16&255]]^o[2][a[m>>>8&255]]^o[3][a[255&m]];f.set_rounds(e+5)},f};return f.ENC={ECB:0,CBC:2,CFB:4,OFB:6,CTR:7},f.DEC={ECB:1,CBC:3,CFB:5,OFB:6,CTR:7},f.MAC={CBC:0,GCM:1},f.HEAP_DATA=16384,f}()},{}],4:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.AES=void 0;var n=e("./aes.asm"),a=e("../other/utils"),i=e("../other/errors"),s=[],o=[],u=function(){function e(e,t,r,n){void 0===r&&(r=!0),this.pos=0,this.len=0,this.mode=n,this.pos=0,this.len=0,this.key=e,this.iv=t,this.padding=r,this.acquire_asm()}return e.prototype.acquire_asm=function(){void 0===this.heap&&void 0===this.asm&&(this.heap=s.pop()||(0,a._heap_init)().subarray(n.AES_asm.HEAP_DATA),this.asm=o.pop()||(0,n.AES_asm)(null,this.heap.buffer),this.reset(this.key,this.iv))},e.prototype.release_asm=function(){s.push(this.heap),o.push(this.asm),this.heap=void 0,this.asm=void 0},e.prototype.reset=function(e,t){var r=e.length;if(16!==r&&24!==r&&32!==r)throw new i.IllegalArgumentError("illegal key size");var n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(this.asm.set_key(r>>2,n.getUint32(0),n.getUint32(4),n.getUint32(8),n.getUint32(12),r>16?n.getUint32(16):0,r>16?n.getUint32(20):0,r>24?n.getUint32(24):0,r>24?n.getUint32(28):0),void 0!==t){if(16!==t.length)throw new i.IllegalArgumentError("illegal iv size");var a=new DataView(t.buffer,t.byteOffset,t.byteLength);this.asm.set_iv(a.getUint32(0),a.getUint32(4),a.getUint32(8),a.getUint32(12))}else this.asm.set_iv(0,0,0,0)},e.prototype.AES_Encrypt_process=function(e){if(!(0,a.is_bytes)(e))throw new TypeError("data isn't of expected type");this.acquire_asm();for(var t=this.asm,r=this.heap,i=n.AES_asm.ENC[this.mode],s=n.AES_asm.HEAP_DATA,o=this.pos,u=this.len,c=0,f=e.length||0,d=0,l=0,h=new Uint8Array(u+f&-16);f>0;)u+=l=(0,a._heap_write)(r,o+u,e,c,f),c+=l,f-=l,(l=t.cipher(i,s+o,u))&&h.set(r.subarray(o,o+l),d),d+=l,l0;)u+=p=(0,a._heap_write)(r,o+u,e,c,f),c+=p,f-=p,(p=t.cipher(i,s+o,u-(f?0:h)))&&b.set(r.subarray(o,o+p),d),d+=p,p0){if(o%16){if(this.hasOwnProperty("padding"))throw new i.IllegalArgumentError("data length must be a multiple of the block size");o+=16-o%16}if(e.cipher(r,a+s,o),this.hasOwnProperty("padding")&&this.padding){var c=t[s+u-1];if(c<1||c>16||c>u)throw new i.SecurityError("bad padding");for(var f=0,d=c;d>1;d--)f|=c^t[s+u-d];if(f)throw new i.SecurityError("bad padding");u-=c}}var l=new Uint8Array(u);return u>0&&l.set(t.subarray(s,s+u)),this.pos=0,this.len=0,this.release_asm(),l},e}();r.AES=u},{"../other/errors":15,"../other/utils":16,"./aes.asm":3}],5:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.AES_CBC=void 0;var n=o(e("babel-runtime/core-js/object/create")),a=o(e("babel-runtime/core-js/object/set-prototype-of")),i=e("./aes"),s=e("../other/utils");function o(e){return e&&e.__esModule?e:{default:e}}var u,c=(u=a.default||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}u(e,t),e.prototype=null===t?(0,n.default)(t):(r.prototype=t.prototype,new r)}),f=function(e){function t(t,r,n){return void 0===n&&(n=!0),e.call(this,t,r,n,"CBC")||this}return c(t,e),t.encrypt=function(e,r,n,a){return void 0===n&&(n=!0),new t(r,a,n).encrypt(e)},t.decrypt=function(e,r,n,a){return void 0===n&&(n=!0),new t(r,a,n).decrypt(e)},t.prototype.encrypt=function(e){var t=this.AES_Encrypt_process(e),r=this.AES_Encrypt_finish();return(0,s.joinBytes)(t,r)},t.prototype.decrypt=function(e){var t=this.AES_Decrypt_process(e),r=this.AES_Decrypt_finish();return(0,s.joinBytes)(t,r)},t}(i.AES);r.AES_CBC=f},{"../other/utils":16,"./aes":4,"babel-runtime/core-js/object/create":22,"babel-runtime/core-js/object/set-prototype-of":27}],6:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.AES_CFB=void 0;var n=o(e("babel-runtime/core-js/object/create")),a=o(e("babel-runtime/core-js/object/set-prototype-of")),i=e("./aes"),s=e("../other/utils");function o(e){return e&&e.__esModule?e:{default:e}}var u,c=(u=a.default||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}u(e,t),e.prototype=null===t?(0,n.default)(t):(r.prototype=t.prototype,new r)}),f=function(e){function t(t,r){var n=e.call(this,t,r,!0,"CFB")||this;return delete n.padding,n}return c(t,e),t.encrypt=function(e,r,n){return new t(r,n).encrypt(e)},t.decrypt=function(e,r,n){return new t(r,n).decrypt(e)},t.prototype.encrypt=function(e){var t=this.AES_Encrypt_process(e),r=this.AES_Encrypt_finish();return(0,s.joinBytes)(t,r)},t.prototype.decrypt=function(e){var t=this.AES_Decrypt_process(e),r=this.AES_Decrypt_finish();return(0,s.joinBytes)(t,r)},t}(i.AES);r.AES_CFB=f},{"../other/utils":16,"./aes":4,"babel-runtime/core-js/object/create":22,"babel-runtime/core-js/object/set-prototype-of":27}],7:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.AES_CTR=void 0;var n=u(e("babel-runtime/core-js/object/create")),a=u(e("babel-runtime/core-js/object/set-prototype-of")),i=e("./aes"),s=e("../other/errors"),o=e("../other/utils");function u(e){return e&&e.__esModule?e:{default:e}}var c,f=(c=a.default||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}c(e,t),e.prototype=null===t?(0,n.default)(t):(r.prototype=t.prototype,new r)}),d=function(e){function t(t,r){var n=e.call(this,t,void 0,!1,"CTR")||this;return delete n.padding,n.AES_CTR_set_options(r),n}return f(t,e),t.encrypt=function(e,r,n){return new t(r,n).encrypt(e)},t.decrypt=function(e,r,n){return new t(r,n).encrypt(e)},t.prototype.encrypt=function(e){var t=this.AES_Encrypt_process(e),r=this.AES_Encrypt_finish();return(0,o.joinBytes)(t,r)},t.prototype.decrypt=function(e){var t=this.AES_Encrypt_process(e),r=this.AES_Encrypt_finish();return(0,o.joinBytes)(t,r)},t.prototype.AES_CTR_set_options=function(e,t,r){if(void 0!==r){if(r<8||r>48)throw new s.IllegalArgumentError("illegal counter size");var n=Math.pow(2,r)-1;this.asm.set_mask(0,0,n/4294967296|0,0|n)}else r=48,this.asm.set_mask(0,0,65535,4294967295);if(void 0===e)throw new Error("nonce is required");var a=e.length;if(!a||a>16)throw new s.IllegalArgumentError("illegal nonce size");var i=new DataView(new ArrayBuffer(16));if(new Uint8Array(i.buffer).set(e),this.asm.set_nonce(i.getUint32(0),i.getUint32(4),i.getUint32(8),i.getUint32(12)),void 0!==t){if(t<0||t>=Math.pow(2,r))throw new s.IllegalArgumentError("illegal counter value");this.asm.set_counter(0,0,t/4294967296|0,0|t)}},t}(i.AES);r.AES_CTR=d},{"../other/errors":15,"../other/utils":16,"./aes":4,"babel-runtime/core-js/object/create":22,"babel-runtime/core-js/object/set-prototype-of":27}],8:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.AES_ECB=void 0;var n=o(e("babel-runtime/core-js/object/create")),a=o(e("babel-runtime/core-js/object/set-prototype-of")),i=e("./aes"),s=e("../other/utils");function o(e){return e&&e.__esModule?e:{default:e}}var u,c=(u=a.default||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}u(e,t),e.prototype=null===t?(0,n.default)(t):(r.prototype=t.prototype,new r)}),f=function(e){function t(t,r){return void 0===r&&(r=!1),e.call(this,t,void 0,r,"ECB")||this}return c(t,e),t.encrypt=function(e,r,n){return void 0===n&&(n=!1),new t(r,n).encrypt(e)},t.decrypt=function(e,r,n){return void 0===n&&(n=!1),new t(r,n).decrypt(e)},t.prototype.encrypt=function(e){var t=this.AES_Encrypt_process(e),r=this.AES_Encrypt_finish();return(0,s.joinBytes)(t,r)},t.prototype.decrypt=function(e){var t=this.AES_Decrypt_process(e),r=this.AES_Decrypt_finish();return(0,s.joinBytes)(t,r)},t}(i.AES);r.AES_ECB=f},{"../other/utils":16,"./aes":4,"babel-runtime/core-js/object/create":22,"babel-runtime/core-js/object/set-prototype-of":27}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.AES_GCM=void 0;var n=c(e("babel-runtime/core-js/object/create")),a=c(e("babel-runtime/core-js/object/set-prototype-of")),i=e("../other/errors"),s=e("../other/utils"),o=e("./aes"),u=e("./aes.asm");function c(e){return e&&e.__esModule?e:{default:e}}var f,d=(f=a.default||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}f(e,t),e.prototype=null===t?(0,n.default)(t):(r.prototype=t.prototype,new r)}),l=68719476704,h=function(e){function t(t,r,n,a){void 0===a&&(a=16);var s=e.call(this,t,void 0,!1,"CTR")||this;if(s.tagSize=a,s.gamma0=0,s.counter=1,s.asm.gcm_init(),s.tagSize<4||s.tagSize>16)throw new i.IllegalArgumentError("illegal tagSize value");var o=r.length||0,c=new Uint8Array(16);12!==o?(s._gcm_mac_process(r),s.heap[0]=0,s.heap[1]=0,s.heap[2]=0,s.heap[3]=0,s.heap[4]=0,s.heap[5]=0,s.heap[6]=0,s.heap[7]=0,s.heap[8]=0,s.heap[9]=0,s.heap[10]=0,s.heap[11]=o>>>29,s.heap[12]=o>>>21&255,s.heap[13]=o>>>13&255,s.heap[14]=o>>>5&255,s.heap[15]=o<<3&255,s.asm.mac(u.AES_asm.MAC.GCM,u.AES_asm.HEAP_DATA,16),s.asm.get_iv(u.AES_asm.HEAP_DATA),s.asm.set_iv(0,0,0,0),c.set(s.heap.subarray(0,16))):(c.set(r),c[15]=1);var f=new DataView(c.buffer);if(s.gamma0=f.getUint32(12),s.asm.set_nonce(f.getUint32(0),f.getUint32(4),f.getUint32(8),0),s.asm.set_mask(0,0,0,4294967295),void 0!==n){if(n.length>l)throw new i.IllegalArgumentError("illegal adata length");n.length?(s.adata=n,s._gcm_mac_process(n)):s.adata=void 0}else s.adata=void 0;if(s.counter<1||s.counter>4294967295)throw new RangeError("counter must be a positive 32-bit integer");return s.asm.set_counter(0,0,0,s.gamma0+s.counter|0),s}return d(t,e),t.encrypt=function(e,r,n,a,i){return new t(r,n,a,i).encrypt(e)},t.decrypt=function(e,r,n,a,i){return new t(r,n,a,i).decrypt(e)},t.prototype.encrypt=function(e){return this.AES_GCM_encrypt(e)},t.prototype.decrypt=function(e){return this.AES_GCM_decrypt(e)},t.prototype.AES_GCM_Encrypt_process=function(e){var t=0,r=e.length||0,n=this.asm,a=this.heap,i=this.counter,o=this.pos,c=this.len,f=0,d=c+r&-16,h=0;if((i-1<<4)+c+r>l)throw new RangeError("counter overflow");for(var p=new Uint8Array(d);r>0;)c+=h=(0,s._heap_write)(a,o+c,e,t,r),t+=h,r-=h,h=n.cipher(u.AES_asm.ENC.CTR,u.AES_asm.HEAP_DATA+o,c),(h=n.mac(u.AES_asm.MAC.GCM,u.AES_asm.HEAP_DATA+o,h))&&p.set(a.subarray(o,o+h),f),i+=h>>>4,f+=h,h>>29,t[4]=f>>>21,t[5]=f>>>13&255,t[6]=f>>>5&255,t[7]=f<<3&255,t[8]=t[9]=t[10]=0,t[11]=d>>>29,t[12]=d>>>21&255,t[13]=d>>>13&255,t[14]=d>>>5&255,t[15]=d<<3&255,e.mac(u.AES_asm.MAC.GCM,u.AES_asm.HEAP_DATA,16),e.get_iv(u.AES_asm.HEAP_DATA),e.set_counter(0,0,0,this.gamma0),e.cipher(u.AES_asm.ENC.CTR,u.AES_asm.HEAP_DATA,16),o.set(t.subarray(0,n),s),this.counter=1,this.pos=0,this.len=0,o},t.prototype.AES_GCM_Decrypt_process=function(e){var t=0,r=e.length||0,n=this.asm,a=this.heap,i=this.counter,o=this.tagSize,c=this.pos,f=this.len,d=0,h=f+r>o?f+r-o&-16:0,p=f+r-h,b=0;if((i-1<<4)+f+r>l)throw new RangeError("counter overflow");for(var y=new Uint8Array(h);r>p;)f+=b=(0,s._heap_write)(a,c+f,e,t,r-p),t+=b,r-=b,b=n.mac(u.AES_asm.MAC.GCM,u.AES_asm.HEAP_DATA+c,b),(b=n.cipher(u.AES_asm.DEC.CTR,u.AES_asm.HEAP_DATA+c,b))&&y.set(a.subarray(c,c+b),d),i+=b>>>4,d+=b,c=0,f=0;return r>0&&(f+=(0,s._heap_write)(a,0,e,t,r)),this.counter=i,this.pos=c,this.len=f,y},t.prototype.AES_GCM_Decrypt_finish=function(){var e=this.asm,t=this.heap,r=this.tagSize,n=this.adata,a=this.counter,s=this.pos,o=this.len,c=o-r;if(o>>29,t[4]=h>>>21,t[5]=h>>>13&255,t[6]=h>>>5&255,t[7]=h<<3&255,t[8]=t[9]=t[10]=0,t[11]=p>>>29,t[12]=p>>>21&255,t[13]=p>>>13&255,t[14]=p>>>5&255,t[15]=p<<3&255,e.mac(u.AES_asm.MAC.GCM,u.AES_asm.HEAP_DATA,16),e.get_iv(u.AES_asm.HEAP_DATA),e.set_counter(0,0,0,this.gamma0),e.cipher(u.AES_asm.ENC.CTR,u.AES_asm.HEAP_DATA,16);for(var b=0,y=0;y0;){for(n+=i=(0,s._heap_write)(t,0,e,n,a),a-=i;15&i;)t[i++]=0;r.mac(u.AES_asm.MAC.GCM,u.AES_asm.HEAP_DATA,i)}},t}(o.AES);r.AES_GCM=h},{"../other/errors":15,"../other/utils":16,"./aes":4,"./aes.asm":3,"babel-runtime/core-js/object/create":22,"babel-runtime/core-js/object/set-prototype-of":27}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Hash=void 0;var n=e("../other/utils"),a=e("../other/errors"),i=function(){function e(){this.pos=0,this.len=0,this.acquire_asm()}return e.prototype.acquire_asm=function(){void 0===this.heap&&void 0===this.asm&&(this.heap=this.constructor.heap_pool.pop()||(0,n._heap_init)(),this.asm=this.constructor.asm_pool.pop()||this.constructor.asm_function({Uint8Array:Uint8Array},null,this.heap.buffer),this.reset())},e.prototype.release_asm=function(){this.constructor.heap_pool.push(this.heap),this.constructor.asm_pool.push(this.asm),this.heap=void 0,this.asm=void 0},e.prototype.reset=function(){return this.acquire_asm(),this.result=null,this.pos=0,this.len=0,this.asm.reset(),this},e.prototype.process=function(e){if(null!==this.result)throw new a.IllegalStateError("state must be reset before processing new data");this.acquire_asm();for(var t=this.asm,r=this.heap,i=this.pos,s=this.len,o=0,u=e.length,c=0;u>0;)s+=c=(0,n._heap_write)(r,i+s,e,o,u),o+=c,u-=c,i+=c=t.process(i,s),(s-=c)||(i=0);return this.pos=i,this.len=s,this},e.prototype.finish=function(){if(null!==this.result)throw new a.IllegalStateError("state must be reset before processing new data");return this.acquire_asm(),this.asm.finish(this.pos,this.len,0),this.result=new Uint8Array(this.HASH_SIZE),this.result.set(this.heap.subarray(0,this.HASH_SIZE)),this.pos=0,this.len=0,this.release_asm(),this},e}();r.Hash=i},{"../other/errors":15,"../other/utils":16}],11:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sha1_asm=function(e,t,r){"use asm";var n=0,a=0,i=0,s=0,o=0,u=0,c=0,f=0,d=0,l=0,h=0,p=0,b=0,y=0,m=0,v=0,g=0,_=new e.Uint8Array(r);function w(e,t,r,u,c,f,d,l,h,p,b,y,m,v,g,_){e=e|0;t=t|0;r=r|0;u=u|0;c=c|0;f=f|0;d=d|0;l=l|0;h=h|0;p=p|0;b=b|0;y=y|0;m=m|0;v=v|0;g=g|0;_=_|0;var w=0,k=0,x=0,A=0,S=0,E=0,j=0,P=0,M=0,C=0,T=0,R=0,B=0,I=0,U=0,O=0,K=0,z=0,D=0,N=0,F=0,L=0,q=0,W=0,G=0,H=0,V=0,Z=0,Y=0,X=0,J=0,$=0,Q=0,ee=0,te=0,re=0,ne=0,ae=0,ie=0,se=0,oe=0,ue=0,ce=0,fe=0,de=0,le=0,he=0,pe=0,be=0,ye=0,me=0,ve=0,ge=0,_e=0,we=0,ke=0,xe=0,Ae=0,Se=0,Ee=0,je=0,Pe=0,Me=0,Ce=0,Te=0,Re=0,Be=0,Ie=0,Ue=0,Oe=0,Ke=0;w=n;k=a;x=i;A=s;S=o;j=e+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=t+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=r+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=u+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=c+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=f+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=d+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=l+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=h+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=p+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=b+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=y+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=m+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=v+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=g+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;j=_+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=v^h^r^e;P=E<<1|E>>>31;j=P+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=g^p^u^t;M=E<<1|E>>>31;j=M+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=_^b^c^r;C=E<<1|E>>>31;j=C+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=P^y^f^u;T=E<<1|E>>>31;j=T+(w<<5|w>>>27)+S+(k&x|~k&A)+0x5a827999|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=M^m^d^c;R=E<<1|E>>>31;j=R+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=C^v^l^f;B=E<<1|E>>>31;j=B+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=T^g^h^d;I=E<<1|E>>>31;j=I+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=R^_^p^l;U=E<<1|E>>>31;j=U+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=B^P^b^h;O=E<<1|E>>>31;j=O+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=I^M^y^p;K=E<<1|E>>>31;j=K+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=U^C^m^b;z=E<<1|E>>>31;j=z+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=O^T^v^y;D=E<<1|E>>>31;j=D+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=K^R^g^m;N=E<<1|E>>>31;j=N+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=z^B^_^v;F=E<<1|E>>>31;j=F+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=D^I^P^g;L=E<<1|E>>>31;j=L+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=N^U^M^_;q=E<<1|E>>>31;j=q+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=F^O^C^P;W=E<<1|E>>>31;j=W+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=L^K^T^M;G=E<<1|E>>>31;j=G+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=q^z^R^C;H=E<<1|E>>>31;j=H+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=W^D^B^T;V=E<<1|E>>>31;j=V+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=G^N^I^R;Z=E<<1|E>>>31;j=Z+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=H^F^U^B;Y=E<<1|E>>>31;j=Y+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=V^L^O^I;X=E<<1|E>>>31;j=X+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Z^q^K^U;J=E<<1|E>>>31;j=J+(w<<5|w>>>27)+S+(k^x^A)+0x6ed9eba1|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Y^W^z^O;$=E<<1|E>>>31;j=$+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=X^G^D^K;Q=E<<1|E>>>31;j=Q+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=J^H^N^z;ee=E<<1|E>>>31;j=ee+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=$^V^F^D;te=E<<1|E>>>31;j=te+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Q^Z^L^N;re=E<<1|E>>>31;j=re+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ee^Y^q^F;ne=E<<1|E>>>31;j=ne+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=te^X^W^L;ae=E<<1|E>>>31;j=ae+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=re^J^G^q;ie=E<<1|E>>>31;j=ie+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ne^$^H^W;se=E<<1|E>>>31;j=se+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ae^Q^V^G;oe=E<<1|E>>>31;j=oe+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ie^ee^Z^H;ue=E<<1|E>>>31;j=ue+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=se^te^Y^V;ce=E<<1|E>>>31;j=ce+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=oe^re^X^Z;fe=E<<1|E>>>31;j=fe+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ue^ne^J^Y;de=E<<1|E>>>31;j=de+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ce^ae^$^X;le=E<<1|E>>>31;j=le+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=fe^ie^Q^J;he=E<<1|E>>>31;j=he+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=de^se^ee^$;pe=E<<1|E>>>31;j=pe+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=le^oe^te^Q;be=E<<1|E>>>31;j=be+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=he^ue^re^ee;ye=E<<1|E>>>31;j=ye+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=pe^ce^ne^te;me=E<<1|E>>>31;j=me+(w<<5|w>>>27)+S+(k&x|k&A|x&A)-0x70e44324|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=be^fe^ae^re;ve=E<<1|E>>>31;j=ve+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ye^de^ie^ne;ge=E<<1|E>>>31;j=ge+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=me^le^se^ae;_e=E<<1|E>>>31;j=_e+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ve^he^oe^ie;we=E<<1|E>>>31;j=we+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ge^pe^ue^se;ke=E<<1|E>>>31;j=ke+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=_e^be^ce^oe;xe=E<<1|E>>>31;j=xe+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=we^ye^fe^ue;Ae=E<<1|E>>>31;j=Ae+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=ke^me^de^ce;Se=E<<1|E>>>31;j=Se+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=xe^ve^le^fe;Ee=E<<1|E>>>31;j=Ee+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Ae^ge^he^de;je=E<<1|E>>>31;j=je+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Se^_e^pe^le;Pe=E<<1|E>>>31;j=Pe+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Ee^we^be^he;Me=E<<1|E>>>31;j=Me+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=je^ke^ye^pe;Ce=E<<1|E>>>31;j=Ce+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Pe^xe^me^be;Te=E<<1|E>>>31;j=Te+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Me^Ae^ve^ye;Re=E<<1|E>>>31;j=Re+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Ce^Se^ge^me;Be=E<<1|E>>>31;j=Be+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Te^Ee^_e^ve;Ie=E<<1|E>>>31;j=Ie+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Re^je^we^ge;Ue=E<<1|E>>>31;j=Ue+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Be^Pe^ke^_e;Oe=E<<1|E>>>31;j=Oe+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;E=Ie^Me^xe^we;Ke=E<<1|E>>>31;j=Ke+(w<<5|w>>>27)+S+(k^x^A)-0x359d3e2a|0;S=A;A=x;x=k<<30|k>>>2;k=w;w=j;n=n+w|0;a=a+k|0;i=i+x|0;s=s+A|0;o=o+S|0}function k(e){e=e|0;w(_[e|0]<<24|_[e|1]<<16|_[e|2]<<8|_[e|3],_[e|4]<<24|_[e|5]<<16|_[e|6]<<8|_[e|7],_[e|8]<<24|_[e|9]<<16|_[e|10]<<8|_[e|11],_[e|12]<<24|_[e|13]<<16|_[e|14]<<8|_[e|15],_[e|16]<<24|_[e|17]<<16|_[e|18]<<8|_[e|19],_[e|20]<<24|_[e|21]<<16|_[e|22]<<8|_[e|23],_[e|24]<<24|_[e|25]<<16|_[e|26]<<8|_[e|27],_[e|28]<<24|_[e|29]<<16|_[e|30]<<8|_[e|31],_[e|32]<<24|_[e|33]<<16|_[e|34]<<8|_[e|35],_[e|36]<<24|_[e|37]<<16|_[e|38]<<8|_[e|39],_[e|40]<<24|_[e|41]<<16|_[e|42]<<8|_[e|43],_[e|44]<<24|_[e|45]<<16|_[e|46]<<8|_[e|47],_[e|48]<<24|_[e|49]<<16|_[e|50]<<8|_[e|51],_[e|52]<<24|_[e|53]<<16|_[e|54]<<8|_[e|55],_[e|56]<<24|_[e|57]<<16|_[e|58]<<8|_[e|59],_[e|60]<<24|_[e|61]<<16|_[e|62]<<8|_[e|63])}function x(e){e=e|0;_[e|0]=n>>>24;_[e|1]=n>>>16&255;_[e|2]=n>>>8&255;_[e|3]=n&255;_[e|4]=a>>>24;_[e|5]=a>>>16&255;_[e|6]=a>>>8&255;_[e|7]=a&255;_[e|8]=i>>>24;_[e|9]=i>>>16&255;_[e|10]=i>>>8&255;_[e|11]=i&255;_[e|12]=s>>>24;_[e|13]=s>>>16&255;_[e|14]=s>>>8&255;_[e|15]=s&255;_[e|16]=o>>>24;_[e|17]=o>>>16&255;_[e|18]=o>>>8&255;_[e|19]=o&255}function A(){n=0x67452301;a=0xefcdab89;i=0x98badcfe;s=0x10325476;o=0xc3d2e1f0;u=c=0}function S(e,t,r,f,d,l,h){e=e|0;t=t|0;r=r|0;f=f|0;d=d|0;l=l|0;h=h|0;n=e;a=t;i=r;s=f;o=d;u=l;c=h}function E(e,t){e=e|0;t=t|0;var r=0;if(e&63)return-1;while((t|0)>=64){k(e);e=e+64|0;t=t-64|0;r=r+64|0}u=u+r|0;if(u>>>0>>0)c=c+1|0;return r|0}function j(e,t,r){e=e|0;t=t|0;r=r|0;var n=0,a=0;if(e&63)return-1;if(~r)if(r&31)return-1;if((t|0)>=64){n=E(e,t)|0;if((n|0)==-1)return-1;e=e+n|0;t=t-n|0}n=n+t|0;u=u+t|0;if(u>>>0>>0)c=c+1|0;_[e|t]=0x80;if((t|0)>=56){for(a=t+1|0;(a|0)<64;a=a+1|0){_[e|a]=0x00}k(e);t=0;_[e|0]=0}for(a=t+1|0;(a|0)<59;a=a+1|0){_[e|a]=0}_[e|56]=c>>>21&255;_[e|57]=c>>>13&255;_[e|58]=c>>>5&255;_[e|59]=c<<3&255|u>>>29;_[e|60]=u>>>21&255;_[e|61]=u>>>13&255;_[e|62]=u>>>5&255;_[e|63]=u<<3&255;k(e);if(~r)x(r);return n|0}function P(){n=f;a=d;i=l;s=h;o=p;u=64;c=0}function M(){n=b;a=y;i=m;s=v;o=g;u=64;c=0}function C(e,t,r,_,k,x,S,E,j,P,M,C,T,R,B,I){e=e|0;t=t|0;r=r|0;_=_|0;k=k|0;x=x|0;S=S|0;E=E|0;j=j|0;P=P|0;M=M|0;C=C|0;T=T|0;R=R|0;B=B|0;I=I|0;A();w(e^0x5c5c5c5c,t^0x5c5c5c5c,r^0x5c5c5c5c,_^0x5c5c5c5c,k^0x5c5c5c5c,x^0x5c5c5c5c,S^0x5c5c5c5c,E^0x5c5c5c5c,j^0x5c5c5c5c,P^0x5c5c5c5c,M^0x5c5c5c5c,C^0x5c5c5c5c,T^0x5c5c5c5c,R^0x5c5c5c5c,B^0x5c5c5c5c,I^0x5c5c5c5c);b=n;y=a;m=i;v=s;g=o;A();w(e^0x36363636,t^0x36363636,r^0x36363636,_^0x36363636,k^0x36363636,x^0x36363636,S^0x36363636,E^0x36363636,j^0x36363636,P^0x36363636,M^0x36363636,C^0x36363636,T^0x36363636,R^0x36363636,B^0x36363636,I^0x36363636);f=n;d=a;l=i;h=s;p=o;u=64;c=0}function T(e,t,r){e=e|0;t=t|0;r=r|0;var u=0,c=0,f=0,d=0,l=0,h=0;if(e&63)return-1;if(~r)if(r&31)return-1;h=j(e,t,-1)|0;u=n,c=a,f=i,d=s,l=o;M();w(u,c,f,d,l,0x80000000,0,0,0,0,0,0,0,0,0,672);if(~r)x(r);return h|0}function R(e,t,r,u,c){e=e|0;t=t|0;r=r|0;u=u|0;c=c|0;var f=0,d=0,l=0,h=0,p=0,b=0,y=0,m=0,v=0,g=0;if(e&63)return-1;if(~c)if(c&31)return-1;_[e+t|0]=r>>>24;_[e+t+1|0]=r>>>16&255;_[e+t+2|0]=r>>>8&255;_[e+t+3|0]=r&255;T(e,t+4|0,-1)|0;f=b=n,d=y=a,l=m=i,h=v=s,p=g=o;u=u-1|0;while((u|0)>0){P();w(b,y,m,v,g,0x80000000,0,0,0,0,0,0,0,0,0,672);b=n,y=a,m=i,v=s,g=o;M();w(b,y,m,v,g,0x80000000,0,0,0,0,0,0,0,0,0,672);b=n,y=a,m=i,v=s,g=o;f=f^n;d=d^a;l=l^i;h=h^s;p=p^o;u=u-1|0}n=f;a=d;i=l;s=h;o=p;if(~c)x(c);return 0}return{reset:A,init:S,process:E,finish:j,hmac_reset:P,hmac_init:C,hmac_finish:T,pbkdf2_generate_block:R}}},{}],12:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Sha1=r._sha1_hash_size=r._sha1_block_size=void 0;var n=o(e("babel-runtime/core-js/object/create")),a=o(e("babel-runtime/core-js/object/set-prototype-of")),i=e("./sha1.asm"),s=e("../hash");function o(e){return e&&e.__esModule?e:{default:e}}var u,c=(u=a.default||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}u(e,t),e.prototype=null===t?(0,n.default)(t):(r.prototype=t.prototype,new r)}),f=r._sha1_block_size=64,d=r._sha1_hash_size=20,l=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.NAME="sha1",t.BLOCK_SIZE=f,t.HASH_SIZE=d,t}return c(t,e),t.bytes=function(e){return(new t).process(e).finish().result},t.NAME="sha1",t.heap_pool=[],t.asm_pool=[],t.asm_function=i.sha1_asm,t}(s.Hash);r.Sha1=l},{"../hash":10,"./sha1.asm":11,"babel-runtime/core-js/object/create":22,"babel-runtime/core-js/object/set-prototype-of":27}],13:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.sha256_asm=function(e,t,r){"use asm";var n=0,a=0,i=0,s=0,o=0,u=0,c=0,f=0,d=0,l=0,h=0,p=0,b=0,y=0,m=0,v=0,g=0,_=0,w=0,k=0,x=0,A=0,S=0,E=0,j=0,P=0,M=new e.Uint8Array(r);function C(e,t,r,d,l,h,p,b,y,m,v,g,_,w,k,x){e=e|0;t=t|0;r=r|0;d=d|0;l=l|0;h=h|0;p=p|0;b=b|0;y=y|0;m=m|0;v=v|0;g=g|0;_=_|0;w=w|0;k=k|0;x=x|0;var A=0,S=0,E=0,j=0,P=0,M=0,C=0,T=0;A=n;S=a;E=i;j=s;P=o;M=u;C=c;T=f;T=e+T+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(C^P&(M^C))+0x428a2f98|0;j=j+T|0;T=T+(A&S^E&(A^S))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;C=t+C+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(M^j&(P^M))+0x71374491|0;E=E+C|0;C=C+(T&A^S&(T^A))+(T>>>2^T>>>13^T>>>22^T<<30^T<<19^T<<10)|0;M=r+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(P^E&(j^P))+0xb5c0fbcf|0;S=S+M|0;M=M+(C&T^A&(C^T))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;P=d+P+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(j^S&(E^j))+0xe9b5dba5|0;A=A+P|0;P=P+(M&C^T&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;j=l+j+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(E^A&(S^E))+0x3956c25b|0;T=T+j|0;j=j+(P&M^C&(P^M))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;E=h+E+(T>>>6^T>>>11^T>>>25^T<<26^T<<21^T<<7)+(S^T&(A^S))+0x59f111f1|0;C=C+E|0;E=E+(j&P^M&(j^P))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;S=p+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(A^C&(T^A))+0x923f82a4|0;M=M+S|0;S=S+(E&j^P&(E^j))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;A=b+A+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(T^M&(C^T))+0xab1c5ed5|0;P=P+A|0;A=A+(S&E^j&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;T=y+T+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(C^P&(M^C))+0xd807aa98|0;j=j+T|0;T=T+(A&S^E&(A^S))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;C=m+C+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(M^j&(P^M))+0x12835b01|0;E=E+C|0;C=C+(T&A^S&(T^A))+(T>>>2^T>>>13^T>>>22^T<<30^T<<19^T<<10)|0;M=v+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(P^E&(j^P))+0x243185be|0;S=S+M|0;M=M+(C&T^A&(C^T))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;P=g+P+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(j^S&(E^j))+0x550c7dc3|0;A=A+P|0;P=P+(M&C^T&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;j=_+j+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(E^A&(S^E))+0x72be5d74|0;T=T+j|0;j=j+(P&M^C&(P^M))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;E=w+E+(T>>>6^T>>>11^T>>>25^T<<26^T<<21^T<<7)+(S^T&(A^S))+0x80deb1fe|0;C=C+E|0;E=E+(j&P^M&(j^P))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;S=k+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(A^C&(T^A))+0x9bdc06a7|0;M=M+S|0;S=S+(E&j^P&(E^j))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;A=x+A+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(T^M&(C^T))+0xc19bf174|0;P=P+A|0;A=A+(S&E^j&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;T=e+T+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(C^P&(M^C))+0xe49b69c1|0;j=j+T|0;T=T+(A&S^E&(A^S))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(x>>>17^x>>>19^x>>>10^x<<15^x<<13)+t+v|0;C=t+C+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(M^j&(P^M))+0xefbe4786|0;E=E+C|0;C=C+(T&A^S&(T^A))+(T>>>2^T>>>13^T>>>22^T<<30^T<<19^T<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+g|0;M=r+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(P^E&(j^P))+0x0fc19dc6|0;S=S+M|0;M=M+(C&T^A&(C^T))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;d=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+_|0;P=d+P+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(j^S&(E^j))+0x240ca1cc|0;A=A+P|0;P=P+(M&C^T&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(h>>>7^h>>>18^h>>>3^h<<25^h<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+l+w|0;j=l+j+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(E^A&(S^E))+0x2de92c6f|0;T=T+j|0;j=j+(P&M^C&(P^M))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;h=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+h+k|0;E=h+E+(T>>>6^T>>>11^T>>>25^T<<26^T<<21^T<<7)+(S^T&(A^S))+0x4a7484aa|0;C=C+E|0;E=E+(j&P^M&(j^P))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;p=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+p+x|0;S=p+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(A^C&(T^A))+0x5cb0a9dc|0;M=M+S|0;S=S+(E&j^P&(E^j))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(h>>>17^h>>>19^h>>>10^h<<15^h<<13)+b+e|0;A=b+A+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(T^M&(C^T))+0x76f988da|0;P=P+A|0;A=A+(S&E^j&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;y=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+y+t|0;T=y+T+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(C^P&(M^C))+0x983e5152|0;j=j+T|0;T=T+(A&S^E&(A^S))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;m=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+m+r|0;C=m+C+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(M^j&(P^M))+0xa831c66d|0;E=E+C|0;C=C+(T&A^S&(T^A))+(T>>>2^T>>>13^T>>>22^T<<30^T<<19^T<<10)|0;v=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+v+d|0;M=v+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(P^E&(j^P))+0xb00327c8|0;S=S+M|0;M=M+(C&T^A&(C^T))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;g=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+g+l|0;P=g+P+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(j^S&(E^j))+0xbf597fc7|0;A=A+P|0;P=P+(M&C^T&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+_+h|0;j=_+j+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(E^A&(S^E))+0xc6e00bf3|0;T=T+j|0;j=j+(P&M^C&(P^M))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;w=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+w+p|0;E=w+E+(T>>>6^T>>>11^T>>>25^T<<26^T<<21^T<<7)+(S^T&(A^S))+0xd5a79147|0;C=C+E|0;E=E+(j&P^M&(j^P))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;k=(x>>>7^x>>>18^x>>>3^x<<25^x<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+k+b|0;S=k+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(A^C&(T^A))+0x06ca6351|0;M=M+S|0;S=S+(E&j^P&(E^j))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;x=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+x+y|0;A=x+A+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(T^M&(C^T))+0x14292967|0;P=P+A|0;A=A+(S&E^j&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;T=e+T+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(C^P&(M^C))+0x27b70a85|0;j=j+T|0;T=T+(A&S^E&(A^S))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(x>>>17^x>>>19^x>>>10^x<<15^x<<13)+t+v|0;C=t+C+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(M^j&(P^M))+0x2e1b2138|0;E=E+C|0;C=C+(T&A^S&(T^A))+(T>>>2^T>>>13^T>>>22^T<<30^T<<19^T<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+g|0;M=r+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(P^E&(j^P))+0x4d2c6dfc|0;S=S+M|0;M=M+(C&T^A&(C^T))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;d=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+_|0;P=d+P+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(j^S&(E^j))+0x53380d13|0;A=A+P|0;P=P+(M&C^T&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(h>>>7^h>>>18^h>>>3^h<<25^h<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+l+w|0;j=l+j+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(E^A&(S^E))+0x650a7354|0;T=T+j|0;j=j+(P&M^C&(P^M))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;h=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+h+k|0;E=h+E+(T>>>6^T>>>11^T>>>25^T<<26^T<<21^T<<7)+(S^T&(A^S))+0x766a0abb|0;C=C+E|0;E=E+(j&P^M&(j^P))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;p=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+p+x|0;S=p+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(A^C&(T^A))+0x81c2c92e|0;M=M+S|0;S=S+(E&j^P&(E^j))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(h>>>17^h>>>19^h>>>10^h<<15^h<<13)+b+e|0;A=b+A+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(T^M&(C^T))+0x92722c85|0;P=P+A|0;A=A+(S&E^j&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;y=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+y+t|0;T=y+T+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(C^P&(M^C))+0xa2bfe8a1|0;j=j+T|0;T=T+(A&S^E&(A^S))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;m=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+m+r|0;C=m+C+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(M^j&(P^M))+0xa81a664b|0;E=E+C|0;C=C+(T&A^S&(T^A))+(T>>>2^T>>>13^T>>>22^T<<30^T<<19^T<<10)|0;v=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+v+d|0;M=v+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(P^E&(j^P))+0xc24b8b70|0;S=S+M|0;M=M+(C&T^A&(C^T))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;g=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+g+l|0;P=g+P+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(j^S&(E^j))+0xc76c51a3|0;A=A+P|0;P=P+(M&C^T&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+_+h|0;j=_+j+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(E^A&(S^E))+0xd192e819|0;T=T+j|0;j=j+(P&M^C&(P^M))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;w=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+w+p|0;E=w+E+(T>>>6^T>>>11^T>>>25^T<<26^T<<21^T<<7)+(S^T&(A^S))+0xd6990624|0;C=C+E|0;E=E+(j&P^M&(j^P))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;k=(x>>>7^x>>>18^x>>>3^x<<25^x<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+k+b|0;S=k+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(A^C&(T^A))+0xf40e3585|0;M=M+S|0;S=S+(E&j^P&(E^j))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;x=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+x+y|0;A=x+A+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(T^M&(C^T))+0x106aa070|0;P=P+A|0;A=A+(S&E^j&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;T=e+T+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(C^P&(M^C))+0x19a4c116|0;j=j+T|0;T=T+(A&S^E&(A^S))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(x>>>17^x>>>19^x>>>10^x<<15^x<<13)+t+v|0;C=t+C+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(M^j&(P^M))+0x1e376c08|0;E=E+C|0;C=C+(T&A^S&(T^A))+(T>>>2^T>>>13^T>>>22^T<<30^T<<19^T<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+g|0;M=r+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(P^E&(j^P))+0x2748774c|0;S=S+M|0;M=M+(C&T^A&(C^T))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;d=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+_|0;P=d+P+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(j^S&(E^j))+0x34b0bcb5|0;A=A+P|0;P=P+(M&C^T&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(h>>>7^h>>>18^h>>>3^h<<25^h<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+l+w|0;j=l+j+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(E^A&(S^E))+0x391c0cb3|0;T=T+j|0;j=j+(P&M^C&(P^M))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;h=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+h+k|0;E=h+E+(T>>>6^T>>>11^T>>>25^T<<26^T<<21^T<<7)+(S^T&(A^S))+0x4ed8aa4a|0;C=C+E|0;E=E+(j&P^M&(j^P))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;p=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+p+x|0;S=p+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(A^C&(T^A))+0x5b9cca4f|0;M=M+S|0;S=S+(E&j^P&(E^j))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(h>>>17^h>>>19^h>>>10^h<<15^h<<13)+b+e|0;A=b+A+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(T^M&(C^T))+0x682e6ff3|0;P=P+A|0;A=A+(S&E^j&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;y=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+y+t|0;T=y+T+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(C^P&(M^C))+0x748f82ee|0;j=j+T|0;T=T+(A&S^E&(A^S))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;m=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+m+r|0;C=m+C+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(M^j&(P^M))+0x78a5636f|0;E=E+C|0;C=C+(T&A^S&(T^A))+(T>>>2^T>>>13^T>>>22^T<<30^T<<19^T<<10)|0;v=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+v+d|0;M=v+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(P^E&(j^P))+0x84c87814|0;S=S+M|0;M=M+(C&T^A&(C^T))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;g=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+g+l|0;P=g+P+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(j^S&(E^j))+0x8cc70208|0;A=A+P|0;P=P+(M&C^T&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+_+h|0;j=_+j+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(E^A&(S^E))+0x90befffa|0;T=T+j|0;j=j+(P&M^C&(P^M))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;w=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+w+p|0;E=w+E+(T>>>6^T>>>11^T>>>25^T<<26^T<<21^T<<7)+(S^T&(A^S))+0xa4506ceb|0;C=C+E|0;E=E+(j&P^M&(j^P))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;k=(x>>>7^x>>>18^x>>>3^x<<25^x<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+k+b|0;S=k+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(A^C&(T^A))+0xbef9a3f7|0;M=M+S|0;S=S+(E&j^P&(E^j))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;x=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+x+y|0;A=x+A+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(T^M&(C^T))+0xc67178f2|0;P=P+A|0;A=A+(S&E^j&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;n=n+A|0;a=a+S|0;i=i+E|0;s=s+j|0;o=o+P|0;u=u+M|0;c=c+C|0;f=f+T|0}function T(e){e=e|0;C(M[e|0]<<24|M[e|1]<<16|M[e|2]<<8|M[e|3],M[e|4]<<24|M[e|5]<<16|M[e|6]<<8|M[e|7],M[e|8]<<24|M[e|9]<<16|M[e|10]<<8|M[e|11],M[e|12]<<24|M[e|13]<<16|M[e|14]<<8|M[e|15],M[e|16]<<24|M[e|17]<<16|M[e|18]<<8|M[e|19],M[e|20]<<24|M[e|21]<<16|M[e|22]<<8|M[e|23],M[e|24]<<24|M[e|25]<<16|M[e|26]<<8|M[e|27],M[e|28]<<24|M[e|29]<<16|M[e|30]<<8|M[e|31],M[e|32]<<24|M[e|33]<<16|M[e|34]<<8|M[e|35],M[e|36]<<24|M[e|37]<<16|M[e|38]<<8|M[e|39],M[e|40]<<24|M[e|41]<<16|M[e|42]<<8|M[e|43],M[e|44]<<24|M[e|45]<<16|M[e|46]<<8|M[e|47],M[e|48]<<24|M[e|49]<<16|M[e|50]<<8|M[e|51],M[e|52]<<24|M[e|53]<<16|M[e|54]<<8|M[e|55],M[e|56]<<24|M[e|57]<<16|M[e|58]<<8|M[e|59],M[e|60]<<24|M[e|61]<<16|M[e|62]<<8|M[e|63])}function R(e){e=e|0;M[e|0]=n>>>24;M[e|1]=n>>>16&255;M[e|2]=n>>>8&255;M[e|3]=n&255;M[e|4]=a>>>24;M[e|5]=a>>>16&255;M[e|6]=a>>>8&255;M[e|7]=a&255;M[e|8]=i>>>24;M[e|9]=i>>>16&255;M[e|10]=i>>>8&255;M[e|11]=i&255;M[e|12]=s>>>24;M[e|13]=s>>>16&255;M[e|14]=s>>>8&255;M[e|15]=s&255;M[e|16]=o>>>24;M[e|17]=o>>>16&255;M[e|18]=o>>>8&255;M[e|19]=o&255;M[e|20]=u>>>24;M[e|21]=u>>>16&255;M[e|22]=u>>>8&255;M[e|23]=u&255;M[e|24]=c>>>24;M[e|25]=c>>>16&255;M[e|26]=c>>>8&255;M[e|27]=c&255;M[e|28]=f>>>24;M[e|29]=f>>>16&255;M[e|30]=f>>>8&255;M[e|31]=f&255}function B(){n=0x6a09e667;a=0xbb67ae85;i=0x3c6ef372;s=0xa54ff53a;o=0x510e527f;u=0x9b05688c;c=0x1f83d9ab;f=0x5be0cd19;d=l=0}function I(e,t,r,h,p,b,y,m,v,g){e=e|0;t=t|0;r=r|0;h=h|0;p=p|0;b=b|0;y=y|0;m=m|0;v=v|0;g=g|0;n=e;a=t;i=r;s=h;o=p;u=b;c=y;f=m;d=v;l=g}function U(e,t){e=e|0;t=t|0;var r=0;if(e&63)return-1;while((t|0)>=64){T(e);e=e+64|0;t=t-64|0;r=r+64|0}d=d+r|0;if(d>>>0>>0)l=l+1|0;return r|0}function O(e,t,r){e=e|0;t=t|0;r=r|0;var n=0,a=0;if(e&63)return-1;if(~r)if(r&31)return-1;if((t|0)>=64){n=U(e,t)|0;if((n|0)==-1)return-1;e=e+n|0;t=t-n|0}n=n+t|0;d=d+t|0;if(d>>>0>>0)l=l+1|0;M[e|t]=0x80;if((t|0)>=56){for(a=t+1|0;(a|0)<64;a=a+1|0){M[e|a]=0x00}T(e);t=0;M[e|0]=0}for(a=t+1|0;(a|0)<59;a=a+1|0){M[e|a]=0}M[e|56]=l>>>21&255;M[e|57]=l>>>13&255;M[e|58]=l>>>5&255;M[e|59]=l<<3&255|d>>>29;M[e|60]=d>>>21&255;M[e|61]=d>>>13&255;M[e|62]=d>>>5&255;M[e|63]=d<<3&255;T(e);if(~r)R(r);return n|0}function K(){n=h;a=p;i=b;s=y;o=m;u=v;c=g;f=_;d=64;l=0}function z(){n=w;a=k;i=x;s=A;o=S;u=E;c=j;f=P;d=64;l=0}function D(e,t,r,M,T,R,I,U,O,K,z,D,N,F,L,q){e=e|0;t=t|0;r=r|0;M=M|0;T=T|0;R=R|0;I=I|0;U=U|0;O=O|0;K=K|0;z=z|0;D=D|0;N=N|0;F=F|0;L=L|0;q=q|0;B();C(e^0x5c5c5c5c,t^0x5c5c5c5c,r^0x5c5c5c5c,M^0x5c5c5c5c,T^0x5c5c5c5c,R^0x5c5c5c5c,I^0x5c5c5c5c,U^0x5c5c5c5c,O^0x5c5c5c5c,K^0x5c5c5c5c,z^0x5c5c5c5c,D^0x5c5c5c5c,N^0x5c5c5c5c,F^0x5c5c5c5c,L^0x5c5c5c5c,q^0x5c5c5c5c);w=n;k=a;x=i;A=s;S=o;E=u;j=c;P=f;B();C(e^0x36363636,t^0x36363636,r^0x36363636,M^0x36363636,T^0x36363636,R^0x36363636,I^0x36363636,U^0x36363636,O^0x36363636,K^0x36363636,z^0x36363636,D^0x36363636,N^0x36363636,F^0x36363636,L^0x36363636,q^0x36363636);h=n;p=a;b=i;y=s;m=o;v=u;g=c;_=f;d=64;l=0}function N(e,t,r){e=e|0;t=t|0;r=r|0;var d=0,l=0,h=0,p=0,b=0,y=0,m=0,v=0,g=0;if(e&63)return-1;if(~r)if(r&31)return-1;g=O(e,t,-1)|0;d=n,l=a,h=i,p=s,b=o,y=u,m=c,v=f;z();C(d,l,h,p,b,y,m,v,0x80000000,0,0,0,0,0,0,768);if(~r)R(r);return g|0}function F(e,t,r,d,l){e=e|0;t=t|0;r=r|0;d=d|0;l=l|0;var h=0,p=0,b=0,y=0,m=0,v=0,g=0,_=0,w=0,k=0,x=0,A=0,S=0,E=0,j=0,P=0;if(e&63)return-1;if(~l)if(l&31)return-1;M[e+t|0]=r>>>24;M[e+t+1|0]=r>>>16&255;M[e+t+2|0]=r>>>8&255;M[e+t+3|0]=r&255;N(e,t+4|0,-1)|0;h=w=n,p=k=a,b=x=i,y=A=s,m=S=o,v=E=u,g=j=c,_=P=f;d=d-1|0;while((d|0)>0){K();C(w,k,x,A,S,E,j,P,0x80000000,0,0,0,0,0,0,768);w=n,k=a,x=i,A=s,S=o,E=u,j=c,P=f;z();C(w,k,x,A,S,E,j,P,0x80000000,0,0,0,0,0,0,768);w=n,k=a,x=i,A=s,S=o,E=u,j=c,P=f;h=h^n;p=p^a;b=b^i;y=y^s;m=m^o;v=v^u;g=g^c;_=_^f;d=d-1|0}n=h;a=p;i=b;s=y;o=m;u=v;c=g;f=_;if(~l)R(l);return 0}return{reset:B,init:I,process:U,finish:O,hmac_reset:K,hmac_init:D,hmac_finish:N,pbkdf2_generate_block:F}}},{}],14:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Sha256=r._sha256_hash_size=r._sha256_block_size=void 0;var n=o(e("babel-runtime/core-js/object/create")),a=o(e("babel-runtime/core-js/object/set-prototype-of")),i=e("./sha256.asm"),s=e("../hash");function o(e){return e&&e.__esModule?e:{default:e}}var u,c=(u=a.default||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}u(e,t),e.prototype=null===t?(0,n.default)(t):(r.prototype=t.prototype,new r)}),f=r._sha256_block_size=64,d=r._sha256_hash_size=32,l=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.NAME="sha256",t.BLOCK_SIZE=f,t.HASH_SIZE=d,t}return c(t,e),t.bytes=function(e){return(new t).process(e).finish().result},t.NAME="sha256",t.heap_pool=[],t.asm_pool=[],t.asm_function=i.sha256_asm,t}(s.Hash);r.Sha256=l},{"../hash":10,"./sha256.asm":13,"babel-runtime/core-js/object/create":22,"babel-runtime/core-js/object/set-prototype-of":27}],15:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.SecurityError=r.IllegalArgumentError=r.IllegalStateError=void 0;var n=i(e("babel-runtime/core-js/object/create")),a=i(e("babel-runtime/core-js/object/set-prototype-of"));function i(e){return e&&e.__esModule?e:{default:e}}var s,o=(s=a.default||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}s(e,t),e.prototype=null===t?(0,n.default)(t):(r.prototype=t.prototype,new r)}),u=function(e){function t(){for(var t=[],r=0;r>1),n=0;n>1]=parseInt(e.substr(n,2),16);return r},r.base64_to_bytes=function(e){return i(n(e))},r.bytes_to_string=s,r.bytes_to_hex=function(e){for(var t="",r=0;r>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e+=1},r.is_number=function(e){return"number"==typeof e},r.is_string=function(e){return"string"==typeof e},r.is_buffer=function(e){return e instanceof ArrayBuffer},r.is_bytes=function(e){return e instanceof Uint8Array},r.is_typed_array=function(e){return e instanceof Int8Array||e instanceof Uint8Array||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array},r._heap_init=function(e,t){var r=e?e.byteLength:t||65536;if(4095&r||r<=0)throw new Error("heap size must be a positive integer and a multiple of 4096");return e=e||new Uint8Array(new ArrayBuffer(r))},r._heap_write=function(e,t,r,n,a){var i=e.length-t,s=i=r)throw new Error("Malformed string, low surrogate expected at position "+a);s=(55296^s)<<10|65536|56320^e.charCodeAt(a)}else if(!t&&s>>>8)throw new Error("Wide characters are not allowed.");!t||s<=127?n[i++]=s:s<=2047?(n[i++]=192|s>>6,n[i++]=128|63&s):s<=65535?(n[i++]=224|s>>12,n[i++]=128|s>>6&63,n[i++]=128|63&s):(n[i++]=240|s>>18,n[i++]=128|s>>12&63,n[i++]=128|s>>6&63,n[i++]=128|63&s)}return n.subarray(0,i)}function s(e,t){void 0===t&&(t=!1);for(var r=e.length,n=new Array(r),a=0,i=0;a=192&&s<224&&a+1=224&&s<240&&a+2=240&&s<248&&a+3>10,n[i++]=56320|1023&o)}}var u="";for(a=0;a=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return n}function u(e,t,r,n){for(var a=0,i=Math.min(e.length,r),s=t;s=49?o-49+10:o>=17?o-17+10:o}return a}i.isBN=function(e){return e instanceof i||null!==e&&"object"==typeof e&&e.constructor.wordSize===i.wordSize&&Array.isArray(e.words)},i.max=function(e,t){return e.cmp(t)>0?e:t},i.min=function(e,t){return e.cmp(t)<0?e:t},i.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"==typeof e)return this._initArray(e,t,r);"hex"===t&&(t=16),n(t===(0|t)&&t>=2&&t<=36);var a=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&a++,16===t?this._parseHex(e,a):this._parseBase(e,t,a),"-"===e[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),t,r)},i.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(n(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},i.prototype._initArray=function(e,t,r){if(n("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var a=0;a=0;a-=3)s=e[a]|e[a-1]<<8|e[a-2]<<16,this.words[i]|=s<>>26-o&67108863,(o+=24)>=26&&(o-=26,i++);else if("le"===r)for(a=0,i=0;a>>26-o&67108863,(o+=24)>=26&&(o-=26,i++);return this.strip()},i.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)a=o(e,r,r+6),this.words[n]|=a<>>26-i&4194303,(i+=24)>=26&&(i-=26,n++);r+6!==t&&(a=o(e,t,r+6),this.words[n]|=a<>>26-i&4194303),this.strip()},i.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,a=1;a<=67108863;a*=t)n++;n--,a=a/t|0;for(var i=e.length-r,s=i%n,o=Math.min(i,i-s)+r,c=0,f=r;f1&&0===this.words[this.length-1];)this.length--;return this._normSign()},i.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},i.prototype.inspect=function(){return(this.red?""};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],d=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var a=0|e.words[0],i=0|t.words[0],s=a*i,o=67108863&s,u=s/67108864|0;r.words[0]=o;for(var c=1;c>>26,d=67108863&u,l=Math.min(c,t.length-1),h=Math.max(0,c-e.length+1);h<=l;h++){var p=c-h|0;f+=(s=(a=0|e.words[p])*(i=0|t.words[h])+d)/67108864|0,d=67108863&s}r.words[c]=0|d,u=0|f}return 0!==u?r.words[c]=0|u:r.length--,r.strip()}i.prototype.toString=function(e,t){var r;if(e=e||10,t=0|t||1,16===e||"hex"===e){r="";for(var a=0,i=0,s=0;s>>24-a&16777215)||s!==this.length-1?c[6-u.length]+u+r:u+r,(a+=2)>=26&&(a-=26,s--)}for(0!==i&&(r=i.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var l=f[e],h=d[e];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var b=p.modn(h).toString(e);r=(p=p.idivn(h)).isZero()?b+r:c[l-b.length]+b+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},i.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toBuffer=function(e,t){return n(void 0!==s),this.toArrayLike(s,e,t)},i.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},i.prototype.toArrayLike=function(e,t,r){var a=this.byteLength(),i=r||Math.max(1,a);n(a<=i,"byte array longer than desired length"),n(i>0,"Requested array length <= 0"),this.strip();var s,o,u="le"===t,c=new e(i),f=this.clone();if(u){for(o=0;!f.isZero();o++)s=f.andln(255),f.iushrn(8),c[o]=s;for(;o=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},i.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},i.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},i.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},i.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},i.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},i.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},i.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},i.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},i.prototype.inotn=function(e){n("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var a=0;a0&&(this.words[a]=~this.words[a]&67108863>>26-r),this.strip()},i.prototype.notn=function(e){return this.clone().inotn(e)},i.prototype.setn=function(e,t){n("number"==typeof e&&e>=0);var r=e/26|0,a=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var a=0,i=0;i>>26;for(;0!==a&&i>>26;if(this.length=r.length,0!==a)this.words[this.length]=a,this.length++;else if(r!==this)for(;ie.length?this.clone().iadd(e):e.clone().iadd(this)},i.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,a=this.cmp(e);if(0===a)return this.negative=0,this.length=1,this.words[0]=0,this;a>0?(r=this,n=e):(r=e,n=this);for(var i=0,s=0;s>26,this.words[s]=67108863&t;for(;0!==i&&s>26,this.words[s]=67108863&t;if(0===i&&s>>13,h=0|s[1],p=8191&h,b=h>>>13,y=0|s[2],m=8191&y,v=y>>>13,g=0|s[3],_=8191&g,w=g>>>13,k=0|s[4],x=8191&k,A=k>>>13,S=0|s[5],E=8191&S,j=S>>>13,P=0|s[6],M=8191&P,C=P>>>13,T=0|s[7],R=8191&T,B=T>>>13,I=0|s[8],U=8191&I,O=I>>>13,K=0|s[9],z=8191&K,D=K>>>13,N=0|o[0],F=8191&N,L=N>>>13,q=0|o[1],W=8191&q,G=q>>>13,H=0|o[2],V=8191&H,Z=H>>>13,Y=0|o[3],X=8191&Y,J=Y>>>13,$=0|o[4],Q=8191&$,ee=$>>>13,te=0|o[5],re=8191&te,ne=te>>>13,ae=0|o[6],ie=8191&ae,se=ae>>>13,oe=0|o[7],ue=8191&oe,ce=oe>>>13,fe=0|o[8],de=8191&fe,le=fe>>>13,he=0|o[9],pe=8191&he,be=he>>>13;r.negative=e.negative^t.negative,r.length=19;var ye=(c+(n=Math.imul(d,F))|0)+((8191&(a=(a=Math.imul(d,L))+Math.imul(l,F)|0))<<13)|0;c=((i=Math.imul(l,L))+(a>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(p,F),a=(a=Math.imul(p,L))+Math.imul(b,F)|0,i=Math.imul(b,L);var me=(c+(n=n+Math.imul(d,W)|0)|0)+((8191&(a=(a=a+Math.imul(d,G)|0)+Math.imul(l,W)|0))<<13)|0;c=((i=i+Math.imul(l,G)|0)+(a>>>13)|0)+(me>>>26)|0,me&=67108863,n=Math.imul(m,F),a=(a=Math.imul(m,L))+Math.imul(v,F)|0,i=Math.imul(v,L),n=n+Math.imul(p,W)|0,a=(a=a+Math.imul(p,G)|0)+Math.imul(b,W)|0,i=i+Math.imul(b,G)|0;var ve=(c+(n=n+Math.imul(d,V)|0)|0)+((8191&(a=(a=a+Math.imul(d,Z)|0)+Math.imul(l,V)|0))<<13)|0;c=((i=i+Math.imul(l,Z)|0)+(a>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(_,F),a=(a=Math.imul(_,L))+Math.imul(w,F)|0,i=Math.imul(w,L),n=n+Math.imul(m,W)|0,a=(a=a+Math.imul(m,G)|0)+Math.imul(v,W)|0,i=i+Math.imul(v,G)|0,n=n+Math.imul(p,V)|0,a=(a=a+Math.imul(p,Z)|0)+Math.imul(b,V)|0,i=i+Math.imul(b,Z)|0;var ge=(c+(n=n+Math.imul(d,X)|0)|0)+((8191&(a=(a=a+Math.imul(d,J)|0)+Math.imul(l,X)|0))<<13)|0;c=((i=i+Math.imul(l,J)|0)+(a>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(x,F),a=(a=Math.imul(x,L))+Math.imul(A,F)|0,i=Math.imul(A,L),n=n+Math.imul(_,W)|0,a=(a=a+Math.imul(_,G)|0)+Math.imul(w,W)|0,i=i+Math.imul(w,G)|0,n=n+Math.imul(m,V)|0,a=(a=a+Math.imul(m,Z)|0)+Math.imul(v,V)|0,i=i+Math.imul(v,Z)|0,n=n+Math.imul(p,X)|0,a=(a=a+Math.imul(p,J)|0)+Math.imul(b,X)|0,i=i+Math.imul(b,J)|0;var _e=(c+(n=n+Math.imul(d,Q)|0)|0)+((8191&(a=(a=a+Math.imul(d,ee)|0)+Math.imul(l,Q)|0))<<13)|0;c=((i=i+Math.imul(l,ee)|0)+(a>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(E,F),a=(a=Math.imul(E,L))+Math.imul(j,F)|0,i=Math.imul(j,L),n=n+Math.imul(x,W)|0,a=(a=a+Math.imul(x,G)|0)+Math.imul(A,W)|0,i=i+Math.imul(A,G)|0,n=n+Math.imul(_,V)|0,a=(a=a+Math.imul(_,Z)|0)+Math.imul(w,V)|0,i=i+Math.imul(w,Z)|0,n=n+Math.imul(m,X)|0,a=(a=a+Math.imul(m,J)|0)+Math.imul(v,X)|0,i=i+Math.imul(v,J)|0,n=n+Math.imul(p,Q)|0,a=(a=a+Math.imul(p,ee)|0)+Math.imul(b,Q)|0,i=i+Math.imul(b,ee)|0;var we=(c+(n=n+Math.imul(d,re)|0)|0)+((8191&(a=(a=a+Math.imul(d,ne)|0)+Math.imul(l,re)|0))<<13)|0;c=((i=i+Math.imul(l,ne)|0)+(a>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(M,F),a=(a=Math.imul(M,L))+Math.imul(C,F)|0,i=Math.imul(C,L),n=n+Math.imul(E,W)|0,a=(a=a+Math.imul(E,G)|0)+Math.imul(j,W)|0,i=i+Math.imul(j,G)|0,n=n+Math.imul(x,V)|0,a=(a=a+Math.imul(x,Z)|0)+Math.imul(A,V)|0,i=i+Math.imul(A,Z)|0,n=n+Math.imul(_,X)|0,a=(a=a+Math.imul(_,J)|0)+Math.imul(w,X)|0,i=i+Math.imul(w,J)|0,n=n+Math.imul(m,Q)|0,a=(a=a+Math.imul(m,ee)|0)+Math.imul(v,Q)|0,i=i+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,a=(a=a+Math.imul(p,ne)|0)+Math.imul(b,re)|0,i=i+Math.imul(b,ne)|0;var ke=(c+(n=n+Math.imul(d,ie)|0)|0)+((8191&(a=(a=a+Math.imul(d,se)|0)+Math.imul(l,ie)|0))<<13)|0;c=((i=i+Math.imul(l,se)|0)+(a>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(R,F),a=(a=Math.imul(R,L))+Math.imul(B,F)|0,i=Math.imul(B,L),n=n+Math.imul(M,W)|0,a=(a=a+Math.imul(M,G)|0)+Math.imul(C,W)|0,i=i+Math.imul(C,G)|0,n=n+Math.imul(E,V)|0,a=(a=a+Math.imul(E,Z)|0)+Math.imul(j,V)|0,i=i+Math.imul(j,Z)|0,n=n+Math.imul(x,X)|0,a=(a=a+Math.imul(x,J)|0)+Math.imul(A,X)|0,i=i+Math.imul(A,J)|0,n=n+Math.imul(_,Q)|0,a=(a=a+Math.imul(_,ee)|0)+Math.imul(w,Q)|0,i=i+Math.imul(w,ee)|0,n=n+Math.imul(m,re)|0,a=(a=a+Math.imul(m,ne)|0)+Math.imul(v,re)|0,i=i+Math.imul(v,ne)|0,n=n+Math.imul(p,ie)|0,a=(a=a+Math.imul(p,se)|0)+Math.imul(b,ie)|0,i=i+Math.imul(b,se)|0;var xe=(c+(n=n+Math.imul(d,ue)|0)|0)+((8191&(a=(a=a+Math.imul(d,ce)|0)+Math.imul(l,ue)|0))<<13)|0;c=((i=i+Math.imul(l,ce)|0)+(a>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(U,F),a=(a=Math.imul(U,L))+Math.imul(O,F)|0,i=Math.imul(O,L),n=n+Math.imul(R,W)|0,a=(a=a+Math.imul(R,G)|0)+Math.imul(B,W)|0,i=i+Math.imul(B,G)|0,n=n+Math.imul(M,V)|0,a=(a=a+Math.imul(M,Z)|0)+Math.imul(C,V)|0,i=i+Math.imul(C,Z)|0,n=n+Math.imul(E,X)|0,a=(a=a+Math.imul(E,J)|0)+Math.imul(j,X)|0,i=i+Math.imul(j,J)|0,n=n+Math.imul(x,Q)|0,a=(a=a+Math.imul(x,ee)|0)+Math.imul(A,Q)|0,i=i+Math.imul(A,ee)|0,n=n+Math.imul(_,re)|0,a=(a=a+Math.imul(_,ne)|0)+Math.imul(w,re)|0,i=i+Math.imul(w,ne)|0,n=n+Math.imul(m,ie)|0,a=(a=a+Math.imul(m,se)|0)+Math.imul(v,ie)|0,i=i+Math.imul(v,se)|0,n=n+Math.imul(p,ue)|0,a=(a=a+Math.imul(p,ce)|0)+Math.imul(b,ue)|0,i=i+Math.imul(b,ce)|0;var Ae=(c+(n=n+Math.imul(d,de)|0)|0)+((8191&(a=(a=a+Math.imul(d,le)|0)+Math.imul(l,de)|0))<<13)|0;c=((i=i+Math.imul(l,le)|0)+(a>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(z,F),a=(a=Math.imul(z,L))+Math.imul(D,F)|0,i=Math.imul(D,L),n=n+Math.imul(U,W)|0,a=(a=a+Math.imul(U,G)|0)+Math.imul(O,W)|0,i=i+Math.imul(O,G)|0,n=n+Math.imul(R,V)|0,a=(a=a+Math.imul(R,Z)|0)+Math.imul(B,V)|0,i=i+Math.imul(B,Z)|0,n=n+Math.imul(M,X)|0,a=(a=a+Math.imul(M,J)|0)+Math.imul(C,X)|0,i=i+Math.imul(C,J)|0,n=n+Math.imul(E,Q)|0,a=(a=a+Math.imul(E,ee)|0)+Math.imul(j,Q)|0,i=i+Math.imul(j,ee)|0,n=n+Math.imul(x,re)|0,a=(a=a+Math.imul(x,ne)|0)+Math.imul(A,re)|0,i=i+Math.imul(A,ne)|0,n=n+Math.imul(_,ie)|0,a=(a=a+Math.imul(_,se)|0)+Math.imul(w,ie)|0,i=i+Math.imul(w,se)|0,n=n+Math.imul(m,ue)|0,a=(a=a+Math.imul(m,ce)|0)+Math.imul(v,ue)|0,i=i+Math.imul(v,ce)|0,n=n+Math.imul(p,de)|0,a=(a=a+Math.imul(p,le)|0)+Math.imul(b,de)|0,i=i+Math.imul(b,le)|0;var Se=(c+(n=n+Math.imul(d,pe)|0)|0)+((8191&(a=(a=a+Math.imul(d,be)|0)+Math.imul(l,pe)|0))<<13)|0;c=((i=i+Math.imul(l,be)|0)+(a>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(z,W),a=(a=Math.imul(z,G))+Math.imul(D,W)|0,i=Math.imul(D,G),n=n+Math.imul(U,V)|0,a=(a=a+Math.imul(U,Z)|0)+Math.imul(O,V)|0,i=i+Math.imul(O,Z)|0,n=n+Math.imul(R,X)|0,a=(a=a+Math.imul(R,J)|0)+Math.imul(B,X)|0,i=i+Math.imul(B,J)|0,n=n+Math.imul(M,Q)|0,a=(a=a+Math.imul(M,ee)|0)+Math.imul(C,Q)|0,i=i+Math.imul(C,ee)|0,n=n+Math.imul(E,re)|0,a=(a=a+Math.imul(E,ne)|0)+Math.imul(j,re)|0,i=i+Math.imul(j,ne)|0,n=n+Math.imul(x,ie)|0,a=(a=a+Math.imul(x,se)|0)+Math.imul(A,ie)|0,i=i+Math.imul(A,se)|0,n=n+Math.imul(_,ue)|0,a=(a=a+Math.imul(_,ce)|0)+Math.imul(w,ue)|0,i=i+Math.imul(w,ce)|0,n=n+Math.imul(m,de)|0,a=(a=a+Math.imul(m,le)|0)+Math.imul(v,de)|0,i=i+Math.imul(v,le)|0;var Ee=(c+(n=n+Math.imul(p,pe)|0)|0)+((8191&(a=(a=a+Math.imul(p,be)|0)+Math.imul(b,pe)|0))<<13)|0;c=((i=i+Math.imul(b,be)|0)+(a>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(z,V),a=(a=Math.imul(z,Z))+Math.imul(D,V)|0,i=Math.imul(D,Z),n=n+Math.imul(U,X)|0,a=(a=a+Math.imul(U,J)|0)+Math.imul(O,X)|0,i=i+Math.imul(O,J)|0,n=n+Math.imul(R,Q)|0,a=(a=a+Math.imul(R,ee)|0)+Math.imul(B,Q)|0,i=i+Math.imul(B,ee)|0,n=n+Math.imul(M,re)|0,a=(a=a+Math.imul(M,ne)|0)+Math.imul(C,re)|0,i=i+Math.imul(C,ne)|0,n=n+Math.imul(E,ie)|0,a=(a=a+Math.imul(E,se)|0)+Math.imul(j,ie)|0,i=i+Math.imul(j,se)|0,n=n+Math.imul(x,ue)|0,a=(a=a+Math.imul(x,ce)|0)+Math.imul(A,ue)|0,i=i+Math.imul(A,ce)|0,n=n+Math.imul(_,de)|0,a=(a=a+Math.imul(_,le)|0)+Math.imul(w,de)|0,i=i+Math.imul(w,le)|0;var je=(c+(n=n+Math.imul(m,pe)|0)|0)+((8191&(a=(a=a+Math.imul(m,be)|0)+Math.imul(v,pe)|0))<<13)|0;c=((i=i+Math.imul(v,be)|0)+(a>>>13)|0)+(je>>>26)|0,je&=67108863,n=Math.imul(z,X),a=(a=Math.imul(z,J))+Math.imul(D,X)|0,i=Math.imul(D,J),n=n+Math.imul(U,Q)|0,a=(a=a+Math.imul(U,ee)|0)+Math.imul(O,Q)|0,i=i+Math.imul(O,ee)|0,n=n+Math.imul(R,re)|0,a=(a=a+Math.imul(R,ne)|0)+Math.imul(B,re)|0,i=i+Math.imul(B,ne)|0,n=n+Math.imul(M,ie)|0,a=(a=a+Math.imul(M,se)|0)+Math.imul(C,ie)|0,i=i+Math.imul(C,se)|0,n=n+Math.imul(E,ue)|0,a=(a=a+Math.imul(E,ce)|0)+Math.imul(j,ue)|0,i=i+Math.imul(j,ce)|0,n=n+Math.imul(x,de)|0,a=(a=a+Math.imul(x,le)|0)+Math.imul(A,de)|0,i=i+Math.imul(A,le)|0;var Pe=(c+(n=n+Math.imul(_,pe)|0)|0)+((8191&(a=(a=a+Math.imul(_,be)|0)+Math.imul(w,pe)|0))<<13)|0;c=((i=i+Math.imul(w,be)|0)+(a>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(z,Q),a=(a=Math.imul(z,ee))+Math.imul(D,Q)|0,i=Math.imul(D,ee),n=n+Math.imul(U,re)|0,a=(a=a+Math.imul(U,ne)|0)+Math.imul(O,re)|0,i=i+Math.imul(O,ne)|0,n=n+Math.imul(R,ie)|0,a=(a=a+Math.imul(R,se)|0)+Math.imul(B,ie)|0,i=i+Math.imul(B,se)|0,n=n+Math.imul(M,ue)|0,a=(a=a+Math.imul(M,ce)|0)+Math.imul(C,ue)|0,i=i+Math.imul(C,ce)|0,n=n+Math.imul(E,de)|0,a=(a=a+Math.imul(E,le)|0)+Math.imul(j,de)|0,i=i+Math.imul(j,le)|0;var Me=(c+(n=n+Math.imul(x,pe)|0)|0)+((8191&(a=(a=a+Math.imul(x,be)|0)+Math.imul(A,pe)|0))<<13)|0;c=((i=i+Math.imul(A,be)|0)+(a>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(z,re),a=(a=Math.imul(z,ne))+Math.imul(D,re)|0,i=Math.imul(D,ne),n=n+Math.imul(U,ie)|0,a=(a=a+Math.imul(U,se)|0)+Math.imul(O,ie)|0,i=i+Math.imul(O,se)|0,n=n+Math.imul(R,ue)|0,a=(a=a+Math.imul(R,ce)|0)+Math.imul(B,ue)|0,i=i+Math.imul(B,ce)|0,n=n+Math.imul(M,de)|0,a=(a=a+Math.imul(M,le)|0)+Math.imul(C,de)|0,i=i+Math.imul(C,le)|0;var Ce=(c+(n=n+Math.imul(E,pe)|0)|0)+((8191&(a=(a=a+Math.imul(E,be)|0)+Math.imul(j,pe)|0))<<13)|0;c=((i=i+Math.imul(j,be)|0)+(a>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(z,ie),a=(a=Math.imul(z,se))+Math.imul(D,ie)|0,i=Math.imul(D,se),n=n+Math.imul(U,ue)|0,a=(a=a+Math.imul(U,ce)|0)+Math.imul(O,ue)|0,i=i+Math.imul(O,ce)|0,n=n+Math.imul(R,de)|0,a=(a=a+Math.imul(R,le)|0)+Math.imul(B,de)|0,i=i+Math.imul(B,le)|0;var Te=(c+(n=n+Math.imul(M,pe)|0)|0)+((8191&(a=(a=a+Math.imul(M,be)|0)+Math.imul(C,pe)|0))<<13)|0;c=((i=i+Math.imul(C,be)|0)+(a>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(z,ue),a=(a=Math.imul(z,ce))+Math.imul(D,ue)|0,i=Math.imul(D,ce),n=n+Math.imul(U,de)|0,a=(a=a+Math.imul(U,le)|0)+Math.imul(O,de)|0,i=i+Math.imul(O,le)|0;var Re=(c+(n=n+Math.imul(R,pe)|0)|0)+((8191&(a=(a=a+Math.imul(R,be)|0)+Math.imul(B,pe)|0))<<13)|0;c=((i=i+Math.imul(B,be)|0)+(a>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(z,de),a=(a=Math.imul(z,le))+Math.imul(D,de)|0,i=Math.imul(D,le);var Be=(c+(n=n+Math.imul(U,pe)|0)|0)+((8191&(a=(a=a+Math.imul(U,be)|0)+Math.imul(O,pe)|0))<<13)|0;c=((i=i+Math.imul(O,be)|0)+(a>>>13)|0)+(Be>>>26)|0,Be&=67108863;var Ie=(c+(n=Math.imul(z,pe))|0)+((8191&(a=(a=Math.imul(z,be))+Math.imul(D,pe)|0))<<13)|0;return c=((i=Math.imul(D,be))+(a>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,u[0]=ye,u[1]=me,u[2]=ve,u[3]=ge,u[4]=_e,u[5]=we,u[6]=ke,u[7]=xe,u[8]=Ae,u[9]=Se,u[10]=Ee,u[11]=je,u[12]=Pe,u[13]=Me,u[14]=Ce,u[15]=Te,u[16]=Re,u[17]=Be,u[18]=Ie,0!==c&&(u[19]=c,r.length++),r};function p(e,t,r){return(new b).mulp(e,t,r)}function b(e,t){this.x=e,this.y=t}Math.imul||(h=l),i.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?h(this,e,t):r<63?l(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,a=0,i=0;i>>26)|0)>>>26,s&=67108863}r.words[i]=o,n=s,s=a}return 0!==n?r.words[i]=n:r.length--,r.strip()}(this,e,t):p(this,e,t)},b.prototype.makeRBT=function(e){for(var t=new Array(e),r=i.prototype._countBits(e)-1,n=0;n>=1;return n},b.prototype.permute=function(e,t,r,n,a,i){for(var s=0;s>>=1)a++;return 1<>>=13,r[2*s+1]=8191&i,i>>>=13;for(s=2*t;s>=26,t+=a/67108864|0,t+=i>>>26,this.words[r]=67108863&i}return 0!==t&&(this.words[r]=t,this.length++),this},i.prototype.muln=function(e){return this.clone().imuln(e)},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.imul(this.clone())},i.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>a}return t}(e);if(0===t.length)return new i(1);for(var r=this,n=0;n=0);var t,r=e%26,a=(e-r)/26,i=67108863>>>26-r<<26-r;if(0!==r){var s=0;for(t=0;t>>26-r}s&&(this.words[t]=s,this.length++)}if(0!==a){for(t=this.length-1;t>=0;t--)this.words[t+a]=this.words[t];for(t=0;t=0),a=t?(t-t%26)/26:0;var i=e%26,s=Math.min((e-i)/26,this.length),o=67108863^67108863>>>i<s)for(this.length-=s,c=0;c=0&&(0!==f||c>=a);c--){var d=0|this.words[c];this.words[c]=f<<26-i|d>>>i,f=d&o}return u&&0!==f&&(u.words[u.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.ishrn=function(e,t,r){return n(0===this.negative),this.iushrn(e,t,r)},i.prototype.shln=function(e){return this.clone().ishln(e)},i.prototype.ushln=function(e){return this.clone().iushln(e)},i.prototype.shrn=function(e){return this.clone().ishrn(e)},i.prototype.ushrn=function(e){return this.clone().iushrn(e)},i.prototype.testn=function(e){n("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,a=1<=0);var t=e%26,r=(e-t)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var a=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},i.prototype.isubn=function(e){if(n("number"==typeof e),n(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(u/67108864|0),this.words[a+r]=67108863&i}for(;a>26,this.words[a+r]=67108863&i;if(0===o)return this.strip();for(n(-1===o),o=0,a=0;a>26,this.words[a]=67108863&i;return this.negative=1,this.strip()},i.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),a=e,s=0|a.words[a.length-1];0!==(r=26-this._countBits(s))&&(a=a.ushln(r),n.iushln(r),s=0|a.words[a.length-1]);var o,u=n.length-a.length;if("mod"!==t){(o=new i(null)).length=u+1,o.words=new Array(o.length);for(var c=0;c=0;d--){var l=67108864*(0|n.words[a.length+d])+(0|n.words[a.length+d-1]);for(l=Math.min(l/s|0,67108863),n._ishlnsubmul(a,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(a,1,d),n.isZero()||(n.negative^=1);o&&(o.words[d]=l)}return o&&o.strip(),n.strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:o||null,mod:n}},i.prototype.divmod=function(e,t,r){return n(!e.isZero()),this.isZero()?{div:new i(0),mod:new i(0)}:0!==this.negative&&0===e.negative?(o=this.neg().divmod(e,t),"mod"!==t&&(a=o.div.neg()),"div"!==t&&(s=o.mod.neg(),r&&0!==s.negative&&s.iadd(e)),{div:a,mod:s}):0===this.negative&&0!==e.negative?(o=this.divmod(e.neg(),t),"mod"!==t&&(a=o.div.neg()),{div:a,mod:o.mod}):0!=(this.negative&e.negative)?(o=this.neg().divmod(e.neg(),t),"div"!==t&&(s=o.mod.neg(),r&&0!==s.negative&&s.isub(e)),{div:o.div,mod:s}):e.length>this.length||this.cmp(e)<0?{div:new i(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new i(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new i(this.modn(e.words[0]))}:this._wordDiv(e,t);var a,s,o},i.prototype.div=function(e){return this.divmod(e,"div",!1).div},i.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},i.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},i.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),a=e.andln(1),i=r.cmp(n);return i<0||1===a&&0===i?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},i.prototype.modn=function(e){n(e<=67108863);for(var t=(1<<26)%e,r=0,a=this.length-1;a>=0;a--)r=(t*r+(0|this.words[a]))%e;return r},i.prototype.idivn=function(e){n(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var a=(0|this.words[r])+67108864*t;this.words[r]=a/e|0,t=a%e}return this.strip()},i.prototype.divn=function(e){return this.clone().idivn(e)},i.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var a=new i(1),s=new i(0),o=new i(0),u=new i(1),c=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++c;for(var f=r.clone(),d=t.clone();!t.isZero();){for(var l=0,h=1;0==(t.words[0]&h)&&l<26;++l,h<<=1);if(l>0)for(t.iushrn(l);l-- >0;)(a.isOdd()||s.isOdd())&&(a.iadd(f),s.isub(d)),a.iushrn(1),s.iushrn(1);for(var p=0,b=1;0==(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(o.isOdd()||u.isOdd())&&(o.iadd(f),u.isub(d)),o.iushrn(1),u.iushrn(1);t.cmp(r)>=0?(t.isub(r),a.isub(o),s.isub(u)):(r.isub(t),o.isub(a),u.isub(s))}return{a:o,b:u,gcd:r.iushln(c)}},i.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var a,s=new i(1),o=new i(0),u=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var c=0,f=1;0==(t.words[0]&f)&&c<26;++c,f<<=1);if(c>0)for(t.iushrn(c);c-- >0;)s.isOdd()&&s.iadd(u),s.iushrn(1);for(var d=0,l=1;0==(r.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(r.iushrn(d);d-- >0;)o.isOdd()&&o.iadd(u),o.iushrn(1);t.cmp(r)>=0?(t.isub(r),s.isub(o)):(r.isub(t),o.isub(s))}return(a=0===t.cmpn(1)?s:o).cmpn(0)<0&&a.iadd(e),a},i.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var a=t.cmp(r);if(a<0){var i=t;t=r,r=i}else if(0===a||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},i.prototype.invm=function(e){return this.egcd(e).a.umod(e)},i.prototype.isEven=function(){return 0==(1&this.words[0])},i.prototype.isOdd=function(){return 1==(1&this.words[0])},i.prototype.andln=function(e){return this.words[0]&e},i.prototype.bincn=function(e){n("number"==typeof e);var t=e%26,r=(e-t)/26,a=1<>>26,o&=67108863,this.words[s]=o}return 0!==i&&(this.words[s]=i,this.length++),this},i.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},i.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),n(e<=67108863,"Number is too big");var a=0|this.words[0];t=a===e?0:ae.length)return 1;if(this.length=0;r--){var n=0|this.words[r],a=0|e.words[r];if(n!==a){na&&(t=1);break}}return t},i.prototype.gtn=function(e){return 1===this.cmpn(e)},i.prototype.gt=function(e){return 1===this.cmp(e)},i.prototype.gten=function(e){return this.cmpn(e)>=0},i.prototype.gte=function(e){return this.cmp(e)>=0},i.prototype.ltn=function(e){return-1===this.cmpn(e)},i.prototype.lt=function(e){return-1===this.cmp(e)},i.prototype.lten=function(e){return this.cmpn(e)<=0},i.prototype.lte=function(e){return this.cmp(e)<=0},i.prototype.eqn=function(e){return 0===this.cmpn(e)},i.prototype.eq=function(e){return 0===this.cmp(e)},i.red=function(e){return new k(e)},i.prototype.toRed=function(e){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},i.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},i.prototype._forceRed=function(e){return this.red=e,this},i.prototype.forceRed=function(e){return n(!this.red,"Already a number in reduction context"),this._forceRed(e)},i.prototype.redAdd=function(e){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},i.prototype.redIAdd=function(e){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},i.prototype.redSub=function(e){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},i.prototype.redISub=function(e){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},i.prototype.redShl=function(e){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},i.prototype.redMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},i.prototype.redIMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},i.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(e){return n(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function m(e,t){this.name=e,this.p=new i(t,16),this.n=this.p.bitLength(),this.k=new i(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){m.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function g(){m.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){m.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function w(){m.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function k(e){if("string"==typeof e){var t=i._prime(e);this.m=t.p,this.prime=t}else n(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function x(e){k.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new i(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var e=new i(null);return e.words=new Array(Math.ceil(this.n/13)),e},m.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):r.strip(),r},m.prototype.split=function(e,t){e.iushrn(this.n,0,t)},m.prototype.imulK=function(e){return e.imul(this.k)},a(v,m),v.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n>>22,a=i}a>>>=22,e.words[n-10]=a,0===a&&e.length>10?e.length-=10:e.length-=9},v.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=a,t=n}return 0!==t&&(e.words[e.length++]=t),e},i._prime=function(e){if(y[e])return y[e];var t;if("k256"===e)t=new v;else if("p224"===e)t=new g;else if("p192"===e)t=new _;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new w}return y[e]=t,t},k.prototype._verify1=function(e){n(0===e.negative,"red works only with positives"),n(e.red,"red works only with red numbers")},k.prototype._verify2=function(e,t){n(0==(e.negative|t.negative),"red works only with positives"),n(e.red&&e.red===t.red,"red works only with red numbers")},k.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},k.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},k.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},k.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},k.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},k.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},k.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},k.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},k.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},k.prototype.isqr=function(e){return this.imul(e,e.clone())},k.prototype.sqr=function(e){return this.mul(e,e)},k.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2==1),3===t){var r=this.m.add(new i(1)).iushrn(2);return this.pow(e,r)}for(var a=this.m.subn(1),s=0;!a.isZero()&&0===a.andln(1);)s++,a.iushrn(1);n(!a.isZero());var o=new i(1).toRed(this),u=o.redNeg(),c=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new i(2*f*f).toRed(this);0!==this.pow(f,c).cmp(u);)f.redIAdd(u);for(var d=this.pow(f,a),l=this.pow(e,a.addn(1).iushrn(1)),h=this.pow(e,a),p=s;0!==h.cmp(o);){for(var b=h,y=0;0!==b.cmp(o);y++)b=b.redSqr();n(y=0;n--){for(var c=t.words[n],f=u-1;f>=0;f--){var d=c>>f&1;a!==r[0]&&(a=this.sqr(a)),0!==d||0!==s?(s<<=1,s|=d,(4===++o||0===n&&0===f)&&(a=this.mul(a,r[s]),o=0,s=0)):o=0}u=26}return a},k.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},k.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},i.mont=function(e){return new x(e)},a(x,k),x.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},x.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},x.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(n).iushrn(this.shift),i=a;return a.cmp(this.m)>=0?i=a.isub(this.m):a.cmpn(0)<0&&(i=a.iadd(this.m)),i._forceRed(this)},x.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new i(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(n).iushrn(this.shift),s=a;return a.cmp(this.m)>=0?s=a.isub(this.m):a.cmpn(0)<0&&(s=a.iadd(this.m)),s._forceRed(this)},x.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this)},{buffer:"buffer"}],43:[function(e,t,r){var n;function a(e){this.rand=e}if(t.exports=function(e){return n||(n=new a(null)),n.generate(e)},t.exports.Rand=a,a.prototype.generate=function(e){return this._rand(e)},a.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;rf;)if((o=u[f++])!=o)return!0}else for(;c>f;f++)if((e||f in u)&&u[f]===r)return e||f||0;return!e&&-1}}},{"./_to-absolute-index":142,"./_to-iobject":144,"./_to-length":145}],74:[function(e,t,r){var n=e("./_ctx"),a=e("./_iobject"),i=e("./_to-object"),s=e("./_to-length"),o=e("./_array-species-create");t.exports=function(e,t){var r=1==e,u=2==e,c=3==e,f=4==e,d=6==e,l=5==e||d,h=t||o;return function(t,o,p){for(var b,y,m=i(t),v=a(m),g=n(o,p,3),_=s(v.length),w=0,k=r?h(t,_):u?h(t,0):void 0;_>w;w++)if((l||w in v)&&(y=g(b=v[w],w,m),e))if(r)k[w]=y;else if(y)switch(e){case 3:return!0;case 5:return b;case 6:return w;case 2:k.push(b)}else if(f)return!1;return d?-1:c||f?f:k}}},{"./_array-species-create":76,"./_ctx":83,"./_iobject":98,"./_to-length":145,"./_to-object":146}],75:[function(e,t,r){var n=e("./_is-object"),a=e("./_is-array"),i=e("./_wks")("species");t.exports=function(e){var t;return a(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!a(t.prototype)||(t=void 0),n(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},{"./_is-array":100,"./_is-object":101,"./_wks":152}],76:[function(e,t,r){var n=e("./_array-species-constructor");t.exports=function(e,t){return new(n(e))(t)}},{"./_array-species-constructor":75}],77:[function(e,t,r){var n=e("./_cof"),a=e("./_wks")("toStringTag"),i="Arguments"==n(function(){return arguments}());t.exports=function(e){var t,r,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),a))?r:i?n(t):"Object"==(s=n(t))&&"function"==typeof t.callee?"Arguments":s}},{"./_cof":78,"./_wks":152}],78:[function(e,t,r){var n={}.toString;t.exports=function(e){return n.call(e).slice(8,-1)}},{}],79:[function(e,t,r){"use strict";var n=e("./_redefine-all"),a=e("./_meta").getWeak,i=e("./_an-object"),s=e("./_is-object"),o=e("./_an-instance"),u=e("./_for-of"),c=e("./_array-methods"),f=e("./_has"),d=e("./_validate-collection"),l=c(5),h=c(6),p=0,b=function(e){return e._l||(e._l=new y)},y=function(){this.a=[]},m=function(e,t){return l(e.a,function(e){return e[0]===t})};y.prototype={get:function(e){var t=m(this,e);if(t)return t[1]},has:function(e){return!!m(this,e)},set:function(e,t){var r=m(this,e);r?r[1]=t:this.a.push([e,t])},delete:function(e){var t=h(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},t.exports={getConstructor:function(e,t,r,i){var c=e(function(e,n){o(e,c,t,"_i"),e._t=t,e._i=p++,e._l=void 0,void 0!=n&&u(n,r,e[i],e)});return n(c.prototype,{delete:function(e){if(!s(e))return!1;var r=a(e);return!0===r?b(d(this,t)).delete(e):r&&f(r,this._i)&&delete r[this._i]},has:function(e){if(!s(e))return!1;var r=a(e);return!0===r?b(d(this,t)).has(e):r&&f(r,this._i)}}),c},def:function(e,t,r){var n=a(i(t),!0);return!0===n?b(e).set(t,r):n[e._i]=r,e},ufstore:b}},{"./_an-instance":71,"./_an-object":72,"./_array-methods":74,"./_for-of":91,"./_has":93,"./_is-object":101,"./_meta":109,"./_redefine-all":130,"./_validate-collection":149}],80:[function(e,t,r){"use strict";var n=e("./_global"),a=e("./_export"),i=e("./_meta"),s=e("./_fails"),o=e("./_hide"),u=e("./_redefine-all"),c=e("./_for-of"),f=e("./_an-instance"),d=e("./_is-object"),l=e("./_set-to-string-tag"),h=e("./_object-dp").f,p=e("./_array-methods")(0),b=e("./_descriptors");t.exports=function(e,t,r,y,m,v){var g=n[e],_=g,w=m?"set":"add",k=_&&_.prototype,x={};return b&&"function"==typeof _&&(v||k.forEach&&!s(function(){(new _).entries().next()}))?(_=t(function(t,r){f(t,_,e,"_c"),t._c=new g,void 0!=r&&c(r,m,t[w],t)}),p("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(e){var t="add"==e||"set"==e;e in k&&(!v||"clear"!=e)&&o(_.prototype,e,function(r,n){if(f(this,_,e),!t&&v&&!d(r))return"get"==e&&void 0;var a=this._c[e](0===r?0:r,n);return t?this:a})}),v||h(_.prototype,"size",{get:function(){return this._c.size}})):(_=y.getConstructor(t,e,m,w),u(_.prototype,r),i.NEED=!0),l(_,e),x[e]=_,a(a.G+a.W+a.F,x),v||y.setStrong(_,e,m),_}},{"./_an-instance":71,"./_array-methods":74,"./_descriptors":85,"./_export":89,"./_fails":90,"./_for-of":91,"./_global":92,"./_hide":94,"./_is-object":101,"./_meta":109,"./_object-dp":114,"./_redefine-all":130,"./_set-to-string-tag":136}],81:[function(e,t,r){var n=t.exports={version:"2.5.3"};"number"==typeof __e&&(__e=n)},{}],82:[function(e,t,r){"use strict";var n=e("./_object-dp"),a=e("./_property-desc");t.exports=function(e,t,r){t in e?n.f(e,t,a(0,r)):e[t]=r}},{"./_object-dp":114,"./_property-desc":129}],83:[function(e,t,r){var n=e("./_a-function");t.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,a){return e.call(t,r,n,a)}}return function(){return e.apply(t,arguments)}}},{"./_a-function":69}],84:[function(e,t,r){t.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},{}],85:[function(e,t,r){t.exports=!e("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":90}],86:[function(e,t,r){var n=e("./_is-object"),a=e("./_global").document,i=n(a)&&n(a.createElement);t.exports=function(e){return i?a.createElement(e):{}}},{"./_global":92,"./_is-object":101}],87:[function(e,t,r){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],88:[function(e,t,r){var n=e("./_object-keys"),a=e("./_object-gops"),i=e("./_object-pie");t.exports=function(e){var t=n(e),r=a.f;if(r)for(var s,o=r(e),u=i.f,c=0;o.length>c;)u.call(e,s=o[c++])&&t.push(s);return t}},{"./_object-gops":119,"./_object-keys":122,"./_object-pie":123}],89:[function(e,t,r){var n=e("./_global"),a=e("./_core"),i=e("./_ctx"),s=e("./_hide"),o=function(e,t,r){var u,c,f,d=e&o.F,l=e&o.G,h=e&o.S,p=e&o.P,b=e&o.B,y=e&o.W,m=l?a:a[t]||(a[t]={}),v=m.prototype,g=l?n:h?n[t]:(n[t]||{}).prototype;for(u in l&&(r=t),r)(c=!d&&g&&void 0!==g[u])&&u in m||(f=c?g[u]:r[u],m[u]=l&&"function"!=typeof g[u]?r[u]:b&&c?i(f,n):y&&g[u]==f?function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(f):p&&"function"==typeof f?i(Function.call,f):f,p&&((m.virtual||(m.virtual={}))[u]=f,e&o.R&&v&&!v[u]&&s(v,u,f)))};o.F=1,o.G=2,o.S=4,o.P=8,o.B=16,o.W=32,o.U=64,o.R=128,t.exports=o},{"./_core":81,"./_ctx":83,"./_global":92,"./_hide":94}],90:[function(e,t,r){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],91:[function(e,t,r){var n=e("./_ctx"),a=e("./_iter-call"),i=e("./_is-array-iter"),s=e("./_an-object"),o=e("./_to-length"),u=e("./core.get-iterator-method"),c={},f={};(r=t.exports=function(e,t,r,d,l){var h,p,b,y,m=l?function(){return e}:u(e),v=n(r,d,t?2:1),g=0;if("function"!=typeof m)throw TypeError(e+" is not iterable!");if(i(m)){for(h=o(e.length);h>g;g++)if((y=t?v(s(p=e[g])[0],p[1]):v(e[g]))===c||y===f)return y}else for(b=m.call(e);!(p=b.next()).done;)if((y=a(b,v,p.value,t))===c||y===f)return y}).BREAK=c,r.RETURN=f},{"./_an-object":72,"./_ctx":83,"./_is-array-iter":99,"./_iter-call":102,"./_to-length":145,"./core.get-iterator-method":153}],92:[function(e,t,r){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},{}],93:[function(e,t,r){var n={}.hasOwnProperty;t.exports=function(e,t){return n.call(e,t)}},{}],94:[function(e,t,r){var n=e("./_object-dp"),a=e("./_property-desc");t.exports=e("./_descriptors")?function(e,t,r){return n.f(e,t,a(1,r))}:function(e,t,r){return e[t]=r,e}},{"./_descriptors":85,"./_object-dp":114,"./_property-desc":129}],95:[function(e,t,r){var n=e("./_global").document;t.exports=n&&n.documentElement},{"./_global":92}],96:[function(e,t,r){t.exports=!e("./_descriptors")&&!e("./_fails")(function(){return 7!=Object.defineProperty(e("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":85,"./_dom-create":86,"./_fails":90}],97:[function(e,t,r){t.exports=function(e,t,r){var n=void 0===r;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}return e.apply(r,t)}},{}],98:[function(e,t,r){var n=e("./_cof");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},{"./_cof":78}],99:[function(e,t,r){var n=e("./_iterators"),a=e("./_wks")("iterator"),i=Array.prototype;t.exports=function(e){return void 0!==e&&(n.Array===e||i[a]===e)}},{"./_iterators":107,"./_wks":152}],100:[function(e,t,r){var n=e("./_cof");t.exports=Array.isArray||function(e){return"Array"==n(e)}},{"./_cof":78}],101:[function(e,t,r){t.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},{}],102:[function(e,t,r){var n=e("./_an-object");t.exports=function(e,t,r,a){try{return a?t(n(r)[0],r[1]):t(r)}catch(t){var i=e.return;throw void 0!==i&&n(i.call(e)),t}}},{"./_an-object":72}],103:[function(e,t,r){"use strict";var n=e("./_object-create"),a=e("./_property-desc"),i=e("./_set-to-string-tag"),s={};e("./_hide")(s,e("./_wks")("iterator"),function(){return this}),t.exports=function(e,t,r){e.prototype=n(s,{next:a(1,r)}),i(e,t+" Iterator")}},{"./_hide":94,"./_object-create":113,"./_property-desc":129,"./_set-to-string-tag":136,"./_wks":152}],104:[function(e,t,r){"use strict";var n=e("./_library"),a=e("./_export"),i=e("./_redefine"),s=e("./_hide"),o=e("./_has"),u=e("./_iterators"),c=e("./_iter-create"),f=e("./_set-to-string-tag"),d=e("./_object-gpo"),l=e("./_wks")("iterator"),h=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(e,t,r,b,y,m,v){c(r,t,b);var g,_,w,k=function(e){if(!h&&e in E)return E[e];switch(e){case"keys":case"values":return function(){return new r(this,e)}}return function(){return new r(this,e)}},x=t+" Iterator",A="values"==y,S=!1,E=e.prototype,j=E[l]||E["@@iterator"]||y&&E[y],P=!h&&j||k(y),M=y?A?k("entries"):P:void 0,C="Array"==t&&E.entries||j;if(C&&(w=d(C.call(new e)))!==Object.prototype&&w.next&&(f(w,x,!0),n||o(w,l)||s(w,l,p)),A&&j&&"values"!==j.name&&(S=!0,P=function(){return j.call(this)}),n&&!v||!h&&!S&&E[l]||s(E,l,P),u[t]=P,u[x]=p,y)if(g={values:A?P:k("values"),keys:m?P:k("keys"),entries:M},v)for(_ in g)_ in E||i(E,_,g[_]);else a(a.P+a.F*(h||S),t,g);return g}},{"./_export":89,"./_has":93,"./_hide":94,"./_iter-create":103,"./_iterators":107,"./_library":108,"./_object-gpo":120,"./_redefine":131,"./_set-to-string-tag":136,"./_wks":152}],105:[function(e,t,r){var n=e("./_wks")("iterator"),a=!1;try{var i=[7][n]();i.return=function(){a=!0},Array.from(i,function(){throw 2})}catch(e){}t.exports=function(e,t){if(!t&&!a)return!1;var r=!1;try{var i=[7],s=i[n]();s.next=function(){return{done:r=!0}},i[n]=function(){return s},e(i)}catch(e){}return r}},{"./_wks":152}],106:[function(e,t,r){t.exports=function(e,t){return{value:t,done:!!e}}},{}],107:[function(e,t,r){t.exports={}},{}],108:[function(e,t,r){t.exports=!0},{}],109:[function(e,t,r){var n=e("./_uid")("meta"),a=e("./_is-object"),i=e("./_has"),s=e("./_object-dp").f,o=0,u=Object.isExtensible||function(){return!0},c=!e("./_fails")(function(){return u(Object.preventExtensions({}))}),f=function(e){s(e,n,{value:{i:"O"+ ++o,w:{}}})},d=t.exports={KEY:n,NEED:!1,fastKey:function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,n)){if(!u(e))return"F";if(!t)return"E";f(e)}return e[n].i},getWeak:function(e,t){if(!i(e,n)){if(!u(e))return!0;if(!t)return!1;f(e)}return e[n].w},onFreeze:function(e){return c&&d.NEED&&u(e)&&!i(e,n)&&f(e),e}}},{"./_fails":90,"./_has":93,"./_is-object":101,"./_object-dp":114,"./_uid":148}],110:[function(e,t,r){var n=e("./_global"),a=e("./_task").set,i=n.MutationObserver||n.WebKitMutationObserver,s=n.process,o=n.Promise,u="process"==e("./_cof")(s);t.exports=function(){var e,t,r,c=function(){var n,a;for(u&&(n=s.domain)&&n.exit();e;){a=e.fn,e=e.next;try{a()}catch(n){throw e?r():t=void 0,n}}t=void 0,n&&n.enter()};if(u)r=function(){s.nextTick(c)};else if(!i||n.navigator&&n.navigator.standalone)if(o&&o.resolve){var f=o.resolve();r=function(){f.then(c)}}else r=function(){a.call(n,c)};else{var d=!0,l=document.createTextNode("");new i(c).observe(l,{characterData:!0}),r=function(){l.data=d=!d}}return function(n){var a={fn:n,next:void 0};t&&(t.next=a),e||(e=a,r()),t=a}}},{"./_cof":78,"./_global":92,"./_task":141}],111:[function(e,t,r){"use strict";var n=e("./_a-function");t.exports.f=function(e){return new function(e){var t,r;this.promise=new e(function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n}),this.resolve=n(t),this.reject=n(r)}(e)}},{"./_a-function":69}],112:[function(e,t,r){"use strict";var n=e("./_object-keys"),a=e("./_object-gops"),i=e("./_object-pie"),s=e("./_to-object"),o=e("./_iobject"),u=Object.assign;t.exports=!u||e("./_fails")(function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst";return e[r]=7,n.split("").forEach(function(e){t[e]=e}),7!=u({},e)[r]||Object.keys(u({},t)).join("")!=n})?function(e,t){for(var r=s(e),u=arguments.length,c=1,f=a.f,d=i.f;u>c;)for(var l,h=o(arguments[c++]),p=f?n(h).concat(f(h)):n(h),b=p.length,y=0;b>y;)d.call(h,l=p[y++])&&(r[l]=h[l]);return r}:u},{"./_fails":90,"./_iobject":98,"./_object-gops":119,"./_object-keys":122,"./_object-pie":123,"./_to-object":146}],113:[function(e,t,r){var n=e("./_an-object"),a=e("./_object-dps"),i=e("./_enum-bug-keys"),s=e("./_shared-key")("IE_PROTO"),o=function(){},u=function(){var t,r=e("./_dom-create")("iframe"),n=i.length;for(r.style.display="none",e("./_html").appendChild(r),r.src="javascript:",(t=r.contentWindow.document).open(),t.write("