-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathdeoxysii.js
34 lines (27 loc) · 1.18 KB
/
deoxysii.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
const nacl = require('tweetnacl');
const deoxys = require('deoxysii');
const boxKDFTweak_str = 'MRAE_Box_Deoxys-II-256-128';
var boxKDFTweak = Buffer.alloc(boxKDFTweak_str.length);
for (var i = 0; i < boxKDFTweak_str.length; i++) {
boxKDFTweak[i] = boxKDFTweak_str.charCodeAt(i);
}
// ECDHAndTweak applies the X25519 scalar multiply with the given public and
// private keys, and applies a HMAC based tweak to the resulting output.
function ECDHAndTweak(PublicKey, PrivateKey) {
let PreMasterKey = nacl.scalarMult(PrivateKey, PublicKey);
let hash = require('crypto').createHmac('sha256', boxKDFTweak);
hash.update(PreMasterKey);
return new Uint8Array(hash.digest());
}
module.exports = {
Seal: async function(Nonce, Plaintext, AdditionalData, PeerPublicKey, PrivateKey) {
let AesKey = ECDHAndTweak(PeerPublicKey, PrivateKey);
let AEAD = new deoxys.AEAD(AesKey);
return AEAD.encrypt(Nonce, Plaintext, AdditionalData);
},
Open: async function(Nonce, Ciphertext, AdditionalData, PeerPublicKey, PrivateKey) {
let AesKey = ECDHAndTweak(PeerPublicKey, PrivateKey);
let AEAD = new deoxys.AEAD(AesKey);
return AEAD.decrypt(Nonce, Ciphertext, AdditionalData);
}
};