UNPKG

1.26 kBJavaScriptView Raw
1var pempal = require('pempal')
2 , nacl = require('tweetnacl')
3 , assert = require('assert')
4 , libPubkey = require('./pubkey')
5 , a = require('../utils/a')
6
7function parseWallet (buf) {
8 try {
9 assert.equal(buf.length, 96)
10 }
11 catch (e) {
12 throw new Error('invalid wallet')
13 }
14 return {
15 decryptSk: buf.slice(0, 32),
16 signSk: buf.slice(32),
17 sign: function (buf, detach) {
18 if (detach) return Buffer(nacl.sign.detached(a(buf), a(this.signSk)))
19 return Buffer(nacl.sign(a(buf), a(this.signSk)))
20 },
21 toBuffer: function () {
22 return buf
23 },
24 toPEM: function (passphrase) {
25 return pempal.encode(this.toBuffer(), {tag: 'SALTY WALLET', passphrase: passphrase})
26 }
27 }
28}
29
30function createWallet (info) {
31 var boxKey = nacl.box.keyPair()
32 var signKey = nacl.sign.keyPair()
33 var walletBuf = Buffer.concat([
34 Buffer(boxKey.secretKey),
35 Buffer(signKey.secretKey)
36 ])
37 var wallet = parseWallet(walletBuf)
38 var pubkeyBuf = Buffer.concat([
39 Buffer(boxKey.publicKey),
40 Buffer(signKey.publicKey)
41 ])
42 wallet.pubkey = libPubkey.parse(pubkeyBuf)
43 wallet.pubkey.name = info.name
44 wallet.pubkey.email = info.email
45 return wallet
46}
47
48module.exports = {
49 parse: parseWallet,
50 create: createWallet
51}
\No newline at end of file