# alaxplorerjs-ecc

> Elliptic curve cryptography functions

Latest version **4.0.2** (published 2019-12-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install alaxplorerjs-ecc
pnpm add alaxplorerjs-ecc
yarn add alaxplorerjs-ecc
bun add alaxplorerjs-ecc
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 4.0.2 |
| Published | 2019-12-18 |
| First published | 2019-12-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 68.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | aladinnetwork |
| Keywords | ECC, Private Key, Public Key, Signature, AES, Encryption, Decryption |

## Links

- npm: https://www.npmjs.com/package/alaxplorerjs-ecc
- Repository: https://github.com/ALAIO/alaxplorerjs-ecc
- Homepage: https://github.com/ALAIO/alaxplorerjs-ecc#readme
- Issues: https://github.com/ALAIO/alaxplorerjs-ecc/issues
- npm.io page: https://npm.io/package/alaxplorerjs-ecc

## Dependencies (8)

- [bigi](https://npm.io/package/bigi.md) ^1.4.2
- [bs58](https://npm.io/package/bs58.md) ^4.0.1
- [ecurve](https://npm.io/package/ecurve.md) ^1.0.5
- [bytebuffer](https://npm.io/package/bytebuffer.md) ^5.0.1
- [create-hash](https://npm.io/package/create-hash.md) ^1.1.3
- [create-hmac](https://npm.io/package/create-hmac.md) ^1.1.6
- [randombytes](https://npm.io/package/randombytes.md) ^2.0.5
- [browserify-aes](https://npm.io/package/browserify-aes.md) ^1.0.6

## Alternatives

- [@gemini-wallet/core](https://npm.io/package/@gemini-wallet/core.md) — 515.6K weekly downloads
- [utility](https://npm.io/package/utility.md) — 416.6K weekly downloads
- [@primno/dpapi](https://npm.io/package/@primno/dpapi.md) — 7.2K weekly downloads
- [pi-readseek](https://npm.io/package/pi-readseek.md) — 3.7K weekly downloads
- [@emilia-protocol/verify](https://npm.io/package/@emilia-protocol/verify.md) — 1.1K weekly downloads

## Recent versions

- 4.0.2 (latest) — 2019-12-18

## README

[![NPM](https://img.shields.io/npm/v/alaxplorerjs-ecc.svg)](https://www.npmjs.org/package/alaxplorerjs-ecc)
[![Build Status](https://travis-ci.org/ALAIO/alaxplorerjs-ecc.svg?branch=master)](https://travis-ci.org/ALAIO/alaxplorerjs-ecc)

# Elliptic curve cryptography functions (ECC)

Private Key, Public Key, Signature, AES, Encryption / Decryption

# Import

```js
import ecc from 'alaxplorerjs-ecc'
// or
const ecc = require('alaxplorerjs-ecc')
```

# 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)&lt;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)) // ALAkey...
})
```

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[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)** 

**Examples**

```javascript
ecc.privateToPublic(wif) === pubkey
```

Returns **[pubkey](#pubkey)** 

### isValidPublic

**Parameters**

-   `pubkey` **[pubkey](#pubkey)** like ALAKey..

**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))** (ALAbase58sig.., 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))** (ALAbase58sig.., 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

ALAKey..

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('alaxplorerjs-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/ALAIO/alaxplorerjs-ecc.git
cd alaxplorerjs-ecc
npm install
npm run build_browser
# builds: ./dist/alaxplorerjs-ecc.js
# Verify release hash
```

```html
<script src=alaxplorerjs-ecc.js></script>
```

```js
var ecc = alaxplorerjs_ecc

ecc.randomKey().then(privateWif =>  {
  var pubkey = ecc.privateToPublic(privateWif)
  console.log(pubkey)
})
```

---
_Source: https://npm.io/package/alaxplorerjs-ecc · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
