diff --git a/lang/js/.eslintrc.json b/lang/js/.eslintrc.json
index ad82400b..dc3be2e4 100644
--- a/lang/js/.eslintrc.json
+++ b/lang/js/.eslintrc.json
@@ -1,32 +1,49 @@
{
"env": {
"browser": true,
"es6": true
},
"extends": "eslint:recommended",
"parserOptions": {
"sourceType": "module"
},
"rules": {
"indent": [
"warn",
4
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"single"
],
"semi": [
"error",
"always"
],
"no-var": [
"warn"
],
- "max-len": 1
+ "max-len": 1,
+ "default-case": 2,
+ "no-invalid-this": 2,
+ "no-lone-blocks": 1,
+ "no-self-compare": 2,
+ "radix": 2,
+ "no-use-before-define": ["error", {
+ "functions": false,
+ "classes": false,
+ "variables": true
+ }],
+ "no-useless-constructor": 1,
+ "space-before-function-paren": ["error", "always"],
+ "keyword-spacing": 2,
+ "spaced-comment": 1,
+ "space-unary-ops": 2,
+ "object-curly-spacing": ["error", "always"],
+ "array-bracket-spacing": ["error", "never"]
}
}
\ No newline at end of file
diff --git a/lang/js/BrowserTestExtension/tests/KeyImportExport.js b/lang/js/BrowserTestExtension/tests/KeyImportExport.js
index 6d0ba106..f52b790a 100644
--- a/lang/js/BrowserTestExtension/tests/KeyImportExport.js
+++ b/lang/js/BrowserTestExtension/tests/KeyImportExport.js
@@ -1,149 +1,149 @@
/* 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, before, afterEach, Gpgmejs*/
/* global ImportablePublicKey, inputvalues */
describe('Key importing', function () {
const fpr = ImportablePublicKey.fingerprint;
const pubKey = ImportablePublicKey.key;
const changedKey = ImportablePublicKey.keyChangedUserId;
let context = null;
- before(function(done){
+ before(function (done){
const prm = Gpgmejs.init();
- prm.then(function(gpgmejs){
+ prm.then(function (gpgmejs){
context = gpgmejs;
context.Keyring.getKeys(fpr).then(
- function(result){
+ function (result){
if (result.length === 1) {
- result[0].delete().then(function(){
+ result[0].delete().then(function (){
done();
- },function(){
+ },function (){
done();
});
} else {
done();
}
});
});
});
- afterEach(function(done){
+ afterEach(function (done){
// delete the test key if still present
context.Keyring.getKeys(fpr).then(
- function(result){
+ function (result){
if (result.length === 1) {
- result[0].delete().then(function(){
+ result[0].delete().then(function (){
done();
- },function(){
+ },function (){
done();
});
} else {
done();
}
});
});
it('Importing Key', function (done) {
- context.Keyring.getKeys(fpr).then(function(result){
+ 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){
+ context.Keyring.importKey(pubKey).then(function (result){
expect(result.Keys).to.be.an('array');
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(fpr);
expect(result.Keys[0].status).to.equal('newkey');
expect(result.summary.considered).to.equal(1);
expect(result.summary.imported).to.equal(1);
done();
});
});
});
- it('Updating Key', function(done){
+ it('Updating Key', function (done){
context.Keyring.importKey(pubKey)
- .then(function(result){
+ .then(function (result){
expect(result.Keys[0].key).to.not.be.undefined;
expect(result.Keys[0].status).to.equal('newkey');
- context.Keyring.importKey(changedKey).then(function(res){
+ context.Keyring.importKey(changedKey).then(function (res){
expect(res.Keys[0].key).to.be.an('object');
expect(res.Keys[0].key.fingerprint).to.equal(fpr);
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;
expect(res.summary.considered).to.equal(1);
done();
});
});
});
- it('Deleting Key', function(done) {
- context.Keyring.importKey(pubKey).then(function(result){
+ it('Deleting Key', function (done) {
+ context.Keyring.importKey(pubKey).then(function (result){
expect(result.Keys[0].key).to.be.an('object');
expect(result.Keys[0].key.fingerprint).to.equal(fpr);
- result.Keys[0].key.delete().then(function(result){
+ result.Keys[0].key.delete().then(function (result){
expect(result).to.be.true;
done();
});
});
});
- it('Import result feedback', function(done){
- context.Keyring.importKey(pubKey, true).then(function(result){
+ it('Import result feedback', 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){
+ result.Keys[0].key.getArmor().then(function (armor){
expect(armor).to.be.a('string');
done();
});
});
});
it('exporting armored Key with getKeysArmored', function (done) {
- context.Keyring.importKey(pubKey).then(function(){
- context.Keyring.getKeysArmored(fpr).then(function(result){
+ 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 Key (including secret fingerprints)', function (done) {
const key_secret = inputvalues.encrypt.good.fingerprint;
- context.Keyring.getKeysArmored(key_secret, true).then(function(result){
+ 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/KeyInfos.js b/lang/js/BrowserTestExtension/tests/KeyInfos.js
index 1829f227..e1caabe1 100644
--- a/lang/js/BrowserTestExtension/tests/KeyInfos.js
+++ b/lang/js/BrowserTestExtension/tests/KeyInfos.js
@@ -1,57 +1,57 @@
/* 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, before, Gpgmejs */
/* global inputvalues*/
describe('Key information', function () {
let context = null;
- before(function(done){
+ before(function (done){
const prm = Gpgmejs.init();
- prm.then(function(gpgmejs){
+ prm.then(function (gpgmejs){
context = gpgmejs;
done();
});
});
- it('A fingerprint is consistently returned upper case hex', function(done){
+ it('A fingerprint is consistently returned upper case hex', function (done){
const mixedCase = inputvalues.encrypt.good.fingerprint_mixedcase;
- context.Keyring.getKeys(mixedCase).then(function(result){
+ context.Keyring.getKeys(mixedCase).then(function (result){
expect(result).to.be.an('array');
expect(result.length).to.equal(1);
expect(result[0].fingerprint).to.equal(mixedCase.toUpperCase());
done();
});
});
- it('A userId keeps their encoding', function(done){
+ it('A userId keeps their encoding', function (done){
context.Keyring.importKey(inputvalues.publicKeyNonAscii.key, true)
- .then(function(result){
+ .then(function (result){
expect(result.Keys[0]).to.be.an('object');
const user = result.Keys[0].key.get('userids')[0];
expect(user.get('name')).to.equal(
inputvalues.publicKeyNonAscii.userid);
done();
});
});
});
\ No newline at end of file
diff --git a/lang/js/BrowserTestExtension/tests/decryptTest.js b/lang/js/BrowserTestExtension/tests/decryptTest.js
index c6b3a3c5..a3f48daa 100644
--- a/lang/js/BrowserTestExtension/tests/decryptTest.js
+++ b/lang/js/BrowserTestExtension/tests/decryptTest.js
@@ -1,62 +1,62 @@
/* 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, before, expect, Gpgmejs */
/* global bigString, inputvalues, sabotageMsg*/
describe('Decryption', function () {
let context = null;
const good_fpr = inputvalues.encrypt.good.fingerprint;
- before(function(done){
+ before(function (done){
const prm = Gpgmejs.init();
- prm.then(function(gpgmejs){
+ prm.then(function (gpgmejs){
context = gpgmejs;
done();
});
});
it('Decryption of random string fails', function (done) {
let data = bigString(20 * 1024);
context.decrypt(data).then(
- function(){},
- function(error){
+ function (){},
+ function (error){
expect(error).to.be.an('error');
expect(error.code).to.equal('GNUPG_ERROR');
done();
});
});
it('Decryption of slightly corrupted message fails', function (done) {
const data = bigString(10000);
- context.encrypt(data, good_fpr).then(function(enc){
+ context.encrypt(data, good_fpr).then(function (enc){
context.decrypt(sabotageMsg(enc.data)).then(
- function(){},
- function(error){
+ function (){},
+ function (error){
expect(error).to.be.an('error');
expect(error.code).to.equal('GNUPG_ERROR');
done();
});
});
}).timeout(5000);
});
\ No newline at end of file
diff --git a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
index 80b293d2..28c98d98 100644
--- a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
+++ b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
@@ -1,170 +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, before, Gpgmejs */
/* global inputvalues, encryptedData, bigString, bigBoringString */
-describe('Encryption and Decryption', function () {
+describe('Encryption and Decryption', function (){
let context = null;
let good_fpr = inputvalues.encrypt.good.fingerprint;
- before(function(done){
+ before(function (done){
const prm = Gpgmejs.init();
- prm.then(function(gpgmejs){
+ prm.then(function (gpgmejs){
context = gpgmejs;
done();
});
});
it('Successful encrypt and decrypt simple string', function (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 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('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');
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('Random data, as string', function (done) {
let data = bigString(1000);
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);
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);
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 3ead8153..a242af5f 100644
--- a/lang/js/BrowserTestExtension/tests/encryptTest.js
+++ b/lang/js/BrowserTestExtension/tests/encryptTest.js
@@ -1,113 +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, before, Gpgmejs */
/* global inputvalues, fixedLengthString */
describe('Encryption', function () {
let context = null;
const good_fpr = inputvalues.encrypt.good.fingerprint;
- before(function(done){
+ before(function (done){
const prm = Gpgmejs.init();
- prm.then(function(gpgmejs){
+ prm.then(function (gpgmejs){
context = gpgmejs;
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();
});
});
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);
}
it('Sending encryption without keys fails', function (done) {
const data = inputvalues.encrypt.good.data;
context.encrypt(data,null).then(function (answer) {
expect(answer).to.be.undefined;
- }, function(error){
+ }, function (error){
expect(error).to.be.an('Error');
expect(error.code).to.equal('MSG_INCOMPLETE');
done();
});
});
it('Sending encryption without data fails', function (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) {
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){
+ }, 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) {
const data = fixedLengthString(65);
context.encrypt(data, good_fpr).then(function (answer) {
expect(answer).to.be.undefined;
- }, function(error){
+ }, 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 b33d985b..f84ac955 100644
--- a/lang/js/BrowserTestExtension/tests/inputvalues.js
+++ b/lang/js/BrowserTestExtension/tests/inputvalues.js
@@ -1,320 +1,320 @@
/* 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',
fingerprint_mixedcase: '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',
},
someInputParameter: 'bad string',
publicKeyNonAscii: {
userid: 'Müller €uro',
key: '-----BEGIN PGP PUBLIC KEY BLOCK-----\n' + '\n' +
'mQENBFt2/VIBCADIWBIMxExZlHda4XIVnM9nsIfUYLebJSC/krEriyWgzytU8/fQ\n' +
'S05cfnYx7RXvOOq4k8aa7mu80ovg3q77idXauLreAUwng4Njw0nMxWq/vtoMiZ60\n' +
'9f8EmfthZophhkQF2HIPHyqXMDZzMLWv4oTr2UJ9BKudL1XtbK51y9TbiyfQygBl\n' +
'8bl+zrOo70/dN6aunvuo6Hlu5cEzkj2QrzZlqTdfG5qv6KVEMut1eAbxZAmvSnna\n' +
'R4wqiRCT3/eRXGJbDL/8GaCEYkwi9FBrimjOTV0MpcLNwAU4aGfDxMUsxML9xJ+/\n' +
'/6GFxzYf7Lmk5UhvoewR58uQkHkTVPjZ9hXZABEBAAG0KE3DvGxsZXIg4oKsdXJv\n' +
'IDxtdWVsbGVyZXVyb0BleGFtcGxlLm9yZz6JAVQEEwEIAD4WIQQVNixp3XT/DuGT\n' +
'F4MFmkL4L5UZdAUCW3b9UgIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIX\n' +
'gAAKCRAFmkL4L5UZdAhiCACowW1aC8DYGtJyAaBO2MqWhyw1wVCbQN9uFsQZPydY\n' +
'v3BEbCDrRc0HyfV1PVoRQsgkiNMes1S2tz2IMJoEOTMaz3WjPM8yK0dDbo5sfx/o\n' +
'/XaXeKhyYNqRkz2dPzorg1sHyHe0ki/HoQiANEJ8mByMtlwnPWlhnINAX+27eL17\n' +
'JC8juhBYUchqoIBAl+ajYKSThdLzrUkcL7QfJjZb3pPytJSTTdFc0rD6ERDbfXXc\n' +
'/vnE2SDYme+XXn7H5tNe67tPM8M96vbp+uM+n2t/z96C+Pqb6GJFMBa35PM+/qQO\n' +
'yr0I2oaQnTecx2AfBXGZvd81wMYikAJ9rAOWyMQZHJWouQENBFt2/VIBCADXCvKD\n' +
'3wRWCOzRWtLTs7hpAjCDxp6niPkwxKuUf9r/sUPmn0pWdZHYlbPDev9psN9bnJ+C\n' +
'+wzzPZ1zgSYKIAN0IMoh0L7BRAoau7VWQ3Q7hP6HIbdzOTEGyklSoh9pIh6IlwZZ\n' +
'XfPlFlnn7FeH1UeA711E174SUpDRKYSfT+mFObQUuQewGi9QC3gBsz5MPLQQLzML\n' +
'yimIOT+8i64fHHSKChw5ZDckBffej31/YHPQ7+JsWFV+G/6xDfbwnaFZFAUwo+1L\n' +
'4w9UiMyCNkIWCkulzJ2Hbz66xzFMi/8zMYxr08Af+PpsXaWTQHAa5V4GNJSInDEB\n' +
'7gy/CGLcY90EozoDABEBAAGJATwEGAEIACYWIQQVNixp3XT/DuGTF4MFmkL4L5UZ\n' +
'dAUCW3b9UgIbDAUJA8JnAAAKCRAFmkL4L5UZdPqoB/9kpqxqa82k7JMcq7UiwQY7\n' +
'CdqCUPKF88ciOWKBpZmpl8V7zgM7kEXwmM6ocHcznXi8xM7eOfDIJcBeqFVIE4OT\n' +
'63OCMuvZICM9Kiu48wLNAw5W/YGAOBH7ySQzZM2XrtvwfFtJ3lR00t5f4FVtriA5\n' +
'47BjYYG5tTdJc8HwEHs045S99xKCWqwuDgO9qskIi6iPePUkuhpaVBLuEj2Goku6\n' +
'i8aql/vKYQS67L7UHJiEbjLe+wP9k3FvWUFTx39lAubsDzb4Abhe+qRqs2TKD7Go\n' +
'k35ZriRIYllmx4c9KyWL7Mvzcp+84Sq9LeMfsN4JstBDJ7jn6g19SjO5dmtxSuP0\n' +
'=zZSJ\n' +
'-----END PGP PUBLIC KEY BLOCK-----\n'
}
};
// (Pseudo-)Random String covering all of utf8.
-function bigString(length){// eslint-disable-line no-unused-vars
+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
+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
+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.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
+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){
+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('');
}
// 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'
};
/**
* Changes base64 encoded gpg messages
* @param {String} msg input message
* @param {Number} rate of changes as percentage of message length.
* @param {[Number, Number]} p begin and end of the message left untouched (to
* preserve) header/footer
*/
// eslint-disable-next-line no-unused-vars
-function sabotageMsg(msg, rate = 0.01, p= [35,35]){
+function sabotageMsg (msg, rate = 0.01, p= [35,35]){
const iterations = Math.floor(Math.random() * msg.length * rate) + 1;
const base64_set =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/';
for (let i=0; i < iterations; i++){
let str0, str1, str2;
- const chosePosition = function(){
+ const chosePosition = function (){
let position =
Math.floor( Math.random() * (msg.length - p[0] + p[1]))
+ p[0];
str1 = msg.substring(position,position+1);
if (str1 === '\n'){
chosePosition();
} else {
str0 = msg.substring(0,position);
str2 = msg.substring(position +1);
}
};
chosePosition();
- let new1 = function(){
+ let new1 = function (){
let n = base64_set[Math.floor(Math.random() * 64)];
return (n === str1) ? new1() : n;
};
msg = str0.concat(new1()).concat(str2);
}
return msg;
}
diff --git a/lang/js/BrowserTestExtension/tests/longRunningTests.js b/lang/js/BrowserTestExtension/tests/longRunningTests.js
index 03f0390c..240a6b93 100644
--- a/lang/js/BrowserTestExtension/tests/longRunningTests.js
+++ b/lang/js/BrowserTestExtension/tests/longRunningTests.js
@@ -1,56 +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, 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){
+ before(function (done){
const prm = Gpgmejs.init();
- prm.then(function(gpgmejs){
+ 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) {
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){
+ 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(15000);
}
});
diff --git a/lang/js/BrowserTestExtension/tests/signTest.js b/lang/js/BrowserTestExtension/tests/signTest.js
index 2763dadf..f5bd9c1d 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, before, Gpgmejs */
/* global bigString, inputvalues */
describe('Signing', function () {
let context = null;
const good_fpr = inputvalues.encrypt.good.fingerprint;
- before(function(done){
+ before(function (done){
const prm = Gpgmejs.init();
- prm.then(function(gpgmejs){
+ prm.then(function (gpgmejs){
context = gpgmejs;
done();
});
});
it('Sign a message', function (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) {
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/startup.js b/lang/js/BrowserTestExtension/tests/startup.js
index 63358aa9..cf5b0999 100644
--- a/lang/js/BrowserTestExtension/tests/startup.js
+++ b/lang/js/BrowserTestExtension/tests/startup.js
@@ -1,47 +1,47 @@
/* 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, inputvalues */
-describe('GPGME context', function(){
- it('Starting a GpgME instance', function(done){
+describe('GPGME context', function (){
+ it('Starting a GpgME instance', function (done){
let prm = Gpgmejs.init();
const input = inputvalues.someInputParameter;
prm.then(
- function(context){
+ function (context){
expect(context).to.be.an('object');
expect(context.encrypt).to.be.a('function');
expect(context.decrypt).to.be.a('function');
expect(context.sign).to.be.a('function');
expect(context.verify).to.be.a('function');
context.Keyring = input;
expect(context.Keyring).to.be.an('object');
expect(context.Keyring).to.not.equal(input);
expect(context.Keyring.getKeys).to.be.a('function');
expect(context.Keyring.getDefaultKey).to.be.a('function');
expect(context.Keyring.importKey).to.be.a('function');
expect(context.Keyring.generateKey).to.be.a('function');
done();
});
});
});
\ No newline at end of file
diff --git a/lang/js/BrowserTestExtension/tests/verifyTest.js b/lang/js/BrowserTestExtension/tests/verifyTest.js
index 1617e2dc..82aaf564 100644
--- a/lang/js/BrowserTestExtension/tests/verifyTest.js
+++ b/lang/js/BrowserTestExtension/tests/verifyTest.js
@@ -1,85 +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, before, bigString, inputvalues, Gpgmejs */
describe('Verifying data', function () {
let context = null;
- before(function(done){
+ before(function (done){
const prm = Gpgmejs.init();
- prm.then(function(gpgmejs){
+ prm.then(function (gpgmejs){
context = gpgmejs;
done();
});
});
it('Successful verify message', function (done) {
const message = inputvalues.signedMessage.good;
- context.verify(message).then(function(result){
+ 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){
+ 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) {
const message = bigString(2000);
let fpr = inputvalues.encrypt.good.fingerprint;
- 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){
+ 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
diff --git a/lang/js/DemoExtension/entry.js b/lang/js/DemoExtension/entry.js
index 77b96f92..fd261a0b 100644
--- a/lang/js/DemoExtension/entry.js
+++ b/lang/js/DemoExtension/entry.js
@@ -1,30 +1,30 @@
/* 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 chrome */
-document.addEventListener('DOMContentLoaded', function() {
+document.addEventListener('DOMContentLoaded', function () {
chrome.tabs.create({
url: './mainui.html'
});
});
diff --git a/lang/js/DemoExtension/maindemo.js b/lang/js/DemoExtension/maindemo.js
index 4cae934e..8d190852 100644
--- a/lang/js/DemoExtension/maindemo.js
+++ b/lang/js/DemoExtension/maindemo.js
@@ -1,119 +1,119 @@
/* 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 document, Gpgmejs */
-document.addEventListener('DOMContentLoaded', function() {
- Gpgmejs.init().then(function(gpgmejs){
+document.addEventListener('DOMContentLoaded', function () {
+ Gpgmejs.init().then(function (gpgmejs){
document.getElementById('buttonencrypt').addEventListener('click',
- function(){
+ function (){
let data = document.getElementById('inputtext').value;
let keyId = document.getElementById('pubkey').value;
gpgmejs.encrypt(data, keyId).then(
- function(answer){
+ function (answer){
if (answer.data){
document.getElementById(
'answer').value = answer.data;
}
- }, function(errormsg){
+ }, function (errormsg){
alert( errormsg.message);
});
});
document.getElementById('buttondecrypt').addEventListener('click',
- function(){
+ function (){
let data = document.getElementById('inputtext').value;
gpgmejs.decrypt(data).then(
- function(answer){
+ function (answer){
if (answer.data){
document.getElementById(
'answer').value = answer.data;
}
- }, function(errormsg){
+ }, function (errormsg){
alert(errormsg.message);
});
});
document.getElementById('getdefaultkey').addEventListener('click',
- function(){
- gpgmejs.Keyring.getDefaultKey().then(function(answer){
+ function (){
+ gpgmejs.Keyring.getDefaultKey().then(function (answer){
document.getElementById('pubkey').value =
answer.fingerprint;
- }, function(errormsg){
+ }, function (errormsg){
alert(errormsg.message);
});
});
document.getElementById('signtext').addEventListener('click',
- function(){
+ function (){
let data = document.getElementById('inputtext').value;
let keyId = document.getElementById('pubkey').value;
gpgmejs.sign(data, keyId).then(
- function(answer){
+ function (answer){
if (answer.data){
document.getElementById(
'answer').value = answer.data;
}
- }, function(errormsg){
+ }, function (errormsg){
alert( errormsg.message);
});
});
document.getElementById('verifytext').addEventListener('click',
- function(){
+ function (){
let data = document.getElementById('inputtext').value;
gpgmejs.verify(data).then(
- function(answer){
+ function (answer){
let vals = '';
if (answer.all_valid === true){
vals = 'Success! ';
} else {
vals = 'Failure! ';
}
vals = vals + (answer.count - answer.failures) + 'of '
+ answer.count + ' signature(s) were successfully '
+ 'verified.\n\n' + answer.data;
document.getElementById('answer').value = vals;
- }, function(errormsg){
+ }, function (errormsg){
alert( errormsg.message);
});
});
document.getElementById('searchkey').addEventListener('click',
- function(){
+ function (){
let data = document.getElementById('inputtext').value;
- gpgmejs.Keyring.getKeys(data, true, true).then(function(keys){
+ gpgmejs.Keyring.getKeys(data, true, true).then(function (keys){
if (keys.length === 1){
document.getElementById(
'pubkey').value = keys[0].fingerprint;
} else if (keys.length > 1) {
alert('The pattern was not unambigious enough for a Key. '
+ keys.length + ' Keys were found');
} else {
alert('No keys found');
}
- }, function(errormsg){
+ }, function (errormsg){
alert( errormsg.message);
});
});
});
});
diff --git a/lang/js/src/Connection.js b/lang/js/src/Connection.js
index a60fd215..928ac681 100644
--- a/lang/js/src/Connection.js
+++ b/lang/js/src/Connection.js
@@ -1,283 +1,283 @@
/* 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 chrome */
import { permittedOperations } from './permittedOperations';
import { gpgme_error } from './Errors';
import { GPGME_Message, createMessage } from './Message';
import { decode } from './Helpers';
/**
* A Connection handles the nativeMessaging interaction via a port. As the
* protocol only allows up to 1MB of message sent from the nativeApp to the
* browser, the connection will stay open until all parts of a communication
* are finished. For a new request, a new port will open, to avoid mixing
* contexts.
* @class
*/
export class Connection{
- constructor(){
+ constructor (){
this._connection = chrome.runtime.connectNative('gpgmejson');
}
/**
* Immediately closes an open port.
*/
- disconnect() {
+ disconnect () {
if (this._connection){
this._connection.disconnect();
this._connection = null;
}
}
/**
* @typedef {Object} backEndDetails
* @property {String} gpgme Version number of gpgme
* @property {Array