Skip to content

dangerfarms/react-native-rsa-native

 
 

Repository files navigation

react-native-rsa-native

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

Fork rationale

This fork makes some changes to the sign method:

  • SHA256 instead of SHA512
  • format the result with a URL-safe base64 encoding.

This is for a very specific use case, in a project which only uses the generate and sign methods of this library.

The change to SHA256 hasn't been applied consistently to all methods, only sign. For example, the sample code in the Usage example below will fail, since the verify method still uses SHA512.

It is extremely unlikely that this code is suitable for other use cases in its current state. Please use the original repository instead.

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.

Usage


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

RSA.generate()
  .then(keys => {
    console.log(keys.private) // the private key
    console.log(keys.public) // the public key
    RSA.encrypt('1234', keys.public)
      .then(encodedMessage => {
        RSA.decrypt(encodedMessage, keys.private)
          .then(message => {
            console.log(message);
          })
        })

    RSA.sign(secret, keys.private)
      .then(signature => {
        console.log(signature);

        RSA.verify(signature, secret, keys.public)
          .then(valid => {
            console.log(valid);
          })
        })
  })

// Example utilizing the keychain for private key secure storage

let keyTag = 'com.domain.mykey';
let secret = "secret message";

RSAKeychain.generate(keyTag)
  .then(keys => {
    console.log(keys.public);
    console.log(secret);

    return RSAKeychain.encrypt(secret, keyTag)
      .then(encodedMessage => {
        console.log(encodedMessage);

        RSAKeychain.decrypt(encodedMessage, keyTag)
          .then(message => {
            console.log(message);
          })
        })
  })
  .then(() => {
  return RSAKeychain.sign(secret, keyTag)
    .then(signature => {
      console.log('signature', signature);

      RSAKeychain.verify(signature, secret, keyTag)
        .then(valid => {
          console.log('verified', valid);
        })
      })
  })
  .then(() => {
    RSAKeychain.deletePrivateKey(keyTag)
    .then( success => {
      console.log('delete success', success)
    })
  });

Check out example App.js for a full example

Credit

About

A native implementation of RSA key generation and encryption/decryption.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 57.1%
  • Java 30.5%
  • JavaScript 10.3%
  • Python 2.1%