Skip to content

Commit 2908e99

Browse files
committed
moving aes logic into cas-lib
1 parent 0fbad03 commit 2908e99

File tree

8 files changed

+41
-111
lines changed

8 files changed

+41
-111
lines changed

index.d.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ export function aes128Encrypt(aesKey: Array<number>, nonce: Array<number>, plain
2828
export function aes128Decrypt(aesKey: Array<number>, nonce: Array<number>, ciphertext: Array<number>): Array<number>
2929
export function aes256Encrypt(aesKey: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>
3030
export function aes256Decrypt(aesKey: Array<number>, nonce: Array<number>, ciphertext: Array<number>): Array<number>
31-
export function aes256KeyFromX25519SharedSecret(sharedSecret: Array<number>): AesKeyFromX25519SharedSecret
32-
export function aes128KeyFromX25519SharedSecret(sharedSecret: Array<number>): AesKeyFromX25519SharedSecret
31+
export function aes256KeyFromX25519SharedSecret(sharedSecret: Array<number>): CASAesKeyFromX25519SharedSecret
32+
export function aes128KeyFromX25519SharedSecret(sharedSecret: Array<number>): CASAesKeyFromX25519SharedSecret
3333
export function generateRsaKeys(keySize: number): CasrsaKeyPairResult
3434
export function encryptPlaintextRsa(publicKey: string, plaintext: Array<number>): Array<number>
3535
export function decryptCiphertextRsa(privateKey: string, ciphertext: Array<number>): Array<number>
@@ -53,7 +53,8 @@ export class CaSx25519SecretPublicKeyResult {
5353
secretKey: Array<number>
5454
constructor(publicKey: Array<number>, secretKey: Array<number>)
5555
}
56-
export class AesKeyFromX25519SharedSecret {
56+
export type CASAesKeyFromX25519SharedSecret = CasAesKeyFromX25519SharedSecret
57+
export class CasAesKeyFromX25519SharedSecret {
5758
aesKey: Array<number>
5859
aesNonce: Array<number>
5960
constructor(aesKey: Array<number>, aesNonce: Array<number>)

index.node

0 Bytes
Binary file not shown.

src-ts/symmetric/aes-wrapper.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {
2-
AesKeyFromX25519SharedSecret,
2+
CASAesKeyFromX25519SharedSecret,
33
aes128Decrypt,
44
aes128Encrypt,
55
aes128Key,
@@ -87,7 +87,7 @@ export class AESWrapper {
8787
* @param shared_secret
8888
* @returns
8989
*/
90-
public aes256KeyNonceX25519DiffieHellman(shared_secret: Array<number>): AesKeyFromX25519SharedSecret {
90+
public aes256KeyNonceX25519DiffieHellman(shared_secret: Array<number>): CASAesKeyFromX25519SharedSecret {
9191
return aes256KeyFromX25519SharedSecret(shared_secret);
9292
}
9393

@@ -96,7 +96,7 @@ export class AESWrapper {
9696
* @param shared_secret
9797
* @returns
9898
*/
99-
public aes128KeyNonceX25519DiffieHellman(shared_secret: Array<number>): AesKeyFromX25519SharedSecret {
99+
public aes128KeyNonceX25519DiffieHellman(shared_secret: Array<number>): CASAesKeyFromX25519SharedSecret {
100100
return aes128KeyFromX25519SharedSecret(shared_secret);
101101
}
102102
}

src-ts/symmetric/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { CASAesKeyFromX25519SharedSecret } from "../../index";
12
import { AESWrapper } from "./aes-wrapper";
23

3-
export { AESWrapper };
4+
export { AESWrapper, CASAesKeyFromX25519SharedSecret };

src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ mod hashers {
1010

1111
mod key_exchange {
1212
pub mod x25519;
13-
pub mod types;
13+
mod types;
1414
}
1515

1616
mod symmetric {
1717
pub mod aes;
18-
pub mod cas_symmetric_encryption;
18+
mod types;
1919
}
2020

2121
mod asymmetric {
@@ -27,7 +27,7 @@ mod digital_signature {
2727
pub mod sha_256_rsa;
2828
pub mod sha_512_ed25519;
2929
pub mod sha_256_ed25519;
30-
pub mod types;
30+
mod types;
3131
}
3232

3333
mod sponges {

src/symmetric/aes.rs

Lines changed: 12 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,10 @@
11
use aes_gcm::Key;
2+
use cas_lib::symmetric::{aes::{CASAES128, CASAES256}, cas_symmetric_encryption::CASAESEncryption};
23
use napi_derive::napi;
3-
use rand::rngs::OsRng;
44
use rand::{RngCore, SeedableRng};
55
use rand_chacha::ChaCha20Rng;
66

7-
use aes_gcm::{
8-
aead::{generic_array::GenericArray, Aead},
9-
Aes128Gcm, Aes256Gcm, KeyInit, Nonce,
10-
};
11-
12-
use super::cas_symmetric_encryption::{AesKeyFromX25519SharedSecret, CASAESEncryption};
13-
pub struct CASAES128;
14-
pub struct CASAES256;
15-
16-
impl CASAESEncryption for CASAES256 {
17-
fn generate_key() -> Vec<u8> {
18-
return Aes256Gcm::generate_key(&mut OsRng).to_vec();
19-
}
20-
21-
fn encrypt_plaintext(aes_key: Vec<u8>, nonce: Vec<u8>, plaintext: Vec<u8>) -> Vec<u8> {
22-
let key = GenericArray::from_slice(&aes_key);
23-
let mut cipher = Aes256Gcm::new(&key);
24-
let nonce = Nonce::from_slice(&nonce);
25-
let ciphertext = cipher.encrypt(nonce, plaintext.as_ref()).unwrap();
26-
ciphertext
27-
}
28-
29-
fn decrypt_ciphertext(aes_key: Vec<u8>, nonce: Vec<u8>, ciphertext: Vec<u8>) -> Vec<u8> {
30-
let key = GenericArray::from_slice(&aes_key);
31-
let mut cipher = Aes256Gcm::new(&key);
32-
let nonce = Nonce::from_slice(&nonce);
33-
let plaintext = cipher.decrypt(nonce, ciphertext.as_ref()).unwrap();
34-
plaintext
35-
}
36-
37-
fn key_from_x25519_shared_secret(shared_secret: Vec<u8>) -> AesKeyFromX25519SharedSecret {
38-
let aes_key = Key::<Aes256Gcm>::from_slice(&shared_secret);
39-
let mut aes_nonce: [u8; 12] = Default::default();
40-
aes_nonce.copy_from_slice(&shared_secret[..12]);
41-
let result = AesKeyFromX25519SharedSecret {
42-
aes_key: aes_key.to_vec(),
43-
aes_nonce: aes_nonce.to_vec(),
44-
};
45-
result
46-
}
47-
}
48-
49-
impl CASAESEncryption for CASAES128 {
50-
fn generate_key() -> Vec<u8> {
51-
return Aes128Gcm::generate_key(&mut OsRng).to_vec();
52-
}
53-
54-
fn encrypt_plaintext(aes_key: Vec<u8>, nonce: Vec<u8>, plaintext: Vec<u8>) -> Vec<u8> {
55-
let key = GenericArray::from_slice(&aes_key);
56-
let mut cipher = Aes128Gcm::new(&key);
57-
let nonce = Nonce::from_slice(&nonce);
58-
let ciphertext = cipher.encrypt(nonce, plaintext.as_ref()).unwrap();
59-
ciphertext
60-
}
61-
62-
fn decrypt_ciphertext(aes_key: Vec<u8>, nonce: Vec<u8>, ciphertext: Vec<u8>) -> Vec<u8> {
63-
let key = GenericArray::from_slice(&aes_key);
64-
let cipher = Aes128Gcm::new(&key);
65-
let nonce = Nonce::from_slice(&nonce);
66-
let plaintext = cipher.decrypt(nonce, ciphertext.as_ref()).unwrap();
67-
plaintext
68-
}
69-
70-
fn key_from_x25519_shared_secret(shared_secret: Vec<u8>) -> AesKeyFromX25519SharedSecret {
71-
let mut aes_key: [u8; 16] = Default::default();
72-
aes_key.copy_from_slice(&shared_secret[..16]);
73-
let aes_key_slice = Key::<Aes128Gcm>::from_slice(&aes_key);
74-
let mut aes_nonce: [u8; 12] = Default::default();
75-
aes_nonce.copy_from_slice(&shared_secret[..12]);
76-
let result = AesKeyFromX25519SharedSecret {
77-
aes_key: aes_key_slice.to_vec(),
78-
aes_nonce: aes_nonce.to_vec(),
79-
};
80-
result
81-
}
82-
}
7+
use super::types::CASAesKeyFromX25519SharedSecret;
838

849
#[napi]
8510
pub fn aes_nonce() -> Vec<u8> {
@@ -92,46 +17,46 @@ pub fn aes_nonce() -> Vec<u8> {
9217

9318
#[napi]
9419
pub fn aes128_key() -> Vec<u8> {
95-
return CASAES128::generate_key();
20+
return <CASAES128 as CASAESEncryption>::generate_key();
9621
}
9722

9823
#[napi]
9924
pub fn aes256_key() -> Vec<u8> {
100-
return CASAES256::generate_key();
25+
return <CASAES256 as CASAESEncryption>::generate_key();
10126
}
10227

10328
#[napi]
10429
pub fn aes128_encrypt(aes_key: Vec<u8>, nonce: Vec<u8>, plaintext: Vec<u8>) -> Vec<u8> {
105-
return CASAES128::encrypt_plaintext(aes_key, nonce, plaintext);
30+
return <CASAES128 as CASAESEncryption>::encrypt_plaintext(aes_key, nonce, plaintext);
10631
}
10732

10833
#[napi]
10934
pub fn aes128_decrypt(aes_key: Vec<u8>, nonce: Vec<u8>, ciphertext: Vec<u8>) -> Vec<u8> {
110-
return CASAES128::decrypt_ciphertext(aes_key, nonce, ciphertext);
35+
return <CASAES128 as CASAESEncryption>::decrypt_ciphertext(aes_key, nonce, ciphertext);
11136
}
11237

11338
#[napi]
11439
pub fn aes256_encrypt(aes_key: Vec<u8>, nonce: Vec<u8>, plaintext: Vec<u8>) -> Vec<u8> {
115-
return CASAES256::encrypt_plaintext(aes_key, nonce, plaintext);
40+
return <CASAES256 as CASAESEncryption>::encrypt_plaintext(aes_key, nonce, plaintext);
11641
}
11742

11843
#[napi]
11944
pub fn aes256_decrypt(aes_key: Vec<u8>, nonce: Vec<u8>, ciphertext: Vec<u8>) -> Vec<u8> {
120-
return CASAES256::decrypt_ciphertext(aes_key, nonce, ciphertext);
45+
return <CASAES256 as CASAESEncryption>::decrypt_ciphertext(aes_key, nonce, ciphertext);
12146
}
12247

12348
#[napi]
12449
pub fn aes_256_key_from_x25519_shared_secret(
12550
shared_secret: Vec<u8>,
126-
) -> AesKeyFromX25519SharedSecret {
127-
return CASAES256::key_from_x25519_shared_secret(shared_secret);
51+
) -> CASAesKeyFromX25519SharedSecret {
52+
return <CASAES256 as CASAESEncryption>::key_from_x25519_shared_secret(shared_secret).into();
12853
}
12954

13055
#[napi]
13156
pub fn aes_128_key_from_x25519_shared_secret(
13257
shared_secret: Vec<u8>,
133-
) -> AesKeyFromX25519SharedSecret {
134-
return CASAES128::key_from_x25519_shared_secret(shared_secret);
58+
) -> CASAesKeyFromX25519SharedSecret {
59+
return <CASAES128 as CASAESEncryption>::key_from_x25519_shared_secret(shared_secret).into();
13560
}
13661

13762
#[test]

src/symmetric/cas_symmetric_encryption.rs

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/symmetric/types.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
use cas_lib::symmetric::cas_symmetric_encryption::AesKeyFromX25519SharedSecret;
2+
use napi_derive::napi;
3+
4+
#[napi(constructor)]
5+
pub struct CASAesKeyFromX25519SharedSecret {
6+
pub aes_key: Vec<u8>,
7+
pub aes_nonce: Vec<u8>,
8+
}
9+
10+
impl From<AesKeyFromX25519SharedSecret> for CASAesKeyFromX25519SharedSecret {
11+
fn from(value: AesKeyFromX25519SharedSecret) -> Self {
12+
CASAesKeyFromX25519SharedSecret {
13+
aes_key: value.aes_key,
14+
aes_nonce: value.aes_nonce
15+
}
16+
}
17+
}

0 commit comments

Comments
 (0)