cas-typescript-sdk 1.0.15 → 1.0.16
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/.github/workflows/main-pr-linux.yml +28 -0
- package/.github/workflows/main-pr-windows.yml +28 -0
- package/.github/workflows/main-publish.yml +32 -0
- package/Cargo.toml +8 -1
- package/README.md +2 -0
- package/build.rs +5 -5
- package/docs/EXAMPLES.md +39 -0
- package/index.d.ts +19 -0
- package/index.node +0 -0
- package/lib/digital-signature/digital-siganture-sha-512.d.ts +6 -0
- package/lib/digital-signature/digital-siganture-sha-512.js +28 -0
- package/lib/digital-signature/digital-signature-base.d.ts +5 -0
- package/lib/digital-signature/digital-signature-base.js +2 -0
- package/lib/digital-signature/digital-signature-factory.d.ts +8 -0
- package/lib/digital-signature/digital-signature-factory.js +22 -0
- package/lib/digital-signature/digital-signaturte-sha-256.d.ts +6 -0
- package/lib/digital-signature/digital-signaturte-sha-256.js +28 -0
- package/lib/digital-signature/index.d.ts +4 -0
- package/lib/digital-signature/index.js +8 -0
- package/package.json +41 -41
- package/src/asymmetric/cas_asymmetric_encryption.rs +15 -15
- package/src/asymmetric/cas_rsa.rs +88 -80
- package/src/digital_signature/cas_digital_signature_rsa.rs +27 -0
- package/src/digital_signature/sha_256_rsa.rs +96 -0
- package/src/digital_signature/sha_512_ed25519.rs +75 -0
- package/src/digital_signature/sha_512_rsa.rs +93 -0
- package/src/hashers/blake2.rs +37 -39
- package/src/hashers/cas_hasher.rs +8 -8
- package/src/hashers/sha.rs +102 -103
- package/src/key_exchange/cas_key_exchange.rs +6 -6
- package/src/key_exchange/x25519.rs +57 -57
- package/src/lib.rs +34 -27
- package/src/password_hashers/argon2.rs +65 -64
- package/src/password_hashers/bcrypt.rs +50 -51
- package/src/password_hashers/cas_password_hasher.rs +4 -4
- package/src/password_hashers/scrypt.rs +61 -56
- package/src/symmetric/aes.rs +155 -151
- package/src/symmetric/cas_symmetric_encryption.rs +14 -14
- package/src-ts/asymmetric/RSAWrapper.ts +53 -53
- package/src-ts/asymmetric/index.ts +3 -3
- package/src-ts/digital-signature/digital-siganture-sha-512.ts +28 -0
- package/src-ts/digital-signature/digital-signature-base.ts +6 -0
- package/src-ts/digital-signature/digital-signature-factory.ts +19 -0
- package/src-ts/digital-signature/digital-signaturte-sha-256.ts +28 -0
- package/src-ts/digital-signature/index.ts +4 -0
- package/src-ts/global.d.ts +1 -1
- package/src-ts/hashers/hasher-base.ts +5 -5
- package/src-ts/hashers/hasher-factory.ts +11 -11
- package/src-ts/hashers/hasher-type.ts +2 -2
- package/src-ts/hashers/index.ts +5 -5
- package/src-ts/hashers/sha-wrapper.ts +37 -37
- package/src-ts/helpers/nonce-generator.ts +8 -8
- package/src-ts/hybrid/hybrid-encryption-wrapper.ts +64 -64
- package/src-ts/hybrid/index.ts +9 -9
- package/src-ts/hybrid/types/aes-rsa-hybird-encrypt-result.ts +12 -12
- package/src-ts/hybrid/types/aes-rsa-hybrid-initializer.ts +23 -23
- package/src-ts/index.ts +34 -34
- package/src-ts/key_exchange/index.ts +3 -3
- package/src-ts/key_exchange/x25519.ts +10 -10
- package/src-ts/password-hashers/argon2-wrapper.ts +18 -18
- package/src-ts/password-hashers/bcrypt-wrapper.ts +23 -23
- package/src-ts/password-hashers/index.ts +14 -14
- package/src-ts/password-hashers/password-hasher-base.ts +3 -3
- package/src-ts/password-hashers/password-hasher-factory.ts +20 -20
- package/src-ts/password-hashers/password-hasher-type.ts +4 -4
- package/src-ts/password-hashers/scrypt-wrapper.ts +19 -19
- package/src-ts/symmetric/aes-wrapper.ts +50 -50
- package/src-ts/symmetric/index.ts +3 -3
- package/test-ts/asymmetric.test.spec.ts +27 -27
- package/test-ts/digital-signature.test.spec.ts +49 -0
- package/test-ts/hasher.test.spec.ts +70 -70
- package/test-ts/helpers/array.ts +9 -9
- package/test-ts/hybrid.test.spec.ts +33 -33
- package/test-ts/insecure-channel.test.spec.ts +50 -50
- package/test-ts/key-exchange-test.spec.ts +23 -23
- package/test-ts/password-hasher-test.spec.ts +102 -102
- package/test-ts/symmetric.test.spec.ts +31 -31
- package/tsconfig.json +21 -21
- package/build-node.sh +0 -2
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
use napi_derive::napi;
|
|
2
|
+
use rand::rngs::OsRng;
|
|
3
|
+
use rsa::{
|
|
4
|
+
pkcs1::{DecodeRsaPublicKey, EncodeRsaPublicKey},
|
|
5
|
+
pkcs8::EncodePrivateKey,
|
|
6
|
+
Pkcs1v15Sign, RsaPrivateKey, RsaPublicKey,
|
|
7
|
+
};
|
|
8
|
+
use sha3::{Digest, Sha3_256};
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
use super::cas_digital_signature_rsa::{CASRSADigitalSignatureResult, CASRSADigitalSignature};
|
|
12
|
+
|
|
13
|
+
pub struct SHA256RSADigitalSignature;
|
|
14
|
+
|
|
15
|
+
impl CASRSADigitalSignature for SHA256RSADigitalSignature {
|
|
16
|
+
fn digital_signature_rsa(
|
|
17
|
+
rsa_key_size: u32,
|
|
18
|
+
data_to_sign: Vec<u8>,
|
|
19
|
+
) -> CASRSADigitalSignatureResult {
|
|
20
|
+
let mut hasher = Sha3_256::new();
|
|
21
|
+
hasher.update(data_to_sign);
|
|
22
|
+
let sha_hasher_result = hasher.finalize();
|
|
23
|
+
let mut rng: OsRng = OsRng;
|
|
24
|
+
let private_key: RsaPrivateKey =
|
|
25
|
+
RsaPrivateKey::new(&mut rng, rsa_key_size as usize).expect("failed to generate a key");
|
|
26
|
+
let public_key = private_key.to_public_key();
|
|
27
|
+
let mut signed_data = private_key
|
|
28
|
+
.sign(Pkcs1v15Sign::new_unprefixed(), &sha_hasher_result)
|
|
29
|
+
.unwrap();
|
|
30
|
+
let result = CASRSADigitalSignatureResult {
|
|
31
|
+
private_key: private_key
|
|
32
|
+
.to_pkcs8_pem(rsa::pkcs8::LineEnding::LF)
|
|
33
|
+
.unwrap()
|
|
34
|
+
.to_string(),
|
|
35
|
+
public_key: public_key
|
|
36
|
+
.to_pkcs1_pem(rsa::pkcs8::LineEnding::LF)
|
|
37
|
+
.unwrap()
|
|
38
|
+
.to_string(),
|
|
39
|
+
signature: signed_data,
|
|
40
|
+
};
|
|
41
|
+
result
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fn verify_rsa(public_key: String, data_to_verify: Vec<u8>, signature: Vec<u8>) -> bool {
|
|
45
|
+
let mut hasher = Sha3_256::new();
|
|
46
|
+
hasher.update(data_to_verify);
|
|
47
|
+
let sha_hasher_result = hasher.finalize();
|
|
48
|
+
let public_key = RsaPublicKey::from_pkcs1_pem(&public_key).unwrap();
|
|
49
|
+
let verified = public_key.verify(
|
|
50
|
+
Pkcs1v15Sign::new_unprefixed(),
|
|
51
|
+
&sha_hasher_result,
|
|
52
|
+
&signature,
|
|
53
|
+
);
|
|
54
|
+
if verified.is_err() == false {
|
|
55
|
+
return true;
|
|
56
|
+
} else {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#[napi]
|
|
63
|
+
pub fn sha_256_rsa_digital_signature(
|
|
64
|
+
rsa_key_size: u32,
|
|
65
|
+
data_to_sign: Vec<u8>,
|
|
66
|
+
) -> CASRSADigitalSignatureResult {
|
|
67
|
+
return SHA256RSADigitalSignature::digital_signature_rsa(rsa_key_size, data_to_sign);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
#[napi]
|
|
71
|
+
pub fn sha_256_rsa_verify_digital_signature(
|
|
72
|
+
public_key: String,
|
|
73
|
+
data_to_verify: Vec<u8>,
|
|
74
|
+
signature: Vec<u8>,
|
|
75
|
+
) -> bool {
|
|
76
|
+
return SHA256RSADigitalSignature::verify_rsa(public_key, data_to_verify, signature);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
#[test]
|
|
80
|
+
fn sha_256_rsa_digital_signature_test() {
|
|
81
|
+
let key_size: u32 = 1024;
|
|
82
|
+
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
83
|
+
let signature_result: CASRSADigitalSignatureResult = SHA256RSADigitalSignature::digital_signature_rsa(key_size, data_to_sign.clone());
|
|
84
|
+
let is_verified: bool = SHA256RSADigitalSignature::verify_rsa(signature_result.public_key, data_to_sign, signature_result.signature);
|
|
85
|
+
assert_eq!(is_verified, true);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
#[test]
|
|
89
|
+
fn sha_256_rsa_digital_signature_fail_test() {
|
|
90
|
+
let key_size: u32 = 1024;
|
|
91
|
+
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
92
|
+
let signature_result: CASRSADigitalSignatureResult = SHA256RSADigitalSignature::digital_signature_rsa(key_size, data_to_sign.clone());
|
|
93
|
+
let new_data = b"NOtTheOriginalData".to_vec();
|
|
94
|
+
let is_verified: bool = SHA256RSADigitalSignature::verify_rsa(signature_result.public_key, new_data, signature_result.signature);
|
|
95
|
+
assert_eq!(is_verified, false);
|
|
96
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
use ed25519_dalek::{Keypair, Signature, Signer, Verifier};
|
|
2
|
+
use napi_derive::napi;
|
|
3
|
+
use sha3::{Digest, Sha3_512};
|
|
4
|
+
|
|
5
|
+
use super::cas_digital_signature_rsa::{
|
|
6
|
+
CASED25519DigitalSignature, CASSHAED25519DalekDigitalSignatureResult,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
pub struct SHA512ED25519DigitalSignature;
|
|
10
|
+
|
|
11
|
+
impl CASED25519DigitalSignature for SHA512ED25519DigitalSignature {
|
|
12
|
+
fn digital_signature_ed25519(
|
|
13
|
+
data_to_sign: Vec<u8>,
|
|
14
|
+
) -> CASSHAED25519DalekDigitalSignatureResult {
|
|
15
|
+
let mut hasher = Sha3_512::new();
|
|
16
|
+
hasher.update(data_to_sign);
|
|
17
|
+
let sha_hasher_result = hasher.finalize();
|
|
18
|
+
let mut csprng = rand_07::rngs::OsRng {};
|
|
19
|
+
let keypair = Keypair::generate(&mut csprng);
|
|
20
|
+
|
|
21
|
+
let signature = keypair.sign(&sha_hasher_result);
|
|
22
|
+
let signature_bytes = signature.to_bytes();
|
|
23
|
+
let public_keypair_bytes = keypair.public.to_bytes();
|
|
24
|
+
let result = CASSHAED25519DalekDigitalSignatureResult {
|
|
25
|
+
public_key: public_keypair_bytes.to_vec(),
|
|
26
|
+
signature: signature_bytes.to_vec(),
|
|
27
|
+
};
|
|
28
|
+
result
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
fn digital_signature_ed25519_verify(
|
|
32
|
+
public_key: Vec<u8>,
|
|
33
|
+
data_to_verify: Vec<u8>,
|
|
34
|
+
signature: Vec<u8>,
|
|
35
|
+
) -> bool {
|
|
36
|
+
let mut hasher = Sha3_512::new();
|
|
37
|
+
hasher.update(data_to_verify);
|
|
38
|
+
let sha_hasher_result = hasher.finalize();
|
|
39
|
+
|
|
40
|
+
let public_key_parsed = ed25519_dalek::PublicKey::from_bytes(&public_key).unwrap();
|
|
41
|
+
let signature_parsed = Signature::from_bytes(&signature).unwrap();
|
|
42
|
+
return public_key_parsed
|
|
43
|
+
.verify(&sha_hasher_result, &signature_parsed)
|
|
44
|
+
.is_ok();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#[napi]
|
|
49
|
+
pub fn sha_512_ed25519_digital_signature(data_to_sign: Vec<u8>) -> CASSHAED25519DalekDigitalSignatureResult {
|
|
50
|
+
return SHA512ED25519DigitalSignature::digital_signature_ed25519(data_to_sign);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#[napi]
|
|
54
|
+
pub fn sha_512_ed25519_digital_signature_verify(public_key: Vec<u8>, data_to_verify: Vec<u8>, signature: Vec<u8>) -> bool {
|
|
55
|
+
return SHA512ED25519DigitalSignature::digital_signature_ed25519_verify(public_key, data_to_verify, signature)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
#[test]
|
|
59
|
+
fn sha_512_ed25519_test() {
|
|
60
|
+
let key_size: u32 = 1024;
|
|
61
|
+
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
62
|
+
let signature_result: CASSHAED25519DalekDigitalSignatureResult = SHA512ED25519DigitalSignature::digital_signature_ed25519(data_to_sign.clone());
|
|
63
|
+
let is_verified: bool = SHA512ED25519DigitalSignature::digital_signature_ed25519_verify(signature_result.public_key, data_to_sign, signature_result.signature);
|
|
64
|
+
assert_eq!(is_verified, true);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
#[test]
|
|
68
|
+
fn sha_512_ed25519_test_fail() {
|
|
69
|
+
let key_size: u32 = 1024;
|
|
70
|
+
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
71
|
+
let signature_result: CASSHAED25519DalekDigitalSignatureResult = SHA512ED25519DigitalSignature::digital_signature_ed25519(data_to_sign.clone());
|
|
72
|
+
let not_original_data = b"NOtTHoseBytes".to_vec();
|
|
73
|
+
let is_verified: bool = SHA512ED25519DigitalSignature::digital_signature_ed25519_verify(signature_result.public_key, not_original_data, signature_result.signature);
|
|
74
|
+
assert_eq!(is_verified, false);
|
|
75
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
use napi_derive::napi;
|
|
2
|
+
use rand::rngs::OsRng;
|
|
3
|
+
use rsa::{
|
|
4
|
+
pkcs1::{DecodeRsaPublicKey, EncodeRsaPublicKey},
|
|
5
|
+
pkcs8::EncodePrivateKey,
|
|
6
|
+
Pkcs1v15Sign, RsaPrivateKey, RsaPublicKey,
|
|
7
|
+
};
|
|
8
|
+
use sha3::{Digest, Sha3_512};
|
|
9
|
+
use super::cas_digital_signature_rsa::{CASRSADigitalSignatureResult, CASRSADigitalSignature};
|
|
10
|
+
pub struct SHA512RSADigitalSignature;
|
|
11
|
+
|
|
12
|
+
impl CASRSADigitalSignature for SHA512RSADigitalSignature {
|
|
13
|
+
fn digital_signature_rsa(
|
|
14
|
+
rsa_key_size: u32,
|
|
15
|
+
data_to_sign: Vec<u8>,
|
|
16
|
+
) -> CASRSADigitalSignatureResult {
|
|
17
|
+
let mut hasher = Sha3_512::new();
|
|
18
|
+
hasher.update(data_to_sign);
|
|
19
|
+
let sha_hasher_result = hasher.finalize();
|
|
20
|
+
let mut rng: OsRng = OsRng;
|
|
21
|
+
let private_key: RsaPrivateKey =
|
|
22
|
+
RsaPrivateKey::new(&mut rng, rsa_key_size as usize).expect("failed to generate a key");
|
|
23
|
+
let public_key = private_key.to_public_key();
|
|
24
|
+
let mut signed_data = private_key
|
|
25
|
+
.sign(Pkcs1v15Sign::new_unprefixed(), &sha_hasher_result)
|
|
26
|
+
.unwrap();
|
|
27
|
+
let result = CASRSADigitalSignatureResult {
|
|
28
|
+
private_key: private_key
|
|
29
|
+
.to_pkcs8_pem(rsa::pkcs8::LineEnding::LF)
|
|
30
|
+
.unwrap()
|
|
31
|
+
.to_string(),
|
|
32
|
+
public_key: public_key
|
|
33
|
+
.to_pkcs1_pem(rsa::pkcs8::LineEnding::LF)
|
|
34
|
+
.unwrap()
|
|
35
|
+
.to_string(),
|
|
36
|
+
signature: signed_data,
|
|
37
|
+
};
|
|
38
|
+
result
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
fn verify_rsa(public_key: String, data_to_verify: Vec<u8>, signature: Vec<u8>) -> bool {
|
|
42
|
+
let mut hasher = Sha3_512::new();
|
|
43
|
+
hasher.update(data_to_verify);
|
|
44
|
+
let sha_hasher_result = hasher.finalize();
|
|
45
|
+
let public_key = RsaPublicKey::from_pkcs1_pem(&public_key).unwrap();
|
|
46
|
+
let verified = public_key.verify(
|
|
47
|
+
Pkcs1v15Sign::new_unprefixed(),
|
|
48
|
+
&sha_hasher_result,
|
|
49
|
+
&signature,
|
|
50
|
+
);
|
|
51
|
+
if verified.is_err() == false {
|
|
52
|
+
return true;
|
|
53
|
+
} else {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#[napi]
|
|
60
|
+
pub fn sha_512_rsa_digital_signature(
|
|
61
|
+
rsa_key_size: u32,
|
|
62
|
+
data_to_sign: Vec<u8>,
|
|
63
|
+
) -> CASRSADigitalSignatureResult {
|
|
64
|
+
return SHA512RSADigitalSignature::digital_signature_rsa(rsa_key_size, data_to_sign);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
#[napi]
|
|
68
|
+
pub fn sha_512_rsa_verify_digital_signature(
|
|
69
|
+
public_key: String,
|
|
70
|
+
data_to_verify: Vec<u8>,
|
|
71
|
+
signature: Vec<u8>,
|
|
72
|
+
) -> bool {
|
|
73
|
+
return SHA512RSADigitalSignature::verify_rsa(public_key, data_to_verify, signature);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
#[test]
|
|
77
|
+
fn sha_512_rsa_digital_signature_test() {
|
|
78
|
+
let key_size: u32 = 1024;
|
|
79
|
+
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
80
|
+
let signature_result: CASRSADigitalSignatureResult = SHA512RSADigitalSignature::digital_signature_rsa(key_size, data_to_sign.clone());
|
|
81
|
+
let is_verified: bool = SHA512RSADigitalSignature::verify_rsa(signature_result.public_key, data_to_sign, signature_result.signature);
|
|
82
|
+
assert_eq!(is_verified, true);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
#[test]
|
|
86
|
+
fn sha_512_rsa_digital_signature_fail_test() {
|
|
87
|
+
let key_size: u32 = 1024;
|
|
88
|
+
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
89
|
+
let signature_result: CASRSADigitalSignatureResult = SHA512RSADigitalSignature::digital_signature_rsa(key_size, data_to_sign.clone());
|
|
90
|
+
let new_data = b"NOtTheOriginalData".to_vec();
|
|
91
|
+
let is_verified: bool = SHA512RSADigitalSignature::verify_rsa(signature_result.public_key, new_data, signature_result.signature);
|
|
92
|
+
assert_eq!(is_verified, false);
|
|
93
|
+
}
|
package/src/hashers/blake2.rs
CHANGED
|
@@ -1,39 +1,37 @@
|
|
|
1
|
-
use
|
|
2
|
-
use
|
|
3
|
-
|
|
4
|
-
pub struct CASBlake2;
|
|
5
|
-
|
|
6
|
-
impl CASHasher for CASBlake2 {
|
|
7
|
-
fn hash_512(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
8
|
-
let mut hasher = Blake2b512::new();
|
|
9
|
-
hasher.update(data_to_hash);
|
|
10
|
-
let result = hasher.finalize();
|
|
11
|
-
return result.to_vec();
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
fn verify_512(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
15
|
-
let mut hasher = Blake2b512::new();
|
|
16
|
-
hasher.update(data_to_verify);
|
|
17
|
-
let result = hasher.finalize();
|
|
18
|
-
return hash_to_verify.eq(&result.to_vec());
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
fn hash_256(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
22
|
-
let mut hasher = Blake2s256::new();
|
|
23
|
-
hasher.update(data_to_hash);
|
|
24
|
-
let result = hasher.finalize();
|
|
25
|
-
return result.to_vec();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
fn verify_256(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
29
|
-
let mut hasher = Blake2s256::new();
|
|
30
|
-
hasher.update(data_to_verify);
|
|
31
|
-
let result = hasher.finalize();
|
|
32
|
-
return hash_to_verify.eq(&result.to_vec());
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
#[test]
|
|
37
|
-
fn hash_512_test() {
|
|
38
|
-
|
|
39
|
-
}
|
|
1
|
+
use super::cas_hasher::CASHasher;
|
|
2
|
+
use blake2::{Blake2b512, Blake2s256, Digest};
|
|
3
|
+
|
|
4
|
+
pub struct CASBlake2;
|
|
5
|
+
|
|
6
|
+
impl CASHasher for CASBlake2 {
|
|
7
|
+
fn hash_512(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
8
|
+
let mut hasher = Blake2b512::new();
|
|
9
|
+
hasher.update(data_to_hash);
|
|
10
|
+
let result = hasher.finalize();
|
|
11
|
+
return result.to_vec();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
fn verify_512(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
15
|
+
let mut hasher = Blake2b512::new();
|
|
16
|
+
hasher.update(data_to_verify);
|
|
17
|
+
let result = hasher.finalize();
|
|
18
|
+
return hash_to_verify.eq(&result.to_vec());
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
fn hash_256(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
22
|
+
let mut hasher = Blake2s256::new();
|
|
23
|
+
hasher.update(data_to_hash);
|
|
24
|
+
let result = hasher.finalize();
|
|
25
|
+
return result.to_vec();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
fn verify_256(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
29
|
+
let mut hasher = Blake2s256::new();
|
|
30
|
+
hasher.update(data_to_verify);
|
|
31
|
+
let result = hasher.finalize();
|
|
32
|
+
return hash_to_verify.eq(&result.to_vec());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
#[test]
|
|
37
|
+
fn hash_512_test() {}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
use napi::bindgen_prelude::Array;
|
|
2
|
-
|
|
3
|
-
pub trait CASHasher {
|
|
4
|
-
fn hash_512(data_to_hash: Vec<u8>) -> Vec<u8>;
|
|
5
|
-
fn verify_512(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool;
|
|
6
|
-
fn hash_256(data_to_hash: Vec<u8>) -> Vec<u8>;
|
|
7
|
-
fn verify_256(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool;
|
|
8
|
-
}
|
|
1
|
+
use napi::bindgen_prelude::Array;
|
|
2
|
+
|
|
3
|
+
pub trait CASHasher {
|
|
4
|
+
fn hash_512(data_to_hash: Vec<u8>) -> Vec<u8>;
|
|
5
|
+
fn verify_512(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool;
|
|
6
|
+
fn hash_256(data_to_hash: Vec<u8>) -> Vec<u8>;
|
|
7
|
+
fn verify_256(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool;
|
|
8
|
+
}
|
package/src/hashers/sha.rs
CHANGED
|
@@ -1,103 +1,102 @@
|
|
|
1
|
-
use napi::bindgen_prelude::Array;
|
|
2
|
-
use napi_derive::napi;
|
|
3
|
-
|
|
4
|
-
use super::cas_hasher::CASHasher;
|
|
5
|
-
use sha3::{Digest, Sha3_256, Sha3_512};
|
|
6
|
-
pub struct CASSHA;
|
|
7
|
-
|
|
8
|
-
impl CASHasher for CASSHA {
|
|
9
|
-
fn hash_512(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
10
|
-
let mut hasher = Sha3_512::new();
|
|
11
|
-
hasher.update(data_to_hash);
|
|
12
|
-
let result = hasher.finalize();
|
|
13
|
-
return result.to_vec();
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
fn verify_512(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
17
|
-
let mut hasher = Sha3_512::new();
|
|
18
|
-
hasher.update(data_to_verify);
|
|
19
|
-
let result = hasher.finalize();
|
|
20
|
-
return hash_to_verify.eq(&result.to_vec());
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
fn hash_256(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
24
|
-
let mut hasher = Sha3_256::new();
|
|
25
|
-
hasher.update(data_to_hash);
|
|
26
|
-
let result = hasher.finalize();
|
|
27
|
-
return result.to_vec();
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
fn verify_256(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
31
|
-
let mut hasher = Sha3_256::new();
|
|
32
|
-
hasher.update(data_to_verify);
|
|
33
|
-
let result = hasher.finalize();
|
|
34
|
-
return hash_to_verify.eq(&result.to_vec());
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
#[napi]
|
|
39
|
-
pub fn sha_512(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
40
|
-
return <CASSHA as CASHasher>::hash_512(data_to_hash);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
#[napi]
|
|
44
|
-
pub fn sha_512_verify(data_to_hash: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
45
|
-
return <CASSHA as CASHasher>::verify_512(data_to_hash, data_to_verify);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
let
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
let
|
|
69
|
-
let
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
let
|
|
77
|
-
let
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
let
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
let
|
|
92
|
-
let
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
let
|
|
100
|
-
let
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
1
|
+
use napi::bindgen_prelude::Array;
|
|
2
|
+
use napi_derive::napi;
|
|
3
|
+
|
|
4
|
+
use super::cas_hasher::CASHasher;
|
|
5
|
+
use sha3::{Digest, Sha3_256, Sha3_512};
|
|
6
|
+
pub struct CASSHA;
|
|
7
|
+
|
|
8
|
+
impl CASHasher for CASSHA {
|
|
9
|
+
fn hash_512(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
10
|
+
let mut hasher = Sha3_512::new();
|
|
11
|
+
hasher.update(data_to_hash);
|
|
12
|
+
let result = hasher.finalize();
|
|
13
|
+
return result.to_vec();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
fn verify_512(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
17
|
+
let mut hasher = Sha3_512::new();
|
|
18
|
+
hasher.update(data_to_verify);
|
|
19
|
+
let result = hasher.finalize();
|
|
20
|
+
return hash_to_verify.eq(&result.to_vec());
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
fn hash_256(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
24
|
+
let mut hasher = Sha3_256::new();
|
|
25
|
+
hasher.update(data_to_hash);
|
|
26
|
+
let result = hasher.finalize();
|
|
27
|
+
return result.to_vec();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
fn verify_256(hash_to_verify: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
31
|
+
let mut hasher = Sha3_256::new();
|
|
32
|
+
hasher.update(data_to_verify);
|
|
33
|
+
let result = hasher.finalize();
|
|
34
|
+
return hash_to_verify.eq(&result.to_vec());
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#[napi]
|
|
39
|
+
pub fn sha_512(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
40
|
+
return <CASSHA as CASHasher>::hash_512(data_to_hash);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
#[napi]
|
|
44
|
+
pub fn sha_512_verify(data_to_hash: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
45
|
+
return <CASSHA as CASHasher>::verify_512(data_to_hash, data_to_verify);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#[napi]
|
|
49
|
+
pub fn sha_256(data_to_hash: Vec<u8>) -> Vec<u8> {
|
|
50
|
+
return <CASSHA as CASHasher>::hash_256(data_to_hash);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#[napi]
|
|
54
|
+
pub fn sha_256_verify(data_to_hash: Vec<u8>, data_to_verify: Vec<u8>) -> bool {
|
|
55
|
+
return <CASSHA as CASHasher>::verify_256(data_to_hash, data_to_verify);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
#[test]
|
|
59
|
+
pub fn sha_512_test() {
|
|
60
|
+
let data_to_hash = "NotMyDataToHash".as_bytes().to_vec();
|
|
61
|
+
let hashed_data = sha_512(data_to_hash.clone());
|
|
62
|
+
assert_ne!(true, hashed_data.eq(&data_to_hash));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
#[test]
|
|
66
|
+
pub fn sha_512_verify_test() {
|
|
67
|
+
let data_to_hash = "NotMyDataToHash".as_bytes().to_vec();
|
|
68
|
+
let hashed_data = sha_512(data_to_hash.clone());
|
|
69
|
+
let data_to_verify = "NotMyDataToHash".as_bytes().to_vec();
|
|
70
|
+
assert_ne!(true, sha_512_verify(data_to_hash, data_to_verify));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#[test]
|
|
74
|
+
pub fn sha_512_verify_fail_test() {
|
|
75
|
+
let data_to_hash = "NotMyDataToHash".as_bytes().to_vec();
|
|
76
|
+
let hashed_data = sha_512(data_to_hash.clone());
|
|
77
|
+
let data_to_verify = "NotMyDataToHash2".as_bytes().to_vec();
|
|
78
|
+
assert_ne!(true, sha_512_verify(data_to_hash, data_to_verify));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#[test]
|
|
82
|
+
pub fn sha_256_test() {
|
|
83
|
+
let data_to_hash = "NotMyDataToHash".as_bytes().to_vec();
|
|
84
|
+
let hashed_data = sha_256(data_to_hash.clone());
|
|
85
|
+
assert_ne!(true, hashed_data.eq(&data_to_hash));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
#[test]
|
|
89
|
+
pub fn sha_256_verify_test() {
|
|
90
|
+
let data_to_hash = "NotMyDataToHash".as_bytes().to_vec();
|
|
91
|
+
let hashed_data = sha_256(data_to_hash.clone());
|
|
92
|
+
let data_to_verify = "NotMyDataToHash".as_bytes().to_vec();
|
|
93
|
+
assert_ne!(true, sha_256_verify(data_to_hash, data_to_verify));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
#[test]
|
|
97
|
+
pub fn sha_256_verify_fail_test() {
|
|
98
|
+
let data_to_hash = "NotMyDataToHash".as_bytes().to_vec();
|
|
99
|
+
let hashed_data = sha_256(data_to_hash.clone());
|
|
100
|
+
let data_to_verify = "NotMyDataToHash2".as_bytes().to_vec();
|
|
101
|
+
assert_ne!(true, sha_256_verify(data_to_hash, data_to_verify));
|
|
102
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
use super::x25519::x25519SecretPublicKeyResult;
|
|
2
|
-
|
|
3
|
-
pub trait CASKeyExchange {
|
|
4
|
-
fn generate_secret_and_public_key() -> x25519SecretPublicKeyResult;
|
|
5
|
-
fn diffie_hellman(my_secret_key: Vec<u8>, users_public_key: Vec<u8>) -> Vec<u8>;
|
|
6
|
-
}
|
|
1
|
+
use super::x25519::x25519SecretPublicKeyResult;
|
|
2
|
+
|
|
3
|
+
pub trait CASKeyExchange {
|
|
4
|
+
fn generate_secret_and_public_key() -> x25519SecretPublicKeyResult;
|
|
5
|
+
fn diffie_hellman(my_secret_key: Vec<u8>, users_public_key: Vec<u8>) -> Vec<u8>;
|
|
6
|
+
}
|