~ubuntu-branches/debian/sid/node-diffie-hellman/sid

1 by Bastien Roucariès
Import upstream version 5.0.2
1
var test = require('tape');
2
var nodeCrypto = require('./');
3
var myCrypto = require('./browser');
4
5
var mods = [
6
   'modp1', 'modp2', 'modp5', 'modp14', 'modp15', 'modp16', 'modp17', 'modp18'
7
];
8
function isNode10() {
9
  if (!process.version) {
10
    return false;
11
  }
12
  var split = process.version.split('.');
13
  if (split.length !== 3) {
14
    return false;
15
  }
16
  if (parseInt(split[1], 10) === 10 && split[0] === 'v0') {
17
    return true;
18
  }
19
  return false;
20
}
21
 var lens = [
22
  2, 8, 16, 17, 18, 20, 21, 22, 64, 65, 128, 384, 512, 1024,
23
  192, 224, 256];
24
   var lens2 = [
25
  16, 17, 18, 20, 21, 22,64, 65, 128];
26
function run(i) {
27
	mods.forEach(function (mod) {
28
		test(mod + ' run ' + i, function (t){
29
			t.plan(5);
30
			var dh1 = nodeCrypto.getDiffieHellman(mod);
31
			var p1 = dh1.getPrime().toString('hex');
32
			dh1.generateKeys();
33
			var dh2 = myCrypto.getDiffieHellman(mod);
34
			t.equals(typeof dh1.setPublicKey, typeof dh2.setPublicKey, 'same methods');
35
			t.equals(typeof dh1.setPrivateKey, typeof dh2.setPrivateKey, 'same methods');
36
			var p2 = dh2.getPrime().toString('hex');
37
			dh2.generateKeys();
38
			t.equals(p1, p2, 'equal primes');
39
			var pubk1 = dh1.getPublicKey();
40
			var pubk2 = dh2.getPublicKey();
41
			t.notEquals(pubk1.toString('hex'), pubk2.toString('hex'), 'diff public keys');
42
			var pub1 = dh1.computeSecret(pubk2).toString('hex');
43
			var pub2 = dh2.computeSecret(pubk1).toString('hex');
44
			t.equals(pub1, pub2, 'equal secrets');
45
		});
46
	});
47
}
48
49
50
function bylen(t, generator) {
51
	return function (len){
52
		t.test('' + len, function (t) {
53
			t.plan(6);
54
			var dh2 = myCrypto.createDiffieHellman(len, generator);
55
			var prime2 = dh2.getPrime();
56
			var p2 = prime2.toString('hex');
57
			var dh1 = nodeCrypto.createDiffieHellman(prime2, generator);
58
			var p1 = dh1.getPrime().toString('hex');
59
			t.equals(typeof dh1.setPublicKey, typeof dh2.setPublicKey, 'same methods');
60
			t.equals(typeof dh1.setPrivateKey, typeof dh2.setPrivateKey, 'same methods');
61
			dh1.generateKeys();
62
			dh2.generateKeys();
63
			t.equals(p1, p2, 'equal primes');
64
			t.equals(dh1.getGenerator('hex'), dh2.getGenerator('hex'), 'equal generators');
65
			var pubk1 = dh1.getPublicKey();
66
			var pubk2 = dh2.getPublicKey();
67
			t.notEquals(pubk1.toString('hex'), pubk2.toString('hex'), 'diff public keys');
68
			var pub1 = dh1.computeSecret(pubk2).toString('hex');
69
			var pub2 = dh2.computeSecret(dh1.getPublicKey()).toString('hex');
70
			t.equals(pub1, pub2, 'equal secrets');
71
		});
72
	};
73
}
74
function bylen2(t) {
75
	return function (len){
76
		t.test('' + len, function (t) {
77
			t.plan(5);
78
			var dh2 = nodeCrypto.createDiffieHellman(len);
79
			var prime2 = dh2.getPrime();
80
			var p2 = prime2.toString('hex');
81
			var dh1 = myCrypto.createDiffieHellman(prime2);
82
			var p1 = dh1.getPrime().toString('hex');
83
			dh1.generateKeys();
84
			dh2.generateKeys();
85
			t.equals(typeof dh1.setPublicKey, typeof dh2.setPublicKey, 'same methods');
86
			t.equals(typeof dh1.setPrivateKey, typeof dh2.setPrivateKey, 'same methods');
87
			t.equals(p1, p2, 'equal primes');
88
			var pubk1 = dh1.getPublicKey();
89
			var pubk2 = dh2.getPublicKey();
90
			t.notEquals(pubk1.toString('hex'), pubk2.toString('hex'), 'diff public keys');
91
			var pub1 = dh1.computeSecret(pubk2).toString('hex');
92
			var pub2 = dh2.computeSecret(dh1.getPublicKey()).toString('hex');
93
			t.equals(pub1, pub2, 'equal secrets');
94
		});
95
	};
96
}
97
98
test('create primes gen 2', function (t) {
99
	var f = bylen(t, new Buffer([2]));
100
	lens2.forEach(f);
101
});
102
if (!isNode10()) {
103
	test('create primes gen 5', function (t) {
104
		var f = bylen(t, new Buffer([5]));
105
		lens2.forEach(f);
106
	});
107
}
108
109
test('create primes other way', function (t) {
110
		var f = bylen2(t);
111
		lens.forEach(f);
112
	});
113
var i = 0;
114
while (++i < 2) {
115
	run(i);
116
}
117
if (!isNode10()) {
118
	test('check errors', function (t) {
119
		t.plan(5);
120
		var p1 = new Buffer('db10e7f61adcc193', 'hex');
121
		var p2 = new Buffer('db10e7f61adcc194', 'hex');
122
		var dh1 = myCrypto.createDiffieHellman(p1);
123
		var dh2 = nodeCrypto.createDiffieHellman(p1);
124
		t.equals(dh1.verifyError, dh2.verifyError, 'same error for good prime');
125
		dh1 = myCrypto.createDiffieHellman(p2);
126
		dh2 = nodeCrypto.createDiffieHellman(p2);
127
		t.equals(dh1.verifyError, dh2.verifyError, 'same error for bad prime');
128
		dh1 = myCrypto.createDiffieHellman(p2, new Buffer([7]));
129
		dh2 = nodeCrypto.createDiffieHellman(p2, new Buffer([7]));
130
		t.equals(dh1.verifyError, dh2.verifyError, 'same error for bad prime non testable generator');
131
		dh1 = myCrypto.createDiffieHellman(p1.toString('hex'), 'hex', new Buffer([5]));
132
		dh2 = nodeCrypto.createDiffieHellman(p1.toString('hex'), 'hex', new Buffer([5]));
133
		t.equals(dh1.verifyError, dh2.verifyError, 'same error for good prime wrong generator');
134
		dh1 = myCrypto.createDiffieHellman(p1, new Buffer([11]).toString('hex'), 'hex');
135
		dh2 = nodeCrypto.createDiffieHellman(p1, new Buffer([11]).toString('hex'), 'hex');
136
		t.equals(dh1.verifyError, dh2.verifyError, 'same error for good prime non testable generator');
137
	});
138
}