<div style="margin-bottom:20px;">
<div style="line-height:60px">
    <a href="https://travis-ci.org/akanass/rx-crypto.svg?branch=master">
        <img src="https://travis-ci.org/akanass/rx-crypto.svg?branch=master" alt="build" />
    </a>
    <a href="https://coveralls.io/github/akanass/rx-crypto?branch=master">
        <img src="https://coveralls.io/repos/github/akanass/rx-crypto/badge.svg?branch=master" alt="coveralls" />
    </a>
</div>
<div>
    <a href="https://www.typescriptlang.org/docs/tutorial.html">
        <img src="https://cdn-images-1.medium.com/max/800/1*8lKzkDJVWuVbqumysxMRYw.png"
             align="right" alt="Typescript logo" width="50" height="50" style="border:none;" />
    </a>
    <a href="http://reactivex.io/rxjs">
        <img src="http://reactivex.io/assets/Rx_Logo_S.png"
             align="right" alt="ReactiveX logo" width="50" height="50" style="border:none;" />
    </a>
</div>
</div>

# Rx-Crypto

`Crypto` library provides some functions for security features like `AES key`, `Key pair`, `PKCS12`, `RSA key`, `Certificate`, `JWT` and more.

We use existing node modules to provide these functions: [NodeRSA](https://github.com/rzcoder/node-rsa), [PEM](https://github.com/Dexus/pem), [JWT](https://github.com/auth0/node-jsonwebtoken) and [RandomString](https://github.com/klughammer/node-randomstring) but we add `Observable` feature for asynchronous and stream processes.

**All most important crypto features in only one library.**

## Table of contents

* [Using rx-crypto library](#using-rx-crypto-library)
    * [Yarn or NPM it in your package.json](#yarn-or-npm-it-in-your-packagejson)
    * [Use it anywhere](#use-it-anywhere)
* [API in Detail](#api-in-detail)
* [Contributing](#contributing)
* [Change History](#change-history)
* [License](#license)

## Using rx-crypto library

### `yarn` or `npm` it in your `package.json`

```bash
$ npm install --save @akanass/rx-crypto rxjs

or

$ yarn add @akanass/rx-crypto rxjs
```

```javascript
"dependencies": {
    "@akanass/rx-crypto": "^2.2.0",
    "rxjs": "^7.4.0",
    //...
}
//...
```

### use it anywhere

You can use `AES`, `Hash`, `PEM`, `RandomString`, `JWT` and `RSA` anywhere in your own library or script.

```javascript
import { RSA, NodeRSA } from '@akanass/rx-crypto';

const rsa: RSA = new RSA();
rsa.createKey().subscribe(
    (k: NodeRSA) => console.log(k), // Show NodeRSA instance in console
    e => console.error(e) // Show error in console
);
```

[Back to top](#table-of-contents)

## API in Detail

We implemented some services and to see their details go to documentation folder:

* [./documentation/AES.md](https://github.com/akanass/rx-crypto/blob/master/documentation/AES.md)
* [./documentation/Hash.md](https://github.com/akanass/rx-crypto/blob/master/documentation/Hash.md)
* [./documentation/JWT.md](https://github.com/akanass/rx-crypto/blob/master/documentation/JWT.md)
* [./documentation/PEM.md](https://github.com/akanass/rx-crypto/blob/master/documentation/PEM.md)
* [./documentation/RandomString.md](https://github.com/akanass/rx-crypto/blob/master/documentation/RandomString.md)
* [./documentation/RSA.md](https://github.com/akanass/rx-crypto/blob/master/documentation/RSA.md)

[Back to top](#table-of-contents)

## Contributing

To set up your development environment:

1. clone the repo to your workspace,
2. in the shell `cd` to the main folder,
3. hit `npm or yarn install`,
4. run `npm or yarn run test`.
    * It will lint the code and execute all tests. 
    * The test coverage report can be viewed from `./coverage/lcov-report/index.html`.

[Back to top](#table-of-contents)

## Change History
* v2.2.0 (2021-10-08)
    * Update packages' versions
    * Latest `rxjs` version `7.4.0`
* v2.1.0 (2021-10-05)
    * Update packages' versions
    * Latest `rxjs` version `7.3.1`
    * Update `operators` to match with latest `rxjs` version
    * Update tests
* v2.0.0 (2021-06-07)
    * Update packages' versions
    * Latest `rxjs` version `7.1.0`
* v1.1.0 (2021-01-31)
    * Update packages' versions
    * Fix tests
    * Fix `tslint`
* v1.0.0 (2019-08-27)
    * Implementation of `library` with `AES`, `Hash`, `JWT`, `PEM`, `RandomString` and `RSA`
    * Implementation of `Observable's` operators for `AES` and `RSA` features.
    * Related tests.
    * Documentation.

## License

Copyright (c) 2021 **Nicolas Jessel** Licensed under the [MIT license](https://github.com/akanass/rx-crypto/blob/next/LICENSE.md).

[Back to top](#table-of-contents)
