1 | # ECIES
|
2 | `bsv/ecies` is a library that work with bsv's private/public keys.
|
3 |
|
4 | It provide electrum compatible ECIES message by default.
|
5 |
|
6 | ## Options
|
7 | The 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
|
18 | var bsv = require('bsv')
|
19 | var IES = require('bsv/ecies')
|
20 |
|
21 | var bob = bsv.PrivateKey()
|
22 | var bobPubkey = bob.publicKey
|
23 |
|
24 | // Send a message to bob
|
25 | var enc = new IES().publicKey(bobPubkey).encrypt('a message')
|
26 | // Bob decrypt a message
|
27 | var dec = new IES().privateKey(bob).decrypt(enc)
|
28 | ```
|
29 |
|
30 | ### Messages between Alice and Bob
|
31 |
|
32 | ~~~javascript
|
33 | var bsv = require('bsv')
|
34 | var IES = require('bsv/ecies')
|
35 |
|
36 | var alice = bsv.PrivateKey()
|
37 | var alicePubkey = alice.publicKey
|
38 | var bob = bsv.PrivateKey()
|
39 | var bobPubkey = bob.publicKey
|
40 |
|
41 | var iesAlice = new IES({'nokey':true}).privateKey(alice).publicKey(bobPubkey)
|
42 |
|
43 | var iesBob = new IES({'nokey':true}).privateKey(bob).publicKey(alicePubkey)
|
44 |
|
45 | messageAlice = iesAlice.encrypt('Hello Bob')
|
46 | messageAliceDec = iesBob.decrypt(messageAlice)
|
47 |
|
48 | messageBob = iesBob.encrypt('Hi Alice')
|
49 | messageBobDec = iesAlice.decrypt(messageBob)
|
50 | ~~~
|
51 |
|
52 | ### Recover messages
|
53 |
|
54 | Sender can recover messages if `ephemeralKey` is `false`.
|
55 |
|
56 | ~~~javascript
|
57 | var bsv = require('bsv')
|
58 | var IES = require('bsv/ecies')
|
59 |
|
60 | var alice = bsv.PrivateKey()
|
61 | var alicePubkey = alice.publicKey
|
62 | var bob = bsv.PrivateKey()
|
63 | var bobPubkey = bob.publicKey
|
64 |
|
65 | var iesAlice = new IES({'nokey':true}).privateKey(alice).publicKey(bobPubkey)
|
66 |
|
67 | var iesBob = new IES({'nokey':true}).privateKey(bob).publicKey(alicePubkey)
|
68 |
|
69 | messageAlice = iesAlice.encrypt('Hello Bob')
|
70 | messageAliceRecover = iesAlice.decrypt(messageAlice)
|
71 | ~~~
|
72 |
|
73 | ### ECDH Key
|
74 |
|
75 | Sometimes you may want to extract ECDH key for other use.
|
76 |
|
77 | ~~~javascript
|
78 | var bsv = require('bsv')
|
79 | var IES = require('bsv/ecies')
|
80 |
|
81 | var alice = bsv.PrivateKey()
|
82 | var alicePubkey = alice.publicKey
|
83 | var bob = bsv.PrivateKey()
|
84 | var bobPubkey = bob.publicKey
|
85 |
|
86 | var iesAlice = new IES().privateKey(alice).publicKey(bobPubkey)
|
87 |
|
88 | var iesBob = new IES().privateKey(bob).publicKey(alicePubkey)
|
89 |
|
90 | var sharedSecret = iesAlice.ivkEkM
|
91 | var sharedSecret = iesBob.ivkEkM
|
92 | ~~~
|
93 |
|
94 | ### Bitcore ECIES
|
95 |
|
96 | Sometimes you may want to use bitcore sytle ECIES.
|
97 |
|
98 | ~~~javascript
|
99 | var bsv = require('bsv')
|
100 | var IES = require('bsv/ecies').bitcoreECIES
|
101 | ~~~
|
102 |
|