cas-typescript-sdk 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Cargo.toml CHANGED
@@ -21,6 +21,7 @@ scrypt = "0.11.0"
21
21
  sha3 = "0.10.8"
22
22
  x25519-dalek = {version = "2.0.0", features = ["static_secrets"]}
23
23
  rand_07 = { package = "rand", version = "0.7.0" }
24
+ ascon-aead = "0.4.2"
24
25
 
25
26
  [profile.dev.package.num-bigint-dig]
26
27
  opt-level = 3
package/index.d.ts CHANGED
@@ -37,6 +37,10 @@ export function sha512Ed25519DigitalSignature(dataToSign: Array<number>): Shaed2
37
37
  export function sha512Ed25519DigitalSignatureVerify(publicKey: Array<number>, dataToVerify: Array<number>, signature: Array<number>): boolean
38
38
  export function sha256Ed25519DigitalSignature(dataToSign: Array<number>): Shaed25519DalekDigitalSignatureResult
39
39
  export function sha256Ed25519DigitalSignatureVerify(publicKey: Array<number>, dataToVerify: Array<number>, signature: Array<number>): boolean
40
+ export function ascon128KeyGenerate(): Array<number>
41
+ export function ascon128NonceGenerate(): Array<number>
42
+ export function ascon128Encrypt(key: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>
43
+ export function ascon128Decrypt(key: Array<number>, nonce: Array<number>, ciphertext: Array<number>): Array<number>
40
44
  export type x25519SecretPublicKeyResult = X25519SecretPublicKeyResult
41
45
  export class X25519SecretPublicKeyResult {
42
46
  publicKey: Array<number>
package/index.node CHANGED
Binary file
package/lib/index.d.ts CHANGED
@@ -5,4 +5,5 @@ import { AESWrapper } from "./symmetric/index";
5
5
  import { RsaKeyPairResult, RSAWrapper } from "./asymmetric/index";
6
6
  import { AesRsaHybridEncryptResult, AESRSAHybridInitializer, HybridEncryptionWrapper } from "./hybrid/index";
7
7
  import { DigitalSignatureFactory, DigitalSignatureSHA256Wrapper, DigitalSignatureSHA512Wrapper, DigitalSignatureType } from "./digital-signature";
8
- export { AesRsaHybridEncryptResult, AESRSAHybridInitializer, AESWrapper, Argon2Wrapper, BCryptWrapper, HasherFactory, HasherType, HybridEncryptionWrapper, PasswordHasherFactory, PasswordHasherType, RsaKeyPairResult, RSAWrapper, ScryptWrapper, SHAWrapper, X25519Wrapper, DigitalSignatureFactory, DigitalSignatureSHA256Wrapper, DigitalSignatureSHA512Wrapper, DigitalSignatureType, };
8
+ import { AsconWrapper } from "./sponges/index";
9
+ export { AesRsaHybridEncryptResult, AESRSAHybridInitializer, AESWrapper, Argon2Wrapper, AsconWrapper, BCryptWrapper, DigitalSignatureFactory, DigitalSignatureSHA256Wrapper, DigitalSignatureSHA512Wrapper, DigitalSignatureType, HasherFactory, HasherType, HybridEncryptionWrapper, PasswordHasherFactory, PasswordHasherType, RsaKeyPairResult, RSAWrapper, ScryptWrapper, SHAWrapper, X25519Wrapper, };
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DigitalSignatureType = exports.DigitalSignatureSHA512Wrapper = exports.DigitalSignatureSHA256Wrapper = exports.DigitalSignatureFactory = exports.X25519Wrapper = exports.SHAWrapper = exports.ScryptWrapper = exports.RSAWrapper = exports.RsaKeyPairResult = exports.PasswordHasherType = exports.PasswordHasherFactory = exports.HybridEncryptionWrapper = exports.HasherType = exports.HasherFactory = exports.BCryptWrapper = exports.Argon2Wrapper = exports.AESWrapper = exports.AESRSAHybridInitializer = exports.AesRsaHybridEncryptResult = void 0;
3
+ exports.X25519Wrapper = exports.SHAWrapper = exports.ScryptWrapper = exports.RSAWrapper = exports.RsaKeyPairResult = exports.PasswordHasherType = exports.PasswordHasherFactory = exports.HybridEncryptionWrapper = exports.HasherType = exports.HasherFactory = exports.DigitalSignatureType = exports.DigitalSignatureSHA512Wrapper = exports.DigitalSignatureSHA256Wrapper = exports.DigitalSignatureFactory = exports.BCryptWrapper = exports.AsconWrapper = exports.Argon2Wrapper = exports.AESWrapper = exports.AESRSAHybridInitializer = exports.AesRsaHybridEncryptResult = void 0;
4
4
  const index_1 = require("./password-hashers/index");
5
5
  Object.defineProperty(exports, "Argon2Wrapper", { enumerable: true, get: function () { return index_1.Argon2Wrapper; } });
6
6
  Object.defineProperty(exports, "BCryptWrapper", { enumerable: true, get: function () { return index_1.BCryptWrapper; } });
@@ -27,3 +27,5 @@ Object.defineProperty(exports, "DigitalSignatureFactory", { enumerable: true, ge
27
27
  Object.defineProperty(exports, "DigitalSignatureSHA256Wrapper", { enumerable: true, get: function () { return digital_signature_1.DigitalSignatureSHA256Wrapper; } });
28
28
  Object.defineProperty(exports, "DigitalSignatureSHA512Wrapper", { enumerable: true, get: function () { return digital_signature_1.DigitalSignatureSHA512Wrapper; } });
29
29
  Object.defineProperty(exports, "DigitalSignatureType", { enumerable: true, get: function () { return digital_signature_1.DigitalSignatureType; } });
30
+ const index_7 = require("./sponges/index");
31
+ Object.defineProperty(exports, "AsconWrapper", { enumerable: true, get: function () { return index_7.AsconWrapper; } });
@@ -0,0 +1,6 @@
1
+ export declare class AsconWrapper {
2
+ ascon128Key(): Array<number>;
3
+ ascon128Nonce(): Array<number>;
4
+ ascon128Encrypt(key: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>;
5
+ ascon128Decrypt(key: Array<number>, nonce: Array<number>, ciphertext: Array<number>): Array<number>;
6
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AsconWrapper = void 0;
4
+ const index_1 = require("../../index");
5
+ class AsconWrapper {
6
+ ascon128Key() {
7
+ return (0, index_1.ascon128KeyGenerate)();
8
+ }
9
+ ascon128Nonce() {
10
+ return (0, index_1.ascon128NonceGenerate)();
11
+ }
12
+ ascon128Encrypt(key, nonce, plaintext) {
13
+ if (!key || key.length === 0) {
14
+ throw new Error("Key is required");
15
+ }
16
+ if (!nonce || nonce.length === 0) {
17
+ throw new Error("Nonce is required");
18
+ }
19
+ if (!plaintext || plaintext.length === 0) {
20
+ throw new Error("Plaintext is required");
21
+ }
22
+ return (0, index_1.ascon128Encrypt)(key, nonce, plaintext);
23
+ }
24
+ ascon128Decrypt(key, nonce, ciphertext) {
25
+ if (!key || key.length === 0) {
26
+ throw new Error("Key is required");
27
+ }
28
+ if (!nonce || nonce.length === 0) {
29
+ throw new Error("Nonce is required");
30
+ }
31
+ if (!ciphertext || ciphertext.length === 0) {
32
+ throw new Error("Ciphertext is required");
33
+ }
34
+ return (0, index_1.ascon128Decrypt)(key, nonce, ciphertext);
35
+ }
36
+ }
37
+ exports.AsconWrapper = AsconWrapper;
@@ -0,0 +1,2 @@
1
+ import { AsconWrapper } from "./ascon-wrapper";
2
+ export { AsconWrapper };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AsconWrapper = void 0;
4
+ const ascon_wrapper_1 = require("./ascon-wrapper");
5
+ Object.defineProperty(exports, "AsconWrapper", { enumerable: true, get: function () { return ascon_wrapper_1.AsconWrapper; } });
@@ -1,6 +1,26 @@
1
1
  import { AesKeyFromX25519SharedSecret } from "../../index";
2
+ /**
3
+ * @description A wrapper class that contains methods to construct keys, nonces, and methods to encrypt and decrypt with AES-128-GCM and AES-256-GCM
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const nonce = aesWrapper.generateAESNonce();
8
+ const key = aesWrapper.aes128Key();
9
+ const textEncoder = new TextEncoder();
10
+ const array = Array.from(textEncoder.encode("Hello World"));
11
+ const encrypted = aesWrapper.aes128Encrypt(key, nonce, array);
12
+ * ```
13
+ */
2
14
  export declare class AESWrapper {
15
+ /**
16
+ * @description Generates a 128 bit AES key
17
+ * @returns returns a 128 bit AES key
18
+ */
3
19
  aes128Key(): Array<number>;
20
+ /**
21
+ * @description Generates a 256 bit AES key
22
+ * @returns returns a 256 bit AES key
23
+ */
4
24
  aes256Key(): Array<number>;
5
25
  generateAESNonce(): Array<number>;
6
26
  aes128Encrypt(aesKey: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>;
@@ -2,10 +2,30 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AESWrapper = void 0;
4
4
  const index_1 = require("../../index");
5
+ /**
6
+ * @description A wrapper class that contains methods to construct keys, nonces, and methods to encrypt and decrypt with AES-128-GCM and AES-256-GCM
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const nonce = aesWrapper.generateAESNonce();
11
+ const key = aesWrapper.aes128Key();
12
+ const textEncoder = new TextEncoder();
13
+ const array = Array.from(textEncoder.encode("Hello World"));
14
+ const encrypted = aesWrapper.aes128Encrypt(key, nonce, array);
15
+ * ```
16
+ */
5
17
  class AESWrapper {
18
+ /**
19
+ * @description Generates a 128 bit AES key
20
+ * @returns returns a 128 bit AES key
21
+ */
6
22
  aes128Key() {
7
23
  return (0, index_1.aes128Key)();
8
24
  }
25
+ /**
26
+ * @description Generates a 256 bit AES key
27
+ * @returns returns a 256 bit AES key
28
+ */
9
29
  aes256Key() {
10
30
  return (0, index_1.aes256Key)();
11
31
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  {
3
3
  "name": "cas-typescript-sdk",
4
- "version": "1.0.18",
4
+ "version": "1.0.20",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
package/src/lib.rs CHANGED
@@ -33,3 +33,8 @@ mod digital_signature {
33
33
  pub mod sha_512_ed25519;
34
34
  pub mod sha_256_ed25519;
35
35
  }
36
+
37
+ mod sponges {
38
+ pub mod cas_ascon_aead;
39
+ pub mod ascon_aead;
40
+ }
@@ -0,0 +1,84 @@
1
+
2
+ use aes_gcm::AeadCore;
3
+ use ascon_aead::{aead::{generic_array::GenericArray, Aead, KeyInit, OsRng}, Ascon128};
4
+ use napi_derive::napi;
5
+
6
+ use super::cas_ascon_aead::{CASAsconAead};
7
+ pub struct AsconAead;
8
+
9
+ impl CASAsconAead for AsconAead {
10
+ fn encrypt(key: Vec<u8>, nonce: Vec<u8>, plaintext: Vec<u8>) -> Vec<u8> {
11
+ let key_generic_array = GenericArray::from_slice(&key);
12
+ let nonce_generic_array = GenericArray::from_slice(&nonce);
13
+ let cipher = Ascon128::new(key_generic_array);
14
+ let ciphertext = cipher.encrypt(&nonce_generic_array, plaintext.as_ref()).unwrap();
15
+ ciphertext
16
+ }
17
+
18
+ fn decrypt(key: Vec<u8>, nonce: Vec<u8>, ciphertext: Vec<u8>) -> Vec<u8> {
19
+ let key_generic_array = GenericArray::from_slice(&key);
20
+ let nonce_generic_array = GenericArray::from_slice(&nonce);
21
+ let cipher = Ascon128::new(key_generic_array);
22
+ let plaintext = cipher.decrypt(&nonce_generic_array, ciphertext.as_ref()).unwrap();
23
+ plaintext
24
+ }
25
+
26
+ fn generate_key() -> Vec<u8> {
27
+ return Ascon128::generate_key(&mut OsRng).to_vec();
28
+ }
29
+
30
+ fn generate_nonce() -> Vec<u8> {
31
+ return Ascon128::generate_nonce(&mut OsRng).to_vec();
32
+ }
33
+ }
34
+
35
+ #[napi]
36
+ pub fn ascon128_key_generate() -> Vec<u8> {
37
+ return AsconAead::generate_key();
38
+ }
39
+
40
+ #[test]
41
+ fn test_ascon128_key_generate() {
42
+ let key = ascon128_key_generate();
43
+ assert_eq!(key.len(), 16);
44
+ }
45
+
46
+ #[napi]
47
+ pub fn ascon128_nonce_generate() -> Vec<u8> {
48
+ return AsconAead::generate_nonce();
49
+ }
50
+
51
+ #[test]
52
+ pub fn test_ascon128_nonce_generate() {
53
+ let nonce = ascon128_nonce_generate();
54
+ assert_eq!(nonce.len(), 16);
55
+ }
56
+
57
+ #[napi]
58
+ pub fn ascon128_encrypt(key: Vec<u8>, nonce: Vec<u8>, plaintext: Vec<u8>) -> Vec<u8> {
59
+ return AsconAead::encrypt(key, nonce, plaintext);
60
+ }
61
+
62
+ #[test]
63
+ pub fn test_ascon128_encrypt() {
64
+ let key = AsconAead::generate_key();
65
+ let nonce = AsconAead::generate_nonce();
66
+ let plaintext = b"Hello, World!".to_vec();
67
+ let ciphertext = ascon128_encrypt(key.clone(), nonce.clone(), plaintext.clone());
68
+ assert_ne!(ciphertext, plaintext);
69
+ }
70
+
71
+ #[napi]
72
+ pub fn ascon128_decrypt(key: Vec<u8>, nonce: Vec<u8>, ciphertext: Vec<u8>) -> Vec<u8> {
73
+ return AsconAead::decrypt(key, nonce, ciphertext);
74
+ }
75
+
76
+ #[test]
77
+ pub fn test_ascon128_decrypt() {
78
+ let key = AsconAead::generate_key();
79
+ let nonce = AsconAead::generate_nonce();
80
+ let plaintext = b"Hello, World!".to_vec();
81
+ let ciphertext = ascon128_encrypt(key.clone(), nonce.clone(), plaintext.clone());
82
+ let decrypted = ascon128_decrypt(key.clone(), nonce.clone(), ciphertext.clone());
83
+ assert_eq!(decrypted, plaintext);
84
+ }
@@ -0,0 +1,6 @@
1
+ pub trait CASAsconAead {
2
+ fn generate_key() -> Vec<u8>;
3
+ fn generate_nonce() -> Vec<u8>;
4
+ fn encrypt(key: Vec<u8>, nonce: Vec<u8>, plaintext: Vec<u8>) -> Vec<u8>;
5
+ fn decrypt(key: Vec<u8>, nonce: Vec<u8>, ciphertext: Vec<u8>) -> Vec<u8>;
6
+ }
package/src-ts/index.ts CHANGED
@@ -20,13 +20,19 @@ import {
20
20
  DigitalSignatureSHA512Wrapper,
21
21
  DigitalSignatureType,
22
22
  } from "./digital-signature";
23
+ import { AsconWrapper } from "./sponges/index";
23
24
 
24
25
  export {
25
26
  AesRsaHybridEncryptResult,
26
27
  AESRSAHybridInitializer,
27
28
  AESWrapper,
28
29
  Argon2Wrapper,
30
+ AsconWrapper,
29
31
  BCryptWrapper,
32
+ DigitalSignatureFactory,
33
+ DigitalSignatureSHA256Wrapper,
34
+ DigitalSignatureSHA512Wrapper,
35
+ DigitalSignatureType,
30
36
  HasherFactory,
31
37
  HasherType,
32
38
  HybridEncryptionWrapper,
@@ -37,8 +43,4 @@ export {
37
43
  ScryptWrapper,
38
44
  SHAWrapper,
39
45
  X25519Wrapper,
40
- DigitalSignatureFactory,
41
- DigitalSignatureSHA256Wrapper,
42
- DigitalSignatureSHA512Wrapper,
43
- DigitalSignatureType,
44
46
  };
@@ -0,0 +1,50 @@
1
+ import {
2
+ ascon128Decrypt,
3
+ ascon128Encrypt,
4
+ ascon128KeyGenerate,
5
+ ascon128NonceGenerate,
6
+ } from "../../index";
7
+
8
+ export class AsconWrapper {
9
+ ascon128Key(): Array<number> {
10
+ return ascon128KeyGenerate();
11
+ }
12
+
13
+ ascon128Nonce(): Array<number> {
14
+ return ascon128NonceGenerate();
15
+ }
16
+
17
+ ascon128Encrypt(
18
+ key: Array<number>,
19
+ nonce: Array<number>,
20
+ plaintext: Array<number>,
21
+ ): Array<number> {
22
+ if (!key || key.length === 0) {
23
+ throw new Error("Key is required");
24
+ }
25
+ if (!nonce || nonce.length === 0) {
26
+ throw new Error("Nonce is required");
27
+ }
28
+ if (!plaintext || plaintext.length === 0) {
29
+ throw new Error("Plaintext is required");
30
+ }
31
+ return ascon128Encrypt(key, nonce, plaintext);
32
+ }
33
+
34
+ ascon128Decrypt(
35
+ key: Array<number>,
36
+ nonce: Array<number>,
37
+ ciphertext: Array<number>,
38
+ ): Array<number> {
39
+ if (!key || key.length === 0) {
40
+ throw new Error("Key is required");
41
+ }
42
+ if (!nonce || nonce.length === 0) {
43
+ throw new Error("Nonce is required");
44
+ }
45
+ if (!ciphertext || ciphertext.length === 0) {
46
+ throw new Error("Ciphertext is required");
47
+ }
48
+ return ascon128Decrypt(key, nonce, ciphertext);
49
+ }
50
+ }
@@ -0,0 +1,3 @@
1
+ import { AsconWrapper } from "./ascon-wrapper";
2
+
3
+ export {AsconWrapper}
@@ -11,11 +11,32 @@ import {
11
11
  aesNonce,
12
12
  } from "../../index";
13
13
 
14
+ /**
15
+ * @description A wrapper class that contains methods to construct keys, nonces, and methods to encrypt and decrypt with AES-128-GCM and AES-256-GCM
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const nonce = aesWrapper.generateAESNonce();
20
+ const key = aesWrapper.aes128Key();
21
+ const textEncoder = new TextEncoder();
22
+ const array = Array.from(textEncoder.encode("Hello World"));
23
+ const encrypted = aesWrapper.aes128Encrypt(key, nonce, array);
24
+ * ```
25
+ */
14
26
  export class AESWrapper {
27
+
28
+ /**
29
+ * @description Generates a 128 bit AES key
30
+ * @returns returns a 128 bit AES key
31
+ */
15
32
  public aes128Key(): Array<number> {
16
33
  return aes128Key();
17
34
  }
18
35
 
36
+ /**
37
+ * @description Generates a 256 bit AES key
38
+ * @returns returns a 256 bit AES key
39
+ */
19
40
  public aes256Key(): Array<number> {
20
41
  return aes256Key();
21
42
  }
@@ -4,7 +4,7 @@ import { ScryptWrapper } from "../src-ts/password-hashers/index";
4
4
  import {
5
5
  PasswordHasherFactory,
6
6
  PasswordHasherType,
7
- } from "../src-ts/password-hashers/";
7
+ } from "../src-ts/password-hashers";
8
8
 
9
9
  describe("Bcrypt Tests", () => {
10
10
  it("hash", () => {
@@ -0,0 +1,28 @@
1
+ import { AsconWrapper } from "../src-ts/sponges/ascon-wrapper";
2
+ import { assert } from "chai";
3
+ import { areEqual } from "./helpers/array";
4
+
5
+ describe("Sponges Tests", () => {
6
+ it("Ascon 128 Encrypt", () => {
7
+ const wrapper: AsconWrapper = new AsconWrapper();
8
+ const key: Array<number> = wrapper.ascon128Key();
9
+ const nonce: Array<number> = wrapper.ascon128Nonce();
10
+ const tohashed: string = "This is my array to encrypt";
11
+ const encoder = new TextEncoder();
12
+ const tohashBytes: Array<number> = Array.from(encoder.encode(tohashed));
13
+ const ciphertext = wrapper.ascon128Encrypt(key, nonce, tohashBytes);
14
+ assert.isNotTrue(areEqual(tohashBytes, ciphertext));
15
+ });
16
+
17
+ it ("Ascon 128 Decrypt", () => {
18
+ const wrapper: AsconWrapper = new AsconWrapper();
19
+ const key: Array<number> = wrapper.ascon128Key();
20
+ const nonce: Array<number> = wrapper.ascon128Nonce();
21
+ const tohashed: string = "This is my array to encrypt";
22
+ const encoder = new TextEncoder();
23
+ const tohashBytes: Array<number> = Array.from(encoder.encode(tohashed));
24
+ const ciphertext = wrapper.ascon128Encrypt(key, nonce, tohashBytes);
25
+ const plaintext = wrapper.ascon128Decrypt(key, nonce, ciphertext);
26
+ assert.equal(areEqual(plaintext, tohashBytes), true);
27
+ });
28
+ });