@rsksmart/rif-id-daf
v0.1.0
Published
RIF Identity - DAF
Downloads
8
Readme
npm i @rsksmart/rif-id-daf
Extensions for uPort DAF agent.
Features
Support for RIF Identity key model
uPort DAF provides an Identity provider module that is responsible for the creation of keys and derivation of the respective identity. Each time an identity is created, a new private key is generated. RIF model proposes to use deterministic derivation for private keys, making all the identities associated with a single mnemonic phrase.
The model uses a wallet account like derivation for identity keys:
- Create a mnemonic phrase to derive identities from
- Use BIP32 to derive private keys using
TBD
derivation path
For a better developer experience the extension also provides BIP-44 support. Use mnemonic phrase instead of hex keys.
To use this interface we provide:
- New ORM Entity:
IdentityMnemonic
. Now used to store one single mnemonic. SeedStore
class - interface to store a seedRIFIdKeyManagementSystem
class - wrapper for adaf
AbstractKeyManagementSystem
- responsible for creating private keys derived from the mnemonic's seed.RIFIdentityProvider
class - Extension fordaf
IdentityProvider
enabling to import a mnemonic
All this modules can be plugged to uPort agent as explained in usage to provide uPort agent of this capabilities.
The identity recovery model is to be defined
Usage
To setup a DAF agent using RIF identity provider implementation:
import { Connection } from 'typeorm'
import { KeyStore, IdentityStore, Agent } from 'daf-core'
import { SecretBox, KeyManagementSystem } from 'daf-libsodium' // change for daf-react-native-libsodioum for React Native support
import { Entities, MnemonicStore, RIFIdKeyManagementSystem, RIFIdentityProvider } from '@rsksamrt/rid-id-daf'
const dbConnection = createConnection({
type: 'sqlite',
database: 'rif-identity.sqlite',
entities: [...Entities, ...DAFEntities],
logging: false,
synchronize: true
})
// key store
const secretKey = '0f3c04d7416607ba306997f9fd1920474aff39beb23b847da5c21215076cc9b3' // set your own secret key
const secretBox = new SecretBox(secretKey)
const keyStore = new KeyStore(dbConnection, secretBox)
const mnemonicStore = new MnemonicStore(dbConnection, secretBox)
// key management system
const keyManagementSystem = new KeyManagementSystem(keyStore)
const rifIdKeyManagementSystem = new RIFIdKeyManagementSystem(keyManagementSystem, keyStore, mnemonicStore)
// rif identity provider
const identityStore = new IdentityStore('rsk-testnet-ethr', dbConnection)
const rifIdentityProvider = new RIFIdentityProvider({
kms: rifIdKeyManagementSystem,
identityStore,
network: 'rsk',
rpcUrl: 'http://localhost:8545'
})
const agent = new Agent({
dbConnection,
identityProviders: [rifIdentityProvider],
didResolver: null
})
const mnemonic = generateMnemonic(12)
await rifIdentityProvider.importMnemonic(mnemonic)
const identity = await agent.identityManager.createIdentity()
Extend
- Enable multiple mnemonics
Test
From base repo directory run npm test
or any of the described test script variants.
References
- uPort DAF: https://github.com/uport-project/daf