Comparing version 4.4.5 to 4.4.6
@@ -1,2 +0,2 @@ | ||
/*! OpenPGP.js v4.4.5 - 2019-01-15 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */ | ||
/*! OpenPGP.js v4.4.6 - 2019-01-24 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */ | ||
!function(){return function e(n,r,t){function o(a,f){if(!r[a]){if(!n[a]){var u="function"==typeof require&&require;if(!f&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var s=r[a]={exports:{}};n[a][0].call(s.exports,function(e){return o(n[a][1][e]||e)},s,s.exports,e,n,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a<t.length;a++)o(t[a]);return o}}()({1:[function(e,n,r){self.window=self,importScripts("openpgp.min.js");var t=window.openpgp,o=[],i=6e4;function a(e){self.postMessage(e,t.util.getTransferables(e.data,!0))}t.crypto.random.randomBuffer.init(i,function(){return o.length||self.postMessage({event:"request-seed",amount:i}),new Promise(function(e){o.push(e)})}),self.onmessage=function(e){var n,r=e.data||{};switch(r.event){case"configure":n=r.config,Object.keys(n).forEach(function(e){t.config[e]=n[e]});break;case"seed-random":!function(e){e instanceof Uint8Array||(e=new Uint8Array(e));t.crypto.random.randomBuffer.set(e)}(r.buf);var i=o;o=[];for(var f=0;f<i.length;f++)i[f]();break;default:!function(e,n,r){if("function"!=typeof t[n])return void a({id:e,event:"method-return",err:"Unknown Worker Event"});r=t.packet.clone.parseClonedPackets(r,n),t.util.restoreStreams(r),t[n](r).then(function(n){a({id:e,event:"method-return",data:t.packet.clone.clonePackets(n)})}).catch(function(n){t.util.print_debug_error(n),a({id:e,event:"method-return",err:n.message,stack:n.stack})})}(r.id,r.event,r.options||{})}}},{}]},{},[1]); |
@@ -1,2 +0,2 @@ | ||
/*! OpenPGP.js v4.4.5 - 2019-01-15 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */ | ||
/*! OpenPGP.js v4.4.6 - 2019-01-24 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */ | ||
!function(){return function e(n,r,t){function o(a,f){if(!r[a]){if(!n[a]){var u="function"==typeof require&&require;if(!f&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var s=r[a]={exports:{}};n[a][0].call(s.exports,function(e){return o(n[a][1][e]||e)},s,s.exports,e,n,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a<t.length;a++)o(t[a]);return o}}()({1:[function(e,n,r){self.window=self,importScripts("openpgp.min.js");var t=window.openpgp,o=[],i=6e4;function a(e){self.postMessage(e,t.util.getTransferables(e.data,!0))}t.crypto.random.randomBuffer.init(i,function(){return o.length||self.postMessage({event:"request-seed",amount:i}),new Promise(function(e){o.push(e)})}),self.onmessage=function(e){var n,r=e.data||{};switch(r.event){case"configure":n=r.config,Object.keys(n).forEach(function(e){t.config[e]=n[e]});break;case"seed-random":!function(e){e instanceof Uint8Array||(e=new Uint8Array(e));t.crypto.random.randomBuffer.set(e)}(r.buf);var i=o;o=[];for(var f=0;f<i.length;f++)i[f]();break;default:!function(e,n,r){if("function"!=typeof t[n])return void a({id:e,event:"method-return",err:"Unknown Worker Event"});r=t.packet.clone.parseClonedPackets(r,n),t.util.restoreStreams(r),t[n](r).then(function(n){a({id:e,event:"method-return",data:t.packet.clone.clonePackets(n)})}).catch(function(n){t.util.print_debug_error(n),a({id:e,event:"method-return",err:n.message,stack:n.stack})})}(r.id,r.event,r.options||{})}}},{}]},{},[1]); |
{ | ||
"name": "openpgp", | ||
"description": "OpenPGP.js is a Javascript implementation of the OpenPGP protocol. This is defined in RFC 4880.", | ||
"version": "4.4.5", | ||
"version": "4.4.6", | ||
"license": "LGPL-3.0+", | ||
@@ -6,0 +6,0 @@ "homepage": "https://openpgpjs.org/", |
@@ -187,3 +187,3 @@ OpenPGP.js [![Build Status](https://travis-ci.org/openpgpjs/openpgpjs.svg?branch=master)](https://travis-ci.org/openpgpjs/openpgpjs) [![Join the chat on Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/openpgpjs/openpgpjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | ||
}) | ||
.then(encrypted => { | ||
.then(async encrypted => { | ||
const options = { | ||
@@ -190,0 +190,0 @@ message: await openpgp.message.readArmored(encrypted), // parse armored message |
@@ -61,2 +61,24 @@ // OpenPGP.js - An OpenPGP implementation in javascript | ||
/** | ||
* Generate ECDHE ephemeral key and secret from public key | ||
* | ||
* @param {module:type/oid} oid Elliptic curve object identifier | ||
* @param {module:enums.symmetric} cipher_algo Symmetric cipher to use | ||
* @param {module:enums.hash} hash_algo Hash algorithm to use | ||
* @param {Uint8Array} Q Recipient public key | ||
* @param {String} fingerprint Recipient fingerprint | ||
* @returns {Promise<{V: Uint8Array, Z: Uint8Array}>} Returns public part of ephemeral key and generated ephemeral secret | ||
* @async | ||
*/ | ||
async function genPublicEphemeralKey(oid, cipher_algo, hash_algo, Q, fingerprint) { | ||
const curve = new Curve(oid); | ||
const param = buildEcdhParam(enums.publicKey.ecdh, oid, cipher_algo, hash_algo, fingerprint); | ||
cipher_algo = enums.read(enums.symmetric, cipher_algo); | ||
const v = await curve.genKeyPair(); | ||
Q = curve.keyFromPublic(Q); | ||
const S = v.derive(Q); | ||
const V = new Uint8Array(v.getPublic()); | ||
const Z = await kdf(hash_algo, S, cipher[cipher_algo].keySize, param); | ||
return { V, Z }; | ||
} | ||
@@ -72,17 +94,10 @@ /** | ||
* @param {String} fingerprint Recipient fingerprint | ||
* @returns {Promise<{V: BN, C: BN}>} Returns ephemeral key and encoded session key | ||
* @returns {Promise<{V: BN, C: BN}>} Returns public part of ephemeral key and encoded session key | ||
* @async | ||
*/ | ||
async function encrypt(oid, cipher_algo, hash_algo, m, Q, fingerprint) { | ||
const curve = new Curve(oid); | ||
const param = buildEcdhParam(enums.publicKey.ecdh, oid, cipher_algo, hash_algo, fingerprint); | ||
cipher_algo = enums.read(enums.symmetric, cipher_algo); | ||
const v = await curve.genKeyPair(); | ||
Q = curve.keyFromPublic(Q); | ||
const S = v.derive(Q); | ||
const Z = await kdf(hash_algo, S, cipher[cipher_algo].keySize, param); | ||
const C = aes_kw.wrap(Z, m.toString()); | ||
const { V, Z } = await genPublicEphemeralKey(oid, cipher_algo, hash_algo, Q, fingerprint); | ||
return { | ||
V: new BN(v.getPublic()), | ||
C: C | ||
V: new BN(V), | ||
C: aes_kw.wrap(Z, m.toString()) | ||
}; | ||
@@ -92,3 +107,3 @@ } | ||
/** | ||
* Decrypt and unwrap the value derived from session key | ||
* Generate ECDHE secret from private key and public part of ephemeral key | ||
* | ||
@@ -98,10 +113,9 @@ * @param {module:type/oid} oid Elliptic curve object identifier | ||
* @param {module:enums.hash} hash_algo Hash algorithm to use | ||
* @param {BN} V Public part of ephemeral key | ||
* @param {Uint8Array} C Encrypted and wrapped value derived from session key | ||
* @param {Uint8Array} V Public part of ephemeral key | ||
* @param {Uint8Array} d Recipient private key | ||
* @param {String} fingerprint Recipient fingerprint | ||
* @returns {Promise<Uint8Array>} Value derived from session | ||
* @returns {Promise<Uint8Array>} Generated ephemeral secret | ||
* @async | ||
*/ | ||
async function decrypt(oid, cipher_algo, hash_algo, V, C, d, fingerprint) { | ||
async function genPrivateEphemeralKey(oid, cipher_algo, hash_algo, V, d, fingerprint) { | ||
const curve = new Curve(oid); | ||
@@ -113,6 +127,23 @@ const param = buildEcdhParam(enums.publicKey.ecdh, oid, cipher_algo, hash_algo, fingerprint); | ||
const S = d.derive(V); | ||
const Z = await kdf(hash_algo, S, cipher[cipher_algo].keySize, param); | ||
return kdf(hash_algo, S, cipher[cipher_algo].keySize, param); | ||
} | ||
/** | ||
* Decrypt and unwrap the value derived from session key | ||
* | ||
* @param {module:type/oid} oid Elliptic curve object identifier | ||
* @param {module:enums.symmetric} cipher_algo Symmetric cipher to use | ||
* @param {module:enums.hash} hash_algo Hash algorithm to use | ||
* @param {Uint8Array} V Public part of ephemeral key | ||
* @param {Uint8Array} C Encrypted and wrapped value derived from session key | ||
* @param {Uint8Array} d Recipient private key | ||
* @param {String} fingerprint Recipient fingerprint | ||
* @returns {Promise<BN>} Value derived from session | ||
* @async | ||
*/ | ||
async function decrypt(oid, cipher_algo, hash_algo, V, C, d, fingerprint) { | ||
const Z = await genPrivateEphemeralKey(oid, cipher_algo, hash_algo, V, d, fingerprint); | ||
return new BN(aes_kw.unwrap(Z, C)); | ||
} | ||
export default { encrypt, decrypt }; | ||
export default { encrypt, decrypt, genPublicEphemeralKey, genPrivateEphemeralKey }; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
5967371
110744