Add emscripten-compiled curve25519 module
Build with `grunt compile && grunt concat:curve25519` after installing emscripten. Enable by either (a) not loading nativeclient.js or (b) setting `textsecure.NATIVE_CLIENT = false` before loading nativeclient.js.
This commit is contained in:
parent
3d27c98845
commit
b4f4f87a7c
15 changed files with 9011 additions and 4 deletions
63
Gruntfile.js
63
Gruntfile.js
|
@ -1,7 +1,8 @@
|
|||
'use strict';
|
||||
var child_process = require('child_process');
|
||||
var util = require('util');
|
||||
|
||||
module.exports = function(grunt) {
|
||||
|
||||
var bower = grunt.file.readJSON('bower.json');
|
||||
var components = [];
|
||||
for (var i in bower.concat.app) {
|
||||
|
@ -34,6 +35,15 @@ module.exports = function(grunt) {
|
|||
'test/_test.js'
|
||||
],
|
||||
dest: 'test/test.js',
|
||||
},
|
||||
curve25519: {
|
||||
src: [
|
||||
'build/_before.js',
|
||||
'build/curve25519_compiled.js',
|
||||
'build/curve25519.js',
|
||||
'build/_after.js'
|
||||
],
|
||||
dest: 'js/curve25519_compiled.js'
|
||||
}
|
||||
},
|
||||
sass: {
|
||||
|
@ -42,12 +52,63 @@ module.exports = function(grunt) {
|
|||
'stylesheets/manifest.css': 'stylesheets/manifest.scss'
|
||||
}
|
||||
}
|
||||
},
|
||||
compile: {
|
||||
curve25519_compiled: {
|
||||
src_files: [
|
||||
'nacl/ed25519/additions/*.c',
|
||||
'nacl/curve25519-donna.c',
|
||||
'nacl/ed25519/*.c',
|
||||
'nacl/ed25519/sha512/sha2big.c'
|
||||
],
|
||||
methods: [
|
||||
'curve25519_donna',
|
||||
'curve25519_sign',
|
||||
'curve25519_verify',
|
||||
'crypto_sign_ed25519_ref10_ge_scalarmult_base',
|
||||
'sph_sha512_init',
|
||||
'malloc'
|
||||
]
|
||||
}
|
||||
}
|
||||
});
|
||||
grunt.loadNpmTasks('grunt-preen');
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
grunt.loadNpmTasks('grunt-contrib-sass');
|
||||
|
||||
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 = [
|
||||
'-O2',
|
||||
'-Qunused-arguments',
|
||||
'-o', outfile,
|
||||
'-Inacl/ed25519/nacl_includes -Inacl/ed25519 -Inacl/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('default', ['preen', 'concat', 'sass']);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue