cas-typescript-sdk 1.0.18 → 1.0.19

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; } });
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.19",
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}
@@ -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
+ });