Skip to content
Snippets Groups Projects
Commit f2c3b51c authored by Benoit Lavenier's avatar Benoit Lavenier
Browse files

- remove nacl_factory when using Android or iOS - fix #333

- private message was badly encrypted - fix #345
parent 75e1875d
No related branches found
No related tags found
No related merge requests found
...@@ -15054,3 +15054,12 @@ a.underline:hover, ...@@ -15054,3 +15054,12 @@ a.underline:hover,
font-size: 16px; font-size: 16px;
left: 25px; left: 25px;
top: -7px; } top: -7px; }
div[dropzone] {
border: 2px dashed #bbb;
border-radius: 5px;
padding: 15px;
text-align: center;
font: 20pt bold;
color: #bbb;
margin-bottom: 20px; }
This diff is collapsed.
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
<script src="js/vendor/socket-io.js"></script> <script src="js/vendor/socket-io.js"></script>
<script src="js/vendor/underscore.js"></script> <script src="js/vendor/underscore.js"></script>
<script src="js/vendor/qrcode.min.js"></script> <script src="js/vendor/qrcode.min.js"></script>
<!--script src="js/vendor/strophe.min.js"></script-->
<!-- ionic/angularjs js --> <!-- ionic/angularjs js -->
<script src="lib/ionic/js/ionic.bundle.js"></script> <script src="lib/ionic/js/ionic.bundle.js"></script>
...@@ -45,13 +44,13 @@ ...@@ -45,13 +44,13 @@
<script src="lib/ionic/js/angular/angular-image-crop.js"></script> <script src="lib/ionic/js/angular/angular-image-crop.js"></script>
<script src="lib/ionic/js/angular/angular-file-saver.bundle.js"></script> <script src="lib/ionic/js/angular/angular-file-saver.bundle.js"></script>
<script src="js/vendor/base58.js" async></script> <script src="js/vendor/base58.js" async></script>
<!--removeIf(device-android)--> <!--removeIf(android)-->
<!--removeIf(device-ios)--> <!--removeIf(ios)-->
<script src="js/vendor/nacl_factory.js" async></script> <script src="js/vendor/nacl_factory.js" async></script>
<script src="js/vendor/scrypt-em.js" async></script> <script src="js/vendor/scrypt-em.js" async></script>
<script src="js/vendor/base64.js" async></script> <script src="js/vendor/base64.js" async></script>
<!--endRemoveIf(device-ios)--> <!--endRemoveIf(ios)-->
<!--endRemoveIf(device-android)--> <!--endRemoveIf(android)-->
<!--removeIf(no-device)--> <!--removeIf(no-device)-->
<script src="js/vendor/sha256.min.js" async></script> <script src="js/vendor/sha256.min.js" async></script>
<script src="js/vendor/ng-cordova.min.js"></script> <script src="js/vendor/ng-cordova.min.js"></script>
......
...@@ -137,8 +137,8 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services' ...@@ -137,8 +137,8 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services'
this.util.decode_base64 = function (a) { this.util.decode_base64 = function (a) {
return that.base64.decode(a); return that.base64.decode(a);
}; };
this.util.encode_base64 = function () { this.util.encode_base64 = function (b) {
return that.base64.encode(arguments); return that.base64.encode(b);
}; };
this.util.hash_sha256 = function (message) { this.util.hash_sha256 = function (message) {
...@@ -177,7 +177,7 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services' ...@@ -177,7 +177,7 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services'
/** /**
* Encrypt a message, from a key pair * Encrypt a message, from a key pair
*/ */
this.box = function (message, nonce, recipientPk, senderSk) { this.box = function(message, nonce, recipientPk, senderSk) {
return $q(function (resolve, reject) { return $q(function (resolve, reject) {
if (!message) { if (!message) {
resolve(message); resolve(message);
...@@ -192,6 +192,7 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services' ...@@ -192,6 +192,7 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services'
try { try {
var ciphertextBin = that.nacl.crypto_box(messageBin, nonce, recipientPk, senderSk); var ciphertextBin = that.nacl.crypto_box(messageBin, nonce, recipientPk, senderSk);
var ciphertext = that.util.encode_base64(ciphertextBin); var ciphertext = that.util.encode_base64(ciphertextBin);
//console.debug('Encrypted message: ' + ciphertext); //console.debug('Encrypted message: ' + ciphertext);
resolve(ciphertext); resolve(ciphertext);
} }
...@@ -350,7 +351,6 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services' ...@@ -350,7 +351,6 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services'
// libraries handlers // libraries handlers
this.nacl = null; // the cordova plugin this.nacl = null; // the cordova plugin
this.nacl_js= null; // the full JS lib (need for random values)
this.base58= null; this.base58= null;
this.sha256= null; this.sha256= null;
var that = this; var that = this;
...@@ -373,18 +373,19 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services' ...@@ -373,18 +373,19 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services'
for (i = 0; i < a.length; i++) b[i] = a[i]; for (i = 0; i < a.length; i++) b[i] = a[i];
return b; return b;
}; };
this.util.decode_base64 = function (a) {
return that.nacl.from_base64(a);
};
this.util.encode_base64 = function (b) {
return that.nacl.to_base64(b);
};
this.util.hash_sha256 = function(message) { this.util.hash_sha256 = function(message) {
return $q.when(that.sha256(message).toUpperCase()); return $q.when(that.sha256(message).toUpperCase());
}; };
this.util.random_nonce = function() { this.util.random_nonce = function() {
if (that.crypto && that.crypto.getRandomValues) { var nonce = new Uint8Array(that.constants.crypto_secretbox_NONCEBYTES);
var nonce = new Uint8Array(that.constants.crypto_secretbox_NONCEBYTES); that.crypto.getRandomValues(nonce);
that.crypto.getRandomValues(nonce); return $q.when(nonce);
return $q.when(nonce);
}
else {
return $q.when(that.nacl_js.crypto_box_random_nonce());
}
}; };
/** /**
...@@ -518,7 +519,7 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services' ...@@ -518,7 +519,7 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services'
that.nacl.crypto_box_easy(messageBin, nonce, recipientPk, senderSk, function(err, ciphertextBin) { that.nacl.crypto_box_easy(messageBin, nonce, recipientPk, senderSk, function(err, ciphertextBin) {
if (err) { deferred.reject(err); return;} if (err) { deferred.reject(err); return;}
var ciphertext = that.nacl.to_base64(ciphertextBin); var ciphertext = that.util.encode_base64(ciphertextBin);
//console.debug('Encrypted message: ' + ciphertext); //console.debug('Encrypted message: ' + ciphertext);
deferred.resolve(ciphertext); deferred.resolve(ciphertext);
}); });
...@@ -558,10 +559,9 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services' ...@@ -558,10 +559,9 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services'
else { else {
that.nacl = window.plugins.MiniSodium; that.nacl = window.plugins.MiniSodium;
var loadedLib = 0; var loadedLib = 0;
var expectedLoadedLib = 2;
var checkAllLibLoaded = function() { var checkAllLibLoaded = function() {
loadedLib++; loadedLib++;
if (loadedLib == expectedLoadedLib) { if (loadedLib == 2) {
that.loaded = true; that.loaded = true;
deferred.resolve(); deferred.resolve();
} }
...@@ -574,14 +574,6 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services' ...@@ -574,14 +574,6 @@ angular.module('cesium.crypto.services', ['ngResource', 'cesium.device.services'
that.sha256 = lib; that.sha256 = lib;
checkAllLibLoaded(); checkAllLibLoaded();
}); });
if (!that.crypto || !that.crypto.getRandomValues) {
console.debug('[crypto] Web Crypto API (window.crypto) NOT exists with getRandomValues. Will load nacl_factory');
expectedLoadedLib++;
that.async_load_nacl_js(function(lib) {
that.nacl_js = lib;
checkAllLibLoaded();
});
}
} }
return deferred.promise; return deferred.promise;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment