diff --git a/lang/js/BrowserTestExtension/tests/KeyImportExport.js b/lang/js/BrowserTestExtension/tests/KeyImportExport.js
index ed307b32..d2fa2d38 100644
--- a/lang/js/BrowserTestExtension/tests/KeyImportExport.js
+++ b/lang/js/BrowserTestExtension/tests/KeyImportExport.js
@@ -1,138 +1,145 @@
/* gpgme.js - Javascript integration for gpgme
* Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see .
* SPDX-License-Identifier: LGPL-2.1+
*
* Author(s):
* Maximilian Krambach
* Raimund Renkert
*/
-/* global describe, it, expect, Gpgmejs, ImportablePublicKey, inputvalues */
+/* global describe, it, expect, before, afterEach, Gpgmejs*/
+/* global ImportablePublicKey, inputvalues */
describe('Key importing', function () {
- it('Prepare test Key (deleting it from gnupg, if present)', function(done){
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- expect(context.Keyring.getKeys).to.be.a('function');
- context.Keyring.getKeys(ImportablePublicKey.fingerprint).then(
+ const fpr = ImportablePublicKey.fingerprint;
+ const pubKey = ImportablePublicKey.key;
+ const changedKey = ImportablePublicKey.keyChangedUserId;
+
+ let context = null;
+ before(function(done){
+ const prm = Gpgmejs.init();
+ prm.then(function(gpgmejs){
+ context = gpgmejs;
+ context.Keyring.getKeys(fpr).then(
function(result){
if (result.length === 1) {
- result[0].delete().then(function(result){
- expect(result).to.be.true;
+ result[0].delete().then(function(){
+ done();
+ },function(){
done();
});
} else {
done();
}
});
});
});
- it('importing, updating, then deleting public Key', function (done) {
- //This test runs in one large step, to ensure the proper state of the
- // key in all stages.
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.Keyring.getKeys(ImportablePublicKey.fingerprint).then(
- function(result){
- expect(result).to.be.an('array');
- expect(result.length).to.equal(0);
- context.Keyring.importKey(ImportablePublicKey.key, true)
- .then(function(result){
- expect(result.Keys[0]).to.not.be.undefined;
- expect(result.Keys[0].key).to.be.an('object');
- expect(result.Keys[0].key.fingerprint).to.equal(
- ImportablePublicKey.fingerprint);
- expect(result.Keys[0].status).to.equal('newkey');
- context.Keyring.importKey(
- ImportablePublicKey.keyChangedUserId,true)
- .then(function(res){
- expect(res.Keys[0]).to.not.be.undefined;
- expect(res.Keys[0].key).to.be.an('object');
- expect(res.Keys[0].key.fingerprint).to.equal(
- ImportablePublicKey.fingerprint);
- expect(res.Keys[0].status).to.equal(
- 'change');
- expect(
- res.Keys[0].changes.userId).to.be.true;
- expect(
- res.Keys[0].changes.subkey).to.be.false;
- expect(
- res.Keys[0].changes.signature).to.be.true;
- res.Keys[0].key.delete().then(function(result){
- expect(result).to.be.true;
- done();
- });
- });
- });
+ afterEach(function(done){
+ // delete the test key if still present
+ context.Keyring.getKeys(fpr).then(
+ function(result){
+ if (result.length === 1) {
+ result[0].delete().then(function(){
+ done();
+ },function(){
+ done();
+ });
+ } else {
+ done();
+ }
+ });
+ });
+
+ it('Importing Key', function (done) {
+ context.Keyring.getKeys(fpr).then(function(result){
+ expect(result).to.be.an('array');
+ expect(result.length).to.equal(0);
+ context.Keyring.importKey(pubKey).then(function(result){
+ expect(result[0]).to.not.be.undefined;
+ expect(result[0].key).to.be.an('object');
+ expect(result[0].key.fingerprint).to.equal(fpr);
+ expect(result[0].status).to.equal('newkey');
+ done();
+ });
+ });
+ });
+
+ it('Updating Key', function(done){
+ context.Keyring.importKey(pubKey)
+ .then(function(result){
+ expect(result[0].key).to.not.be.undefined;
+ expect(result[0].status).to.equal('newkey');
+ context.Keyring.importKey(changedKey).then(function(res){
+ expect(res[0].key).to.be.an('object');
+ expect(res[0].key.fingerprint).to.equal(fpr);
+ expect(res[0].status).to.equal('change');
+ expect(res[0].changes.userId).to.be.true;
+ expect(res[0].changes.subkey).to.be.false;
+ expect(res[0].changes.signature).to.be.true;
+ done();
});
+ });
+ });
+
+ it('Deleting Key', function(done) {
+ context.Keyring.importKey(pubKey).then(function(result){
+ expect(result[0].key).to.be.an('object');
+ expect(result[0].key.fingerprint).to.equal(fpr);
+ result[0].key.delete().then(function(result){
+ expect(result).to.be.true;
+ done();
+ });
});
});
it('Import result feedback', function(done){
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.Keyring.getKeys(ImportablePublicKey.fingerprint).then(
- function(result){
- expect(result).to.be.an('array');
- expect(result.length).to.equal(0);
- context.Keyring.importKey(ImportablePublicKey.key, true)
- .then(function(result){
- expect(result).to.be.an('object');
- expect(result.Keys[0]).to.be.an('object');
- expect(result.Keys[0].key.fingerprint).to.equal(
- ImportablePublicKey.fingerprint);
- expect(result.Keys[0].status).to.equal('newkey');
- result.Keys[0].key.getArmor().then(function(armor){
- expect(armor).to.be.a('string');
- result.Keys[0].key.delete().then(function(){
- done();
- });
- });
- });
- });
+ context.Keyring.importKey(pubKey, true).then(function(result){
+ expect(result).to.be.an('object');
+ expect(result.Keys[0]).to.be.an('object');
+ expect(result.Keys[0].key.fingerprint).to.equal(fpr);
+ expect(result.Keys[0].status).to.equal('newkey');
+ result.Keys[0].key.getArmor().then(function(armor){
+ expect(armor).to.be.a('string');
+ done();
+ });
});
});
it('exporting armored Key with getKeysArmored', function (done) {
- let prm = Gpgmejs.init();
- const fpr = inputvalues.encrypt.good.fingerprint;
- prm.then(function (context) {
+ context.Keyring.importKey(pubKey).then(function(){
context.Keyring.getKeysArmored(fpr).then(function(result){
expect(result).to.be.an('object');
expect(result.armored).to.be.a('string');
expect(result.secret_fprs).to.be.undefined;
done();
});
});
});
- it('exporting armored Key (including secret fingerprints) with '
- + 'getKeysArmored', function (done) {
- let prm = Gpgmejs.init();
- const fpr = inputvalues.encrypt.good.fingerprint;
- prm.then(function (context) {
- context.Keyring.getKeysArmored(fpr, true).then(function(result){
- expect(result).to.be.an('object');
- expect(result.armored).to.be.a('string');
- expect(result.secret_fprs).to.be.an('array');
- expect(result.secret_fprs[0]).to.equal(fpr);
- done();
- });
+
+ it('Exporting Key (including secret fingerprints)', function (done) {
+ const key_secret = inputvalues.encrypt.good.fingerprint;
+ context.Keyring.getKeysArmored(key_secret, true).then(function(result){
+ expect(result).to.be.an('object');
+ expect(result.armored).to.be.a('string');
+ expect(result.secret_fprs).to.be.an('array');
+ expect(result.secret_fprs[0]).to.equal(key_secret);
+ done();
});
});
});
\ No newline at end of file
diff --git a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
index bd72c1d2..80b293d2 100644
--- a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
+++ b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
@@ -1,199 +1,170 @@
/* gpgme.js - Javascript integration for gpgme
* Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see .
* SPDX-License-Identifier: LGPL-2.1+
*
* Author(s):
* Maximilian Krambach
*/
-/* global describe, it, expect, Gpgmejs */
+/* global describe, it, expect, before, Gpgmejs */
/* global inputvalues, encryptedData, bigString, bigBoringString */
describe('Encryption and Decryption', function () {
+ let context = null;
+ let good_fpr = inputvalues.encrypt.good.fingerprint;
+
+ before(function(done){
+ const prm = Gpgmejs.init();
+ prm.then(function(gpgmejs){
+ context = gpgmejs;
+ done();
+ });
+ });
+
it('Successful encrypt and decrypt simple string', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(
- inputvalues.encrypt.good.data,
- inputvalues.encrypt.good.fingerprint).then(
- function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include('BEGIN PGP MESSAGE');
- expect(answer.data).to.include('END PGP MESSAGE');
- context.decrypt(answer.data).then(function (result) {
- expect(result).to.not.be.empty;
- expect(result.data).to.be.a('string');
- expect(result.data).to.equal(
- inputvalues.encrypt.good.data);
- done();
- });
- });
+ let data = inputvalues.encrypt.good.data;
+ context.encrypt(data, good_fpr).then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include('BEGIN PGP MESSAGE');
+ expect(answer.data).to.include('END PGP MESSAGE');
+
+ context.decrypt(answer.data).then(function (result) {
+ expect(result).to.not.be.empty;
+ expect(result.data).to.be.a('string');
+ expect(result.data).to.equal(
+ inputvalues.encrypt.good.data);
+ done();
+ });
});
});
it('Decrypt simple non-ascii', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- let data = encryptedData;
- context.decrypt(data).then(
- function (result) {
- expect(result).to.not.be.empty;
- expect(result.data).to.be.a('string');
- expect(result.data).to.equal(
- '¡Äußerste µ€ før ñoquis@hóme! Добрый день\n');
- done();
- });
+ let data = encryptedData;
+ context.decrypt(data).then(function (result) {
+ expect(result).to.not.be.empty;
+ expect(result.data).to.be.a('string');
+ expect(result.data).to.equal(
+ '¡Äußerste µ€ før ñoquis@hóme! Добрый день\n');
+ done();
});
}).timeout(3000);
- it('Roundtrip does not destroy trailing whitespace',
- function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- let data = 'Keks. \rKeks \n Keks \r\n';
- context.encrypt(data,
- inputvalues.encrypt.good.fingerprint).then(
- function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include(
- 'BEGIN PGP MESSAGE');
- expect(answer.data).to.include(
- 'END PGP MESSAGE');
- context.decrypt(answer.data).then(
- function (result) {
- expect(result).to.not.be.empty;
- expect(result.data).to.be.a('string');
- expect(result.data).to.equal(data);
- done();
-
- });
- });
- });
- }).timeout(5000);
+ it('Trailing whitespace and different line endings', function (done) {
+ const data = 'Keks. \rKeks \n Keks \r\n';
+ context.encrypt(data, good_fpr).then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include('BEGIN PGP MESSAGE');
+ expect(answer.data).to.include('END PGP MESSAGE');
- for (let j = 0; j < inputvalues.encrypt.good.data_nonascii_32.length; j++){
- it('Roundtrip with >1MB non-ascii input meeting default chunksize (' +
- (j + 1) + '/'
- + inputvalues.encrypt.good.data_nonascii_32.length + ')',
- function (done) {
- let input = inputvalues.encrypt.good.data_nonascii_32[j];
- expect(input).to.have.length(32);
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- let data = '';
- for (let i=0; i < 34 * 1024; i++){
- data += input;
- }
- context.encrypt(data,
- inputvalues.encrypt.good.fingerprint).then(
- function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include(
- 'BEGIN PGP MESSAGE');
- expect(answer.data).to.include(
- 'END PGP MESSAGE');
- context.decrypt(answer.data).then(
- function (result) {
- expect(result).to.not.be.empty;
- expect(result.data).to.be.a('string');
- expect(result.data).to.equal(data);
- done();
- });
- });
+ context.decrypt(answer.data).then(function (result) {
+ expect(result).to.not.be.empty;
+ expect(result.data).to.be.a('string');
+ expect(result.data).to.equal(data);
+ done();
});
- }).timeout(3000);
- }
+ });
+ }).timeout(5000);
it('Random data, as string', function (done) {
let data = bigString(1000);
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(data,
- inputvalues.encrypt.good.fingerprint).then(
- function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include(
- 'BEGIN PGP MESSAGE');
- expect(answer.data).to.include(
- 'END PGP MESSAGE');
- context.decrypt(answer.data).then(
- function (result) {
- expect(result).to.not.be.empty;
- expect(result.data).to.be.a('string');
- expect(result.data).to.equal(data);
- done();
- });
- });
+ context.encrypt(data, good_fpr).then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include(
+ 'BEGIN PGP MESSAGE');
+ expect(answer.data).to.include(
+ 'END PGP MESSAGE');
+ context.decrypt(answer.data).then(function (result) {
+ expect(result).to.not.be.empty;
+ expect(result.data).to.be.a('string');
+ expect(result.data).to.equal(data);
+ done();
+ });
});
}).timeout(3000);
it('Data, input as base64', function (done) {
let data = inputvalues.encrypt.good.data;
let b64data = btoa(data);
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(b64data,
- inputvalues.encrypt.good.fingerprint, true).then(
- function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include(
- 'BEGIN PGP MESSAGE');
- expect(answer.data).to.include(
- 'END PGP MESSAGE');
- context.decrypt(answer.data).then(
- function (result) {
- expect(result).to.not.be.empty;
- expect(result.data).to.be.a('string');
- expect(data).to.equal(data);
- done();
- });
+ context.encrypt(b64data, good_fpr, true).then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include(
+ 'BEGIN PGP MESSAGE');
+ expect(answer.data).to.include(
+ 'END PGP MESSAGE');
+ context.decrypt(answer.data).then(
+ function (result) {
+ expect(result).to.not.be.empty;
+ expect(result.data).to.be.a('string');
+ expect(data).to.equal(data);
+ done();
});
});
}).timeout(3000);
it('Random data, input as base64', function (done) {
let data = bigBoringString(0.001);
let b64data = btoa(data);
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(b64data,
- inputvalues.encrypt.good.fingerprint, true).then(
- function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include(
- 'BEGIN PGP MESSAGE');
- expect(answer.data).to.include(
- 'END PGP MESSAGE');
- context.decrypt(answer.data).then(
- function (result) {
- expect(result).to.not.be.empty;
- expect(result.data).to.be.a('string');
- expect(result.data).to.equal(b64data);
- done();
- });
+ context.encrypt(b64data, good_fpr, true).then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include(
+ 'BEGIN PGP MESSAGE');
+ expect(answer.data).to.include(
+ 'END PGP MESSAGE');
+ context.decrypt(answer.data).then(
+ function (result) {
+ expect(result).to.not.be.empty;
+ expect(result.data).to.be.a('string');
+ expect(result.data).to.equal(b64data);
+ done();
});
});
}).timeout(3000);
+ for (let j = 0; j < inputvalues.encrypt.good.data_nonascii_32.length; j++){
+ it('Roundtrip with >1MB non-ascii input meeting default chunksize (' +
+ (j + 1) + '/'
+ + inputvalues.encrypt.good.data_nonascii_32.length + ')',
+ function (done) {
+ let input = inputvalues.encrypt.good.data_nonascii_32[j];
+ expect(input).to.have.length(32);
+ let data = '';
+ for (let i=0; i < 34 * 1024; i++){
+ data += input;
+ }
+ context.encrypt(data,good_fpr).then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include(
+ 'BEGIN PGP MESSAGE');
+ expect(answer.data).to.include(
+ 'END PGP MESSAGE');
+ context.decrypt(answer.data).then(function (result) {
+ expect(result).to.not.be.empty;
+ expect(result.data).to.be.a('string');
+ expect(result.data).to.equal(data);
+ done();
+ });
+ });
+ }).timeout(5000);
+ }
});
diff --git a/lang/js/BrowserTestExtension/tests/encryptTest.js b/lang/js/BrowserTestExtension/tests/encryptTest.js
index 1114125e..3ead8153 100644
--- a/lang/js/BrowserTestExtension/tests/encryptTest.js
+++ b/lang/js/BrowserTestExtension/tests/encryptTest.js
@@ -1,156 +1,113 @@
/* gpgme.js - Javascript integration for gpgme
* Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see .
* SPDX-License-Identifier: LGPL-2.1+
*
* Author(s):
* Maximilian Krambach
*/
-/* global describe, it, expect, Gpgmejs */
+/* global describe, it, expect, before, Gpgmejs */
/* global inputvalues, fixedLengthString */
describe('Encryption', function () {
- it('Successful encrypt', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(
- inputvalues.encrypt.good.data,
- inputvalues.encrypt.good.fingerprint).then(function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include('BEGIN PGP MESSAGE');
- expect(answer.data).to.include('END PGP MESSAGE');
- done();
- });
+ let context = null;
+ const good_fpr = inputvalues.encrypt.good.fingerprint;
+ before(function(done){
+ const prm = Gpgmejs.init();
+ prm.then(function(gpgmejs){
+ context = gpgmejs;
+ done();
});
});
- it('Successful encrypt 5 MB', function (done) {
- let prm = Gpgmejs.init();
- let data = fixedLengthString(5);
- prm.then(function (context) {
- context.encrypt(
- data,
- inputvalues.encrypt.good.fingerprint).then(function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include('BEGIN PGP MESSAGE');
- expect(answer.data).to.include('END PGP MESSAGE');
- done();
- });
- });
- }).timeout(10000);
-
- it('Successful encrypt 20 MB', function (done) {
- let prm = Gpgmejs.init();
- let data = fixedLengthString(20);
- prm.then(function (context) {
- context.encrypt(
- data,
- inputvalues.encrypt.good.fingerprint).then(function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include('BEGIN PGP MESSAGE');
- expect(answer.data).to.include('END PGP MESSAGE');
- done();
- });
+ it('Successful encrypt', function (done) {
+ const data = inputvalues.encrypt.good.data;
+ context.encrypt(data, good_fpr).then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include('BEGIN PGP MESSAGE');
+ expect(answer.data).to.include('END PGP MESSAGE');
+ done();
});
- }).timeout(20000);
+ });
- it('Successful encrypt 50 MB', function (done) {
- let prm = Gpgmejs.init();
- let data = fixedLengthString(50);
- prm.then(function (context) {
- context.encrypt(
- data,
- inputvalues.encrypt.good.fingerprint).then(function (answer) {
+ const sizes = [5,20,50];
+ for (let i=0; i < sizes.length; i++) {
+ it('Successful encrypt a ' + sizes[i] + 'MB message', function (done) {
+ const data = fixedLengthString(sizes[i]);
+ context.encrypt(data, good_fpr).then(function (answer) {
expect(answer).to.not.be.empty;
expect(answer.data).to.be.a('string');
expect(answer.data).to.include('BEGIN PGP MESSAGE');
expect(answer.data).to.include('END PGP MESSAGE');
done();
});
- });
- }).timeout(20000);
+ }).timeout(20000);
+ }
it('Sending encryption without keys fails', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(
- inputvalues.encrypt.good.data,
- null).then(function (answer) {
- expect(answer).to.be.undefined;
- }, function(error){
- expect(error).to.be.an('Error');
- expect(error.code).to.equal('MSG_INCOMPLETE');
- done();
- });
+ const data = inputvalues.encrypt.good.data;
+ context.encrypt(data,null).then(function (answer) {
+ expect(answer).to.be.undefined;
+ }, function(error){
+ expect(error).to.be.an('Error');
+ expect(error.code).to.equal('MSG_INCOMPLETE');
+ done();
});
});
it('Sending encryption without data fails', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(
- null, inputvalues.encrypt.good.keyid).then(function (answer) {
- expect(answer).to.be.undefined;
- }, function (error) {
- expect(error).to.be.an.instanceof(Error);
- expect(error.code).to.equal('MSG_INCOMPLETE');
- done();
- });
+ context.encrypt(null, good_fpr).then(function (answer) {
+ expect(answer).to.be.undefined;
+ }, function (error) {
+ expect(error).to.be.an.instanceof(Error);
+ expect(error.code).to.equal('MSG_INCOMPLETE');
+ done();
});
});
it('Sending encryption with non existing keys fails', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(
- inputvalues.encrypt.good.data,
- inputvalues.encrypt.bad.fingerprint).then(function (answer) {
- expect(answer).to.be.undefined;
- }, function(error){
- expect(error).to.be.an('Error');
- expect(error.code).to.not.be.undefined;
- expect(error.code).to.equal('GNUPG_ERROR');
- done();
- });
+ const data = inputvalues.encrypt.good.data;
+ const bad_fpr = inputvalues.encrypt.bad.fingerprint;
+ context.encrypt(data, bad_fpr).then(function (answer) {
+ expect(answer).to.be.undefined;
+ }, function(error){
+ expect(error).to.be.an('Error');
+ expect(error.code).to.not.be.undefined;
+ expect(error.code).to.equal('GNUPG_ERROR');
+ done();
});
}).timeout(5000);
it('Overly large message ( > 64MB) is rejected', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(
- fixedLengthString(65),
- inputvalues.encrypt.good.fingerprint).then(function (answer) {
- expect(answer).to.be.undefined;
- }, function(error){
- expect(error).to.be.an.instanceof(Error);
- // TODO: there is a 64 MB hard limit at least in chrome at:
- // chromium//extensions/renderer/messaging_util.cc:
- // kMaxMessageLength
- // The error will be a browser error, not from gnupg or from
- // this library
- done();
- });
+ const data = fixedLengthString(65);
+ context.encrypt(data, good_fpr).then(function (answer) {
+ expect(answer).to.be.undefined;
+ }, function(error){
+ expect(error).to.be.an.instanceof(Error);
+ // TODO: there is a 64 MB hard limit at least in chrome at:
+ // chromium//extensions/renderer/messaging_util.cc:
+ // kMaxMessageLength
+ // The error will be a browser error, not from gnupg or from
+ // this library
+ done();
});
}).timeout(8000);
// TODO check different valid parameter
});
diff --git a/lang/js/BrowserTestExtension/tests/inputvalues.js b/lang/js/BrowserTestExtension/tests/inputvalues.js
index 1c701904..5289eab7 100644
--- a/lang/js/BrowserTestExtension/tests/inputvalues.js
+++ b/lang/js/BrowserTestExtension/tests/inputvalues.js
@@ -1,215 +1,269 @@
/* gpgme.js - Javascript integration for gpgme
* Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see .
* SPDX-License-Identifier: LGPL-2.1+
*
* Author(s):
* Maximilian Krambach
*/
const inputvalues = {// eslint-disable-line no-unused-vars
encrypt: {
good:{
data : 'Hello World.',
// Fingerprint of a key that has been imported to gnupg
// (i.e. see testkey.pub; testkey.sec)
fingerprint : 'D41735B91236FDB882048C5A2301635EEFF0CB05',
data_nonascii: '¡Äußerste µ€ før ñoquis@hóme! Добрый день',
// used for checking encoding consistency in > 2MB messages.
data_nonascii_32: [
'K€K€K€K€K€K€K€K€K€K€K€K€K€K€K€K€',
'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€',
'€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€',
'²³²³²³²³²³²³²³²³²³²³²³²³²³²³²³²³',
'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€A€µ€µ€µ€µ€',
'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µAµ€µ€µ€µ€',
'üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü',
'µAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA€',
'µAAAAµAAAAAAAAAAAAAAAAAAAAAAAAA€',
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAµ€',
'µAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA°',
'€AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA€',
'µ||||||||||||||||||||||||||||||€',
'æſæſ³¼„¬“³³¬“¬½”æſæſ³¼„¬“³³¬“¬½”'
]
},
bad: {
// valid Hex value, but not usable (not imported to gnupg, or
// bogus fingerprint)
fingerprint: 'CDC3A2B2860625CCBFC5AAAAAC6D1B604967FC4A'
}
+ },
+
+ signedMessage: {
+ good: '-----BEGIN PGP SIGNED MESSAGE-----\n' +
+ 'Hash: SHA256\n' +
+ '\n' +
+ 'Matschige Münsteraner Marshmallows\n' +
+ '-----BEGIN PGP SIGNATURE-----\n' +
+ '\n' +
+ 'iQEzBAEBCAAdFiEE1Bc1uRI2/biCBIxaIwFjXu/wywUFAltRoiMACgkQIwFjXu/w\n' +
+ 'ywUvagf6ApQbZbTPOROqfTfxAPdtzJsSDKHla6D0G5wom2gJbAVb0B2YS1c3Gjpq\n' +
+ 'I4kTKT1W1RRkne0mK9cexf4sjb5DQcV8PLhfmmAJEpljDFei6i/E309BvW4CZ4rG\n' +
+ 'jiurf8CkaNkrwn2fXJDaT4taVCX3V5FQAlgLxgOrm1zjiGA4mz98gi5zL4hvZXF9\n' +
+ 'dHY0jLwtQMVUO99q+5XC1TJfPsnteWL9m4e/YYPfYJMZZso+/0ib/yX5vHCk7RXH\n' +
+ 'CfhY40nMXSYdfl8mDOhvnKcCvy8qxetFv9uCX06OqepAamu/bvxslrzocRyJ/eq0\n' +
+ 'T2JfzEN+E7Y3PB8UwLgp/ZRmG8zRrQ==\n' +
+ '=ioB6\n' +
+ '-----END PGP SIGNATURE-----\n',
+ bad: '-----BEGIN PGP SIGNED MESSAGE-----\n' +
+ 'Hash: SHA256\n' +
+ '\n' +
+ 'Matschige Münchener Marshmallows\n' +
+ '-----BEGIN PGP SIGNATURE-----\n' +
+ '\n' +
+ 'iQEzBAEBCAAdFiEE1Bc1uRI2/biCBIxaIwFjXu/wywUFAltRoiMACgkQIwFjXu/w\n' +
+ 'ywUvagf6ApQbZbTPOROqfTfxAPdtzJsSDKHla6D0G5wom2gJbAVb0B2YS1c3Gjpq\n' +
+ 'I4kTKT1W1RRkne0mK9cexf4sjb5DQcV8PLhfmmAJEpljDFei6i/E309BvW4CZ4rG\n' +
+ 'jiurf8CkaNkrwn2fXJDaT4taVCX3V5FQAlgLxgOrm1zjiGA4mz98gi5zL4hvZXF9\n' +
+ 'dHY0jLwtQMVUO99q+5XC1TJfPsnteWL9m4e/YYPfYJMZZso+/0ib/yX5vHCk7RXH\n' +
+ 'CfhY40nMXSYdfl8mDOhvnKcCvy8qxetFv9uCX06OqepAamu/bvxslrzocRyJ/eq0\n' +
+ 'T2JfzEN+E7Y3PB8UwLgp/ZRmG8zRrQ==\n' +
+ '=ioB6\n' +
+ '-----END PGP SIGNATURE-----\n',
}
};
// (Pseudo-)Random String covering all of utf8.
function bigString(length){// eslint-disable-line no-unused-vars
let arr = [];
for (let i= 0; i < length; i++){
arr.push(String.fromCharCode(
Math.floor(Math.random() * 10174) + 1)
);
}
return arr.join('');
}
function fixedLengthString(megabytes){// eslint-disable-line no-unused-vars
let maxlength = 1024 * 1024 * megabytes / 2;
let uint = new Uint8Array(maxlength);
for (let i = 0; i < maxlength; i++){
uint[i] = Math.floor(Math.random()* 256);
}
let td = new TextDecoder('ascii');
let result = td.decode(uint);
return result;
}
// (Pseudo-)Random Uint8Array, given size in Megabytes
function bigUint8(megabytes){// eslint-disable-line no-unused-vars
let maxlength = 1024 * 1024 * megabytes;
let uint = new Uint8Array(maxlength);
for (let i= 0; i < maxlength; i++){
- uint[i] = Math.random() * Math.floor(256);
+ uint[i] = Math.floor(Math.random() * 256);
}
return uint;
}
// (Pseudo-)Random string with very limited charset
// (ascii only, no control chars)
function bigBoringString(megabytes){// eslint-disable-line no-unused-vars
let maxlength = 1024 * 1024 * megabytes;
let string = [];
let chars =
' 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for (let i= 0; i < maxlength; i++){
string.push(chars[Math.floor(Math.random() * chars.length)]);
}
return string.join('');
}
// Some String with simple chars, with different characteristics, but still
// expected to occur in an averag message
// eslint-disable-next-line no-unused-vars
function slightlyLessBoringString(megabytes, set){
let maxlength = 1024 * 1024 * megabytes;
let string = [];
let chars = '';
if (set ===1 ) {
chars = '\n"\r \'';
} else if (set === 2 ) {
chars = '()=?`#+-{}[]';
} else if (set === 3){
chars = '^°/';
} else if (set ===4) {
chars = 'äüßµüþÖ~ɁÑ||@';
} else {
chars = '*<>\n"\r§$%&/()=?`#+-{}[] \'';
}
for (let i= 0; i < maxlength; i++){
string.push(chars[Math.floor(Math.random() * chars.length)]);
}
return string.join('');
}
+// Take a gpg looking string and destroy it a bit by changing random values
+// eslint-disable-next-line no-unused-vars
+function destroylegitimateGpg(string, mutations=5){
+ const allowed = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/\n';
+ for (let i=0; i < mutations.length; i++){
+ // leave the first and last 35 chars (header/footer) intact
+ let position = Math.floor(Math.random() *(string.length - 70)) + 35;
+ let str0 = string.substring(0,position - 1);
+ let str1 = string.substring(position, position + 1);
+ let str2 = string.substring(position +1);
+ let success = false;
+ while (!success){
+ let newchar = Math.floor(Math.random() * allowed.length);
+ if (newchar !== str1){
+ string = str0 + newchar + str2;
+ success = true;
+ }
+ }
+ }
+}
+
// Data encrypted with testKey
const encryptedData =// eslint-disable-line no-unused-vars
'-----BEGIN PGP MESSAGE-----\n' +
'\n' +
'hQEMA6B8jfIUScGEAQgAlANd3uyhmhYLzVcfz4LEqA8tgUC3n719YH0iuKEzG/dv\n' +
'B8fsIK2HoeQh2T3/Cc2LBMjgn4K33ksG3k2MqrbIvxWGUQlOAuggc259hquWtX9B\n' +
'EcEoOAeh5DuZT/b8CM5seJKNEpPzNxbEDiGikp9DV9gfIQTTUnrDjAu5YtgCN9vA\n' +
'3PJxihioH8ODoQw2jlYSkqgXpBVP2Fbx7qgTuxGNu5w36E0/P93//4hDXcKou7ez\n' +
'o0+NEGSkbaY+OPk1k7k9n+vBSC3F440dxsTNs5WmRvx9XZEotJkUBweE+8XaoLCn\n' +
'3RrtyD/lj63qi3dbyI5XFLuPU1baFskJ4UAmI4wNhdJ+ASailpnFBnNgiFBh3ZfB\n' +
'G5Rmd3ocSL7l6lq1bVK9advXb7vcne502W1ldAfHgTdQgc2CueIDFUYAaXP2OvhP\n' +
'isGL7jOlDCBKwep67ted0cTRPLWkk3NSuLIlvD5xs6L4z3rPu92gXYgbZoMMdP0N\n' +
'kSAQYOHplfA7YJWkrlRm\n' +
'=zap6\n' +
'-----END PGP MESSAGE-----\n';
const ImportablePublicKey = {// eslint-disable-line no-unused-vars
fingerprint: '78034948BA7F5D0E9BDB67E4F63790C11E60278A',
key:'-----BEGIN PGP PUBLIC KEY BLOCK-----\n' +
'\n' +
'mQENBFsPvK0BCACaIgoIN+3g05mrTITULK/YDTrfg4W7RdzIZBxch5CM0zdu/dby\n' +
'esFwaJbVQIqu54CRz5xKAiWmRrQCaRvhvjY0na5r5UUIpbeQiOVrl65JtNbRmlik\n' +
'd9Prn1kZDUOZiCPIKn+/M2ecJ92YedM7I4/BbpiaFB11cVrPFg4thepn0LB3+Whp\n' +
'9HDm4orH9rjy6IUr6yjWNIr+LYRY6/Ip2vWcMVjleEpTFznXrm83hrJ0n0INtyox\n' +
'Nass4eDWkgo6ItxDFFLOORSmpfrToxZymSosWqgux/qG6sxHvLqlqy6Xe3ZYRFbG\n' +
'+JcA1oGdwOg/c0ndr6BYYiXTh8+uUJfEoZvzABEBAAG0HEJsYSBCbGEgPGJsYWJs\n' +
'YUBleGFtcGxlLm9yZz6JAVQEEwEIAD4WIQR4A0lIun9dDpvbZ+T2N5DBHmAnigUC\n' +
'Ww+8rQIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRD2N5DBHmAn\n' +
'igwIB/9K3E3Yev9taZP4KnXPhk1oMQRW1MWAsFGUr+70N85VwedpUawymW4vXi1+\n' +
'hMeTc39QjmZ0+VqHkJttkqEN6bLcEvgmU/mOlOgKdzy6eUcasYAzgoAKUqSX1SPs\n' +
'0Imo7Tj04wnfnVwvKxaeadi0VmdqIYaW75UlrzIaltsBctyeYH8sBrvaTLscb4ON\n' +
'46OM3Yw2G9+dBF0P+4UYFHP3EYZMlzNxfwF+i2HsYcNDHlcLfjENr9GwKn5FJqpY\n' +
'Iq3qmI37w1hVasHDxXdz1X06dpsa6Im4ACk6LXa7xIQlXxTgPAQV0sz2yB5eY+Md\n' +
'uzEXPGW+sq0WRp3hynn7kVP6QQYvuQENBFsPvK0BCACwvBcmbnGJk8XhEBRu2QN3\n' +
'jKgVs3CG5nE2Xh20JipZwAuGHugDLv6/jlizzz5jtj3SAHVtJB8lJW8I0cNSEIX8\n' +
'bRYH4C7lP2DTb9CgMcGErQIyK480+HIsbsZhJSNHdjUUl6IPEEVfSQzWaufmuswe\n' +
'e+giqHiTsaiW20ytXilwVGpjlHBaxn/bpskZ0YRasgnPqKgJD3d5kunNqWoyCpMc\n' +
'FYgDERvPbhhceFbvFE9G/u3gbcuV15mx53dDX0ImvPcvJnDOyJS9yr7ApdOV312p\n' +
'A1MLbxfPnbnVu+dGXn7D/VCDd5aBYVPm+5ANrk6z9lYKH9aO5wgXpLAdJvutCOL5\n' +
'ABEBAAGJATwEGAEIACYWIQR4A0lIun9dDpvbZ+T2N5DBHmAnigUCWw+8rQIbDAUJ\n' +
'A8JnAAAKCRD2N5DBHmAnigMVB/484G2+3R0cAaj3V/z4gW3MRSMhcYqEMyJ/ACdo\n' +
'7y8eoreYW843JWWVDRY6/YcYYGuBBP47WO4JuP2wIlVn17XOCSgnNjmmjsIYiAzk\n' +
'op772TB27o0VeiFX5iWcawy0EI7JCb23xpI+QP31ksL2yyRYFXCtXSUfcOrLpCY8\n' +
'aEQMQbAGtkag1wHTo/Tf/Vip8q0ZEQ4xOKTR2/ll6+inP8kzGyzadElUnH1Q1OUX\n' +
'd2Lj/7BpBHE2++hAjBQRgnyaONF7mpUNEuw64iBNs0Ce6Ki4RV2+EBLnFubnFNRx\n' +
'fFJcYXcijhuf3YCdWzqYmPpU/CtF4TgDlfSsdxHxVOmnZkY3\n' +
'=qP6s\n' +
'-----END PGP PUBLIC KEY BLOCK-----\n',
keyChangedUserId: '-----BEGIN PGP PUBLIC KEY BLOCK-----\n' +
'\n' +
'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\n' +
'=9WZ7\n' +
'-----END PGP PUBLIC KEY BLOCK-----\n'
};
diff --git a/lang/js/BrowserTestExtension/tests/longRunningTests.js b/lang/js/BrowserTestExtension/tests/longRunningTests.js
index e148d1cf..03f0390c 100644
--- a/lang/js/BrowserTestExtension/tests/longRunningTests.js
+++ b/lang/js/BrowserTestExtension/tests/longRunningTests.js
@@ -1,80 +1,56 @@
/* gpgme.js - Javascript integration for gpgme
* Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see .
* SPDX-License-Identifier: LGPL-2.1+
*
* Author(s):
* Maximilian Krambach
*/
-/* global describe, it, expect, Gpgmejs */
+/* global describe, it, before, expect, Gpgmejs */
/* global bigString, inputvalues */
describe('Long running Encryption/Decryption', function () {
+ let context = null;
+ const good_fpr = inputvalues.encrypt.good.fingerprint;
+ before(function(done){
+ const prm = Gpgmejs.init();
+ prm.then(function(gpgmejs){
+ context = gpgmejs;
+ done();
+ });
+ });
+
for (let i=0; i < 101; i++) {
- it('Successful encrypt/decrypt completely random data ' +
- (i+1) + '/100', function (done) {
- let prm = Gpgmejs.init();
- let data = bigString(2*1024*1024);
- prm.then(function (context) {
- context.encrypt(data,
- inputvalues.encrypt.good.fingerprint).then(
- function (answer){
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include(
- 'BEGIN PGP MESSAGE');
- expect(answer.data).to.include(
- 'END PGP MESSAGE');
- context.decrypt(answer.data).then(
- function(result){
- expect(result).to.not.be.empty;
- expect(result.data).to.be.a('string');
- /*
- if (result.data.length !== data.length) {
- console.log('diff: ' +
- (result.data.length - data.length));
- for (let i=0; i < result.data.length; i++){
- if (result.data[i] !== data[i]){
- console.log('position: ' + i);
- console.log('result : ' +
- result.data.charCodeAt(i) +
- result.data[i-2] +
- result.data[i-1] +
- result.data[i] +
- result.data[i+1] +
- result.data[i+2]);
- console.log('original: ' +
- data.charCodeAt(i) +
- data[i-2] +
- data[i-1] +
- data[i] +
- data[i+1] +
- data[i+2]);
- break;
- }
- }
- }
- */
- expect(result.data).to.equal(data);
- done();
- });
- });
+ it('Successful encrypt/decrypt completely random data '
+ + (i+1) + '/100', function (done) {
+ const data = bigString(2*1024*1024);
+ context.encrypt(data,good_fpr).then(function (answer){
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include('BEGIN PGP MESSAGE');
+ expect(answer.data).to.include('END PGP MESSAGE');
+ context.decrypt(answer.data).then(function(result){
+ expect(result).to.not.be.empty;
+ expect(result.data).to.be.a('string');
+ expect(result.data).to.equal(data);
+ done();
+ });
});
- }).timeout(8000);
+ }).timeout(15000);
}
});
diff --git a/lang/js/BrowserTestExtension/tests/signTest.js b/lang/js/BrowserTestExtension/tests/signTest.js
index ffd2d5de..2763dadf 100644
--- a/lang/js/BrowserTestExtension/tests/signTest.js
+++ b/lang/js/BrowserTestExtension/tests/signTest.js
@@ -1,63 +1,63 @@
/* gpgme.js - Javascript integration for gpgme
* Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see .
* SPDX-License-Identifier: LGPL-2.1+
*
* Author(s):
* Maximilian Krambach
*/
-/* global describe, it, expect, Gpgmejs */
+/* global describe, it, expect, before, Gpgmejs */
/* global bigString, inputvalues */
describe('Signing', function () {
+ let context = null;
+ const good_fpr = inputvalues.encrypt.good.fingerprint;
+
+ before(function(done){
+ const prm = Gpgmejs.init();
+ prm.then(function(gpgmejs){
+ context = gpgmejs;
+ done();
+ });
+ });
+
it('Sign a message', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- let data = bigString(100);
- context.sign(
- data,
- inputvalues.encrypt.good.fingerprint).then(function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include('BEGIN PGP SIGNATURE');
- expect(answer.data).to.include('END PGP SIGNATURE');
- expect(answer.data).to.include(data);
- done();
- });
+ const data = bigString(100);
+ context.sign(data, good_fpr).then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include('BEGIN PGP SIGNATURE');
+ expect(answer.data).to.include('END PGP SIGNATURE');
+ expect(answer.data).to.include(data);
+ done();
});
});
+
it('Detached sign a message', function (done) {
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- let data = bigString(100);
- context.sign(
- data,
- inputvalues.encrypt.good.fingerprint,
- 'detached'
- ).then(function (answer) {
- expect(answer).to.not.be.empty;
- expect(answer.data).to.be.a('string');
- expect(answer.data).to.include(data);
- expect(answer.signature).to.be.a('string');
- expect(answer.signature).to.be.a('string');
- done();
- });
+ const data = bigString(100);
+ context.sign(data,good_fpr, 'detached').then(function (answer) {
+ expect(answer).to.not.be.empty;
+ expect(answer.data).to.be.a('string');
+ expect(answer.data).to.include(data);
+ expect(answer.signature).to.be.a('string');
+ expect(answer.signature).to.be.a('string');
+ done();
});
});
});
diff --git a/lang/js/BrowserTestExtension/tests/verifyTest.js b/lang/js/BrowserTestExtension/tests/verifyTest.js
index e8e2c76a..1617e2dc 100644
--- a/lang/js/BrowserTestExtension/tests/verifyTest.js
+++ b/lang/js/BrowserTestExtension/tests/verifyTest.js
@@ -1,86 +1,85 @@
/* gpgme.js - Javascript integration for gpgme
* Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see .
* SPDX-License-Identifier: LGPL-2.1+
*
* Author(s):
* Maximilian Krambach
*/
-/* global describe, it, expect, bigString, inputvalues, Gpgmejs */
+/* global describe, it, expect, before, bigString, inputvalues, Gpgmejs */
-let verifyData = {
- signedMessage: '-----BEGIN PGP SIGNED MESSAGE-----\n' +
- 'Hash: SHA256\n' +
- '\n' +
- 'Matschige Münsteraner Marshmallows\n' +
- '-----BEGIN PGP SIGNATURE-----\n' +
- '\n' +
- 'iQEzBAEBCAAdFiEE1Bc1uRI2/biCBIxaIwFjXu/wywUFAltRoiMACgkQIwFjXu/w\n' +
- 'ywUvagf6ApQbZbTPOROqfTfxAPdtzJsSDKHla6D0G5wom2gJbAVb0B2YS1c3Gjpq\n' +
- 'I4kTKT1W1RRkne0mK9cexf4sjb5DQcV8PLhfmmAJEpljDFei6i/E309BvW4CZ4rG\n' +
- 'jiurf8CkaNkrwn2fXJDaT4taVCX3V5FQAlgLxgOrm1zjiGA4mz98gi5zL4hvZXF9\n' +
- 'dHY0jLwtQMVUO99q+5XC1TJfPsnteWL9m4e/YYPfYJMZZso+/0ib/yX5vHCk7RXH\n' +
- 'CfhY40nMXSYdfl8mDOhvnKcCvy8qxetFv9uCX06OqepAamu/bvxslrzocRyJ/eq0\n' +
- 'T2JfzEN+E7Y3PB8UwLgp/ZRmG8zRrQ==\n' +
- '=ioB6\n' +
- '-----END PGP SIGNATURE-----\n'
-};
-describe('Verify data', function () {
+
+describe('Verifying data', function () {
+ let context = null;
+ before(function(done){
+ const prm = Gpgmejs.init();
+ prm.then(function(gpgmejs){
+ context = gpgmejs;
+ done();
+ });
+ });
it('Successful verify message', function (done) {
- let message = verifyData.signedMessage;
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.verify(message).then(function(result){
- expect(result.data).to.be.a('string');
- expect(result.all_valid).to.be.true;
- expect(result.count).to.equal(1);
- expect(result.signatures.good).to.be.an('array');
- expect(result.signatures.good.length).to.equal(1);
- expect(result.signatures.good[0].fingerprint)
- .to.be.a('string');
- expect(result.signatures.good[0].valid).to.be.true;
- done();
- });
+ const message = inputvalues.signedMessage.good;
+ context.verify(message).then(function(result){
+ expect(result.data).to.be.a('string');
+ expect(result.all_valid).to.be.true;
+ expect(result.count).to.equal(1);
+ expect(result.signatures.good).to.be.an('array');
+ expect(result.signatures.good.length).to.equal(1);
+ expect(result.signatures.good[0].fingerprint).to.be.a('string');
+ expect(result.signatures.good[0].valid).to.be.true;
+ done();
+ });
+ });
+
+ it('Successfully recognize changed cleartext', function (done) {
+ const message = inputvalues.signedMessage.bad;
+ context.verify(message).then(function(result){
+ expect(result.data).to.be.a('string');
+ expect(result.all_valid).to.be.false;
+ expect(result.count).to.equal(1);
+ expect(result.signatures.bad).to.be.an('array');
+ expect(result.signatures.bad.length).to.equal(1);
+ expect(result.signatures.bad[0].fingerprint).to.be.a('string');
+ expect(result.signatures.bad[0].valid).to.be.false;
+ done();
});
});
it('Encrypt-Sign-Verify random message', function (done) {
- let message = bigString(2000);
+ const message = bigString(2000);
let fpr = inputvalues.encrypt.good.fingerprint;
- let prm = Gpgmejs.init();
- prm.then(function (context) {
- context.encrypt(message, fpr).then(function(message_enc){
- context.sign(message_enc.data, fpr).then(function(message_encsign){
- context.verify(message_encsign.data).then(function(result){
- expect(result.data).to.equal(message_enc.data);
- expect(result.data).to.be.a('string');
- expect(result.all_valid).to.be.true;
- expect(result.count).to.equal(1);
- expect(result.signatures.good).to.be.an('array');
- expect(result.signatures.good.length).to.equal(1);
- expect(result.signatures.good[0].fingerprint)
- .to.equal(fpr);
- expect(result.signatures.good[0].valid).to.be.true;
- done();
- });
+ context.encrypt(message, fpr).then(function(message_enc){
+ context.sign(message_enc.data, fpr).then(function(message_encsign){
+ context.verify(message_encsign.data).then(function(result){
+ expect(result.data).to.equal(message_enc.data);
+ expect(result.data).to.be.a('string');
+ expect(result.all_valid).to.be.true;
+ expect(result.count).to.equal(1);
+ expect(result.signatures.good).to.be.an('array');
+ expect(result.signatures.good.length).to.equal(1);
+ expect(
+ result.signatures.good[0].fingerprint).to.equal(fpr);
+ expect(result.signatures.good[0].valid).to.be.true;
+ done();
});
});
});
});
});
\ No newline at end of file