diff --git a/package.json b/package.json index 33500e0b..1ed9f141 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "whatwg-fetch": "^2.0.3" }, "dependencies": { - "asmcrypto.js": "github:mahrud/asmcrypto.js", + "asmcrypto.js": "^0.22.0", "asn1.js": "^5.0.0", "bn.js": "^4.11.8", "buffer": "^5.0.8", diff --git a/src/crypto/cipher/aes.js b/src/crypto/cipher/aes.js index a1f0423b..e23d513a 100644 --- a/src/crypto/cipher/aes.js +++ b/src/crypto/cipher/aes.js @@ -3,7 +3,7 @@ * @module crypto/cipher/aes */ -import { AES_ECB } from 'asmcrypto.js'; +import { AES_ECB } from 'asmcrypto.js/src/aes/ecb/exports'; // TODO use webCrypto or nodeCrypto when possible. export default function aes(length) { diff --git a/src/crypto/gcm.js b/src/crypto/gcm.js index ed4b1222..b50325d1 100644 --- a/src/crypto/gcm.js +++ b/src/crypto/gcm.js @@ -24,7 +24,7 @@ * @module crypto/gcm */ -import { AES_GCM } from 'asmcrypto.js'; +import { AES_GCM } from 'asmcrypto.js/src/aes/gcm/exports'; import config from '../config'; import util from '../util'; diff --git a/src/crypto/hash/index.js b/src/crypto/hash/index.js index 8fca5645..e62823b2 100644 --- a/src/crypto/hash/index.js +++ b/src/crypto/hash/index.js @@ -8,7 +8,7 @@ */ import Rusha from 'rusha'; -import { SHA256 } from 'asmcrypto.js'; +import { SHA256 } from 'asmcrypto.js/src/hash/sha256/exports'; import sha224 from 'hash.js/lib/hash/sha/224'; import sha384 from 'hash.js/lib/hash/sha/384'; import sha512 from 'hash.js/lib/hash/sha/512'; diff --git a/src/crypto/public_key/rsa.js b/src/crypto/public_key/rsa.js index 0699eaf2..3b935960 100644 --- a/src/crypto/public_key/rsa.js +++ b/src/crypto/public_key/rsa.js @@ -28,7 +28,9 @@ import BN from 'bn.js'; -import { random as asmcrypto_random, RSA, RSA_RAW } from 'asmcrypto.js'; +import { RSA } from 'asmcrypto.js/src/rsa/exports-keygen'; +import { RSA_RAW } from 'asmcrypto.js/src/rsa/exports-raw'; +import { random as asmcrypto_random } from 'asmcrypto.js/src/random/exports'; import random from '../random'; import config from '../../config'; import util from '../../util'; @@ -137,13 +139,12 @@ export default { if (webCrypto) { let keyPair; let keyGenOpt; - const Euint8 = E.toArrayLike(Uint8Array); // get bytes of exponent if ((window.crypto && window.crypto.subtle) || window.msCrypto) { // current standard spec keyGenOpt = { name: 'RSASSA-PKCS1-v1_5', modulusLength: B, // the specified keysize in bits - publicExponent: Euint8, // take three bytes (max 65537) + publicExponent: E.toArrayLike(Uint8Array), // take three bytes (max 65537) for exponent hash: { name: 'SHA-1' // not required for actual RSA keys, but for crypto api 'sign' and 'verify' } @@ -154,7 +155,7 @@ export default { keyGenOpt = { name: 'RSA-OAEP', modulusLength: B, // the specified keysize in bits - publicExponent: Euint8, // take three bytes (max 65537) + publicExponent: E.toArrayLike(Uint8Array), // take three bytes (max 65537) for exponent hash: { name: 'SHA-1' // not required for actual RSA keys, but for crypto api 'sign' and 'verify' } @@ -170,7 +171,7 @@ export default { // parse raw ArrayBuffer bytes to jwk/json (WebKit/Safari/IE11 quirk) if (jwk instanceof ArrayBuffer) { - jwk = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(key))); + jwk = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(jwk))); } // map JWK parameters to BN @@ -180,7 +181,7 @@ export default { key.d = b64toBN(jwk.d); key.p = b64toBN(jwk.p); key.q = b64toBN(jwk.q); - key.u = key.p.modInverse(key.q); + key.u = key.p.invm(key.q); return key; } @@ -195,14 +196,14 @@ export default { await asmcrypto_random.seed(await random.getRandomBytes(1024)); // FIXME how much randomness? key = await RSA.generateKey(B, E.toArrayLike(Uint8Array)); return { - n: key[0], - e: key[1], - d: key[2], - q: key[3], - p: key[4], - // dq: key[5], - // dp: key[6], - u: key[7] + n: new BN(key[0]), + e: new BN(key[1]), + d: new BN(key[2]), + q: new BN(key[3]), + p: new BN(key[4]), + // dq: new BN(key[5]), + // dp: new BN(key[6]), + u: new BN(key[7]) }; } }; diff --git a/src/packet/sym_encrypted_integrity_protected.js b/src/packet/sym_encrypted_integrity_protected.js index 763384c4..56d0ce50 100644 --- a/src/packet/sym_encrypted_integrity_protected.js +++ b/src/packet/sym_encrypted_integrity_protected.js @@ -32,7 +32,7 @@ * @module packet/sym_encrypted_integrity_protected */ -import { AES_CFB } from 'asmcrypto.js'; +import { AES_CFB } from 'asmcrypto.js/src/aes/cfb/exports'; import crypto from '../crypto'; import enums from '../enums'; import util from '../util'; diff --git a/test/crypto/crypto.js b/test/crypto/crypto.js index 36434815..7d3bca0f 100644 --- a/test/crypto/crypto.js +++ b/test/crypto/crypto.js @@ -1,5 +1,5 @@ const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : require('../../dist/openpgp'); -const asmCrypto = require('asmcrypto.js'); +const AES_CFB = require('asmcrypto.js/asmcrypto.all.js').AES_CFB; const chai = require('chai'); chai.use(require('chai-as-promised')); @@ -297,9 +297,9 @@ describe('API functional testing', function() { const prefix = util.concatUint8Array([rndm, repeat]); const symmencData = crypto.cfb.encrypt(rndm, algo, util.str2Uint8Array(plaintext), symmKey, false); - const symmencData2 = asmCrypto.AES_CFB.encrypt(util.concatUint8Array([prefix, util.str2Uint8Array(plaintext)]), symmKey); + const symmencData2 = AES_CFB.encrypt(util.concatUint8Array([prefix, util.str2Uint8Array(plaintext)]), symmKey); - let decrypted = asmCrypto.AES_CFB.decrypt(symmencData, symmKey); + let decrypted = AES_CFB.decrypt(symmencData, symmKey); decrypted = decrypted.subarray(crypto.cipher[algo].blockSize + 2, decrypted.length); expect(util.Uint8Array2str(symmencData)).to.equal(util.Uint8Array2str(symmencData2));