node.js module to generate DID and Ed25519 keys to use with Sovrin
$ npm i sovrin-didvarsovrinDID=require("sovrin-did");vard=sovrinDID.gen();console.log(d);output:
{did: 'S7evWWTSbaXELyE9w53sFr',verifyKey: 'EgvhZsLKSsqsbNBfJ2wfR9FFWo9YqkpxpfXeT4ifR1Cq',encryptionPublicKey: '5UAXeov4Gi7ioSTLDoMPtdvqX6RRmJcQAWagVgdaxUej',secret:
{seed: '36a572a7e43956784b517c57b26720a8ef838d114c0619f1d8c7801c37fa4f6a',signKey: '4gKLe7Qq2WX249NBfymQySZbAzXboq2emMig6wBR82Bj',encryptionPrivateKey: '7H25Jfb2ND51hhaomL5FPhhqQvBGujd1jJeSjZZ8HQzR'}}Generates a new did, verification key, signing key, and also gives you the seed used to generate them. It also includes the public and private key used for encryption.
{did: "<base58 did>",verifyKey: "<base58 publicKey>",publicKey: "<base58 publicKey>",secret: {seed: "<hex encoded 32-byte seed>",signKey: "<base58 secretKey>",privateKey: "<base58 privateKey>"}}Same as .gen() except you supply the seed. The seed should be a 32-byte Uint8Array (i.e. Buffer).
Example:
var seed = Buffer.from("36a572a7e43956784b517c57b26720a8ef838d114c0619f1d8c7801c37fa4f6a", "hex");
var d = sovrinDID.fromSeed(seed);
console.log(d);
The output is the same as the .gen() example.
Signs a message with the given signKey and verifyKey.
- The message should be a string.
- Both the signKey and verifyKey should be the signKey and verifyKey given from the
gen()orfromSeed(seed)methods
Returns a signed message as a Uint8Array (i.e. Buffer).
Example:
varsovrin=sovrinDID.gen();varsignKey=sovrin.secret.signKey;varverifyKey=sovrin.verifyKey;varmessage="Hello World!!";varsignedMessage=sovrinDID.signMessage(message,signKey,verifyKey);Verifies that the given message has been signed by the possessor of the given verifyKey.
- The signedMessage should be what is returned from
signMessage(message, signKey, verifyKey) - The verifyKey should be the verifyKey given from the
gen()orfromSeed(seed)methods
Returns the original message if the message was signed by the owner of the verifyKey false otherwise.
Example:
varsovrin=sovrinDID.gen();varsovrin2=sovrinDID.gen();varsignKey=sovrin.secret.signKey;varverifyKey=sovrin.verifyKey;varverifyKey2=sovrin2.verifyKey;varmessage="Hello World!!";varsignedMessage=sovrinDID.signMessage(message,signKey,verifyKey);console.log(sovrinDID.verifySignedMessage(signedMessage,verifyKey));console.log(sovrinDID.verifySignedMessage(signedMessage,verifyKey2));Output:
Hello World!!
false
Returns a key pair that is valid to use for encrypting.
- The signKey should be the signKey given from the object given from
gen()orfromSeed()
Example:
varsovrin=sovrinDID.gen();varsignKey=sovrin.secret.signKey;varkeyPair=sovrinDID.getKeyPairFromSignKey(signKey);console.log(keyPair);Output:
{publicKey: ... // Uint8Array with 32-byte public keysecretKey: ... // Uint8Array with 32-byte secret key}Returns a random nonce as a Uint8Array that can be used for encrypting.
Example:
varnonce=sovrinDID.getNonce();Computes a sharedSecret to be used for encryption.
- theirVerifyKey should be the publicKey given from the
getKeyPairFromSignKey(signKey)method or the publicKey string given from thegen()method. - mySigningKey should be the secretKey given from the
getKeyPairFromSignKey(signKey)method or the privateKey given from thegen()method.
Example:
varsovrin1=sovrinDID.gen();varsovrin2=sovrinDID.gen();// Using the strings given via the gen() methodvarsharedSecret1=sovrinDID.getSharedSecret(sovrin2.encryptionPublicKey,sovrin1.secret.encryptionPrivateKey);varsharedSecret2=sovrinDID.getSharedSecret(sovrin1.encryptionPublicKey,sovrin2.secret.encryptionPrivateKey);varsignKey1=sovrin1.secret.signKey;varsignKey2=sovrin2.secret.signKey;varkeyPair1=sovrinDID.getKeyPairFromSignKey(signKey1);varkeyPair2=sovrinDID.getKeyPairFromSignKey(signKey2);// Using the buffer given from the getKeyPairFromSignKey(signKey2) methodvarsharedSecret3=sovrinDID.getSharedSecret(keyPair2.publicKey,keyPair1.secretKey);varsharedSecret4=sovrinDID.getSharedSecret(keyPair1.publicKey,keyPair2.secretKey);// All the secrets generated are equivalentEncrypts a the given message using a precomputed sharedSecret.
- message should be given as a string
- nonce should be a nonce from the
getNonce()method- Note: The nonce used for encrypting and decrypting need to be the same
- sharedSecret should be computed using the
getSharedSecret(theirVerifyKey, mySigningKey)method
Example:
varsovrin1=sovrinDID.gen();varsovrin2=sovrinDID.gen();varsignKey1=sovrin1.secret.signKey;varsignKey2=sovrin2.secret.signKey;varkeyPair1=sovrinDID.getKeyPairFromSignKey(signKey1);varkeyPair2=sovrinDID.getKeyPairFromSignKey(signKey2);varsharedSecret1To2=sovrinDID.getSharedSecret(keyPair2.publicKey,keyPair1.secretKey);varmessage="Hello World!!";varnonce=sovrinDID.getNonce();varencryptedMessage=sovrinDID.encryptMessage(message,nonce,sharedSecret1To2);Verifies and decrypts a previously encrypted message.
- encryptedMessage should be what is returned from the
encryptMessage(message, nonce, sharedSecret)method - nonce should be a nonce given from the
getNonce()method- Note: The nonce used for encrypting and decrypting need to be the same
- sharedSecret should be computed using the
getSharedSecret(theirVerifyKey, mySigningKey)method
Example:
varsignKey1="4bMnc36WuLYJqsWTZtiazJJrtkvPwgyWnirn7gKk7ium";varsignKey2="516mChDX1BRjwHJc2w838W8cXxy8a6Eb35HKXjPR2fD8";varsignKey3="7H25Jfb2ND51hhaomL5FPhhqQvBGujd1jJeSjZZ8HQzR";varkeyPair1=sovrinDID.getKeyPairFromSignKey(signKey1);varkeyPair2=sovrinDID.getKeyPairFromSignKey(signKey2);varkeyPair3=sovrinDID.getKeyPairFromSignKey(signKey3);varsharedSecret1To2=sovrinDID.getSharedSecret(keyPair2.publicKey,keyPair1.secretKey);varsharedSecret2To1=sovrinDID.getSharedSecret(keyPair1.publicKey,keyPair2.secretKey);varsharedSecret3To1=sovrinDID.getSharedSecret(keyPair3.publicKey,keyPair1.secretKey);varmessage="Hello World!!";varnonce=sovrinDID.getNonce();varencryptedMessage=sovrinDID.encryptMessage(message,nonce,sharedSecret1To2);vardecryptedMessage=sovrinDID.decryptMessage(encryptedMessage,nonce,sharedSecret2To1);varattemptedDecryption=sovrinDID.decryptMessage(encryptedMessage,nonce,sharedSecret3To1);console.log(decryptedMessage);console.log(attemptedDecryption);Output:
Hello World!!
false
MIT