diff --git a/Gruntfile.js b/Gruntfile.js index e17c9afe38..973f256ed3 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -81,25 +81,6 @@ module.exports = function(grunt) { } } }, - compile: { - curve25519_compiled: { - src_files: [ - 'native/ed25519/additions/*.c', - 'native/curve25519-donna.c', - 'native/ed25519/*.c', - 'native/ed25519/sha512/sha2big.c' - ], - methods: [ - 'curve25519_donna', - 'curve25519_sign', - 'curve25519_verify', - 'crypto_sign_ed25519_ref10_ge_scalarmult_base', - 'sph_sha512_init', - 'malloc', - 'free' - ] - } - }, jshint: { files: [ 'Gruntfile.js', @@ -211,43 +192,8 @@ module.exports = function(grunt) { } }); - grunt.registerMultiTask('compile', 'Compile the C libraries with emscripten.', function() { - var callback = this.async(); - var outfile = 'build/' + this.target + '.js'; - - var exported_functions = this.data.methods.map(function(name) { - return "'_" + name + "'"; - }); - var flags = [ - '-O1', - '-Qunused-arguments', - '-o', outfile, - '-Inative/ed25519/nacl_includes -Inative/ed25519 -Inative/ed25519/sha512', - '-s', "EXPORTED_FUNCTIONS=\"[" + exported_functions.join(',') + "]\""]; - var command = [].concat('emcc', this.data.src_files, flags).join(' '); - grunt.log.writeln('Compiling via emscripten to ' + outfile); - - var exitCode = 0; - grunt.verbose.subhead(command); - grunt.verbose.writeln(util.format('Expecting exit code %d', exitCode)); - - var child = child_process.exec(command); - child.stdout.on('data', function (d) { grunt.log.write(d); }); - child.stderr.on('data', function (d) { grunt.log.error(d); }); - child.on('exit', function(code) { - if (code !== exitCode) { - grunt.log.error(util.format('Exited with code: %d.', code)); - return callback(false); - } - - grunt.verbose.ok(util.format('Exited with code: %d.', code)); - callback(true); - }); - }); - grunt.registerTask('dev', ['connect', 'watch', 'sass']); grunt.registerTask('test', ['jshint', 'jscs', 'connect', 'saucelabs-mocha']); grunt.registerTask('default', ['preen', 'concat', 'sass', 'copy']); - grunt.registerTask('build', ['compile', 'concat:curve25519', 'concat:libtextsecure']); }; diff --git a/build/curve25519.js b/build/curve25519.js deleted file mode 100644 index 037fd23716..0000000000 --- a/build/curve25519.js +++ /dev/null @@ -1,142 +0,0 @@ -/* vim: ts=4:sw=4:expandtab - * - * This program 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 3 of the License, or - * (at your option) any later version. - * - * This program 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 . - */ - -;(function() { - 'use strict'; - - // Insert some bytes into the emscripten memory and return a pointer - function _allocate(bytes) { - var address = Module._malloc(bytes.length); - Module.HEAPU8.set(bytes, address); - - return address; - } - - function _readBytes(address, length, array) { - array.set(Module.HEAPU8.subarray(address, address + length)); - } - - var basepoint = new Uint8Array(32); - basepoint[0] = 9; - - window.curve25519 = { - keyPair: function(privKey) { - var priv = new Uint8Array(privKey); - priv[0] &= 248; - priv[31] &= 127; - priv[31] |= 64 - - // Where to store the result - var publicKey_ptr = Module._malloc(32); - - // Get a pointer to the private key - var privateKey_ptr = _allocate(priv); - - // The basepoint for generating public keys - var basepoint_ptr = _allocate(basepoint); - - // The return value is just 0, the operation is done in place - var err = Module._curve25519_donna(publicKey_ptr, - privateKey_ptr, - basepoint_ptr); - - var res = new Uint8Array(32); - _readBytes(publicKey_ptr, 32, res); - - Module._free(publicKey_ptr); - Module._free(privateKey_ptr); - Module._free(basepoint_ptr); - - return Promise.resolve({ pubKey: res.buffer, privKey: privKey }); - }, - sharedSecret: function(pubKey, privKey) { - // Where to store the result - var sharedKey_ptr = Module._malloc(32); - - // Get a pointer to our private key - var privateKey_ptr = _allocate(new Uint8Array(privKey)); - - // Get a pointer to their public key, the basepoint when you're - // generating a shared secret - var basepoint_ptr = _allocate(new Uint8Array(pubKey)); - - // Return value is 0 here too of course - var err = Module._curve25519_donna(sharedKey_ptr, - privateKey_ptr, - basepoint_ptr); - - var res = new Uint8Array(32); - _readBytes(sharedKey_ptr, 32, res); - - Module._free(sharedKey_ptr); - Module._free(privateKey_ptr); - Module._free(basepoint_ptr); - - return Promise.resolve(res.buffer); - }, - sign: function(privKey, message) { - // Where to store the result - var signature_ptr = Module._malloc(64); - - // Get a pointer to our private key - var privateKey_ptr = _allocate(new Uint8Array(privKey)); - - // Get a pointer to the message - var message_ptr = _allocate(new Uint8Array(message)); - - var err = Module._curve25519_sign(signature_ptr, - privateKey_ptr, - message_ptr, - message.byteLength); - - var res = new Uint8Array(64); - _readBytes(signature_ptr, 64, res); - - Module._free(signature_ptr); - Module._free(privateKey_ptr); - Module._free(message_ptr); - - return Promise.resolve(res.buffer); - }, - verify: function(pubKey, message, sig) { - // Get a pointer to their public key - var publicKey_ptr = _allocate(new Uint8Array(pubKey)); - - // Get a pointer to the signature - var signature_ptr = _allocate(new Uint8Array(sig)); - - // Get a pointer to the message - var message_ptr = _allocate(new Uint8Array(message)); - - var res = Module._curve25519_verify(signature_ptr, - publicKey_ptr, - message_ptr, - message.byteLength); - - Module._free(publicKey_ptr); - Module._free(signature_ptr); - Module._free(message_ptr); - - return new Promise(function(resolve, reject) { - if (res !== 0) { - reject(new Error("Invalid signature")); - } else { - resolve(); - } - }); - } - }; -})();