A native implementation of RSA key generation and encryption/decryption, sign/verify. Keychain implementation Implementation is in PKCS1
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.
iOS 10+ android 4.1+ (API 16)
Features: Generation, Encryption, Decryption, Sign, Verify, Keychain support
$ yarn add react-native-rsa-native
or:
$ npm install react-native-rsa-native --save
$ react-native link react-native-rsa-native
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.
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
- Originally based on https://github.com/SamSaffron/react-native-key-pair
- iOS implementation reference