-
Notifications
You must be signed in to change notification settings - Fork 1
/
generateKeys.js
80 lines (62 loc) · 1.35 KB
/
generateKeys.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/**
* Simplified DES key generation
*/
function p10(k) {
var pA = [3, 5, 2, 7, 4, 10, 1, 9, 8, 6];
var kA = k.split('');
var r = [];
pA.forEach(element => {
r.push(kA[element-1])
});
return r;
}
function p8(k) {
var pA = [6, 3, 7, 4, 8, 5, 10, 9];
var kA = k.split('');
var r = [];
pA.forEach(element => {
r.push(kA[element-1])
});
return r;
}
function p4(k){
var pA = [2, 4, 3, 1];
var kA = k.split('');
var r = [];
pA.forEach(element => {
r.push(kA[element-1])
});
return r;
}
function lShift (a) {
var shifted = [];
var last;
a.forEach( (element, key) => {
if (key === 0) {
last = element;
} else {
shifted.push(element);
}
})
shifted.push(last);
return shifted;
}
function lShiftN (a, m) {
for(let i = 0; i < m; i++){
a = lShift(a);
}
return a;
}
function generateKeys (key) {
key = p10(key)
var kA1 = key.slice(0, 5);
var kA2 = key.slice(5, 10);
var LS1 = lShiftN(kA1, 1).concat(lShiftN(kA2, 1));
kA1 = LS1.slice(0, 5);
kA2 = LS1.slice(5, 10);
var LS2 = lShiftN(kA1, 2).concat(lShiftN(kA2, 2));
var key1 = p8(LS1.join(''));
var key2 = p8(LS2.join(''));
return [key1.join(''), key2.join('')];
}
module.exports = generateKeys;