eosjs-ecc
Version:
Elliptic curve cryptography functions
292 lines (191 loc) • 9.43 kB
Markdown
[](https://www.npmjs.org/package/eosjs-ecc)
[](https://travis-ci.org/EOSIO/eosjs-ecc)
# Elliptic curve cryptography functions (ECC)
Private Key, Public Key, Signature, AES, Encryption / Decryption
# Import
```js
import ecc from 'eosjs-ecc'
// or
const ecc = require('eosjs-ecc')
```
# Include
- Install with: `npm install eosjs-ecc`
- Html script tag, see [releases](https://github.com/EOSIO/eosjs-ecc/releases) for the correct **version** and its matching script **integrity** hash.
```html
<html>
<head>
<meta charset="utf-8">
<!--
sha512-zPDtF4/rndRUQzCJBfF+HaPHmDLvJTfIM8Swp8jWvHgvDQBm3OSmhOwL1QdYIatNAKxYgJc1Da/M3g04zd5/uQ== lib/eosjs-ecc.js
sha512-XWIwj+P5ClTipsRsO+yz0U8z4Zp9RmGTlJT9+BrgngPFLitzJnaVaNi4Q7nkbHs2W+WeZp0S9EBhZ8KbBC8Yyg== lib/eosjs-ecc.min.js
sha512-AauzuZNm0suCDp7awQWKnM6BNGbMl5ij+U0FTaqQbWY6kLXlQMyUZHm17sbbkKvGYYDPC6yJo6bcB6LfBCsHFQ== lib/eosjs-ecc.min.js.map
-->
<script src="https://cdn.jsdelivr.net/npm/eosjs-ecc@4.0.3/lib/eosjs-ecc.min.js"
integrity="sha512-XWIwj+P5ClTipsRsO+yz0U8z4Zp9RmGTlJT9+BrgngPFLitzJnaVaNi4Q7nkbHs2W+WeZp0S9EBhZ8KbBC8Yyg=="
crossorigin="anonymous"></script>
</head>
<body>
See console object: eosjs_ecc
</body>
</html>
```
# Common API
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
## wif
[Wallet Import Format](https://en.bitcoin.it/wiki/Wallet_import_format)
Type: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
## ecc
### initialize
Initialize by running some self-checking code. This should take a
second to gather additional CPU entropy used during private key
generation.
Initialization happens once even if called multiple times.
Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)**
### unsafeRandomKey
Does not pause to gather CPU entropy.
Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)<PrivateKey>** test key
### randomKey
**Parameters**
- `cpuEntropyBits` **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** gather additional entropy
from a CPU mining algorithm. This will already happen once by
default. (optional, default `0`)
**Examples**
```javascript
ecc.randomKey().then(privateKey => {
console.log('Private Key:\t', privateKey) // wif
console.log('Public Key:\t', ecc.privateToPublic(privateKey)) // EOSkey...
})
```
Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[wif](#wif)>**
### seedPrivate
**Parameters**
- `seed` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** any length string. This is private. The same
seed produces the same private key every time. At least 128 random
bits should be used to produce a good private key.
**Examples**
```javascript
ecc.seedPrivate('secret') === wif
```
Returns **[wif](#wif)**
### privateToPublic
**Parameters**
- `wif` **[wif](#wif)**
- `pubkey_prefix` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** public key prefix (optional, default `'EOS'`)
**Examples**
```javascript
ecc.privateToPublic(wif) === pubkey
```
Returns **[pubkey](#pubkey)**
### isValidPublic
**Parameters**
- `pubkey` **[pubkey](#pubkey)** like EOSKey..
**Examples**
```javascript
ecc.isValidPublic(pubkey) === true
```
Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** valid
### isValidPrivate
**Parameters**
- `wif` **[wif](#wif)**
**Examples**
```javascript
ecc.isValidPrivate(wif) === true
```
Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** valid
### sign
Create a signature using data or a hash.
**Parameters**
- `data` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))**
- `privateKey` **([wif](#wif) | PrivateKey)**
- `encoding` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** data encoding (if string) (optional, default `'utf8'`)
**Examples**
```javascript
ecc.sign('I am alive', wif)
```
Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** string signature
### signHash
**Parameters**
- `dataSha256` **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))** sha256 hash 32 byte buffer or string
- `privateKey` **([wif](#wif) | PrivateKey)**
- `encoding` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** dataSha256 encoding (if string) (optional, default `'hex'`)
Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** string signature
### verify
Verify signed data.
**Parameters**
- `signature` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))** buffer or hex string
- `data` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))**
- `pubkey` **([pubkey](#pubkey) | PublicKey)**
- `encoding` (optional, default `'utf8'`)
- `hashData` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** sha256 hash data before verify (optional, default `true`)
**Examples**
```javascript
ecc.verify(signature, 'I am alive', pubkey) === true
```
Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)**
### recover
Recover the public key used to create the signature.
**Parameters**
- `signature` **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))** (EOSbase58sig.., Hex, Buffer)
- `data` **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))** full data
- `encoding` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** data encoding (if data is a string) (optional, default `'utf8'`)
**Examples**
```javascript
ecc.recover(signature, 'I am alive') === pubkey
```
Returns **[pubkey](#pubkey)**
### recoverHash
**Parameters**
- `signature` **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))** (EOSbase58sig.., Hex, Buffer)
- `dataSha256` **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))** sha256 hash 32 byte buffer or hex string
- `encoding` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** dataSha256 encoding (if dataSha256 is a string) (optional, default `'hex'`)
Returns **PublicKey**
### sha256
**Parameters**
- `data` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))** always binary, you may need Buffer.from(data, 'hex')
- `resultEncoding` (optional, default `'hex'`)
- `encoding` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** result encoding 'hex', 'binary' or 'base64' (optional, default `'hex'`)
**Examples**
```javascript
ecc.sha256('hashme') === '02208b..'
```
```javascript
ecc.sha256(Buffer.from('02208b', 'hex')) === '29a23..'
```
Returns **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Buffer](https://nodejs.org/api/buffer.html))** Buffer when encoding is null, or string
## pubkey
EOSKey..
Type: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
# Usage (Object API)
```js
let {PrivateKey, PublicKey, Signature, Aes, key_utils, config} = require('eosjs-ecc')
// Create a new random private key
let privateWif
PrivateKey.randomKey().then(privateKey => privateWif = privateKey.toWif())
// Convert to a public key
pubkey = PrivateKey.fromString(privateWif).toPublic().toString()
```
- [PrivateKey](./src/key_private.js)
- [PublicKey](./src/key_public.js)
- [Signature](./src/signature.js)
- [Aes](./src/aes.js)
- [key_utils](./src/key_utils.js)
- [config](./src/config.js)
# Browser
```bash
git clone https://github.com/EOSIO/eosjs-ecc.git
cd eosjs-ecc
npm install
npm run build_browser
# builds: ./dist/eosjs-ecc.js
# Verify release hash
```
```html
<script src=eosjs-ecc.js></script>
```
```js
var ecc = eosjs_ecc
ecc.randomKey().then(privateWif => {
var pubkey = ecc.privateToPublic(privateWif)
console.log(pubkey)
})
```