UNPKG

2.84 kBMarkdownView Raw
1# ECIES
2`bsv/ecies` is a library that work with bsv's private/public keys.
3
4It provide electrum compatible ECIES message by default.
5
6## Options
7The constructor accept several options
8
9- `ephemeralKey`: should use ephemeral private key to encrypt message. `true` by default. It's set to `false` automatically if you provide private key later.
10- `noKey`: should exclude encrypt public key in message. `false` by default, disabled if `ephemeralKey` is `true`. Typically, public key is included in message, so receiver need only his private key to decrypt. Receiver must use same option with sender, in order to decrypt message properly.
11- `shortTag`: should use shorten HMAC in message. `false` by default. Receiver must use same option with sender, in order to decrypt message properly.
12
13## Examples
14
15### Message to Bob
16
17```javascript
18var bsv = require('bsv')
19var IES = require('bsv/ecies')
20
21var bob = bsv.PrivateKey()
22var bobPubkey = bob.publicKey
23
24// Send a message to bob
25var enc = new IES().publicKey(bobPubkey).encrypt('a message')
26// Bob decrypt a message
27var dec = new IES().privateKey(bob).decrypt(enc)
28```
29
30### Messages between Alice and Bob
31
32~~~javascript
33var bsv = require('bsv')
34var IES = require('bsv/ecies')
35
36var alice = bsv.PrivateKey()
37var alicePubkey = alice.publicKey
38var bob = bsv.PrivateKey()
39var bobPubkey = bob.publicKey
40
41var iesAlice = new IES({'nokey':true}).privateKey(alice).publicKey(bobPubkey)
42
43var iesBob = new IES({'nokey':true}).privateKey(bob).publicKey(alicePubkey)
44
45messageAlice = iesAlice.encrypt('Hello Bob')
46messageAliceDec = iesBob.decrypt(messageAlice)
47
48messageBob = iesBob.encrypt('Hi Alice')
49messageBobDec = iesAlice.decrypt(messageBob)
50~~~
51
52### Recover messages
53
54Sender can recover messages if `ephemeralKey` is `false`.
55
56~~~javascript
57var bsv = require('bsv')
58var IES = require('bsv/ecies')
59
60var alice = bsv.PrivateKey()
61var alicePubkey = alice.publicKey
62var bob = bsv.PrivateKey()
63var bobPubkey = bob.publicKey
64
65var iesAlice = new IES({'nokey':true}).privateKey(alice).publicKey(bobPubkey)
66
67var iesBob = new IES({'nokey':true}).privateKey(bob).publicKey(alicePubkey)
68
69messageAlice = iesAlice.encrypt('Hello Bob')
70messageAliceRecover = iesAlice.decrypt(messageAlice)
71~~~
72
73### ECDH Key
74
75Sometimes you may want to extract ECDH key for other use.
76
77~~~javascript
78var bsv = require('bsv')
79var IES = require('bsv/ecies')
80
81var alice = bsv.PrivateKey()
82var alicePubkey = alice.publicKey
83var bob = bsv.PrivateKey()
84var bobPubkey = bob.publicKey
85
86var iesAlice = new IES().privateKey(alice).publicKey(bobPubkey)
87
88var iesBob = new IES().privateKey(bob).publicKey(alicePubkey)
89
90var sharedSecret = iesAlice.ivkEkM
91var sharedSecret = iesBob.ivkEkM
92~~~
93
94### Bitcore ECIES
95
96Sometimes you may want to use bitcore sytle ECIES.
97
98~~~javascript
99var bsv = require('bsv')
100var IES = require('bsv/ecies').bitcoreECIES
101~~~
102