New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

sovrin-did

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sovrin-did - npm Package Compare versions

Comparing version 1.1.0 to 1.2.0

35

index.js
var nacl = require("tweetnacl");
var bs58 = require("bs58");
var fromSeed = function(seed){

@@ -23,3 +24,3 @@

var signed = nacl.sign.open(signedMessage, decodedKey);
return signed !== null;
return signed !== null ? new Buffer(signed).toString("utf8") : false;
};

@@ -31,6 +32,31 @@

var fullSignKey = Buffer.concat([signKey, verifyKey]);
var arrayMessage = Uint8Array.from(message);
var arrayMessage = Buffer.from(message, "utf8");
return nacl.sign(arrayMessage, fullSignKey);
};
function getArrayFromKey(key) {
return Uint8Array.from(bs58.decode(key));
}
var getNonce = function () {
return nacl.randomBytes(nacl.box.nonceLength);
};
var getBoxKeyPairFromSignKey = function (signKey) {
return nacl.box.keyPair.fromSecretKey(getArrayFromKey(signKey));
};
var getSharedSecret = function (theirVerifyKey, mySigningKey) {
return nacl.box.before(theirVerifyKey, mySigningKey)
};
var decryptMessage = function (encryptedMessage, nonce, sharedSecret) {
var verifiedEncrypTion = nacl.box.open.after(encryptedMessage, nonce, sharedSecret);
return verifiedEncrypTion !== null ? new Buffer(verifiedEncrypTion).toString("utf8") : false;
};
var encryptMessage = function (message, nonce, sharedSecret) {
return nacl.box.after(Buffer.from(message, "utf8"), nonce, sharedSecret);
};
module.exports = {

@@ -44,2 +70,7 @@ gen: function(){

verifySignedMessage: verifySignedMessage,
getKeyPairFromSignKey: getBoxKeyPairFromSignKey,
getSharedSecret: getSharedSecret,
decryptMessage: decryptMessage,
encryptMessage: encryptMessage,
getNonce: getNonce,
};

2

package.json
{
"name": "sovrin-did",
"version": "1.1.0",
"version": "1.2.0",
"description": "node.js module to generate DID and Ed25519 keys to use with Sovrin",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -7,2 +7,3 @@ # node-sovrin-did

## Install

@@ -14,2 +15,3 @@

## Example

@@ -33,5 +35,8 @@

## API
### sovrinDID.gen()
### gen()
Generates a new did, verification key, signing key, and also gives you the seed used to generate them.

@@ -51,4 +56,5 @@

### sovrinDID.fromSeed(seed)
### fromSeed(seed)
Same as `.gen()` except you supply the seed. The seed should be a 32-byte Uint8Array (i.e. Buffer).

@@ -67,3 +73,5 @@

### sovrinDID.signMessage(message, signKey, verifyKey)
### signMessage(message, signKey, verifyKey)
Signs a message with the given signKey and verifyKey.

@@ -84,12 +92,14 @@

var signedMessage = sovrinDID.signMessage(message, signKey, verifyKey);;
var signedMessage = sovrinDID.signMessage(message, signKey, verifyKey);
```
```
### sovrinDID.verifySignedMessage(signedMessage, verifyKey)
### verifySignedMessage(signedMessage, verifyKey)
Verifies that the given message has been signed by the possessor of the given verifyKey.
* The signedMessage should be what is returned from the `signMessage(message, signKey, verifyKey)` method
* The signedMessage should be what is returned from `signMessage(message, signKey, verifyKey)`
* The verifyKey should be the verifyKey given from the `gen()` or `fromSeed(seed)` methods
Returns `true` if the message was signed by the owner of the verifyKey `false` otherwise.
Returns the original message if the message was signed by the owner of the verifyKey `false` otherwise.

@@ -110,3 +120,3 @@ Example:

console.log(sovrinDID.verifySignedMessage(signedMessage, verifyKey));
console.log(sovrinDID.verifySignedMessage(signedMessage, verifyKey2))
console.log(sovrinDID.verifySignedMessage(signedMessage, verifyKey2));
```

@@ -116,6 +126,132 @@

```
true
Hello World!!
false
```
### getKeyPairFromSignKey(signKey)
Returns a key pair that is valid to use for encrypting.
* The signKey should be the signKey given from the object given from `gen()` or `fromSeed()`
Example:
```js
var sovrin = sovrinDID.gen();
var signKey = sovrin.secret.signKey;
var keyPair = sovrinDID.getKeyPairFromSignKey(signKey);
console.log(keyPair);
```
Output:
```js
{
publicKey: ... // Uint8Array with 32-byte public key
secretKey: ... // Uint8Array with 32-byte secret key
}
```
### getNonce()
Returns a random nonce as a Uint8Array that can be used for encrypting.
Example:
```js
var nonce = sovrinDID.getNonce();
```
### getSharedSecret(theirVerifyKey, mySigningKey)
Computes a sharedSecret to be used for encryption.
* theirVerifyKey should be the publicKey given from the `getKeyPairFromSignKey(signKey)` method
* mySigningKey should be the secretKey given from the `getKeyPairFromSignKey(signKey)` method
Example:
```js
var sovrin1 = sovrinDID.gen();
var sovrin2 = sovrinDID.gen();
var signKey1 = sovrin1.secret.signKey;
var signKey2 = sovrin2.secret.signKey;
var keyPair1 = sovrinDID.getKeyPairFromSignKey(signKey1);
var keyPair2 = sovrinDID.getKeyPairFromSignKey(signKey2);
// These two secrets are the same
var sharedSecret1To2 = sovrinDID.getSharedSecret(keyPair2.publicKey, keyPair1.secretKey);
var sharedSecret2To1 = sovrinDID.getSharedSecret(keyPair1.publicKey, keyPair2.secretKey);
```
### encryptMessage(message, nonce, sharedSecret)
Encrypts 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:
```js
var sovrin1 = sovrinDID.gen();
var sovrin2 = sovrinDID.gen();
var signKey1 = sovrin1.secret.signKey;
var signKey2 = sovrin2.secret.signKey;
var keyPair1 = sovrinDID.getKeyPairFromSignKey(signKey1);
var keyPair2 = sovrinDID.getKeyPairFromSignKey(signKey2);
var sharedSecret1To2 = sovrinDID.getSharedSecret(keyPair2.publicKey, keyPair1.secretKey);
var message = "Hello World!!";
var nonce = sovrinDID.getNonce();
var encryptedMessage = sovrinDID.encryptMessage(message, nonce, sharedSecret1To2);
```
### decryptMessage(encryptedMessage, nonce, sharedSecret)
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:
```js
var signKey1 = "4bMnc36WuLYJqsWTZtiazJJrtkvPwgyWnirn7gKk7ium";
var signKey2 = "516mChDX1BRjwHJc2w838W8cXxy8a6Eb35HKXjPR2fD8";
var signKey3 = "7H25Jfb2ND51hhaomL5FPhhqQvBGujd1jJeSjZZ8HQzR";
var keyPair1 = sovrinDID.getKeyPairFromSignKey(signKey1);
var keyPair2 = sovrinDID.getKeyPairFromSignKey(signKey2);
var keyPair3 = sovrinDID.getKeyPairFromSignKey(signKey3);
var sharedSecret1To2 = sovrinDID.getSharedSecret(keyPair2.publicKey, keyPair1.secretKey);
var sharedSecret2To1 = sovrinDID.getSharedSecret(keyPair1.publicKey, keyPair2.secretKey);
var sharedSecret3To1 = sovrinDID.getSharedSecret(keyPair3.publicKey, keyPair1.secretKey);
var message = "Hello World!!";
var nonce = sovrinDID.getNonce();
var encryptedMessage = sovrinDID.encryptMessage(message, nonce, sharedSecret1To2);
var decryptedMessage = sovrinDID.decryptMessage(encryptedMessage, nonce, sharedSecret2To1);
var attemptedDecryption = sovrinDID.decryptMessage(encryptedMessage, nonce, sharedSecret3To1);
console.log(decryptedMessage);
console.log(attemptedDecryption);
```
Output:
```
Hello World!!
false
```
## License
MIT
var test = require("tape");
var nacl = require("tweetnacl");
var sovrinDID = require("./");

@@ -73,3 +74,3 @@

test("sovrinDID.signMessage(message, signKey, verifyKey)", function (t) {
test("sovrinDID.signMessage(message, signKey, verifyKey)", function(t) {

@@ -85,3 +86,3 @@ var signKey = "4bMnc36WuLYJqsWTZtiazJJrtkvPwgyWnirn7gKk7ium";

test("sovrinDID.verifySignedMessage(signedMessage, verifyKey)", function (t) {
test("sovrinDID.verifySignedMessage(signedMessage, verifyKey)", function(t) {

@@ -98,6 +99,6 @@ var signKey = "4bMnc36WuLYJqsWTZtiazJJrtkvPwgyWnirn7gKk7ium";

t.equal(sovrinDID.verifySignedMessage(signedMessage, verifyKey), true);
t.equal(sovrinDID.verifySignedMessage(signedMessage, verifyKey), message);
t.equal(sovrinDID.verifySignedMessage(signedMessage, verifyKey2), false);
t.equal(sovrinDID.verifySignedMessage(signedMessage2, verifyKey2), true);
t.equal(sovrinDID.verifySignedMessage(signedMessage2, verifyKey2), message2);
t.equal(sovrinDID.verifySignedMessage(signedMessage2, verifyKey), false);

@@ -107,1 +108,75 @@

});
test("sovrinDID.getKeyPairFromSignKey(signKey)", function(t) {
var signKey = "4bMnc36WuLYJqsWTZtiazJJrtkvPwgyWnirn7gKk7ium";
var keyPair = sovrinDID.getKeyPairFromSignKey(signKey);
t.equal(keyPair.publicKey.length, 32);
t.equal(keyPair.secretKey.length, 32);
t.end();
});
test("sovrinDID.getSharedSecret(theirVerifyKey, mySigningKey", function(t) {
var signKey1 = "4bMnc36WuLYJqsWTZtiazJJrtkvPwgyWnirn7gKk7ium";
var signKey2 = "516mChDX1BRjwHJc2w838W8cXxy8a6Eb35HKXjPR2fD8";
var signKey3 = "7H25Jfb2ND51hhaomL5FPhhqQvBGujd1jJeSjZZ8HQzR";
var keyPair1 = sovrinDID.getKeyPairFromSignKey(signKey1);
var keyPair2 = sovrinDID.getKeyPairFromSignKey(signKey2);
var keyPair3 = sovrinDID.getKeyPairFromSignKey(signKey3);
var sharedSecret1To2 = sovrinDID.getSharedSecret(keyPair2.publicKey, keyPair1.secretKey);
var sharedSecret2To1 = sovrinDID.getSharedSecret(keyPair1.publicKey, keyPair2.secretKey);
var sharedSecret3To1 = sovrinDID.getSharedSecret(keyPair3.publicKey, keyPair1.secretKey);
t.equal(nacl.verify(sharedSecret1To2, sharedSecret2To1), true);
t.equal(nacl.verify(sharedSecret3To1, sharedSecret2To1), false);
t.end();
});
test("sovrinDID.encryptMessage(message, nonce, sharedSecret)", function (t) {
var signKey1 = "4bMnc36WuLYJqsWTZtiazJJrtkvPwgyWnirn7gKk7ium";
var signKey2 = "516mChDX1BRjwHJc2w838W8cXxy8a6Eb35HKXjPR2fD8";
var keyPair1 = sovrinDID.getKeyPairFromSignKey(signKey1);
var keyPair2 = sovrinDID.getKeyPairFromSignKey(signKey2);
var sharedSecret1To2 = sovrinDID.getSharedSecret(keyPair2.publicKey, keyPair1.secretKey);
var message = "Hello World!!";
var nonce = sovrinDID.getNonce();
var encryptedMessage = sovrinDID.encryptMessage(message, nonce, sharedSecret1To2);
t.notEqual(message, encryptedMessage);
t.end();
});
test("sovrinDID.decryptMessage(theirVerifyKey, mySigningKey", function(t) {
var signKey1 = "4bMnc36WuLYJqsWTZtiazJJrtkvPwgyWnirn7gKk7ium";
var signKey2 = "516mChDX1BRjwHJc2w838W8cXxy8a6Eb35HKXjPR2fD8";
var signKey3 = "7H25Jfb2ND51hhaomL5FPhhqQvBGujd1jJeSjZZ8HQzR";
var keyPair1 = sovrinDID.getKeyPairFromSignKey(signKey1);
var keyPair2 = sovrinDID.getKeyPairFromSignKey(signKey2);
var keyPair3 = sovrinDID.getKeyPairFromSignKey(signKey3);
var sharedSecret1To2 = sovrinDID.getSharedSecret(keyPair2.publicKey, keyPair1.secretKey);
var sharedSecret2To1 = sovrinDID.getSharedSecret(keyPair1.publicKey, keyPair2.secretKey);
var sharedSecret3To1 = sovrinDID.getSharedSecret(keyPair3.publicKey, keyPair1.secretKey);
var message = "Hello World!!";
var nonce = sovrinDID.getNonce();
var encryptedMessage = sovrinDID.encryptMessage(message, nonce, sharedSecret1To2);
var decryptedMessage = sovrinDID.decryptMessage(encryptedMessage, nonce, sharedSecret2To1);
var attemptedDecryption = sovrinDID.decryptMessage(encryptedMessage, nonce, sharedSecret3To1);
t.equal(decryptedMessage, message);
t.notEqual(message, attemptedDecryption);
t.equal(attemptedDecryption, false);
t.end();
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc