Skip to content

Commit 5416ef7

Browse files
committed
moving key exchange logic into cas-lib
1 parent ec9b320 commit 5416ef7

File tree

9 files changed

+34
-54
lines changed

9 files changed

+34
-54
lines changed

index.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export function sha512(dataToHash: Array<number>): Array<number>
1919
export function sha512Verify(dataToHash: Array<number>, dataToVerify: Array<number>): boolean
2020
export function sha256(dataToHash: Array<number>): Array<number>
2121
export function sha256Verify(dataToHash: Array<number>, dataToVerify: Array<number>): boolean
22-
export function x25519GenerateSecretAndPublicKey(): X25519SecretPublicKeyResult
22+
export function x25519GenerateSecretAndPublicKey(): CASx25519SecretPublicKeyResult
2323
export function x25519DiffieHellman(mySecretKey: Array<number>, usersPublicKey: Array<number>): Array<number>
2424
export function aesNonce(): Array<number>
2525
export function aes128Key(): Array<number>
@@ -47,8 +47,8 @@ export function ascon128KeyGenerate(): Array<number>
4747
export function ascon128NonceGenerate(): Array<number>
4848
export function ascon128Encrypt(key: Array<number>, nonce: Array<number>, plaintext: Array<number>): Array<number>
4949
export function ascon128Decrypt(key: Array<number>, nonce: Array<number>, ciphertext: Array<number>): Array<number>
50-
export type x25519SecretPublicKeyResult = X25519SecretPublicKeyResult
51-
export class X25519SecretPublicKeyResult {
50+
export type CASx25519SecretPublicKeyResult = CaSx25519SecretPublicKeyResult
51+
export class CaSx25519SecretPublicKeyResult {
5252
publicKey: Array<number>
5353
secretKey: Array<number>
5454
constructor(publicKey: Array<number>, secretKey: Array<number>)

index.node

0 Bytes
Binary file not shown.

src-ts/key_exchange/index.ts

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

3-
export { X25519Wrapper };
4+
export { X25519Wrapper, CASx25519SecretPublicKeyResult };

src-ts/key_exchange/x25519.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import { x25519DiffieHellman, x25519GenerateSecretAndPublicKey, X25519SecretPublicKeyResult } from "../../index"
1+
import { CASx25519SecretPublicKeyResult, x25519DiffieHellman, x25519GenerateSecretAndPublicKey } from "../../index"
22

33
export class X25519Wrapper {
44
/**
55
* Generates and secret and public key to be used to create a shared secret with Diffie Hellman.
66
* User should share their public key with the other user and take the other user's public key and they can generate a Shared Secret.
77
* @returns X25519SecretPublicKeyResult
88
*/
9-
public generateSecretAndPublicKey(): X25519SecretPublicKeyResult {
9+
public generateSecretAndPublicKey(): CASx25519SecretPublicKeyResult {
1010
return x25519GenerateSecretAndPublicKey();
1111
}
1212

src/key_exchange/cas_key_exchange.rs

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

src/key_exchange/types.rs

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

src/key_exchange/x25519.rs

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,12 @@
1-
use napi::bindgen_prelude::ClassInstance;
1+
use cas_lib::key_exchange::{cas_key_exchange::CASKeyExchange, x25519::X25519};
22
use napi_derive::napi;
3-
use rand::rngs::OsRng;
4-
use x25519_dalek::{PublicKey, StaticSecret};
53

6-
use super::cas_key_exchange::CASKeyExchange;
4+
use super::types::CASx25519SecretPublicKeyResult;
75

8-
#[napi(constructor)]
9-
pub struct x25519SecretPublicKeyResult {
10-
pub public_key: Vec<u8>,
11-
pub secret_key: Vec<u8>,
12-
}
13-
14-
pub struct X25519;
15-
16-
impl CASKeyExchange for X25519 {
17-
fn generate_secret_and_public_key() -> x25519SecretPublicKeyResult {
18-
let secret_key = StaticSecret::random_from_rng(OsRng);
19-
let public_key = PublicKey::from(&secret_key);
20-
let result = x25519SecretPublicKeyResult {
21-
secret_key: secret_key.as_bytes().to_vec(),
22-
public_key: public_key.as_bytes().to_vec(),
23-
};
24-
result
25-
}
26-
27-
fn diffie_hellman(my_secret_key: Vec<u8>, users_public_key: Vec<u8>) -> Vec<u8> {
28-
let mut secret_key_array: [u8; 32] = Default::default();
29-
secret_key_array.copy_from_slice(&my_secret_key);
30-
let mut users_public_key_array: [u8; 32] = Default::default();
31-
users_public_key_array.copy_from_slice(&users_public_key);
32-
33-
let secret_key = StaticSecret::from(secret_key_array);
34-
let public_key = PublicKey::from(users_public_key_array);
35-
return secret_key.diffie_hellman(&public_key).as_bytes().to_vec();
36-
}
37-
}
386

397
#[napi]
40-
pub fn x25519_generate_secret_and_public_key() -> x25519SecretPublicKeyResult {
41-
return <X25519 as CASKeyExchange>::generate_secret_and_public_key();
8+
pub fn x25519_generate_secret_and_public_key() -> CASx25519SecretPublicKeyResult {
9+
return <X25519 as CASKeyExchange>::generate_secret_and_public_key().into();
4210
}
4311

4412
#[napi]

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ mod hashers {
99
}
1010

1111
mod key_exchange {
12-
pub mod cas_key_exchange;
1312
pub mod x25519;
13+
pub mod types;
1414
}
1515

1616
mod symmetric {

test-ts/insecure-channel.test.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import {AESWrapper} from "../src-ts/symmetric/index";
22
import {X25519Wrapper} from "../src-ts/key_exchange/index";
3-
import {X25519SecretPublicKeyResult} from "../index";
3+
import {CASx25519SecretPublicKeyResult} from "../index";
44
import { areEqual } from "./helpers/array";
55
import { assert } from "chai";
66

77
describe("Insecure Channel Tests", () => {
88
it("AES256-GBC Diffie Hellman X25519", () => {
99
const aesWrapper = new AESWrapper();
1010
const x25519Wrapper = new X25519Wrapper();
11-
const alice_keys: X25519SecretPublicKeyResult = x25519Wrapper.generateSecretAndPublicKey();
12-
const bob_keys: X25519SecretPublicKeyResult = x25519Wrapper.generateSecretAndPublicKey();
11+
const alice_keys: CASx25519SecretPublicKeyResult = x25519Wrapper.generateSecretAndPublicKey();
12+
const bob_keys: CASx25519SecretPublicKeyResult = x25519Wrapper.generateSecretAndPublicKey();
1313

1414
const alice_shared_secret = x25519Wrapper.generateSharedSecret(alice_keys.secretKey, bob_keys.publicKey);
1515
const bob_shared_secret = x25519Wrapper.generateSharedSecret(bob_keys.secretKey, alice_keys.publicKey);
@@ -30,8 +30,8 @@ describe("Insecure Channel Tests", () => {
3030
it("AES128-GBC Diffie Hellman X25519", () => {
3131
const aesWrapper = new AESWrapper();
3232
const x25519Wrapper = new X25519Wrapper();
33-
const alice_keys: X25519SecretPublicKeyResult = x25519Wrapper.generateSecretAndPublicKey();
34-
const bob_keys: X25519SecretPublicKeyResult = x25519Wrapper.generateSecretAndPublicKey();
33+
const alice_keys: CASx25519SecretPublicKeyResult = x25519Wrapper.generateSecretAndPublicKey();
34+
const bob_keys: CASx25519SecretPublicKeyResult = x25519Wrapper.generateSecretAndPublicKey();
3535

3636
const alice_shared_secret = x25519Wrapper.generateSharedSecret(alice_keys.secretKey, bob_keys.publicKey);
3737
const bob_shared_secret = x25519Wrapper.generateSharedSecret(bob_keys.secretKey, alice_keys.publicKey);

0 commit comments

Comments
 (0)