Skip to content

Commit

Permalink
Merge 2ef4190 into 9df019c
Browse files Browse the repository at this point in the history
  • Loading branch information
fanatid committed Jan 10, 2016
2 parents 9df019c + 2ef4190 commit 341bdc4
Show file tree
Hide file tree
Showing 83 changed files with 3,765 additions and 3,025 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ os:
- linux
language: node_js
node_js:
- "0.10"
- "0.11"
- "0.12"
- "4"
Expand All @@ -20,6 +19,7 @@ before_install:
env:
global:
- DISPLAY=:99.0
- RANDOM_TESTS_REPEAT=100
matrix:
- CXX=g++-4.8 TEST_SUITE=test
matrix:
Expand Down
101 changes: 46 additions & 55 deletions API.md
Original file line number Diff line number Diff line change
@@ -1,61 +1,60 @@
# API Reference (v2.x)

- [`.secretKeyVerify(Buffer secretKey)`](#secretkeyverifybuffer-secretkey---boolean)
- [`.secretKeyExport(Buffer secretKey [, Boolean compressed = true])`](#secretkeyexportbuffer-secretkey--boolean-compressed--true---buffer)
- [`.secretKeyImport(Buffer secretKey)`](#secretkeyimportbuffer-secretkey---buffer)
- [`.secretKeyTweakAdd(Buffer secretKey, Buffer tweak)`](#secretkeytweakaddbuffer-secretkey-buffer-tweak---buffer)
- [`.secretKeyTweakMul(Buffer secretKey, Buffer tweak)`](#secretkeytweakmulbuffer-secretkey-buffer-tweak---buffer)
- [`.publicKeyCreate(Buffer secretKey)`](#publickeycreatebuffer-secretkey---buffer)
# API Reference (v3.x)

- [`.privateKeyVerify(Buffer privateKey)`](#privatekeyverifybuffer-privatekey---boolean)
- [`.privateKeyExport(Buffer privateKey [, Boolean compressed = true])`](#privatekeyexportbuffer-privatekey--boolean-compressed--true---buffer)
- [`.privateKeyImport(Buffer privateKey)`](#privatekeyimportbuffer-privatekey---buffer)
- [`.privateKeyTweakAdd(Buffer privateKey, Buffer tweak)`](#privatekeytweakaddbuffer-privatekey-buffer-tweak---buffer)
- [`.privateKeyTweakMul(Buffer privateKey, Buffer tweak)`](#privatekeytweakmulbuffer-privatekey-buffer-tweak---buffer)
- [`.publicKeyCreate(Buffer privateKey [, Boolean compressed = true])`](#publickeycreatebuffer-privatekey--boolean-compressed--true---buffer)
- [`.publicKeyConvert(Buffer publicKey [, Boolean compressed = true])`](#publickeyconvertbuffer-publickey--boolean-compressed--true---buffer)
- [`.publicKeyVerify(Buffer publicKey)`](#publickeyverifybuffer-publickey---boolean)
- [`.publicKeyTweakAdd(Buffer publicKey, Buffer tweak)`](#publickeytweakaddbuffer-publickey-buffer-tweak---buffer)
- [`.publicKeyTweakMul(Buffer publicKey, Buffer tweak)`](#publickeytweakmulbuffer-publickey-buffer-tweak---buffer)
- [`.publicKeyCombine(Array<Buffer> publicKeys)`](#publickeycombinearraybuffer-publickeys---buffer)
- [`.publicKeyTweakAdd(Buffer publicKey, Buffer tweak [, Boolean compressed = true])`](#publickeytweakaddbuffer-publickey-buffer-tweak--boolean-compressed--true---buffer)
- [`.publicKeyTweakMul(Buffer publicKey, Buffer tweak [, Boolean compressed = true])`](#publickeytweakmulbuffer-publickey-buffer-tweak--boolean-compressed--true---buffer)
- [`.publicKeyCombine(Array<Buffer> publicKeys [, Boolean compressed = true])`](#publickeycombinearraybuffer-publickeys--boolean-compressed--true---buffer)
- [`.signatureNormalize(Buffer signature)`](#signaturenormalizebuffer-signature---buffer)
- [`.signatureExport(Buffer signature)`](#signatureexportbuffer-signature---buffer)
- [`.signatureImport(Buffer signature)`](#signatureimportbuffer-signature---buffer)
- [`.sign(Buffer msg, Buffer secretKey [, Function callback])`](#signbuffer-msg-buffer-secretkey--function-callback---promisesignature-buffer-recovery-number)
- [`.signSync(Buffer msg, Buffer secretKey)`](#signsyncbuffer-msg-buffer-secretkey---signature-buffer-recovery-number)
- [`.verify(Buffer msg, Buffer signature, Buffer publicKey [, Function callback])`](#verifybuffer-msg-buffer-signature-buffer-publickey--function-callback---promiseboolean)
- [`.verifySync(Buffer msg, Buffer signature, Buffer publicKey)`](#verifysyncbuffer-msg-buffer-signature-buffer-publickey---boolean)
- [`.recover(Buffer msg, Buffer signature, Number recovery [, Function callback])`](#recoverbuffer-msg-buffer-signature-number-recovery--function-callback---promisebuffer)
- [`.recoverSync(Buffer msg, Buffer signature, Number recovery)`](#recoversyncbuffer-msg-buffer-signature-number-recovery---buffer)
- [`.ecdh(Buffer publicKey, Buffer secretKey [, Function callback])`](#ecdhbuffer-publickey-buffer-secretkey--function-callback---promisebuffer)
- [`.ecdhSync(Buffer publicKey, Buffer secretKey)`](#ecdhsyncbuffer-publickey-buffer-secretkey---buffer)
- [`.sign(Buffer message, Buffer privateKey [, Object options])`](#signbuffer-message-buffer-privatekey--object-options---signature-buffer-recovery-number)
- [Option: `Function noncefn`](#option-function-noncefn)
- [Option: `Buffer data`](#option-buffer-data)
- [`.verify(Buffer message, Buffer signature, Buffer publicKey)`](#verifybuffer-message-buffer-signature-buffer-publickey---boolean)
- [`.recover(Buffer message, Buffer signature, Number recovery [, Boolean compressed = true])`](#recoverbuffer-message-buffer-signature-number-recovery--boolean-compressed--true---buffer)
- [`.ecdh(Buffer publicKey, Buffer privateKey [, Object options])`](#ecdhbuffer-publickey-buffer-privatekey--object-options---buffer)
- [Option: `Function hashfn`](#option-function-hashfn)

#####`.secretKeyVerify(Buffer secretKey)` -> `Boolean`
#####`.privateKeyVerify(Buffer privateKey)` -> `Boolean`

Verify an ECDSA *secretKey*.
Verify an ECDSA *privateKey*.

<hr>

#####`.secretKeyExport(Buffer secretKey [, Boolean compressed = true])` -> `Buffer`
#####`.privateKeyExport(Buffer privateKey [, Boolean compressed = true])` -> `Buffer`

Export a *secretKey* in DER format.
Export a *privateKey* in DER format.

<hr>

#####`.secretKeyImport(Buffer secretKey)` -> `Buffer`
#####`.privateKeyImport(Buffer privateKey)` -> `Buffer`

Import a *secretKey* in DER format.
Import a *privateKey* in DER format.

<hr>

#####`.secretKeyTweakAdd(Buffer secretKey, Buffer tweak)` -> `Buffer`
#####`.privateKeyTweakAdd(Buffer privateKey, Buffer tweak)` -> `Buffer`

Tweak a *secretKey* by adding *tweak* to it.
Tweak a *privateKey* by adding *tweak* to it.

<hr>

#####`.secretKeyTweakMul(Buffer secretKey, Buffer tweak)` -> `Buffer`
#####`.privateKeyTweakMul(Buffer privateKey, Buffer tweak)` -> `Buffer`

Tweak a *secretKey* by multiplying it by a *tweak*.
Tweak a *privateKey* by multiplying it by a *tweak*.

<hr>

#####`.publicKeyCreate(Buffer secretKey)` -> `Buffer`
#####`.publicKeyCreate(Buffer privateKey [, Boolean compressed = true])` -> `Buffer`

Compute the public key for a *secretKey*.
Compute the public key for a *privateKey*.

<hr>

Expand All @@ -71,19 +70,19 @@ Verify an ECDSA *publicKey*.

<hr>

#####`.publicKeyTweakAdd(Buffer publicKey, Buffer tweak)` -> `Buffer`
#####`.publicKeyTweakAdd(Buffer publicKey, Buffer tweak [, Boolean compressed = true])` -> `Buffer`

Tweak a *publicKey* by adding *tweak* times the generator to it.

<hr>

#####`.publicKeyTweakMul(Buffer publicKey, Buffer tweak)` -> `Buffer`
#####`.publicKeyTweakMul(Buffer publicKey, Buffer tweak [, Boolean compressed = true])` -> `Buffer`

Tweak a *publicKey* by multiplying it by a *tweak* value.

<hr>

#####`.publicKeyCombine(Array<Buffer> publicKeys)` -> `Buffer`
#####`.publicKeyCombine(Array<Buffer> publicKeys [, Boolean compressed = true])` -> `Buffer`

Add a given *publicKeys* together.

Expand All @@ -107,48 +106,40 @@ Parse a DER ECDSA *signature*.

<hr>

#####`.sign(Buffer msg, Buffer secretKey [, Function callback])` -> `Promise<{signature: Buffer, recovery: number}>`
#####`.sign(Buffer message, Buffer privateKey [, Object options])` -> `{signature: Buffer, recovery: number}`

Create an ECDSA signature.

<hr>
######Option: `Function noncefn`

#####`.signSync(Buffer msg, Buffer secretKey)` -> `{signature: Buffer, recovery: number}`
Nonce generator. By default it is [rfc6979](https://tools.ietf.org/html/rfc6979).

Synchronous [.sign](#signbuffer-msg-buffer-secretkey--function-callback---promisesignature-buffer-recovery-number). Returns an object `{signature: Buffer, recovery: number}`.
Function signature: `noncefn(Buffer message, Buffer privateKey, ?Buffer algo, ?Buffer data, Number attempt)` -> `Buffer`

<hr>
######Option: `Buffer data`

#####`.verify(Buffer msg, Buffer signature, Buffer publicKey [, Function callback])` -> `Promise<Boolean>`

Verify an ECDSA signature.
Additional data for [noncefn](#option-function-noncefn) (RFC 6979 3.6) (32 bytes). By default is `null`.

<hr>

#####`.verifySync(Buffer msg, Buffer signature, Buffer publicKey` -> `Boolean`
#####`.verify(Buffer message, Buffer signature, Buffer publicKey)` -> `Boolean`

Synchronous [.verify](#verifybuffer-msg-buffer-signature-buffer-publickey--function-callback---promiseboolean). Returns a `Boolean`.
Verify an ECDSA signature.

<hr>

#####`.recover(Buffer msg, Buffer signature, Number recovery [, Function callback]` -> `Promise<Buffer>`
#####`.recover(Buffer message, Buffer signature, Number recovery [, Boolean compressed = true]` -> `Buffer`

Recover an ECDSA public key from a signature.

<hr>

#####`.recoverSync(Buffer msg, Buffer signature, Number recovery)` -> `Buffer`

Synchronous [.recover](#recoverbuffer-msg-buffer-signature-number-recovery--function-callback---promisebuffer). Returns an instance of `Buffer`.

<hr>

#####`.ecdh(Buffer publicKey, Buffer secretKey [, Function callback])` -> `Promise<Buffer>`
#####`.ecdh(Buffer publicKey, Buffer privateKey [, Object options])` -> `Buffer`

Compute an EC Diffie-Hellman secret.

<hr>
######Option: `Function hashfn`

#####`.ecdhSync(Buffer publicKey, Buffer secretKey)` -> `Buffer`
Hash function that is applied to a point that is result of ecdh. By default it is sha256 that applied to compressed public key.

Synchronous [.ecdh](#ecdhbuffer-publickey-buffer-secretkey--function-callback---promisebuffer). Returns an instance of `Buffer`.
Function signature: `hashfn(Buffer x, Buffer y)` -> `Buffer`
24 changes: 24 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
The MIT License (MIT)

Copyright (c) 2014-2016 secp256k1-node contributors

Parts of this software are based on elliptic, hash.js
Copyright (c) 2014-2016 Fedor Indutny

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
14 changes: 6 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)

This module provides native bindings to ecdsa [secp256k1](https://github.com/bitcoin/secp256k1) functions.
This library is experimental, so use at your own risk. Works on node version 0.10 or greater and in the Browser via browserify.
This library is experimental, so use at your own risk. Works on node version 0.11 or greater and in the Browser via browserify.

# Installation

Expand All @@ -29,15 +29,13 @@ npm install

# Usage

* [API Reference (v2.x)](API.md)
* [API Reference (v3.x)](API.md)

```js
var crypto = require('crypto')
var secp256k1 = require('secp256k1')
// or require('secp256k1/js')
// if you want to use pure js implementation in node (uses elliptic now)
// or require('secp256k1/elliptic')
// if implementation that uses elliptic package
// if you want to use pure js implementation in node

// generate message to sign
var msg = crypto.randomBytes(32)
Expand All @@ -46,16 +44,16 @@ var msg = crypto.randomBytes(32)
var privKey
do {
privKey = crypto.randomBytes(32)
} while (!secp256k1.secretKeyVerify(privKey))
} while (!secp256k1.privateKeyVerify(privKey))

// get the public key in a compressed format
var pubKey = secp256k1.publicKeyCreate(privKey)

// sign the message
var sigObj = secp256k1.signSync(msg, privKey)
var sigObj = secp256k1.sign(msg, privKey)

// verify the signature
console.log(secp256k1.verifySync(msg, sigObj.signature, pubKey))
console.log(secp256k1.verify(msg, sigObj.signature, pubKey))
```

# LICENSE
Expand Down
Loading

0 comments on commit 341bdc4

Please sign in to comment.