Giter VIP home page Giter VIP logo

react-native-rsa-native's Introduction

react-native-rsa-native

A native implementation of RSA key generation and encryption/decryption, sign/verify. Keychain implementation Implementation is in PKCS1

Support

iOS 10+ android 4.1+ (API 16)

Status

Features: Generation, Encryption, Decryption, Sign, Verify, Keychain support

Getting started

$ yarn add react-native-rsa-native

or:

$ npm install react-native-rsa-native --save

Mostly automatic installation:

$ react-native link react-native-rsa-native

iOS

In your React Native Xcode project, right click on your project and go 'Add Files to ...', then navigate to /node_modules/react-native-rsa-native/ios and select the RNRSA.xcodeproj file. Then in the build settings for your target under 'Link Binary With Libraries', add libRNRSA.a.

Example Usage

These basic examples show a typical use case using both promise chains and async/await. See the full API documentation below for more detail on the methods available.

Encrypt a message

Encrypt a message and subsequently decrypt it, using the RSA class in a promise chain structure.

import { RSA } from 'react-native-rsa-native';

let message = "my secret message";

RSA.generateKeys(4096) // set key size
.then(keys => {
    console.log('4096 private:', keys.private); // the private key
    console.log('4096 public:', keys.public); // the public key
    RSA.encrypt(message, keys.public)
    .then(encodedMessage => {
        console.log(`the encoded message is ${encodedMessage}`);
        RSA.decrypt(encodedMessage, keys.private)
        .then(decryptedMessage => {
            console.log(`The original message was ${decryptedMessage}`);
        });
    });
});

Sign a message

Sign a message and subsequently verify it, using the RSAKeychain class in an async/await structure.

import { RSAKeychain } from 'react-native-rsa-native';

async main() {
    let keyTag = 'com.domain.mykey';
    let message = "message to be verified";

    let publicKey = await generateKeyPair(keyTag);
    // Share the generated public key with third parties as desired.

    let messageSignature = await RSAKeychain.sign(message, keyTag);

    if (await RSAKeychain.verify(messageSignature, message, keyTag)) {
        // The signature matches: trust this message.
    } else {
        // The signature does not match.
    }

    await RSAKeychain.deletePrivateKey(keyTag);
}

async generateKeyPair(keyTag : string) {
    let keys = await RSAKeychain.generate(keyTag);
    return keys.public;
}

Check out example App.js for a full example

Documentation

RSA Class

A class that performs RSA cryptographic primitives in a simple and straightforward manner. If you would prefer to use the underlying operating system's built-in security keychain, use the RSAKeychain Class instead.

generateKeys

static generateKeys(keySize : number) : Promise<KeyPair>

Generate a public/private key pair of the given key size.

generate

static generate() : Promise<KeyPair>

Equivalent to generateKeys(2048)

encrypt

static encrypt(message : string, publicKey : string) : Promise<string>

Encrypt a given message with the provided public key, so it is decryptable with the matching private key.

decrypt

static decrypt(encodedMessage : string, privateKey : string) : Promise<string>

Decrypt a given encrypted message using the private key.

sign

static sign(message: string, privateKey : string) : Promise<string>

Sign a given message with the private key, so that any user with the message, the returned signature, and the matching public key can verify it was signed under this key.

verify

static verify(signature : string, message : string, publicKey : string) : Promise<boolean>

Verify whether or not a provided signature was produced by signing the given message with the private key paired to the provided public key.

RSAKeychain Class

Like the RSA Class, but when its methods are called, instead of directly accessing the private key, the private key is stored in the underlying operating system's keychain (see documentation for iOS and for Android) using a tag which the app can use to access it. Methods then take this tag instead of the private key.

generateKeys

static generateKeys(keySize : number, keyTag : string) : Promise<PublicKey>

Generate a public/private key pair of the given key size, and store the private key in the operating system keychain.

generate

static generate(keyTag : string) : Promise<KeyPair>

Equivalent to generateKeys(2048, keyTag)

encrypt

static encrypt(message : string, keyTag : string) : Promise<string>

Retrieve the public key associated with the key tag, and encrypt a given message with that key, so it is decryptable with the matching private key.

decrypt

static decrypt(encodedMessage : string, keyTag : string) : Promise<string>

Decrypt a given encrypted message using the private key associated with the given key tag.

sign

static sign(message: string, keyTag : string) : Promise<string>

Sign a given message with the private key associated with the given key tag, so that any user with the message, the returned signature, and the matching public key can verify it was signed under this key.

verify

static verify(signature : string, message : string, keyTag : string) : Promise<boolean>

Verify whether or not a provided signature was produced by signing the given message with private key associated with the given key tag.

deletePrivateKey

static deletePrivateKey(keyTag : string) : Promise<boolean>

Delete the private key from the operating system's keychain. Returns true if the key was removed successfully.

KeyPair Type

Note: The KeyPair type does not strictly exist. Documentation provided here for convenience of understanding the return types of other methods.

Property Description
private : string The RSA private key.
public : string The RSA public key.

PublicKey Type

Note: The PublicKey type does not strictly exist. Documentation provided here for convenience of understanding the return types of other methods.

Property Description
public : string The RSA public key.

Credit

Donate

ETH: 0xDc2F8D78098749EB3ECdF79Fe32Efda86fEEFc3c

react-native-rsa-native's People

Contributors

amitaymolko avatar crafterm avatar alexanderpinkerton avatar earonesty avatar jimcullenaus avatar swissmanu avatar lfalcao avatar co-kevin avatar ahahn avatar aouaki avatar maxisme avatar tommeier avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.