Skip to content
Keyknox SDK allows developers to communicate with Virgil Keyknox Service to upload, download, and synchronize encrypted sensitive data (private keys) between different devices.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
src
.editorconfig
.env.example
.eslintignore
.eslintrc.json
.gitignore
.huskyrc
.lintstagedrc
.prettierrc
.travis.yml
LICENSE
README.md
jest.config.js
jest.setup.js
package.json
rollup.config.js
tsconfig.json
tslint.json
yarn.lock

README.md

Virgil Keyknox JavaScript SDK

npm Build Status GitHub license

Introduction | SDK Features | Installation | Usage Example | Docs | Support

Introduction

Virgil Security provides an SDK which allows you to communicate with Virgil Keyknox Service. Virgil Keyknox Service allows users to store their sensitive data (such as Private Key) encrypted (with end-to-end encryption) for using and sharing it between different devices.

SDK Features

  • use Virgil Crypto library
  • use Virgil SDK
  • upload encrypted sensitive data to Virgil Keyknox Service
  • download the data from Virgil Keyknox Service
  • update and synchronize the data

Installation

You can install this module from npm. Another option is to add it via script tag in browser.

npm

You will need to install @virgilsecurity/keyknox.

npm install @virgilsecurity/keyknox

You will also need to install virgil-crypto and virgil-sdk from npm.

npm install virgil-crypto virgil-sdk

Note that minimum supported version of virgil-crypto is 3.0.0 and minimum supported version of virgil-sdk is 5.0.0.

In browser via script tag

You will need to add @virgilsecurity/keyknox script.

<script src="https://unpkg.com/@virgilsecurity/keyknox/dist/keyknox.browser.umd.min.js"></script>

You will also need to add virgil-crypto and virgil-sdk scripts.

<script src="https://unpkg.com/virgil-crypto/dist/virgil-crypto.browser.umd.min.js"></script>
<script src="https://unpkg.com/virgil-sdk/dist/virgil-sdk.browser.umd.min.js"></script>

Now you can use global variables Keyknox, Virgil and VirgilCrypto as namespace objects, containing all of @virgilsecurity/keyknox, virgil-sdk and virgil-crypto exports as properties.

Usage Example

To begin using Virgil Keyknox SDK you'll need to initialize SyncKeyStorage class. This class is responsible for synchronization between device storage - IndexedDB in a browser or file system in Node.js - and Keyknox Cloud. In order to initialize SyncKeyStorage class you'll need the following values:

  • identity of the user
  • accessTokenProvider to provide access token for Virgil services
  • keyEntryStorage to store data locally
  • privateKey of current device/user
  • publicKeys of all devices/users that should have access to data
const { SyncKeyStorage } = require('@virgilsecurity/keyknox');

// Identity of the user
const identity = ...;

// Setup Access Token provider to provide access token for Virgil services
// Check https://github.com/VirgilSecurity/virgil-sdk-javascript
const accessTokenProvider = ...;

// Setup Key Entry Storage to store data locally
// Check https://github.com/VirgilSecurity/virgil-sdk-javascript
const keyEntryStorage = ...;

// Public keys of users that should have access to data
const publicKeys = ...;

// Private key of current user
const privateKey = ...;

const syncKeyStorage = SyncKeyStorage.create({
  identity,
  accessTokenProvider,
  keyEntryStorage,
  privateKey,
  publicKeys,
});

You can find a complete example of simple client-server application here.

What if I lost my private key?

If you lost your private key, you are not able to decrypt saved data anymore. So you need to reset your stored data in the Virgil Keyknox Service and start over.

import { KeyknoxClient } from '@virgilsecurity/keyknox';

const tokenPromise = accessTokenProvider.getToken({ operation: 'delete' });
const resetPromise = tokenPromise.then(token => new KeyknoxClient().resetValue(token.toString()));
const syncKeyStorage = SyncKeyStorage.create(...);

resetPromise.then(() => syncKeyStorage.sync());

Docs

Virgil Security has a powerful set of APIs, and the documentation below can get you started today.

License

This library is released under the BSD 3-Clause License.

Support

Our developer support team is here to help you. Find out more information on our Help Center.

You can find us on Twitter or send us email support@VirgilSecurity.com.

Also, get extra help from our support team on Slack.

You can’t perform that action at this time.