1 | var pempal = require('pempal')
|
2 | , nacl = require('tweetnacl')
|
3 | , assert = require('assert')
|
4 | , libPubkey = require('./pubkey')
|
5 | , a = require('../utils/a')
|
6 |
|
7 | function 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 |
|
30 | function 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 |
|
48 | module.exports = {
|
49 | parse: parseWallet,
|
50 | create: createWallet
|
51 | } |
\ | No newline at end of file |