Skip to content

Commit

Permalink
Merge pull request #50 from VirgilSecurity/v4.0.0-alpha.3
Browse files Browse the repository at this point in the history
v4.0.0-alpha.3
  • Loading branch information
snanovskyi authored Aug 21, 2019
2 parents fd011d3 + 2c95692 commit 52ffd8d
Show file tree
Hide file tree
Showing 17 changed files with 151 additions and 51 deletions.
3 changes: 2 additions & 1 deletion packages/base-crypto/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@virgilsecurity/base-crypto",
"version": "0.3.0",
"version": "0.4.0",
"description": "Virgil JavaScript Crypto Library is a high-level cryptographic library that allows you to perform all necessary operations for secure storing and transferring data and everything required to become HIPAA and GDPR compliant.",
"main": "./dist/base-crypto.cjs.js",
"module": "./dist/base-crypto.es.js",
Expand All @@ -19,6 +19,7 @@
"lint": "eslint 'src/**/*.ts'"
},
"dependencies": {
"@virgilsecurity/crypto-types": "^0.1.0",
"@virgilsecurity/data-utils": "^0.1.0"
},
"peerDependencies": {
Expand Down
4 changes: 2 additions & 2 deletions packages/base-crypto/src/VirgilCrypto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { getFoundationModules } from './foundationModules';
import { HashAlgorithm, HashAlgorithmType } from './HashAlgorithm';
import { KeyPairType, KeyPairTypeType } from './KeyPairType';
import { getLowLevelPrivateKey } from './privateKeyUtils';
import { Data, LowLevelPrivateKey, LowLevelPublicKey } from './types';
import { ICrypto, Data, LowLevelPrivateKey, LowLevelPublicKey } from './types';
import { toArray } from './utils';
import { validatePrivateKey, validatePublicKey, validatePublicKeysArray } from './validators';
import { VirgilPrivateKey } from './VirgilPrivateKey';
Expand All @@ -21,7 +21,7 @@ export interface VirgilCryptoOptions {
defaultKeyPairType?: KeyPairTypeType[keyof KeyPairTypeType];
}

export class VirgilCrypto {
export class VirgilCrypto implements ICrypto {
readonly useSha256Identifiers: boolean;
readonly defaultKeyPairType: KeyPairTypeType[keyof KeyPairTypeType];

Expand Down
3 changes: 1 addition & 2 deletions packages/base-crypto/src/VirgilPrivateKey.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { IPrivateKey } from './interfaces';
import { setLowLevelPrivateKey } from './privateKeyUtils';
import { LowLevelPrivateKey } from './types';
import { IPrivateKey, LowLevelPrivateKey } from './types';

export class VirgilPrivateKey implements IPrivateKey {
public identifier: Uint8Array;
Expand Down
3 changes: 1 addition & 2 deletions packages/base-crypto/src/VirgilPublicKey.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { IPublicKey } from './interfaces';
import { LowLevelPublicKey } from './types';
import { IPublicKey, LowLevelPublicKey } from './types';

export class VirgilPublicKey implements IPublicKey {
public identifier: Uint8Array;
Expand Down
1 change: 0 additions & 1 deletion packages/base-crypto/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
export { setFoundationModules } from './foundationModules';
export { HashAlgorithm } from './HashAlgorithm';
export { KeyPairType } from './KeyPairType';
export { IPrivateKey, IPublicKey } from './interfaces';
export { VirgilKeyPair } from './types';
export { VirgilCrypto } from './VirgilCrypto';
export { VirgilPrivateKey } from './VirgilPrivateKey';
Expand Down
5 changes: 0 additions & 5 deletions packages/base-crypto/src/interfaces.ts

This file was deleted.

7 changes: 6 additions & 1 deletion packages/base-crypto/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import { VirgilPrivateKey } from './VirgilPrivateKey';
import { VirgilPublicKey } from './VirgilPublicKey';

export type IPrivateKey = import('@virgilsecurity/crypto-types').IPrivateKey;
export type IPublicKey = import('@virgilsecurity/crypto-types').IPublicKey;
export type IKeyPair = import('@virgilsecurity/crypto-types').IKeyPair;
export type ICrypto = import('@virgilsecurity/crypto-types').ICrypto;

export type Data = import('@virgilsecurity/data-utils').Data;

// eslint-disable-next-line @typescript-eslint/no-explicit-any
Expand All @@ -9,7 +14,7 @@ export type LowLevelPrivateKey = any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type LowLevelPublicKey = any;

export interface VirgilKeyPair {
export interface VirgilKeyPair extends IKeyPair {
privateKey: VirgilPrivateKey;
publicKey: VirgilPublicKey;
}
2 changes: 1 addition & 1 deletion packages/benchmark/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"dependencies": {
"benchmark": "^2.1.4",
"buffer": "^5.2.1",
"virgil-crypto": "^4.0.0-alpha.2",
"virgil-crypto": "^4.0.0-alpha.3",
"virgil-crypto-3": "npm:virgil-crypto@^3.2.6"
},
"devDependencies": {
Expand Down
71 changes: 71 additions & 0 deletions packages/crypto-types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
export interface IPrivateKey {}

export interface IPublicKey {}

export interface IKeyPair {
privateKey: IPrivateKey;
publicKey: IPublicKey;
}

export interface ICrypto {
generateKeys(keyPairType?: unknown): IKeyPair;
generateKeysFromKeyMaterial(keyMaterial: Uint8Array, keyPairType?: unknown): IKeyPair;
importPrivateKey(rawPrivateKey: Uint8Array): IPrivateKey;
exportPrivateKey(privateKey: IPrivateKey): Uint8Array;
importPublicKey(rawPublicKey: Uint8Array): IPublicKey;
exportPublicKey(publicKey: IPublicKey): Uint8Array;
encrypt(data: Uint8Array, publicKey: IPublicKey | IPublicKey[]): Uint8Array;
decrypt(encryptedData: Uint8Array, privateKey: IPrivateKey): Uint8Array;
calculateHash(data: Uint8Array, algorithm?: unknown): Uint8Array;
extractPublicKey(privateKey: IPrivateKey): IPublicKey;
calculateSignature(data: Uint8Array, privateKey: IPrivateKey): Uint8Array;
verifySignature(data: Uint8Array, signature: Uint8Array, publicKey: IPublicKey): boolean;
signThenEncrypt(
data: Uint8Array,
privateKey: IPrivateKey,
publicKey: IPublicKey | IPublicKey[],
): Uint8Array;
decryptThenVerify(
encryptedData: Uint8Array,
privateKey: IPrivateKey,
publicKey: IPublicKey | IPublicKey[],
): Uint8Array;
getRandomBytes(length: number): Uint8Array;
signThenEncryptDetached(
data: Uint8Array,
privateKey: IPrivateKey,
publicKey: IPublicKey | IPublicKey[],
): { encryptedData: Uint8Array, metadata: Uint8Array };
decryptThenVerifyDetached(
encryptedData: Uint8Array,
metadata: Uint8Array,
privateKey: IPrivateKey,
publicKey: IPublicKey | IPublicKey[],
): Uint8Array;
}

export interface IAccessTokenSigner {
getAlgorithm(): string;
generateTokenSignature(
token: Uint8Array,
privateKey: IPrivateKey,
): Uint8Array;
verifyTokenSignature(
token: Uint8Array,
signature: Uint8Array,
publicKey: IPublicKey,
): boolean;
}

export interface ICardCrypto {
generateSignature(data: Uint8Array, privateKey: IPrivateKey): Uint8Array;
verifySignature(data: Uint8Array, signature: Uint8Array, publicKey: IPublicKey): boolean;
exportPublicKey(publicKey: IPublicKey): Uint8Array;
importPublicKey(rawPublicKey: Uint8Array): IPublicKey;
generateSha512(data: Uint8Array): Uint8Array;
}

export interface IPrivateKeyExporter {
exportPrivateKey(privateKey: IPrivateKey): Uint8Array;
importPrivateKey(rawPrivateKey: Uint8Array): IPrivateKey;
}
15 changes: 15 additions & 0 deletions packages/crypto-types/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "@virgilsecurity/crypto-types",
"version": "0.1.0",
"description": "Types for Virgil JavaScript libraries",
"typings": "./index.d.ts",
"files": [
"index.d.ts"
],
"repository": "https://github.com/VirgilSecurity/virgil-crypto-javascript/tree/master/packages/crypto-types",
"author": "Virgil Security Inc. <support@virgilsecurity.com>",
"license": "BSD-3-Clause",
"publishConfig": {
"access": "public"
}
}
8 changes: 4 additions & 4 deletions packages/sdk-crypto/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@virgilsecurity/sdk-crypto",
"version": "0.3.0",
"version": "0.4.0",
"description": "Virgil JavaScript Crypto Library is a high-level cryptographic library that allows you to perform all necessary operations for secure storing and transferring data and everything required to become HIPAA and GDPR compliant.",
"main": "./dist/sdk-crypto.cjs.js",
"module": "./dist/sdk-crypto.es.js",
Expand All @@ -16,11 +16,11 @@
"clean": "rimraf .rpt2_cache dist",
"prepare": "npm run clean && npm run build"
},
"peerDependencies": {
"@virgilsecurity/base-crypto": "^0.3.0"
"dependencies": {
"@virgilsecurity/crypto-types": "^0.1.0",
"@virgilsecurity/data-utils": "^0.1.0"
},
"devDependencies": {
"@virgilsecurity/base-crypto": "^0.3.0",
"rimraf": "^2.6.3",
"rollup": "^1.14.6",
"rollup-plugin-typescript2": "^0.21.1",
Expand Down
21 changes: 12 additions & 9 deletions packages/sdk-crypto/src/VirgilAccessTokenSigner.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { VirgilCrypto, VirgilPrivateKey, VirgilPublicKey } from '@virgilsecurity/base-crypto';
import { dataToUint8Array } from '@virgilsecurity/data-utils';

import { Data } from './types';
import { IPrivateKey, IPublicKey, ICrypto, IAccessTokenSigner, Data } from './types';

export class VirgilAccessTokenSigner {
readonly virgilCrypto: VirgilCrypto;
export class VirgilAccessTokenSigner implements IAccessTokenSigner {
readonly virgilCrypto: ICrypto;

constructor(virgilCrypto: VirgilCrypto) {
constructor(virgilCrypto: ICrypto) {
if (virgilCrypto == null) {
throw new Error('`virgilCrypto` is required');
}
Expand All @@ -16,11 +16,14 @@ export class VirgilAccessTokenSigner {
return 'VEDS512';
}

generateTokenSignature(token: Data, privateKey: VirgilPrivateKey) {
return this.virgilCrypto.calculateSignature(token, privateKey);
generateTokenSignature(token: Data, privateKey: IPrivateKey) {
const myToken = dataToUint8Array(token, 'utf8');
return this.virgilCrypto.calculateSignature(myToken, privateKey);
}

verifyTokenSignature(token: Data, signature: Data, publicKey: VirgilPublicKey) {
return this.virgilCrypto.verifySignature(token, signature, publicKey);
verifyTokenSignature(token: Data, signature: Data, publicKey: IPublicKey) {
const myToken = dataToUint8Array(token, 'utf8');
const mySignature = dataToUint8Array(signature, 'base64');
return this.virgilCrypto.verifySignature(myToken, mySignature, publicKey);
}
};
29 changes: 17 additions & 12 deletions packages/sdk-crypto/src/VirgilCardCrypto.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,39 @@
import { VirgilCrypto, VirgilPrivateKey, VirgilPublicKey } from '@virgilsecurity/base-crypto';
import { dataToUint8Array } from '@virgilsecurity/data-utils';

import { Data } from './types';
import { IPrivateKey, IPublicKey, ICrypto, ICardCrypto, Data } from './types';

export class VirgilCardCrypto {
readonly virgilCrypto: VirgilCrypto;
export class VirgilCardCrypto implements ICardCrypto {
readonly virgilCrypto: ICrypto;

constructor(virgilCrypto: VirgilCrypto) {
constructor(virgilCrypto: ICrypto) {
if (virgilCrypto == null) {
throw new Error('`virgilCrypto` is required');
}
this.virgilCrypto = virgilCrypto;
}

generateSignature(data: Data, privateKey: VirgilPrivateKey) {
return this.virgilCrypto.calculateSignature(data, privateKey);
generateSignature(data: Data, privateKey: IPrivateKey) {
const myData = dataToUint8Array(data, 'utf8');
return this.virgilCrypto.calculateSignature(myData, privateKey);
}

verifySignature(data: Data, signature: Data, publicKey: VirgilPublicKey) {
return this.virgilCrypto.verifySignature(data, signature, publicKey);
verifySignature(data: Data, signature: Data, publicKey: IPublicKey) {
const myData = dataToUint8Array(data, 'utf8');
const mySignature = dataToUint8Array(signature, 'base64');
return this.virgilCrypto.verifySignature(myData, mySignature, publicKey);
}

exportPublicKey(publicKey: VirgilPublicKey) {
exportPublicKey(publicKey: IPublicKey) {
return this.virgilCrypto.exportPublicKey(publicKey);
}

importPublicKey(publicKeyData: Data) {
return this.virgilCrypto.importPublicKey(publicKeyData);
const myPublicKeyData = dataToUint8Array(publicKeyData, 'base64');
return this.virgilCrypto.importPublicKey(myPublicKeyData);
}

generateSha512(data: Data) {
return this.virgilCrypto.calculateHash(data, this.virgilCrypto.hashAlgorithm.SHA512);
const myData = dataToUint8Array(data, 'utf8');
return this.virgilCrypto.calculateHash(myData);
}
}
15 changes: 8 additions & 7 deletions packages/sdk-crypto/src/VirgilPrivateKeyExporter.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import { VirgilCrypto, VirgilPrivateKey } from '@virgilsecurity/base-crypto';
import { dataToUint8Array } from '@virgilsecurity/data-utils';

import { Data } from './types';
import { IPrivateKey, ICrypto, IPrivateKeyExporter, Data } from './types';

export class VirgilPrivateKeyExporter {
readonly virgilCrypto: VirgilCrypto;
export class VirgilPrivateKeyExporter implements IPrivateKeyExporter {
readonly virgilCrypto: ICrypto;

constructor(virgilCrypto: VirgilCrypto) {
constructor(virgilCrypto: ICrypto) {
if (virgilCrypto == null) {
throw new Error('`virgilCrypto` is required');
}
this.virgilCrypto = virgilCrypto;
}

exportPrivateKey(key: VirgilPrivateKey) {
exportPrivateKey(key: IPrivateKey) {
return this.virgilCrypto.exportPrivateKey(key);
}

importPrivateKey(keyData: Data) {
return this.virgilCrypto.importPrivateKey(keyData);
const myKeyData = dataToUint8Array(keyData, 'base64');
return this.virgilCrypto.importPrivateKey(myKeyData);
}
}
7 changes: 7 additions & 0 deletions packages/sdk-crypto/src/types.ts
Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
export type IPrivateKey = import('@virgilsecurity/crypto-types').IPrivateKey;
export type IPublicKey = import('@virgilsecurity/crypto-types').IPublicKey;
export type ICrypto = import('@virgilsecurity/crypto-types').ICrypto;
export type IAccessTokenSigner = import('@virgilsecurity/crypto-types').IAccessTokenSigner;
export type ICardCrypto = import('@virgilsecurity/crypto-types').ICardCrypto;
export type IPrivateKeyExporter = import('@virgilsecurity/crypto-types').IPrivateKeyExporter;

export type Data = import('@virgilsecurity/data-utils').Data;
6 changes: 3 additions & 3 deletions packages/virgil-crypto/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "virgil-crypto",
"version": "4.0.0-alpha.2",
"version": "4.0.0-alpha.3",
"description": "Virgil JavaScript Crypto Library is a high-level cryptographic library that allows you to perform all necessary operations for secure storing and transferring data and everything required to become HIPAA and GDPR compliant.",
"main": "./dist/node.cjs.js",
"module": "./dist/node.es.js",
Expand All @@ -25,9 +25,9 @@
"prepare": "npm run clean && npm run build"
},
"dependencies": {
"@virgilsecurity/base-crypto": "^0.3.0",
"@virgilsecurity/base-crypto": "^0.4.0",
"@virgilsecurity/core-foundation": "^0.1.0",
"@virgilsecurity/sdk-crypto": "^0.3.0"
"@virgilsecurity/sdk-crypto": "^0.4.0"
},
"devDependencies": {
"lodash": "^4.17.15",
Expand Down
2 changes: 1 addition & 1 deletion packages/webpack-demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"build": "webpack"
},
"dependencies": {
"virgil-crypto": "^4.0.0-alpha.2"
"virgil-crypto": "^4.0.0-alpha.3"
},
"devDependencies": {
"file-loader": "^4.1.0",
Expand Down

0 comments on commit 52ffd8d

Please sign in to comment.