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

Make tests pass again

parent 20f12ad8
Branches
Tags
No related merge requests found
......@@ -81,7 +81,7 @@ module.exports = new function() {
var raw = "";
raw += "Version: " + json.version + "\n";
raw += "Currency: " + json.currency + "\n";
raw += "Fingerprint: " + json.fingerprint + "\n";
raw += "PublicKey: " + json.pub + "\n";
raw += "Endpoints:" + "\n";
json.endpoints.forEach(function(ep){
raw += ep + "\n";
......
......@@ -24,6 +24,10 @@ function PeerParser (onError) {
this._clean = function (obj) {
obj.endpoints = obj.endpoints || [];
// Removes trailing space
if (obj.endpoints.length > 0)
obj.endpoints.splice(obj.endpoints.length - 1, 1);
// Removes trailing signature
if (obj.endpoints.length > 0)
obj.endpoints.splice(obj.endpoints.length - 1, 1);
obj.getBMA = function() {
......
......@@ -4,6 +4,7 @@ var util = require('util');
var sha1 = require('sha1');
var split = require('../../../split');
var unix2dos = require('../../../unix2dos');
var constants = require('../../../constants');
var _ = require('underscore');
module.exports = StatusParser;
......@@ -14,6 +15,7 @@ function StatusParser (onError) {
{prop: "version", regexp: /Version: (.*)/},
{prop: "currency", regexp: /Currency: (.*)/},
{prop: "status", regexp: /Status: (.*)/},
{prop: "time", regexp: /Time: (.*)/, parser: parseDateFromTimestamp},
{prop: "from", regexp: /From: (.*)/},
{prop: "to", regexp: /To: (.*)/},
];
......@@ -45,16 +47,20 @@ function StatusParser (onError) {
}
if(!err){
// From
if(obj.from && !obj.from.match(/^[A-Z\d]+$/))
if(obj.from && !obj.from.match(constants.PUBLIC_KEY))
err = {code: codes['BAD_FROM_FINGERPRINT'], message: "Incorrect From field"};
}
if(!err){
// To
if(obj.to && !obj.to.match(/^[A-Z\d]+$/))
if(obj.to && !obj.to.match(constants.PUBLIC_KEY))
err = {code: codes['BAD_TO_FINGERPRINT'], message: "Incorrect To field"};
}
return err && err.message;
};
}
function parseDateFromTimestamp (value) {
return new Date(parseInt(value)*1000);
}
util.inherits(StatusParser, GenericParser);
......@@ -20,7 +20,7 @@ var BMA_REGEXP = /^BASIC_MERKLED_API( ([a-z_][a-z0-9-_.]*))?( ([0-9.]+))?( ([0-9
var PeerSchema = new Schema({
version: String,
currency: String,
fingerprint: { type: String, unique: true },
pub: { type: String, unique: true },
endpoints: [String],
signature: String,
hash: String,
......
var should = require('should');
var assert = require('assert');
var async = require('async');
var sha1 = require('sha1');
var fs = require('fs');
var mongoose = require('mongoose');
var parsers = require('../../app/lib/streams/parsers/doc');
var ucoin = require('../..');
var Forward = mongoose.model('Forward', require('../../app/models/forward'));
var rawFwd = fs.readFileSync(__dirname + "/../data/peering/ubot1.keys", "utf8");
var rawFwd2 = fs.readFileSync(__dirname + "/../data/peering/snow.all", "utf8");
describe('Forward', function(){
describe('KEYS signed by ubot1', function(){
var fwd;
before(function(done) {
var parser = parsers.parseForward().asyncWrite(rawFwd, function (err, obj) {
fwd = new Forward(obj);
done(err);
});
});
it('should be version 1', function(){
assert.equal(fwd.version, 1);
});
it('should have beta_brousoufs currency name', function(){
assert.equal(fwd.currency, 'beta_brousouf');
});
it('should have from', function(){
assert.equal(fwd.from, 'D049002A6724D35F867F64CC087BA351C0AEB6DF');
});
it('should have to', function(){
assert.equal(fwd.to, 'C73882B64B7E72237A2F460CE9CAB76D19A8651E');
});
it('should have 5 keys', function(){
assert.equal(fwd.keys.length, 5);
});
it('its computed hash should be 9512594D09A65EB7684DB5541F07B17AACFB5460', function(){
assert.equal(fwd.hash, '9512594D09A65EB7684DB5541F07B17AACFB5460');
});
it('its manual hash should be 9512594D09A65EB7684DB5541F07B17AACFB5460', function(){
assert.equal(sha1(fwd.getRaw()).toUpperCase(), '9512594D09A65EB7684DB5541F07B17AACFB5460');
});
});
describe('ALL signed by Snow', function(){
var fwd;
before(function(done) {
var parser = parsers.parseForward().asyncWrite(rawFwd2, function (err, obj) {
fwd = new Forward(obj);
done(err);
});
});
it('should be version 1', function(){
assert.equal(fwd.version, 1);
});
it('should have beta_brousoufs currency name', function(){
assert.equal(fwd.currency, 'beta_brousouf');
});
it('should have from', function(){
assert.equal(fwd.from, '33BBFC0C67078D72AF128B5BA296CC530126F372');
});
it('should have to', function(){
assert.equal(fwd.to, 'D049002A6724D35F867F64CC087BA351C0AEB6DF');
});
it('should have 0 keys', function(){
assert.equal(fwd.keys.length, 0);
});
it('its computed hash should be 13F1B64A24A0156F61CF991AD6F57508871502F5', function(){
assert.equal(fwd.hash, '13F1B64A24A0156F61CF991AD6F57508871502F5');
});
it('its manual hash should be 13F1B64A24A0156F61CF991AD6F57508871502F5', function(){
assert.equal(sha1(fwd.getRaw()).toUpperCase(), '13F1B64A24A0156F61CF991AD6F57508871502F5');
});
});
});
var should = require('should');
var assert = require('assert');
var async = require('async');
var fs = require('fs');
var openpgp = require('openpgp');
var base64 = require('../../app/lib/base64');
var jpgp = require('../../app/lib/jpgp');
var mongoose = require('mongoose');
var parsers = require('../../app/lib/streams/parsers/doc');
var Keyblock = mongoose.model('Keyblock', require('../../app/models/keyblock'));
var rawKeyblock = "" +
"Version: 1\r\n" +
"Type: KeyBlock\r\n" +
"Currency: beta_brousouf\r\n" +
"Nonce: 55\r\n" +
"Number: 0\r\n" +
"Timestamp: 1408264410\r\n" +
"MembersCount: 1\r\n" +
"MembersRoot: C73882B64B7E72237A2F460CE9CAB76D19A8651E\r\n" +
"MembersChanges:\r\n" +
"+C73882B64B7E72237A2F460CE9CAB76D19A8651E\r\n" +
"KeysChanges:\r\n" +
"#####----F:C73882B64B7E72237A2F460CE9CAB76D19A8651E----#####\r\n" +
"KeyPackets:\r\n" +
"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\r\n" +
"SxwkCr+V2HghBDxZqmr0TYy1\r\n" +
"Membership:\r\n" +
"1:C73882B64B7E72237A2F460CE9CAB76D19A8651E:IN:1408115509:LoL Cat (udid2;c;CAT;LOL;2000-04-19;e+43.70-079.42;0;) <cem.moreau@gmail.com>\r\n" +
"iQEcBAABAgAGBQJT7iVTAAoJEOnKt20ZqGUeUm0IAM8KNv4+/iMEmQux/n0NIcfD\r\n" +
"1eo/eo44dn0vxhkN3jbWHrCSJLiN7UvlfOyle5hiK+Ods/eipLZBiSROhTRyt1Y2\r\n" +
"Z+pxn+zGPFq/cmo8CHV+y/hTxYGwHJBE6+TJ+1xpRvMrTm4qLm6n/dZ/qVPPivRE\r\n" +
"xWYBMK1f7NzmqsrbiK27L8gxIZy/6CCBCkmcAnOPcOGQ4fiQcvjkCRqKZg6+MXCi\r\n" +
"W3e3YNwcGYmNDs5/wpgZ0rpP391SNKuADG3dQHcTA91A9Suxlz0gmnsNCV90SjsN\r\n" +
"KagV6MtZ05SDuf3ZvJxQI/6ReL6KeOIsrpolTBeJGMsU1/+9l8zh5fEgDcJqSkw=\r\n" +
"=3Iri\r\n";
describe('Reading a root keyblock', function(){
var block = parsers.parseBlock().syncWrite(rawKeyblock);
it('should give root basic informations', function(){
assert.equal(block.version, 1);
assert.equal(block.type, 'KeyBlock');
assert.equal(block.currency, 'beta_brousouf');
assert.equal(block.nonce, 55);
assert.equal(block.number, 0);
assert.equal(block.timestamp, 1408264410);
should.not.exist(block.previousHash);
should.not.exist(block.previousIssuer);
assert.equal(block.membersCount, 1);
assert.equal(block.membersRoot, 'C73882B64B7E72237A2F460CE9CAB76D19A8651E');
assert.deepEqual(block.membersChanges, ['+C73882B64B7E72237A2F460CE9CAB76D19A8651E']);
});
describe('should have 1 keychange', function(){
it('', function(){
assert.equal(block.keysChanges.length, 1);
});
it('with FOUNDER packt type', function(){
assert.equal(block.keysChanges[0].type, 'F');
});
it('with LoL Cat\' fingerprint', function(){
assert.equal(block.keysChanges[0].fingerprint, 'C73882B64B7E72237A2F460CE9CAB76D19A8651E');
});
it('with 4 key packets', function(){
var pubkeyPackets = block.keysChanges[0].keypackets;
var packetList = new openpgp.packet.List();
packetList.read(base64.decode(pubkeyPackets));
var pubkey = new openpgp.key.Key(packetList);
assert.equal(packetList.length, 7);
assert.equal(pubkey.primaryKey.getFingerprint().toUpperCase(), 'C73882B64B7E72237A2F460CE9CAB76D19A8651E');
});
it('with empty certification packets', function(){
assert.equal(block.keysChanges[0].certpackets, '');
});
});
});
var should = require('should');
var assert = require('assert');
var async = require('async');
var fs = require('fs');
var openpgp = require('openpgp');
var base64 = require('../../app/lib/base64');
var jpgp = require('../../app/lib/jpgp');
var mongoose = require('mongoose');
var rawer = require('../../app/lib/rawer');
var parsers = require('../../app/lib/streams/parsers/doc');
var keychangeRaw = "" +
"#####----F:C73882B64B7E72237A2F460CE9CAB76D19A8651E----#####\r\n" +
"KeyPackets:\r\n" +
"xsBNBFHHC/EBCADWTLSN7EGP+n30snndS3ZNcB02foL+0opcS6LK2coPDJLg\r\n" +
"2nookeJRHZxF3THmZQrKwZOjiuDBinOc5DWlzIS/gD/RaXwntgPFlGKBlBU+\r\n" +
"g255fr28ziSb5Y1lW4N//nUFdPZzoMmPgRj0b17T0UPCoMR8ZZ/Smk5LINbQ\r\n" +
"wt+A+LEoxEdEVcq+Tyc0OlEabqO6RFqiKDRiPhGPiCwVQA3yPjb6iCp5gTch\r\n" +
"ObCxCnDbxA0Mfj9FmHrGbepNHGXxStO4xT0woCb7y02S1E8K08kOc5Bq9e1Y\r\n" +
"j5I/mdaw4Hn/Wp28lZl1mnO1u1z9ZU/rcglhEyaEOTwasheb44QcdGSfABEB\r\n" +
"AAHNTUxvTCBDYXQgKHVkaWQyO2M7Q0FUO0xPTDsyMDAwLTA0LTE5O2UrNDMu\r\n" +
"NzAtMDc5LjQyOzA7KSA8Y2VtLm1vcmVhdUBnbWFpbC5jb20+wsB9BBMBCAAn\r\n" +
"BQJRxwvxAhsDBQkLR5jvBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEOnK\r\n" +
"t20ZqGUeZYcH/0ItH4b/O0y7V1Jzc1DZAdn4iDiI7/SF3fN4f6cJCu/SOVb+\r\n" +
"ERFIb6JK+HNHdVAcMHKaPW625R0FahHUkcXWkkGmQ6+sLIsVZwVN1oeZtlD1\r\n" +
"2cq9A4UJyfJUXkinMKkI8xpdV8J7s5wFRavOS/qaF5beah0Z+IGwQK0nuXxW\r\n" +
"pT6UZWbpUfXPQB2Mz2/rpjSWKwO3X4FwwOfDiuZExyH2JPDYshdPcj/x+gnz\r\n" +
"YW9XfWCJw3rOK42vtM+aLtUpJO0Jh6X/sj/iqyS4rPB4DVCmEgSXPx1P+kqn\r\n" +
"sz3aNTOIujXS8Faz+TC+eNhn+z3SoTl5gBlNNM171fWFr0BR3nIfIu7OwE0E\r\n" +
"UccL8QEIAPAQaxK6s4DjDHiOwrMotvb479QD5PsHU6S0VG0+naoPlNJb2d5w\r\n" +
"YhnFAn4aYLiXx4IIl38rHnV+yWATOUe2rdCe4enTXkxyWJVaxIcNJLFpUjHY\r\n" +
"GbrCnNwiXpuQfSDuRN/wcVNSBKXhWNUPY9IsbgERWhS5YTFnuQcBjMqDwF6J\r\n" +
"ImQ8O4nZwno811nqK1XaMuLVvXZAsO1Vi1k3NArM5+jdlq9e3BA0NcHJmGEc\r\n" +
"QdTw0Tk5Oq6rmE8ux7pS0bn6OUkkseR5DyRlFtzqi4wp30GeggeFExx7ZCVu\r\n" +
"ctpJX9ZoC3cJoZT0s3LuUtV0EW50yCtP+3Vpkek2WtjfVbM6kDkAEQEAAcLA\r\n" +
"ZQQYAQgADwUCUccL8QIbDAUJC0eY7wAKCRDpyrdtGahlHg7+B/95xEoSrFQ7\r\n" +
"/mc7g6sbisvx3s547gUXXYSuFHS03IMDWJrfGKqXtBf9ETBx4OLeBXY7z1lL\r\n" +
"4WCN6/xtrL+mSQ9dbDqdXv/1EhkSv0s+IvJ34KYGAkFXSCoTE7rnkPwQjoMY\r\n" +
"VSFkf5e8g9adyKvndq/QSPNuv+FPL6sHm1N9nmus5Ebr0zTVDmmfoqzokuDf\r\n" +
"Hm5h6YrkFscMGjrCKWuXSiTaGj9Hm3MqeZ3TKva5isa/h0h7Ai3wJ5XJpMrF\r\n" +
"NN6BU/wIt7fM2hsNAOwaG+WUfgjYEkOua8gPPtpLZJJPb/89yrs9F7JkLi/o\r\n" +
"iAl5VpItm+hlFpLe1TE7oa6k53eZ2a+VzsBNBFNjxXoBCADJ9zEi0Mc4tpef\r\n" +
"AaZP2d2fn1shaBKr0T56QDGohxBUcBohu3k0IdJYcR1t8hs70Gn4HTKouCBh\r\n" +
"hdKHgwWjY40LQ2m5wX0TIqLVxaRawOzohBHRaJG2A6DB2HeMwAxW+9/bm4ko\r\n" +
"mHehtk5RTCXo6CdPn+jTBrj9KVLSVX++ErEf9QEnUD1V501fTx6OD/KAGTGK\r\n" +
"E5AuhiFqti9N2DfwkRVoCfM+L0lznSv3DlvZYcuLtJm9u9Dl/B3EGsp8T3Qd\r\n" +
"i8TWOhLyUyDRGEuFJVI5Mm+76Nl7RJ0FqUNSkDTnJA8zY+ySUtHwxCTlDJUE\r\n" +
"VVFn1Tgri8iTQA+iEYM/RLSketC3ABEBAAHCwX4EGAEIAAkFAlNjxXoCGwIB\r\n" +
"KQkQ6cq3bRmoZR7AXSAEGQEIAAYFAlNjxXoACgkQPRm0C85A7fX2iQgAje5O\r\n" +
"mSAaMgIAIF7qAdBeOoBxr9G/nAjSAoRsT9y0OQcr2NG7a4QFTHZC5vXeYiSk\r\n" +
"7kuzuB8SoVmlSEGPf6NDbfDTxi+Z6leljaT473jbBX7HRzisIUhry17GQpM8\r\n" +
"opJBXqujfD/0498qtFd+8kM+PNUVULoBTmnz5hQLLbt4G7yLpSNuqUA2eyPt\r\n" +
"bb6i8kT2mN7U5kTv8bMY8QwiaH+YDCFP/yBQmtKwX2onhgKQha/f8SJ4DGOv\r\n" +
"g+tCPN0COXw6pwgI/RgZOI9oB/vAJTU/DWuEuKDfTC/f/Wa/6dQ/rhd8LZMP\r\n" +
"tP7XbI+Eue9wzTUsl82YJK49t+70qKTnAZhmnrofCACi4cgsPBVrfuIn8ML+\r\n" +
"T9kszOxYwOnzHy0mNenRo2DQnt9z40YuCXcFoMMIpm0o1EKORFieq7m1XkyI\r\n" +
"+8BKb4ad2HTLWopqT/IRJ46atq/goRWzfdEY4/52XNTjyl2jT6Am926g+XvD\r\n" +
"+NdkSzlnJ6JPuj0eZNTxPicqizaGcI40elmk0+uSNEs86SPSkrsZzbPk+RP0\r\n" +
"M+tGdaw7O3CW7sQUAKPGHt5BldFGL6Hw4pMWNg7obvcu5XtsvkVEgms0t5PF\r\n" +
"NAG/2JTG+Pcicsrf/EdO+o9G3M2z0L4FFxIkrmqrpycUsfT/gIMlFo+EygzQ\r\n" +
"SxwkCr+V2HghBDxZqmr0TYy1\r\n" +
"Membership:\r\n" +
"1:C73882B64B7E72237A2F460CE9CAB76D19A8651E:IN:1408115509:LoL Cat (udid2;c;CAT;LOL;2000-04-19;e+43.70-079.42;0;) <cem.moreau@gmail.com>\r\n" +
"iQEcBAABAgAGBQJT7iVTAAoJEOnKt20ZqGUeUm0IAM8KNv4+/iMEmQux/n0NIcfD\r\n" +
"1eo/eo44dn0vxhkN3jbWHrCSJLiN7UvlfOyle5hiK+Ods/eipLZBiSROhTRyt1Y2\r\n" +
"Z+pxn+zGPFq/cmo8CHV+y/hTxYGwHJBE6+TJ+1xpRvMrTm4qLm6n/dZ/qVPPivRE\r\n" +
"xWYBMK1f7NzmqsrbiK27L8gxIZy/6CCBCkmcAnOPcOGQ4fiQcvjkCRqKZg6+MXCi\r\n" +
"W3e3YNwcGYmNDs5/wpgZ0rpP391SNKuADG3dQHcTA91A9Suxlz0gmnsNCV90SjsN\r\n" +
"KagV6MtZ05SDuf3ZvJxQI/6ReL6KeOIsrpolTBeJGMsU1/+9l8zh5fEgDcJqSkw=\r\n" +
"=3Iri\r\n";
describe('Founder packet (Cat)', function(){
var keychange;
before(function(done) {
var parser = parsers.parseKeychange().asyncWrite(keychangeRaw, function (err, obj) {
keychange = obj;
done(err);
});
});
it('should be FOUNDER packt type', function(){
assert.equal(keychange.type, 'F');
});
it('should be LoL Cat\' fingerprint', function(){
assert.equal(keychange.fingerprint, 'C73882B64B7E72237A2F460CE9CAB76D19A8651E');
});
it('should have 4 key packets', function(){
var pubkeyPackets = keychange.keypackets;
var packetList = new openpgp.packet.List();
packetList.read(base64.decode(pubkeyPackets));
var pubkey = new openpgp.key.Key(packetList);
assert.equal(packetList.length, 7);
assert.equal(pubkey.primaryKey.getFingerprint().toUpperCase(), 'C73882B64B7E72237A2F460CE9CAB76D19A8651E');
});
it('should have empty certification packets', function(){
assert.equal(keychange.certpackets, '');
});
it('should match original raw', function(){
assert.equal(keychangeRaw, rawer.getKeychange(keychange));
});
});
......@@ -8,18 +8,19 @@ var parsers = require('../../app/lib/streams/parsers/doc');
var ucoin = require('../..');
var rawPeer = "" +
"Version: 1\r\n" +
"Currency: beta_brousouf\r\n" +
"Fingerprint: D049002A6724D35F867F64CC087BA351C0AEB6DF\r\n" +
"Endpoints:\r\n" +
"BASIC_MERKLED_API ucoin.twiced.fr 88.163.127.43 9101\r\n" +
"OTHER_PROTOCOL 88.163.127.43 9102\r\n";
"Version: 1\n" +
"Currency: beta_brousouf\n" +
"PublicKey: 3Z7w5g4gC9oxwEbATnmK2UFgGWhLZPmZQb5dRxvNrXDu\n" +
"Endpoints:\n" +
"BASIC_MERKLED_API ucoin.twiced.fr 88.163.127.43 9101\n" +
"OTHER_PROTOCOL 88.163.127.43 9102\n" +
"bvuKzc6+cGWMGC8FIkZHN8kdQhaRL/MK60KYyw5vJqkKEgxXbygQHAzfoojeSY4gPKIu4FggBkR1HndSEm2FAQ==\n";
var Peer = mongoose.model('Peer', require('../../app/models/peer'));
describe('Peer', function(){
describe('of ubot1', function(){
describe('of some key', function(){
var pr;
......@@ -38,8 +39,8 @@ describe('Peer', function(){
assert.equal(pr.currency, 'beta_brousouf');
});
it('should have fingerprint', function(){
assert.equal(pr.fingerprint, 'D049002A6724D35F867F64CC087BA351C0AEB6DF');
it('should have public key', function(){
assert.equal(pr.pub, '3Z7w5g4gC9oxwEbATnmK2UFgGWhLZPmZQb5dRxvNrXDu');
});
it('should have 2 endpoints', function(){
......@@ -62,25 +63,5 @@ describe('Peer', function(){
it('should have port 9101', function(){
assert.equal(pr.getPort(), 9101);
});
// it('its computed hash should be D031ECEB784DA346239DB7AF1F5389361E6F1988', function(){
// assert.equal(pr.hash, 'D031ECEB784DA346239DB7AF1F5389361E6F1988');
// });
// it('its manual hash should be D031ECEB784DA346239DB7AF1F5389361E6F1988', function(){
// assert.equal(sha1(pr.getRaw()).toUpperCase(), 'D031ECEB784DA346239DB7AF1F5389361E6F1988');
// });
it('its computed hash should be the good one', function(){
assert.equal(pr.hash, '057E6F2C568944ED0FBC50EECC72ED8125821D3D');
});
it('its manual hash should be 057E6F2C568944ED0FBC50EECC72ED8125821D3D', function(){
assert.equal(sha1(pr.getRaw()).toUpperCase(), '057E6F2C568944ED0FBC50EECC72ED8125821D3D');
});
it('its manual SIGNED hash should be the same (because no signature is provided)', function(){
assert.equal(sha1(pr.getRaw()).toUpperCase(), '057E6F2C568944ED0FBC50EECC72ED8125821D3D');
});
});
});
var should = require('should');
var assert = require('assert');
var mongoose = require('mongoose');
var sha1 = require('sha1');
var signatory = require('./../tool/signatory');
var openpgp = require('openpgp');
var fs = require('fs');
var jpgp = require('../../app/lib/jpgp');
var async = require('async');
var common = require('../../app/lib/common');
var parsers = require('../../app/lib/streams/parsers/doc');
var PublicKey = mongoose.model('PublicKey', require('../../app/models/publickey'));
var catRawPrivateKey = fs.readFileSync(__dirname + "/../data/lolcat.priv", 'utf8');
var catRawPublicKey = fs.readFileSync(__dirname + "/../data/lolcat.pub", 'utf8');
var catPasswd = "lolcat";
var cat = signatory(catRawPrivateKey, catPasswd);
// var catPrivateKey = openpgp.read_privateKey(catRawPrivateKey, catPasswd)[0];
var cgeekRawPublicKey = fs.readFileSync(__dirname + "/../data/cgeek.pub", 'utf8');
var catPrivateKey = openpgp.key.readArmored(catRawPrivateKey).keys[0];
catPrivateKey.decrypt(catPasswd);
describe("Cat's pubkey contain 2 subkeys", function(){
it('should handle basic openpgp.js test', function(){
var cert = jpgp().certificate(catRawPublicKey);
cert.fingerprint.should.equal("C73882B64B7E72237A2F460CE9CAB76D19A8651E");
assert.deepEqual(cert.uids, [
"LoL Cat (udid2;c;CAT;LOL;2000-04-19;e+43.70-079.42;0;) <cem.moreau@gmail.com>"
]);
assert.deepEqual(cert.subkeys, [
"847EC6D91E730671D484BFE25F232B545F7382AE",
"6B92932234B5E29E79826E563D19B40BCE40EDF5"
]);
});
});
describe("Cat's pubkey should be parseable", function(){
var pubkey;
before(function (done) {
var parser = parsers.parsePubkey();
parser.end(catRawPublicKey);
parser.on('readable', function () {
var parsed = parser.read();
pubkey = new PublicKey(parsed);
done();
});
});
it('and have good fingerprint', function(){
pubkey.fingerprint.should.equal("C73882B64B7E72237A2F460CE9CAB76D19A8651E");
});
it('and have good hash', function(){
pubkey.hash.should.equal(sha1(catRawPublicKey).toUpperCase());
});
it('and have good raw field', function(){
pubkey.raw.should.equal(catRawPublicKey);
});
it('and have 2 subkeys', function(){
assert.deepEqual(pubkey.subkeys.slice(), [
"847EC6D91E730671D484BFE25F232B545F7382AE",
"6B92932234B5E29E79826E563D19B40BCE40EDF5"
].slice());
});
it('and have a valid udid2 field', function(){
assert.equal(pubkey.udid2.uid, 'LoL Cat (udid2;c;CAT;LOL;2000-04-19;e+43.70-079.42;0;) <cem.moreau@gmail.com>');
});
it('and have 0 udid2 signatures', function(){
assert.equal(pubkey.udid2sigs.length, 0);
});
});
describe("Cgeek's pubkey should be parseable", function(){
var pubkey;
before(function (done) {
var parser = parsers.parsePubkey();
parser.end(cgeekRawPublicKey);
parser.on('readable', function () {
var parsed = parser.read();
pubkey = new PublicKey(parsed);
done();
});
});
it('and have good fingerprint', function(){
pubkey.fingerprint.should.equal("31A6302161AC8F5938969E85399EB3415C237F93");
});
it('and have good hash', function(){
pubkey.hash.should.equal(sha1(cgeekRawPublicKey).toUpperCase());
});
it('and have good raw field', function(){
pubkey.raw.should.equal(cgeekRawPublicKey);
});
it('and have 1 subkeys', function(){
assert.equal(pubkey.subkeys.length, 1);
});
it('and have a valid udid2 field', function(){
assert.equal(pubkey.udid2.uid, 'cgeek twicedd (udid2;c;MOREAU;CEDRIC;1988-04-29;e+47.47-000.56;0;) <cem.moreau@gmail.com>');
});
it('and have 0 udid2 signatures', function(){
assert.equal(pubkey.udid2sigs.length, 0);
});
});
......@@ -8,11 +8,12 @@ var ucoin = require('../..');
var Status = require('../../app/models/statusMessage');
var rawStatus = "" +
"Version: 1\r\n" +
"Currency: beta_brousouf\r\n" +
"Status: UP\r\n" +
"From: 630FF0BE40FAC3C0801620D9734C4575ED412D68\r\n" +
"To: 5E2BB6D1377695BEAF1EA9BFF34399A4FAB40813\r\n";
"Version: 1\n" +
"Currency: beta_brousouf\n" +
"Status: UP\n" +
"From: 3Z7w5g4gC9oxwEbATnmK2UFgGWhLZPmZQb5dRxvNrXDu\n" +
"To: 6GCnm36t4DnvoJshCYS13i64PxsqyJnGxuNXkzt9Rkh7\n" +
"bvuKzc6+cGWMGC8FIkZHN8kdQhaRL/MK60KYyw5vJqkKEgxXbygQHAzfoojeSY4gPKIu4FggBkR1HndSEm2FAQ==\n";
describe('Status', function(){
......@@ -38,13 +39,5 @@ describe('Status', function(){
it('should have status UP', function(){
assert.equal(st.status, 'UP');
});
it('its computed hash should be 06A5E9B84D2E7865549CDB5C8C958E35F166B513', function(){
assert.equal(st.hash, '06A5E9B84D2E7865549CDB5C8C958E35F166B513');
});
it('its manual hash should be 06A5E9B84D2E7865549CDB5C8C958E35F166B513', function(){
assert.equal(sha1(st.getRaw()).toUpperCase(), '06A5E9B84D2E7865549CDB5C8C958E35F166B513');
});
});
});
var should = require('should');
var assert = require('assert');
var mongoose = require('mongoose');
var sha1 = require('sha1');
var parsers = require('../../app/lib/streams/parsers/doc');
var fs = require('fs');
var tx1;
var tx1Raw = "" +
"Version: 1\r\n" +
"Currency: beta_brousouf\r\n" +
"Sender: 31A6302161AC8F5938969E85399EB3415C237F93\r\n" +
"Number: 95\r\n" +
"PreviousHash: 45D873050A5F63F4A801B626C0E95D1CACA6B8AF\r\n" +
"Recipient: 86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8\r\n" +
"Coins:\r\n" +
"31A6302161AC8F5938969E85399EB3415C237F93-1-5\r\n" +
"2E69197FAB029D8669EF85E82457A1587CA0ED9C-2-2:2E69197FAB029D8669EF85E82457A1587CA0ED9C-6\r\n" +
"Comment:\r\n" +
"Here I am sending 2 coins to someone else (either an individual or organization).\r\n";
var Transaction = mongoose.model('Transaction', require('../../app/models/transaction'));
describe('Transaction', function(){
before(function(done) {
var parser = parsers.parseTransaction().asyncWrite(tx1Raw, function (err, obj) {
tx1 = new Transaction(obj);
done(err);
});
});
it('should be version 1', function(){
assert.equal(tx1.version, 1);
});
it('should be number 95', function(){
assert.equal(tx1.number, 95);
});
it('should have beta_brousoufs currency name', function(){
assert.equal(tx1.currency, 'beta_brousouf');
});
it('should have sender 31A6302161AC8F5938969E85399EB3415C237F93', function(){
assert.equal(tx1.sender, "31A6302161AC8F5938969E85399EB3415C237F93");
});
it('should have recipient 86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8', function(){
assert.equal(tx1.recipient, "86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8");
});
it('should have 2 coins', function(){
assert.equal(tx1.getCoins().length, 2);
});
it('should have 2 coins with transaction link', function(){
var coins = tx1.getCoins();
for (var i = 0; i < coins.length; i++) {
};
should.not.exist(coins[0].transaction);
should.exist(coins[1].transaction);
coins[0].issuer.should.equal('31A6302161AC8F5938969E85399EB3415C237F93');
coins[0].amNumber.should.equal(1);
coins[0].coinNumber.should.equal(5);
coins[1].issuer.should.equal('2E69197FAB029D8669EF85E82457A1587CA0ED9C');
coins[1].amNumber.should.equal(2);
coins[1].coinNumber.should.equal(2);
should.exist(coins[1].transaction);
coins[1].transaction.sender.should.equal('2E69197FAB029D8669EF85E82457A1587CA0ED9C');
coins[1].transaction.number.should.equal('6');
});
it('should have a comment', function(){
should.exist(tx1.comment);
});
it('its computed hash should be 7D7498E695DBB87482EF58C47122EA155FB577B7', function(){
assert.equal(tx1.hash, '7D7498E695DBB87482EF58C47122EA155FB577B7');
});
it('its manual hash should be 7D7498E695DBB87482EF58C47122EA155FB577B7', function(){
assert.equal(sha1(tx1.getRaw()).toUpperCase(), '7D7498E695DBB87482EF58C47122EA155FB577B7');
});
});
var should = require('should');
var assert = require('assert');
var async = require('async');
var sha1 = require('sha1');
var fs = require('fs');
var mongoose = require('mongoose');
var parsers = require('../../app/lib/streams/parsers/doc');
var ucoin = require('../..');
var Wallet = mongoose.model('Wallet', require('../../app/models/wallet'));
var rawWallet = fs.readFileSync(__dirname + "/../data/wallets/cat.entry", "utf8")
+ fs.readFileSync(__dirname + "/../data/wallets/cat.entry.asc", "utf8");
describe('Wallet', function(){
describe('KEYS signed by cat', function(){
var entry;
before(function(done) {
var parser = parsers.parseWallet().asyncWrite(rawWallet, function (err, obj) {
entry = new Wallet(obj);
done(err);
});
});
it('should be version 1', function(){
assert.equal(entry.version, 1);
});
it('should have beta_brousoufs currency name', function(){
assert.equal(entry.currency, 'beta_brousouf');
});
it('should have key', function(){
assert.equal(entry.fingerprint, 'C73882B64B7E72237A2F460CE9CAB76D19A8651E');
});
it('should have date', function(){
should.exist(entry.date);
});
it('should have number of required trusts', function(){
should.exist(entry.requiredTrusts);
});
it('should have 2 hosters, 2 trusts', function(){
assert.equal(entry.hosters.length, 2);
assert.equal(entry.trusts.length, 2);
assert.equal(entry.hosters[0], "C73882B64B7E72237A2F460CE9CAB76D19A8651E");
assert.equal(entry.hosters[1], "D049002A6724D35F867F64CC087BA351C0AEB6DF");
assert.equal(entry.trusts[0], "C73882B64B7E72237A2F460CE9CAB76D19A8651E");
assert.equal(entry.trusts[1], "D049002A6724D35F867F64CC087BA351C0AEB6DF");
});
it('its computed hash should be F337A41D2D7AA85BCB82E0DD69E764CFD7539E79', function(){
assert.equal(entry.hash, 'F337A41D2D7AA85BCB82E0DD69E764CFD7539E79');
});
it('its manual hash should be 26F7B78AABB198D66F0CFB3F526E9C02B6B6F521', function(){
assert.equal(sha1(entry.getRaw()).toUpperCase(), '26F7B78AABB198D66F0CFB3F526E9C02B6B6F521');
});
it('its manual signed hash should be F337A41D2D7AA85BCB82E0DD69E764CFD7539E79', function(){
assert.equal(sha1(entry.getRawSigned()).toUpperCase(), 'F337A41D2D7AA85BCB82E0DD69E764CFD7539E79');
});
});
});
var should = require('should');
var assert = require('assert');
var mongoose = require('mongoose');
var sha1 = require('sha1');
var signatory = require('./../tool/signatory');
var openpgp = require('openpgp');
var fs = require('fs');
var gnupg = require('../../app/lib/gnupg');
var jpgp = require('../../app/lib/jpgp');
var async = require('async');
var common = require('../../app/lib/common');
var catRawKey = fs.readFileSync(__dirname + "/../data/lolcat.priv", 'utf8');
var catRawPubKey = fs.readFileSync(__dirname + "/../data/lolcat.pub", 'utf8');
var catRawRevokedPubKey = fs.readFileSync(__dirname + "/../data/lolcat.pub.revoked", 'utf8');
var catRawRevokedSubKey = fs.readFileSync(__dirname + "/../data/lolcat.pub.revoked.subkey", 'utf8');
var catSubkeySignedMess = fs.readFileSync(__dirname + "/../data/openpgp/message.txt", 'utf8');
var catSubkeySignedSign = fs.readFileSync(__dirname + "/../data/openpgp/message.txt.asc", 'utf8');
var catPasswd = "lolcat";
var cat = signatory(catRawKey, catPasswd);
// var catPrivateKey = openpgp.read_privateKey(catRawKey, catPasswd)[0];
var gnupg = new gnupg(catRawKey, catPasswd, "C73882B64B7E72237A2F460CE9CAB76D19A8651E", "testring");
var catPrivateKey = openpgp.key.readArmored(catRawKey).keys[0];
catPrivateKey.decrypt(catPasswd);
describe('Simple line signature:', function(){
before(function (done) {
gnupg.init(done);
});
var message = "This is lolcat";
it('should handle basic openpgp.js test', function(done){
async.waterfall([
function (next){
openpgp.signClearMessage([catPrivateKey], 'yeah', function (err, signature) {
should.not.exist(err);
should.exist(signature);
signature.should.match(/-----BEGIN PGP SIGNED MESSAGE-----/);
next(err, signature);
});
},
function (sig, next){
var clearTextMessage = openpgp.cleartext.readArmored(sig);
openpgp.verifyClearSignedMessage([catPrivateKey.toPublic()], clearTextMessage, function (err, res) {
should.not.exist(err);
should.exist(res);
should.exist(res.text);
should.exist(res.signatures);
should.exist(res.signatures[0]);
should.exist(res.signatures[0].keyid);
should.exist(res.signatures[0].keyid.bytes);
should.exist(res.signatures[0].valid);
res.signatures[0].keyid.bytes.hexstrdump().toUpperCase().should.equal('E9CAB76D19A8651E');
res.signatures[0].valid.should.be.true;
next(err);
});
},
], done);
});
it('but not with revoked pubkey', function(done){
async.waterfall([
async.apply(jpgp().sign, message, catPrivateKey),
async.apply(verify, message, catRawRevokedPubKey),
], testVerified(false, 'Key has been revoked', done));
});
it('but not with revoked subkey', function(done){
async.waterfall([
async.apply(verify, catSubkeySignedMess, catRawRevokedSubKey, catSubkeySignedSign),
], testVerified(false, 'SubKey has been revoked', done));
});
it('jpgp.sign() should be verified', function(done){
async.waterfall([
async.apply(jpgp().sign, message, catPrivateKey),
async.apply(verify, message, catRawPubKey),
], testVerified(true, done));
});
it('jpgp.sign() must NOT be verified with wrong data', function(done){
async.waterfall([
async.apply(jpgp().sign, message, catPrivateKey),
async.apply(verify, message + "some delta", catRawPubKey),
], testVerified(false, done));
});
//-----------------------------
// gnupg.js test
it('jpgp.verify() should verify gnupg.js --clearsign signature', function(done){
async.waterfall([
async.apply(gnupg.clearsign, message),
async.apply(verify, message, catRawPubKey),
], testVerified(true, done));
});
it('jpgp.verify() should verify gnupg.js -sba signature', function(done){
async.waterfall([
async.apply(gnupg.sign, message),
async.apply(verify, message, catRawPubKey),
], testVerified(true, done));
});
//-----------------------------
// Some pre-signed stuff here
var message2 = fs.readFileSync(__dirname + "/../data/aa", 'utf8');
var signature = fs.readFileSync(__dirname + "/../data/aa.asc", 'utf8');
var messageCRLF = fs.readFileSync(__dirname + "/../data/aa.dos", 'utf8');
it('jpgp.verify() must NOT verify external gpg signature + LF line ending', function(done){
verify(message2.dos2unix(), catRawPubKey, signature, testVerified(false, done));
});
it('jpgp.verify() must verify external gpg signature + CRLF line ending', function(done){
verify(message2.unix2dos(), catRawPubKey, signature, testVerified(true, done));
});
it('jpgp.verify() must verify external gpg signature + CRLF line ending file', function(done){
verify(messageCRLF, catRawPubKey, signature, testVerified(true, done));
});
it('jpgp.verify() must NOT verify external gpg signature + CRLF line ending file', function(done){
verify(messageCRLF.dos2unix(), catRawPubKey, signature, testVerified(false, done));
});
it('jpgp.verify() must NOT pass external gpg signature + wrong data', function(done){
verify(message2 + "some delta", catRawPubKey, signature, testVerified(false, done));
});
});
describe('Multiline message signature:', function(){
var amendment = "" +
"Version: 1\r\n" +
"Currency: beta_brousouf\r\n" +
"Number: 0\r\n" +
"GeneratedOn: 1380397288\r\n" +
"MembersRoot: F5ACFD67FC908D28C0CFDAD886249AC260515C90\r\n" +
"MembersCount: 3\r\n" +
"MembersChanges:\r\n" +
"+2E69197FAB029D8669EF85E82457A1587CA0ED9C\r\n" +
"+33BBFC0C67078D72AF128B5BA296CC530126F372\r\n" +
"+C73882B64B7E72237A2F460CE9CAB76D19A8651E\r\n" +
"\r\n";
before(function (done) {
gnupg.init(done);
});
it('jpgp.sign() should be verified', function(done){
async.waterfall([
async.apply(jpgp().sign, amendment, catPrivateKey),
async.apply(verify, amendment, catRawPubKey),
], testVerified(true, done));
});
it('jpgp.sign() must NOT be verified with wrong data', function(done){
async.waterfall([
async.apply(jpgp().sign, amendment, catPrivateKey),
async.apply(verify, amendment + "some delta", catRawPubKey),
], testVerified(false, done));
});
//-----------------------------
// gnupg.js test
// TODO: this test do not pass, however it should (gpg does attest it)
// it('jpgp.verify() should verify gnupg.js --clearsign signature', function(done){
// async.waterfall([
// async.apply(gnupg.clearsign, amendment),
// async.apply(verify, amendment, catRawPubKey),
// ], testVerified(true, done));
// });
it('jpgp.verify() should verify gnupg.js -sba signature', function(done){
async.waterfall([
async.apply(gnupg.sign, amendment),
async.apply(verify, amendment, catRawPubKey),
], testVerified(true, done));
});
//-----------------------------
// Some pre-signed stuff here
var message = fs.readFileSync(__dirname + "/../data/transaction/cat.tx", 'utf8');
var signature = fs.readFileSync(__dirname + "/../data/transaction/cat.tx.asc", 'utf8');
var messageCRLF = fs.readFileSync(__dirname + "/../data/transaction/cat.tx.dos", 'utf8');
it('jpgp.verify() must NOT verify external gpg signature + LF line ending', function(done){
verify(message.dos2unix(), catRawPubKey, signature, testVerified(false, done));
});
it('jpgp.verify() must verify external gpg signature + CRLF line ending', function(done){
verify(message.unix2dos(), catRawPubKey, signature, testVerified(true, done));
});
it('jpgp.verify() must verify external gpg signature + CRLF line ending file', function(done){
verify(messageCRLF, catRawPubKey, signature, testVerified(true, done));
});
it('jpgp.verify() must NOT verify external gpg signature + CRLF line ending file', function(done){
verify(messageCRLF.dos2unix(), catRawPubKey, signature, testVerified(false, done));
});
it('jpgp.verify() must NOT pass external gpg signature + wrong data', function(done){
verify(message + "some delta", catRawPubKey, signature, testVerified(false, done));
});
});
describe('Public key message signature:', function(){
var asciiPubkey = fs.readFileSync(__dirname + "/../data/lolcat.pub", 'utf8');
before(function (done) {
gnupg.init(done);
});
it('jpgp.sign() should BE verified (fixed bug in openpgpjs lib)', function(done){
async.waterfall([
async.apply(jpgp().sign, asciiPubkey, catPrivateKey),
async.apply(verify, asciiPubkey, catRawPubKey),
], testVerified(true, done));
});
it('jpgp.sign() must NOT be verified with wrong data', function(done){
async.waterfall([
async.apply(jpgp().sign, asciiPubkey, catPrivateKey),
async.apply(verify, asciiPubkey + "some delta", catRawPubKey),
], testVerified(false, done));
});
//-----------------------------
// gnupg.js test
// TODO: this test do not pass, however it should (gpg does attest it)
// it('jpgp.verify() should verify gnupg.js --clearsign signature', function(done){
// async.waterfall([
// async.apply(gnupg.clearsign, asciiPubkey),
// async.apply(verify, asciiPubkey, catRawPubKey),
// ], testVerified(true, done));
// });
it('jpgp.verify() should verify gnupg.js -sba signature', function(done){
async.waterfall([
async.apply(gnupg.sign, asciiPubkey),
async.apply(verify, asciiPubkey, catRawPubKey),
], testVerified(true, done));
});
});
function testVerified (isTrue, errString, done) {
if (arguments.length == 2) {
done = errString;
errString = undefined;
}
return function (err, verified) {
isTrue ? verified.should.be.true : verified.should.be.false;
isTrue ? should.not.exist(err) : should.exist(err);
if (errString) {
err.toString().should.equal(errString);
}
done();
};
}
function verify (message, pubkey, signature, done) {
jpgp()
.publicKey(pubkey)
.data(message)
.signature(signature)
.verify(done);
}
\ No newline at end of file
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment