library for using signing via secure enclave (iOS) and trusted execution environment (Android) using biometric authentication
npm install @step-mobile/security$ npm install react-native-keystore --save
$ react-native link react-native-keystore
#### iOS
1. In XCode, in the project navigator, right click Libraries ➜ Add Files to [your project's name]
2. Go to node_modules ➜ react-native-keystore and add SCKeystore.xcodeproj
3. In XCode, in the project navigator, select your project. Add libSCKeystore.a to your project's Build Phases ➜ Link Binary With Libraries
4. Run your project (Cmd+R)<
#### Android
1. Open up android/app/src/main/java/[...]/MainActivity.java
- Add import com.step.security.keystore.SCKeystorePackage; to the imports at the top of the file
- Add new SCKeystorePackage() to the list returned by the getPackages() method
2. Append the following lines to android/settings.gradle:
```
include ':react-native-keystore'
project(':react-native-keystore').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keystore/android')
include ':react-native-keystore:lib'
project(':react-native-keystore:lib').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keystore/android/lib')
android/app/build.gradle
3. Insert the following lines inside the dependencies block in :`
`
compile project(':react-native-keystore:lib')
javascript
import { KeyStore } from 'react-native-keystore'
let keyId = "my-awesome-key" // alias used to access this key in the future
// Generate a new signing key, will return public key as in JWK format
let publicKey = await KeyStore.generate(
keyId,
{
authenticated: true, // should this key be guarded by passcode / biometric security?
algorithm: 'ES256' // Figures out what curve to use for generating EC keypair
}
)
// Will return signed JWT
const jwt = await KeyStore.signJWT(keyId, {
// You can include whatever headers you need here, but alg is required
headers: {
alg: 'ES256' // Signing algorithm to use, needs to be supported by the key generated in previous step
},
// JWT Payload that you want signed
payload: {
sub: "I'm a little teapot"
},
// Shown in security prompt
reason: "Need to sign my teapot"
})
// will throw an exception if verification fails
let valid = await KeyStore.verifyJWT(jwt)
``