# simplified-rsa

> Easy Generation of RSA PEM Keys as well as Encoding/Decoding data and even Converting PEM Keys from one format to the other Like a Boss!

Latest version **1.0.0** (published 2022-03-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install simplified-rsa
pnpm add simplified-rsa
yarn add simplified-rsa
bun add simplified-rsa
```

## 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 | 1.0.0 |
| Published | 2022-03-17 |
| First published | 2022-03-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 9.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Anthony Mugendi |
| Maintainers | nguru |
| Keywords | rsa, pem, private, keys, ssh, generate, encryption, decryption, convert, private, pe, der, pkcs1, pkcs8 |

## Links

- npm: https://www.npmjs.com/package/simplified-rsa
- Repository: https://github.com/mugendi/easy-rsa
- Homepage: https://github.com/mugendi/easy-rsa#readme
- Issues: https://github.com/mugendi/easy-rsa/issues
- npm.io page: https://npm.io/package/simplified-rsa

## Dependencies (2)

- [rsa-key](https://npm.io/package/rsa-key.md) ^0.0.6
- [node-rsa](https://npm.io/package/node-rsa.md) ^1.1.1

## Alternatives

- [adhdev](https://npm.io/package/adhdev.md) — 11.1K weekly downloads
- [react-slide-button](https://npm.io/package/react-slide-button.md) — 310 weekly downloads
- [better](https://npm.io/package/better.md) — 42 weekly downloads
- [react-native-swipe-image](https://npm.io/package/react-native-swipe-image.md) — 22 weekly downloads
- [nl.fokkezb.pulltorefresh](https://npm.io/package/nl.fokkezb.pulltorefresh.md) — 11 weekly downloads

## Recent versions

- 1.0.0 (latest) — 2022-03-17
- 0.0.1 — 2022-03-17

## README

# Why

Generating and using RSA PEM Keys can be a headache. And what about the moments you want to convert keys from one format to the other, crazy.

I spent a lot of time figuring this out to enable end-to-end encryption from a NodeJS server and RUST websocket clients.

Finally figured it out so you wont have to shed premium tears!

# What it does

This module helps with the **Generation** of RSA PEM Keys as well as **Encoding/Decoding** data and even **Converting** PEM Keys from one format to the other Like a Boss!

# Modules You Need to Check Out

This module leverages on the amazing [RSA-Key](https://www.npmjs.com/package/rsa-key) for key conversions and [Node-Rsa](https://www.npmjs.com/package/node-rsa) to load keys, encrypt and decrypt data and of course the inbuilt [Crypto](https://nodejs.org/api/crypto.html) to generate keys.

It is important to check these modules when you have the time!

# Is it really that **Simplified**?

Well, I named it **easy-rsa** for a reason, and here is proof.

```javascript
;(async function () {
	const SimplifiedRSA = require('easy-rsa');

	// Generate Key Pair
	const keyPair = await SimplifiedRSA.key_pair();
	console.log(keyPair);

	// - You can save generated pair as files for later use
	// - Using Saved keys is easy. JUst Import the Keys

	// Import Public Key...
	SimplifiedRSA.import_key(keyPair.public_key);

	// - Now we are ready to encrypt some content
	const text = 'Hello RSA!';
	// Encrypt
	const encrypted = SimplifiedRSA.encrypt(text);
	console.log('encrypted: ', encrypted);

	// - To Decrypt encrypted content, we need too import our private key

	// Decrypt
	SimplifiedRSA.import_key(keyPair.private_key);
	const decrypted = SimplifiedRSA.decrypt(encrypted);
	console.log('decrypted: ', decrypted);

	// - You can also convert keys from one format to another. Check out https://www.npmjs.com/package/rsa-key

	// Convert Public Key o pkcs1
	let pkcs1_public_key = SimplifiedRSA.convert_public(
		keyPair.public_key,
		'pem',
		'pkcs1'
	);

	console.log(pkcs1_public_key);

	// Convert Private Key o pkcs1
	let pkcs1_private_key = SimplifiedRSA.convert_private(
		keyPair.private_key,
		'pem',
		'pkcs1'
	);

	console.log(pkcs1_private_key);
})()
```

# API

### `key_pair([opts:Object, passPhrase:String])`

**Note:**

**passPhrase:** is null by default. Note that private Keys generated using a pass phrase will fail to import!
**Default Options ** are:

```javascript
defaultOpts = {
	modulusLength: 1024 * 2,
	publicKeyEncoding: {
		type: 'spki',
		format: 'pem',
	},
	privateKeyEncoding: {
		type: 'pkcs8',
		format: 'pem',
	},
};
```

### ```import_key(key:String)```

---

### ```encrypt(plainText:String [, base:String])```

Default ```base``` is **"base64"**

---

### ```decrypt(encryptedText:String [, base:String])```
Default ```base``` is **"utf8"**

---

### ```convert_public(key:String, format:String, output:String) ```

---

### ```convert_private(key:String, format:String, output:String) ```

---

**Note:**

For both ```convert_public``` and ```convert_private```, you can only pass the following values as the```format``` and ```output``` arguments:

- **format** : ```pem``` and ```der```;
- **output** : ```pkcs1``` and ```pkcs8```;

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