js: make init export immutable
-- * src/index.js: The export now uses a freezed Object, which does not allow for simply overwriting the init method by e.g. a third-party library. * BrowsertestExtension: Added some tests trying if decryption of bad data properly fails
This commit is contained in:
parent
6313a2de9e
commit
68a012deb3
@ -19,6 +19,7 @@
|
|||||||
<script src="tests/encryptDecryptTest.js"></script>
|
<script src="tests/encryptDecryptTest.js"></script>
|
||||||
<script src="tests/signTest.js"></script>
|
<script src="tests/signTest.js"></script>
|
||||||
<script src="tests/verifyTest.js"></script>
|
<script src="tests/verifyTest.js"></script>
|
||||||
|
<script src="tests/decryptTest.js"></script>
|
||||||
<script src="tests/KeyImportExport.js"></script>
|
<script src="tests/KeyImportExport.js"></script>
|
||||||
<!-- run tests -->
|
<!-- run tests -->
|
||||||
<script src="runbrowsertest.js"></script>
|
<script src="runbrowsertest.js"></script>
|
||||||
|
62
lang/js/BrowserTestExtension/tests/decryptTest.js
Normal file
62
lang/js/BrowserTestExtension/tests/decryptTest.js
Normal file
@ -0,0 +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 <http://www.gnu.org/licenses/>.
|
||||||
|
* SPDX-License-Identifier: LGPL-2.1+
|
||||||
|
*
|
||||||
|
* Author(s):
|
||||||
|
* Maximilian Krambach <mkrambach@intevation.de>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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){
|
||||||
|
const prm = Gpgmejs.init();
|
||||||
|
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){
|
||||||
|
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.decrypt(sabotageMsg(enc.data)).then(
|
||||||
|
function(){},
|
||||||
|
function(error){
|
||||||
|
expect(error).to.be.an('error');
|
||||||
|
expect(error.code).to.equal('GNUPG_ERROR');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}).timeout(5000);
|
||||||
|
});
|
@ -248,3 +248,39 @@ const ImportablePublicKey = {// eslint-disable-line no-unused-vars
|
|||||||
'=9WZ7\n' +
|
'=9WZ7\n' +
|
||||||
'-----END PGP PUBLIC KEY BLOCK-----\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]){
|
||||||
|
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(){
|
||||||
|
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 n = base64_set[Math.floor(Math.random() * 64)];
|
||||||
|
return (n === str1) ? new1() : n;
|
||||||
|
};
|
||||||
|
msg = str0.concat(new1()).concat(str2);
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
@ -34,7 +34,7 @@ import { Connection } from './Connection';
|
|||||||
*/
|
*/
|
||||||
function init(){
|
function init(){
|
||||||
return new Promise(function(resolve, reject){
|
return new Promise(function(resolve, reject){
|
||||||
let connection = Object.freeze(new Connection);
|
const connection = Object.freeze(new Connection);
|
||||||
connection.checkConnection(false).then(
|
connection.checkConnection(false).then(
|
||||||
function(result){
|
function(result){
|
||||||
if (result === true) {
|
if (result === true) {
|
||||||
@ -48,6 +48,5 @@ function init(){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
const exportvalue = Object.freeze({init:init});
|
||||||
init: init
|
export default exportvalue;
|
||||||
};
|
|
Loading…
Reference in New Issue
Block a user