From 23ee44e0e6afd84ed7f8580856384af9ec280609 Mon Sep 17 00:00:00 2001 From: Sambo Chea Date: Mon, 14 Feb 2022 15:59:51 +0700 Subject: [PATCH] Task: Completed tests and fixed for default and e2e encryption module --- dummy/ase-256-16.key | 2 +- dummy/ase-256-32.key | 2 +- dummy/ase-256.json | 4 +- package.json | 1 + src/crypto/provider/default.provider.ts | 29 ++++-- src/crypto/provider/e2e.provider.ts | 27 ++++-- src/index.ts | 8 +- test/crypto.test.ts | 112 ++++++++++++++++++++++- test/validate-ase.test.ts | 21 ++--- tsconfig.json | 114 ++++-------------------- 10 files changed, 188 insertions(+), 132 deletions(-) diff --git a/dummy/ase-256-16.key b/dummy/ase-256-16.key index afea216..208b7da 100644 --- a/dummy/ase-256-16.key +++ b/dummy/ase-256-16.key @@ -1 +1 @@ -6ef348dd9b0b4f29e47f4f1c9d7b6255 \ No newline at end of file +FEFM9AY2m5jDq6GZ+CfLIA== \ No newline at end of file diff --git a/dummy/ase-256-32.key b/dummy/ase-256-32.key index e9456e2..87dacda 100644 --- a/dummy/ase-256-32.key +++ b/dummy/ase-256-32.key @@ -1 +1 @@ -56773703de5fdbe4292749c2505b6059a6698aad7881065df0818442f7d559b2 \ No newline at end of file +67rKmuc6DiDukE0jsUP421Eizo4CreaL6Q7Pg/NmH/s= \ No newline at end of file diff --git a/dummy/ase-256.json b/dummy/ase-256.json index acc2514..8e4efb2 100644 --- a/dummy/ase-256.json +++ b/dummy/ase-256.json @@ -1,4 +1,4 @@ { - "key": "56773703de5fdbe4292749c2505b6059a6698aad7881065df0818442f7d559b2", - "iv": "6ef348dd9b0b4f29e47f4f1c9d7b6255" + "key": "67rKmuc6DiDukE0jsUP421Eizo4CreaL6Q7Pg/NmH/s=", + "iv": "FEFM9AY2m5jDq6GZ+CfLIA==" } diff --git a/package.json b/package.json index c6e8339..4a83569 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "prettier": "2.3.2", "ts-jest": "^27.1.3", "ts-node-dev": "^1.1.8", + "tsconfig-paths": "^3.12.0", "typescript": "^4.4.2" }, "lint-staged": { diff --git a/src/crypto/provider/default.provider.ts b/src/crypto/provider/default.provider.ts index 101c04e..e532d7d 100644 --- a/src/crypto/provider/default.provider.ts +++ b/src/crypto/provider/default.provider.ts @@ -1,20 +1,33 @@ -import { assertNotNullOrUndefined } from "../../util" +import { + assertNotNullOrUndefined, + readFileToJson, + readFileToString, +} from "../../util" import { ICryptoProvider } from "../provider.crypto" import { decrypt as dec, encrypt as enc } from "./../core/default.crypto" +interface DefaultCryptoProviderOptions { + key?: string | Buffer | null | undefined + iv?: string | Buffer | null | undefined + keyiVPath?: string | null | undefined + jsonPath?: string | null | undefined +} + export class DefaultCryptoProvider implements ICryptoProvider { private _key: string | Buffer | null | undefined private _iv: string | Buffer | null | undefined - constructor( - key?: string | Buffer | null, - iv?: string | Buffer | null, - keyJsonFilePath?: string | null - ) { - if (keyJsonFilePath) { - const json: any = require(keyJsonFilePath) + constructor(options: DefaultCryptoProviderOptions) { + const { key, iv, keyiVPath, jsonPath } = options + + if (keyiVPath) { + const json: any = readFileToJson(keyiVPath) this._key = json.key this._iv = json.iv + } else if (jsonPath) { + const json: any = readFileToJson(jsonPath) + this._key = readFileToString(json.keyPath) + this._iv = readFileToString(json.ivPath) } else { this._key = key this._iv = iv || key diff --git a/src/crypto/provider/e2e.provider.ts b/src/crypto/provider/e2e.provider.ts index de91385..db99a73 100644 --- a/src/crypto/provider/e2e.provider.ts +++ b/src/crypto/provider/e2e.provider.ts @@ -2,21 +2,32 @@ import { e2eDecrypt, e2eEncrypt } from ".." import { assertNotNullOrUndefined, isNullOrUndefinedOrEmpty, + readFileToJson, readFileToString, } from "../../util" import { ICryptoProvider } from "../provider.crypto" +interface E2ECryptoProviderOptions { + privateKey?: string | Buffer | null | undefined + publicKey?: string | Buffer | null | undefined + privateKeyPath?: string | null | undefined + publicKeyPath?: string | null | undefined + jsonPath?: string | null | undefined +} + export class E2ECryptoProvider implements ICryptoProvider { private privateKey: string | Buffer | null | undefined private publicKey: string | Buffer | null | undefined - constructor( - privateKey?: string | Buffer | null | undefined, - publicKey?: string | Buffer | null | undefined, - privateKeyPath?: string | null | undefined, - publicKeyPath?: string | null | undefined, - jsonPath?: string | null | undefined - ) { + constructor(options: E2ECryptoProviderOptions) { + const { + privateKey, + publicKey, + privateKeyPath, + publicKeyPath, + jsonPath, + } = options + let isPrivateKeyInitialized = false let isPublicKeyInitialized = false if (privateKeyPath) { @@ -30,7 +41,7 @@ export class E2ECryptoProvider implements ICryptoProvider { } if (!isPrivateKeyInitialized && !isPublicKeyInitialized && jsonPath) { - const json = require(jsonPath) + const json = readFileToJson(jsonPath) if (json.privateKey) { this.privateKey = json.privateKey isPrivateKeyInitialized = !isNullOrUndefinedOrEmpty( diff --git a/src/index.ts b/src/index.ts index 336ce12..99c4099 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,7 @@ -export {} +import { + CryptoProvider, + DefaultCryptoProvider, + E2ECryptoProvider, +} from "./crypto" + +export { CryptoProvider, DefaultCryptoProvider, E2ECryptoProvider } diff --git a/test/crypto.test.ts b/test/crypto.test.ts index b514102..ec6a1ba 100644 --- a/test/crypto.test.ts +++ b/test/crypto.test.ts @@ -1,3 +1,111 @@ -test("test", () => { - expect(1).toBe(1) +import { + CryptoProvider, + DefaultCryptoProvider, + E2ECryptoProvider, +} from "../src" + +// DefaultCryptoProvider +const key = "67rKmuc6DiDukE0jsUP421Eizo4CreaL6Q7Pg/NmH/s=" +const iv = "FEFM9AY2m5jDq6GZ+CfLIA==" +const keyJsonFileValuesDefault = "./dummy/ase-256.json" +const keyJsonFileKeysDefault = "./dummy/ase-256.keys.json" + +// E2ECryptoProvider +const PRIVATE_KEY_VALUE = + "-----BEGIN RSA PRIVATE KEY----- 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 -----END RSA PRIVATE KEY-----" +const PUBLIC_KEY_VALUE = + "-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0PfjoO54+QZui0EfssxG vHOm8bhDzQIIDcH/jUvN25E28MYFVOy1CgDk2n25eakhaaK8ogmP9PfczGpLalCG fVACCXNQFc60k6zjQY8lNY6DY2NJ4qGR5OZsA2lhXgYtptqHCvGnqqIBpfYkddKz ZOjQGZvUQ3XVZvEpkDuJGvPFW/+B4NjsgSK0bJzygnJnbJYUHezBVRQynJRIxJmC ZfuhqJM2w0FLB1/8TZVn9w3OC3DXavU7DfEGOlJb9evRrvdVGag14Pcy6SXoZ1jF scRJuXyWy1mLooTx6osj7V6VYhnKZJrlRTAUxnGZLuBdqYztU7SNhZfmuCSIS+nd uqrdM9P3NPqgOqmIMTps0fcQg0DU5CFdWIy/FecErg1YaAhbEOqQO4QQlTmMDFFJ 63Y9rE3s9W5k30ZP8Ydxa8UT3su36ePzUGzWXUu2M8ffc8nnfiAvh1XgJiBqDJkm VEG3GzmDL0BfDLqMnhBJ2UaQPXK9w52masDgvHvyMEZoBaFBHtVICl4Jek6O9KSz 1uWcR/+C72fBEU4iA/h4rdH4PVMTP99YhN+Zd4w9UM2tITafCM3RdNbKZ3f+oXfF CjqNKiJI/VSLkErOKQnw/AiGT8dpmmFGl+DazUsYNEP3ScFUAI+ZqsUyh5q9SoCn YmcpuMbXLRLVYQJQASkYwBkCAwEAAQ== -----END PUBLIC KEY-----" +const privatePublicJsonFileValuesDefault = "./dummy/private-public.json" +const privatePublicJsonFileKeysDefault = "./dummy/private-public.keys.json" +const privateKeyPath = "./dummy/private-key.pem" +const publicKeyPath = "./dummy/public-key.pem" + +// Text +const TEXT = `Hello World and Then...!` + +test("test: Default Encryption From Values", () => { + const provider = CryptoProvider.newInstance( + new DefaultCryptoProvider({ + key: key, + iv: iv, + }) + ) + + const encrypted = provider.encrypt(TEXT) + const decrypted = provider.decrypt(encrypted) + expect(decrypted).toBe(TEXT) +}) + +test("test: Default Encryption From JsonFile Values", () => { + const provider = CryptoProvider.newInstance( + new DefaultCryptoProvider({ + keyiVPath: keyJsonFileValuesDefault, + }) + ) + + const encrypted = provider.encrypt(TEXT) + const decrypted = provider.decrypt(encrypted) + expect(decrypted).toBe(TEXT) +}) + +test("test: Default Encryption From JsonFile Keys Path", () => { + const provider = CryptoProvider.newInstance( + new DefaultCryptoProvider({ + jsonPath: keyJsonFileKeysDefault, + }) + ) + + const encrypted = provider.encrypt(TEXT) + const decrypted = provider.decrypt(encrypted) + expect(decrypted).toBe(TEXT) +}) + +test("test: E2E Encryption From Values", () => { + const provider = CryptoProvider.newInstance( + new E2ECryptoProvider({ + publicKey: PUBLIC_KEY_VALUE, + privateKey: PRIVATE_KEY_VALUE, + }) + ) + + const encrypted = provider.encrypt(TEXT) + const decrypted = provider.decrypt(encrypted) + expect(decrypted).toBe(TEXT) +}) + +test("test: E2E Encryption From Files Values", () => { + const provider = CryptoProvider.newInstance( + new E2ECryptoProvider({ + privateKeyPath: privateKeyPath, + publicKeyPath: publicKeyPath, + }) + ) + + const encrypted = provider.encrypt(TEXT) + const decrypted = provider.decrypt(encrypted) + expect(decrypted).toBe(TEXT) +}) + +test("test: E2E Encryption From JsonFile Values", () => { + const provider = CryptoProvider.newInstance( + new E2ECryptoProvider({ + jsonPath: privatePublicJsonFileValuesDefault, + }) + ) + + const encrypted = provider.encrypt(TEXT) + const decrypted = provider.decrypt(encrypted) + expect(decrypted).toBe(TEXT) +}) + +test("test: E2E Encryption From JsonFile Keys Path", () => { + const provider = CryptoProvider.newInstance( + new E2ECryptoProvider({ + jsonPath: privatePublicJsonFileKeysDefault, + }) + ) + + const encrypted = provider.encrypt(TEXT) + const decrypted = provider.decrypt(encrypted) + expect(decrypted).toBe(TEXT) }) diff --git a/test/validate-ase.test.ts b/test/validate-ase.test.ts index de7685f..268b45f 100644 --- a/test/validate-ase.test.ts +++ b/test/validate-ase.test.ts @@ -1,31 +1,28 @@ import { readFileToString, readFileToJson } from "./../src/util" +const key = "67rKmuc6DiDukE0jsUP421Eizo4CreaL6Q7Pg/NmH/s=" +const iv = "FEFM9AY2m5jDq6GZ+CfLIA==" + test("test: readFileToString", () => { const value1 = readFileToString("./dummy/ase-256-32.key") const value2 = readFileToString("./dummy/ase-256-16.key") - expect(value1).toBe( - "56773703de5fdbe4292749c2505b6059a6698aad7881065df0818442f7d559b2" - ) - expect(value2).toBe("6ef348dd9b0b4f29e47f4f1c9d7b6255") + expect(value1).toBe(key) + expect(value2).toBe(iv) }) test("test: readFileToString with jsonFile key-paths", () => { const json = readFileToJson("./dummy/ase-256.keys.json") const value1 = readFileToString(json.keyPath) const value2 = readFileToString(json.ivPath) - expect(value1).toBe( - "56773703de5fdbe4292749c2505b6059a6698aad7881065df0818442f7d559b2" - ) - expect(value2).toBe("6ef348dd9b0b4f29e47f4f1c9d7b6255") + expect(value1).toBe(key) + expect(value2).toBe(iv) }) test("test: readFileToString with jsonFile values", () => { const json = readFileToJson("./dummy/ase-256.json") const value1 = json.key const value2 = json.iv - expect(value1).toBe( - "56773703de5fdbe4292749c2505b6059a6698aad7881065df0818442f7d559b2" - ) - expect(value2).toBe("6ef348dd9b0b4f29e47f4f1c9d7b6255") + expect(value1).toBe(key) + expect(value2).toBe(iv) }) diff --git a/tsconfig.json b/tsconfig.json index 6b84bab..d53706e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,100 +1,20 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - "outDir": "dist", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - "lib": ["ES2015"], - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": false, + "outDir": "dist", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "lib": ["ES2015"], + "skipLibCheck": true, + "experimentalDecorators": true, + "paths": { + "@/*": ["./*"] + } }, - } \ No newline at end of file + "include": ["src/**/*"], + "exclude": ["node_modules"] +}