mirror of
https://github.com/fluencelabs/js-libp2p-crypto
synced 2025-03-15 19:31:05 +00:00
134 lines
4.2 KiB
Markdown
134 lines
4.2 KiB
Markdown
# js-libp2p-crypto
|
|
|
|
[](http://ipn.io)
|
|
[](http://ipfs.io/)
|
|
[](http://webchat.freenode.net/?channels=%23ipfs)
|
|
[](https://github.com/RichardLitt/standard-readme)
|
|
[](https://coveralls.io/github/ipfs/js-libp2p-crypto?branch=master)
|
|
[](https://travis-ci.org/ipfs/js-libp2p-crypto)
|
|
[](https://circleci.com/gh/ipfs/js-libp2p-crypto)
|
|
[](https://david-dm.org/ipfs/js-libp2p-crypto) [](https://github.com/feross/standard)
|
|
|
|
> Crypto primitives for libp2p in JavaScript
|
|
|
|
This repo contains the JavaScript implementation of the crypto primitives
|
|
needed for libp2p. This is based on this [go implementation](https://github.com/ipfs/go-libp2p-crypto).
|
|
|
|
## Table of Contents
|
|
|
|
- [Install](#install)
|
|
- [Usage](#usage)
|
|
- [Example](#example)
|
|
- [API](#api)
|
|
- [`generateKeyPair(type, bits)`](#generatekeypairtype-bits)
|
|
- [`generateEphemeralKeyPair(curve)`](#generateephemeralkeypaircurve)
|
|
- [`keyStretcher(cipherType, hashType, secret)`](#keystretcherciphertype-hashtype-secret)
|
|
- [`marshalPublicKey(key[, type])`](#marshalpublickeykey-type)
|
|
- [`unmarshalPublicKey(buf)`](#unmarshalpublickeybuf)
|
|
- [`marshalPrivateKey(key[, type])`](#marshalprivatekeykey-type)
|
|
- [`unmarshalPrivateKey(buf)`](#unmarshalprivatekeybuf)
|
|
- [Contribute](#contribute)
|
|
- [License](#license)
|
|
|
|
## Install
|
|
|
|
```sh
|
|
npm install --save libp2p-crypto
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Example
|
|
|
|
```js
|
|
const crypto = require('libp2p-crypto')
|
|
|
|
var keyPair = crypto.generateKeyPair('RSA', 2048)
|
|
```
|
|
|
|
## API
|
|
|
|
### `generateKeyPair(type, bits)`
|
|
|
|
- `type: String`, only `'RSA'` is currently supported
|
|
- `bits: Number`
|
|
|
|
Generates a keypair of the given type and bitsize.
|
|
|
|
### `generateEphemeralKeyPair(curve)`
|
|
|
|
- `curve: String`, one of `'P-256'`, `'P-384'`, `'P-521'` is currently supported
|
|
|
|
Generates an ephemeral public key and returns a function that will compute the shared secret key.
|
|
|
|
Focuses only on ECDH now, but can be made more general in the future.
|
|
|
|
Returns an object of the form
|
|
```js
|
|
{
|
|
key: Buffer,
|
|
genSharedKey: Function
|
|
}
|
|
```
|
|
|
|
### `keyStretcher(cipherType, hashType, secret)`
|
|
|
|
- `cipherType: String`, one of `'AES-128'`, `'AES-256'`, `'Blowfish'`
|
|
- `hashType: String`, one of `'SHA1'`, `SHA256`, `SHA512`
|
|
- `secret: Buffer`
|
|
|
|
Generates a set of keys for each party by stretching the shared key.
|
|
|
|
Returns an object of the form
|
|
```js
|
|
{
|
|
k1: {
|
|
iv: Buffer,
|
|
cipherKey: Buffer,
|
|
macKey: Buffer
|
|
},
|
|
k2: {
|
|
iv: Buffer,
|
|
cipherKey: Buffer,
|
|
macKey: Buffer
|
|
}
|
|
}
|
|
```
|
|
### `marshalPublicKey(key[, type])`
|
|
|
|
- `key: crypto.rsa.RsaPublicKey`
|
|
- `type: String`, only `'RSA'` is currently supported
|
|
|
|
Converts a public key object into a protobuf serialized public key.
|
|
|
|
### `unmarshalPublicKey(buf)`
|
|
|
|
- `buf: Buffer`
|
|
|
|
Converts a protobuf serialized public key into its representative object.
|
|
|
|
### `marshalPrivateKey(key[, type])`
|
|
|
|
- `key: crypto.rsa.RsaPrivateKey`
|
|
- `type: String`, only `'RSA'` is currently supported
|
|
|
|
Converts a private key object into a protobuf serialized private key.
|
|
|
|
### `unmarshalPrivateKey(buf)`
|
|
|
|
- `buf: Buffer`
|
|
|
|
Converts a protobuf serialized private key into its representative object.
|
|
|
|
## Contribute
|
|
|
|
Feel free to join in. All welcome. Open an [issue](https://github.com/ipfs/js-libp2p-crypto/issues)!
|
|
|
|
This repository falls under the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).
|
|
|
|
[](https://github.com/ipfs/community/blob/master/contributing.md)
|
|
|
|
## License
|
|
|
|
[MIT](LICENSE)
|