Skip to content
Snippets Groups Projects
Commit d9f85edb authored by Cédric Moreau's avatar Cédric Moreau
Browse files

Now using OpenpgpJS as openpgp layer

parent c0d4817a
No related branches found
No related tags found
No related merge requests found
Showing
with 13731 additions and 263 deletions
var exec = require('child_process').exec,
sys = require('sys');
var openpgp = require('./openpgp').openpgp;
var JPGP_JAR = 'bin/jpgp-0.0.2-SNAPSHOT.jar';
openpgp.init();
function JPGP() {
this.args = [];
this.signature = "";
this.uid = "";
this.data = "";
this.noCarriage = false;
// PUBLIC
this.certificate = function(asciiArmored) {
this.args.push({opt: 'c', value: escape(asciiArmored)});
return this;
};
this.publicKey = function(asciiArmored) {
this.args.push({opt: 'p', value: escape(asciiArmored)});
openpgp.keyring.importPublicKey(asciiArmored);
return this;
};
this.signature = function(asciiArmored) {
this.args.push({opt: 's', value: escape(asciiArmored)});
return this;
this.certificate = function(asciiArmored) {
var cert = openpgp.read_publicKey(asciiArmored)[0];
var fpr = hexstrdump(cert.publicKeyPacket.getFingerprint()).toUpperCase();
var uids = [];
cert.userIds.forEach(function (uid) {
uids.push(uid.text);
});
return {
"fingerprint": fpr,
"uids": uids,
"raw": cert
};
};
this.uid = function(uid_string) {
this.args.push({opt: 'u', value: escape(uid_string)});
this.signature = function(asciiArmored) {
this.signature = asciiArmored;
return this;
};
this.data = function(data_string) {
this.args.push({opt: 'd', value: escape(data_string)});
this.data = data_string;
return this;
};
this.noCarriage = function() {
this.args.push({opt: 'n'});
this.noCarriage = true;
return this;
};
this.parse = function(callback) {
command('P', this.args, callback);
};
this.verify = function(callback) {
command('V', this.args, function (err, stdout, stderr) {
if(!err && !stderr){
var verified = JSON.parse(stdout).data;
var start = new Date();
// Do
var signatures = openpgp.read_message(this.signature);
var sig = signatures[2];
var verified = sig.verifySignature();
// Done
var end = new Date();
var diff = end.getTime() - start.getTime();
console.log("jpgp verify", diff + " ms");
if(verified){
callback();
}
else callback("Signature does not match.\n" + err + "\n" + stdout + "\n" + stderr);
}
else callback(err + "\n" + stderr);
});
else callback("Signature does not match.\n");
};
this.isSigned = function(callback) {
command('I', this.args, callback);
};
// PRIVATE
function escape(str) {
return '"' + str + '"';
}
function command(c, args, callback) {
var argsStr = "";
for (var i = 0; i < args.length; i++) {
argsStr += " -" + args[i].opt;
if(args[i].value){
argsStr += " " + args[i].value;
}
}
call(c, argsStr, callback);
}
function call(c, args, callback) {
// var cmd = 'java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,address=8044 -jar '+ JPGP_JAR + ' -' + c + args;
var cmd = 'java -jar '+ JPGP_JAR + ' -' + c + args;
var start = new Date();
exec(cmd, function (err, stdout, stderr) {
var end = new Date();
var diff = end.getTime() - start.getTime();
console.log("jpgp -" + c, diff + " ms");
callback(err, stdout, stderr);
});
function hexstrdump(str) {
if (str == null)
return "";
var r=[];
var e=str.length;
var c=0;
var h;
while(c<e){
h=str[c++].charCodeAt().toString(16);
while(h.length<2) h="0"+h;
r.push(""+h);
}
return r.join('');
};
}
module.exports = function () {
......
......@@ -120,3 +120,16 @@ module.exports.express = {
}.bind(this));
}
};
String.prototype.trim = function(){
return this.replace(/^\s+|\s+$/g, '');
};
String.prototype.unix2dos = function(){
return this.dos2unix().replace(/\n/g, '\r\n');
};
String.prototype.dos2unix = function(){
return this.replace(/\r\n/g, '\n');
};
This diff is collapsed.
var jpgp = require('../lib/jpgp');
var mongoose = require('mongoose');
var async = require('async');
var sha1 = require('sha1');
......@@ -63,7 +62,7 @@ AmendmentSchema.methods = {
callback("No amendment given");
return;
}
this.hash = sha1(rawAmend).toUpperCase();
this.hash = sha1(rawAmend.unix2dos()).toUpperCase();
var obj = this;
var captures = [
{prop: "version", regexp: /Version: (.*)/},
......@@ -239,7 +238,7 @@ AmendmentSchema.methods = {
for(var i = 0; i < this.membersChanges.length; i++){
raw += this.membersChanges[i] + "\n";
}
return raw;
return raw.unix2dos();
},
loadFromFile: function(file, done) {
......
......@@ -17,15 +17,9 @@ var PublicKeySchema = new Schema({
PublicKeySchema.methods = {
construct: function(done) {
var obj = this;
jpgp().certificate(obj.raw).parse(function (err, stdout, stderr) {
if(stderr)
sys.print('stderr: \n' + stderr);
if (err !== null) {
console.log('exec error: ' + err);
}
var k = JSON.parse(stdout).data;
var k = jpgp().certificate(obj.raw);
obj.fingerprint = k.fingerprint;
var uid = k.uids[0].uid;
var uid = k.uids[0];
var extract = uid.match(/([\s\S]*) \(([\s\S]*)\) <([\s\S]*)>/);
if(extract && extract.length === 4){
obj.name = extract[1];
......@@ -40,8 +34,7 @@ PublicKeySchema.methods = {
obj.email = extract[2];
}
}
done(err);
});
done();
}
};
......
......@@ -7,9 +7,6 @@
"test": "test"
},
"scripts": {
"preupdate": "sh scripts/preupdate/jpgp jpgp-0.0.2-SNAPSHOT.jar",
"preinstall": "sh scripts/preinstall/jpgp jpgp-0.0.2-SNAPSHOT.jar",
"pretest": "sh scripts/preinstall/jpgp jpgp-0.0.2-SNAPSHOT.jar",
"test": "mocha test/*.js",
"start": "bin/nodecoin"
},
......
#!/bin/bash
# Checkout jpgp (Java module for PGP) from SCM, compiles it, and copies it to bin/ folder.
jar=$1
echo "jpgp - preinstall ($jar)"
jpgp_folder="mvn-jpgp"
if [ ! -e "bin/$jar" ]; then
rm -Rf "$jpgp_folder"
git clone --branch=master http://github.com/c-geek/jpgp.git "$jpgp_folder"
cd "$jpgp_folder"
mvn clean package
cp -v "target/$jar" "../bin/"
cd ../
rm -Rf "$jpgp_folder"
fi
\ No newline at end of file
#!/bin/bash
jar=$1
echo "jpgp - preupdate ($jar)"
if [ -e bin/$jar ]; then
rm "../bin/$jar"
fi
sh preinstall/jpgp $jar
\ No newline at end of file
......@@ -70,9 +70,9 @@ describe('Amendment', function(){
assert.equal(newVoters[2], "C73882B64B7E72237A2F460CE9CAB76D19A8651E");
});
it('its hash should be 6F4ACBC7A25A0AAB9B58778EAD5A297EF3E51D00', function(){
assert.equal(amTest.hash, '6F4ACBC7A25A0AAB9B58778EAD5A297EF3E51D00');
assert.equal(sha1(amTest.getRaw()).toUpperCase(), '6F4ACBC7A25A0AAB9B58778EAD5A297EF3E51D00');
it('its hash should be EE6046B38C5B496F2C3A96FBE2C28A29AE49CD9F', function(){
assert.equal(amTest.hash, 'EE6046B38C5B496F2C3A96FBE2C28A29AE49CD9F');
assert.equal(sha1(amTest.getRaw()).toUpperCase(), 'EE6046B38C5B496F2C3A96FBE2C28A29AE49CD9F');
});
});
......@@ -104,8 +104,8 @@ describe('Amendment', function(){
should.not.exist(amTest.coinMinPower);
});
it('should have 6F4ACBC7A25A0AAB9B58778EAD5A297EF3E51D00 previous hash', function(){
assert.equal(amTest.previousHash, '6F4ACBC7A25A0AAB9B58778EAD5A297EF3E51D00');
it('should have EE6046B38C5B496F2C3A96FBE2C28A29AE49CD9F previous hash', function(){
assert.equal(amTest.previousHash, 'EE6046B38C5B496F2C3A96FBE2C28A29AE49CD9F');
});
it('should have 0 new members', function(){
......@@ -119,6 +119,14 @@ describe('Amendment', function(){
assert.equal(newVoters.length, 0);
assert.equal(amTest.votersCount, 3);
});
it('its -self-computed- hash should be 0F45DFDA214005250D4D2CBE4C7B91E60227B0E5', function(){
assert.equal(amTest.hash, '0F45DFDA214005250D4D2CBE4C7B91E60227B0E5');
});
it('its -manually-computed- should be 0F45DFDA214005250D4D2CBE4C7B91E60227B0E5', function(){
assert.equal(sha1(amTest.getRaw()).toUpperCase(), '0F45DFDA214005250D4D2CBE4C7B91E60227B0E5');
});
});
describe('2 of beta_brousouf currency', function(){
......@@ -149,8 +157,8 @@ describe('Amendment', function(){
assert.equal(amTest.coinMinPower, 0);
});
it('should have 3E6EDD8CF1391AFADB3E3619B3A131E9300B963F previous hash', function(){
assert.equal(amTest.previousHash, '3E6EDD8CF1391AFADB3E3619B3A131E9300B963F');
it('should have 0F45DFDA214005250D4D2CBE4C7B91E60227B0E5 previous hash', function(){
assert.equal(amTest.previousHash, '0F45DFDA214005250D4D2CBE4C7B91E60227B0E5');
});
it('should have F92B6F81C85200250EE51783F5F9F6ACA57A9AFF members hash', function(){
......@@ -179,6 +187,14 @@ describe('Amendment', function(){
assert.equal(leavingVoters.length, 1);
assert.equal(amTest.votersCount, 2);
});
it('its -self-computed- hash should be 8E825DA77C1C2A7C655132C04389DF5411601923', function(){
assert.equal(amTest.hash, '8E825DA77C1C2A7C655132C04389DF5411601923');
});
it('its -manually-computed- should be 8E825DA77C1C2A7C655132C04389DF5411601923', function(){
assert.equal(sha1(amTest.getRaw()).toUpperCase(), '8E825DA77C1C2A7C655132C04389DF5411601923');
});
});
describe('2 (WRONG-UD ONE) of beta_brousouf currency', function(){
......
Version: 1
Currency: beta_brousouf
Number: 1
PreviousHash: 6F4ACBC7A25A0AAB9B58778EAD5A297EF3E51D00
PreviousHash: EE6046B38C5B496F2C3A96FBE2C28A29AE49CD9F
VotersRoot: F5ACFD67FC908D28C0CFDAD886249AC260515C90
VotersCount: 3
VotersChanges:
......
Version: 1
Currency: beta_brousouf
Number: 2
PreviousHash: 3E6EDD8CF1391AFADB3E3619B3A131E9300B963F
PreviousHash: 0F45DFDA214005250D4D2CBE4C7B91E60227B0E5
UniversalDividend: 100
CoinMinimalPower: 0
VotersRoot: DC7A9229DFDABFB9769789B7BFAE08048BCB856F
......
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.12 (GNU/Linux)
owGbwMvMwMG4aNqZYEa1z0WMaxkfJnE6Oek6+hro+nsHvv7WF5ZaVJyZn2elYMjl
XFpUlJqXXGmlkJRakhifVJRfWpxfmsblV5qblFpkpWDAFZZfAlQelJ9fYqXgZuro
7OZiZu7mbGlg4WJk4WwA5Dq6WFiYGZlYOjobmRmYGpoC5aCanPNL84C6jGHcjMS8
9NRiKy5tI1czS0NLczdHJwMjSxcLMzNLVzcLU1cLIxNTc0dDUwtzZ0cDVxdLZy5t
Y2MnJzegNWbmBuYWLuZGjm6GRhZOpk6ORpZmzs6mxgaGRmZuxuZGXNrO5sYWFkZO
ZiZO5q7mRkbG5o5GbiZmBs6uls6OTuZmLoaWjhZmpoauXL6pIK+R6iOoLriXYPzB
4adOxjksDIwcDGysTKAIZuDiFIDFv7EYD8PyrBeLN2lsW7E17u6StxOqnu6q1u+O
Kyq+vfSL8MWtgnt1/oUZ3Ltr3p5qwTzHvzB54aRLDXxLW0N/OIY6X7ij+Dz5ybyp
XIJfAhiYnhUe9vvFlzX5ohrf069fq8Ju3NycY7Rmqazjys12AaXXOYQEPtUb7Oeq
d8gLDjv65wXv7g7Z8ArLhMq9u5vquFJznda+9Lc9oaf1t/abXQBfl5iiWpCrr4n7
rqDjxx/MXF8fu9e24dd2u/NMNbVTb/E4L2nSkYz4vusVe+obWa8Tq26+KfjoEy6d
snu5rXLbbAPjt/lHuFu/Nh29szljVa8KJ4eUtfy9lUZWoYU/N72riv0y6+a1D44K
HqwN/qc13OvUo05e9WCymrG8tPFQ64Y2qzM+odoxk3boi9saHevbWSYw0cfqgvO2
u+xzS6xE2h4Jnzw3Z09AHINHS/fCQk31vZd6ip/tN9XKL+Sp2yp+pWjev7as2b28
s4XbD+h2t+fXZz+1fbK+4zEzS2i/XXWs01kfYcOzNgv+Xgi4ulJAY3OxbuFxAA==
=86x1
owGbwMvMwMG4aNqZYEa1z0WMaxk/JHE6Oek6+hro+nsH/oyRDkstKs7Mz7NSMOTl
ci4tKkrNS660UkhKLUmMTyrKLy3OL03j5fIrzU1KLbJSMODlCssvAeoIys8vsVJw
M3V0dnMxM3dztjSwcDGycDYAch1dLCzMjEwsHZ2NzAxMDU2BcjBdzvmleUBtxnB+
RmJeemqxFS+XtpGrmaWhpbmbo5OBkaWLhZmZpaubhamrhZGJqbmjoamFubOjgauL
pTNQqbGxk5Mb0CozcwNzCxdzI0c3QyMLJ1MnRyNLM2dnU2MDQyMzN2NzI6BSZ3Nj
CwsjJzMTJ3NXcyMjY3NHIzcTMwNnV0tnRydzMxdDS0cLM1NDV14u31SQD0n2F1Qb
wmMwgcHjs07GOSwMjBwMbKxMoPhm4OIUgCWHBCfu/wEzuKQnFh7RqTczNUmb3zz3
w5LK57cddh7aneC3cd00a2srFhVnn4ZXmtV/Y8TUhWU+fk2ZwOYl8rqmQNpVY/nv
gLTYtHVPJz3qVGYzeiv+1/Kk2pVu/qJ+i+5SLo0TWXwnl+vZKbWKh6e1fZmn/5NB
q954RyCbRb387wXm3xzyV1v7LTCq+nTN6Kv8yo+3z3HLXJbhdvt4ps7l+sumvtVV
VydlzF+wLDytYPKBSVYHOhj75gjF2k5RPamzX89iVWPgs5SetxcllR1DEqbtvnjj
n2VsvKml7vOAKS3T2zckdccuYj/KbcBWcSF1g9yTx5eTN/75kSZl47jLx+yvcGdO
XOokoezP5Z+cOo+95tOqNrozqcTG7/aLpq755cENsV/kymsmWudrRLVfZL3NLV/q
kfNEgk3kkmL2pZpZXX6P2lQPs+/i0Ndb90zxzb7+253Zd+I4krepvg2ceStylZDk
hAt+cjd2TGnYkLNxRqRiFNd3puUCr/VZXW+XuW+rWtpm2v19j5am2+o8m+lbtE5E
rAYA
=yzLT
-----END PGP MESSAGE-----
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.12 (GNU/Linux)
owGbwMvMwMH48tT2XMkVqXKMaxkfJnE6Oek6+hro+nsHvv56PSy1qDgzP89KwZDL
ubSoKDUvudJKISm1JDE+qSi/tDi/NI3LrzQ3KbXISsGAKyy/BKg8KD+/xErBzdTR
2c3FzNzN2dLAwsXIwtkAyHV0sbAwMzKxdHQ2MjMwNTQFykE1OeeX5gF1GcO4GYl5
6anFVlzaRq5mloaW5m6OTgZGli4WZmaWrm4Wpq4WRiam5o6Gphbmzo4Gri6Wzlza
xsZOTm5Aa8zMDcwtXMyNHN0MjSycTJ0cjSzNnJ1NjQ0MjczcjM2NuLSdzY0tLIyc
zEyczF3NjYyMzR2N3EzMDJxdLZ0dnczNXAwtHS3MTA1duXxTQV4j1UdQXXAvwfiD
w0+djDIsDIwcDGysTKAIZuDiFIDF//fH7H84StbesVm2OsWg9rLzE06eWlmWfysu
buyce1l/1ct7i5aciH728kixYkHNCs1t+znO3zdaJqL1i2dv8qeixOPBZ/JuCzR3
rTR9bxYkvFctyevUKbmlnqmbcvhZEssS/OTKo784zBfM2jw1nMnxnI6BgNfkuMRz
fy8pCFcLL4ubZ6x/+07Nx2Y5tUMMm34+EdR70d90SYxv1bG5zBERkz3c7DvNr9Q/
23xxuaqB44Oc3/kFwcGFC2rXl6c9t+l69Sbn+5SrkV4yyv/uHZ+7L8diZ8evf28W
zWWv3rv719w5qf9nqX2UFfl7qjTx8DnO74nmzIy8s8Un6s49kcMt+/2v+t3TE2JW
XfQ2WLs/68xxAA==
=oZ2h
owGbwMvMwMH48tT2XMkVqXKMaxk/JHE6Oek6+hro+nsH/rSSCEstKs7Mz7NSMOTl
ci4tKkrNS660UkhKLUmMTyrKLy3OL03j5fIrzU1KLbJSMODlCssvAeoIys8vsVJw
M3V0dnMxM3dztjSwcDGycDYAch1dLCzMjEwsHZ2NzAxMDU2BcjBdzvmleUBtxnB+
RmJeemqxFS+XtpGrmaWhpbmbo5OBkaWLhZmZpaubhamrhZGJqbmjoamFubOjgauL
pTNQqbGxk5Mb0CozcwNzCxdzI0c3QyMLJ1MnRyNLM2dnU2MDQyMzN2NzI6BSZ3Nj
CwsjJzMTJ3NXcyMjY3NHIzcTMwNnV0tnRydzMxdDS0cLM1NDV14u31SQD0n2F1Qb
wmMwgcHjs05GGRYGRg4GNlYmUHwzcHEKwJLDnXfs/32Wnbh/J7PpxLatBnsn2k0R
u2BxhHHqxtQ1W4K3pOZ9E+NzzGTJmCQ4ZdupC+t4ulKeL+XdXfhnya+Pxtaz/h7Z
57/nU1gmj7FZo29EeFHbrFtulrtvV53WnNkY/eniDddwG42VwsWrYrdYBvhN4Q+7
IaGQ0tiRkb20+fODu56pG6Rk9lofPSuSZtUqkXF+66Mnf3+wfub3jdTp/Ph6HscP
75cx2pdyjR69iv3HefLY/7vtjyJfbD2y1LjIpOhM3PJKo+bI6ujdVnN5RCx3JN57
pCady7rGstjowtT01ezBi102mCUmqu96lN+0c05H7kyNX7PPfn/Ik1jOuf7Qz32N
4ldvbbc5f+u3ZuTNyQcB
=Oc3A
-----END PGP MESSAGE-----
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.12 (GNU/Linux)
owGbwMvMwMGoEr4wombB2zmMaxkfJnE6Oek6+hro+nsHvv5+PSy1qDgzP89KwZDL
ubSoKDUvudJKISm1JDE+qSi/tDi/NI3LrzQ3KbXISsGAKyy/BKg8KD+/xErBzdTR
2c3FzNzN2dLAwsXIwtkAyHV0sbAwMzKxdHQ2MjMwNTQFykE1OeeX5gF1GcO4GYl5
6anFVlzaRq5mloaW5m6OTgZGli4WZmaWrm4Wpq4WRiam5o6Gphbmzo4Gri6Wzlza
xsZOTm5Aa8zMDcwtXMyNHN0MjSycTJ0cjSzNnJ1NjQ0MjczcjM2NuLSdzY0tLIyc
zEyczF3NjYyMzR2N3EzMDJxdLZ0dnczNXAwtHS3MTA1duXxTQV4j1UdQXXAvwfiD
w0+djDIsDIwcDGysTKAIZuDiFIDFP2sM+1/BB9HWEv3rVe88z9y13SRY1M7BV/+m
buGv9SYb0tw5jE5EfX95QGEvn9yW6WbPDHgPb2F/wnaDu/hlhdtB1mDGhqK6FxWy
cVUPX4qECyWd3z3xFS+Lx/WPtvO/9k1qiHBcYfnlckPMepbkT2/a3049+TT1pNla
sRlMC2Z+eMLQuq2iNb4kmDH534er1X3z907ZVf7d6uw3/rqHz/dFxK/h1L6Sce8T
t/609duXxaoHcWReW1BXOe1qoMzWx+ydRdMPMP/S7X640GfZ1asT29MCd2r/UlzY
fL/wy5LtF6qX2y4U6VqlfGlPEE9iaaieZdCtqN8KFQpXIxfrVEfxVWqz6k+Z9iH/
0OSQ40k/FFYDAA==
=58Ho
owGbwMvMwMGoEr4wombB2zmMaxk/JHE6Oek6+hro+nsH/oxJCEstKs7Mz7NSMOTl
ci4tKkrNS660UkhKLUmMTyrKLy3OL03j5fIrzU1KLbJSMODlCssvAeoIys8vsVJw
M3V0dnMxM3dztjSwcDGycDYAch1dLCzMjEwsHZ2NzAxMDU2BcjBdzvmleUBtxnB+
RmJeemqxFS+XtpGrmaWhpbmbo5OBkaWLhZmZpaubhamrhZGJqbmjoamFubOjgauL
pTNQqbGxk5Mb0CozcwNzCxdzI0c3QyMLJ1MnRyNLM2dnU2MDQyMzN2NzI6BSZ3Nj
CwsjJzMTJ3NXcyMjY3NHIzcTMwNnV0tnRydzMxdDS0cLM1NDV14u31SQD0n2F1Qb
wmMwgcHjs05GGRYGRg4GNlYmUHwzcHEKwJKD6TH2fxp1QtxzMq5vaZH/2b+wfFLh
3A3FzVtqvuhfZRBbePV8/IS/T3Xmdp68/lRj+avg5Fm3+h/+udk+/V+L7HqHyFB/
Oac/93KaF8Zl/yic1B1QyHOXW+foVDfJ6m9mqw0Osz3Ya/l+1i8PjdBvDW95Nh0R
yDkSPG29rfk7lWRLXp5DX9pl6mpD2btOiq+86D1to9mWaXobrhxl2/47g1v+xJ6r
B6ZMsHTe5qj/LIidc0kg75VS243XPxZ7Wi7ZnX2pYtVp2fDup4qN5WwNwQeeFzxX
W7QyzLo9sm2l7O+EM3paVoEm+TfOSvYcFVVtXWLxQTh3wsSOddzbzzt/4mFlNGNK
lPcOPf729d8+nc29ygA=
=sccu
-----END PGP MESSAGE-----
......@@ -73,7 +73,7 @@ describe('Votes for', function(){
(tests.tobi.verified).should.be.ok;
});
it('non-legit CAT vote should be verified', function(){
it('non-legit CAT vote should not be verified', function(){
(tests.cat2.verified).should.not.be.ok;
});
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment