1
1
2
2
use aes_gcm:: AeadCore ;
3
- use ascon_aead :: { aead :: { generic_array :: GenericArray , Aead , KeyInit , OsRng } , Ascon128 } ;
3
+ use cas_lib :: sponges :: { ascon_aead :: AsconAead , cas_ascon_aead :: CASAsconAead } ;
4
4
use napi_derive:: napi;
5
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
6
#[ napi]
36
7
pub fn ascon128_key_generate ( ) -> Vec < u8 > {
37
- return AsconAead :: generate_key ( ) ;
8
+ return < AsconAead as CASAsconAead > :: generate_key ( ) ;
38
9
}
39
10
40
11
#[ test]
@@ -45,7 +16,7 @@ fn test_ascon128_key_generate() {
45
16
46
17
#[ napi]
47
18
pub fn ascon128_nonce_generate ( ) -> Vec < u8 > {
48
- return AsconAead :: generate_nonce ( ) ;
19
+ return < AsconAead as CASAsconAead > :: generate_nonce ( ) ;
49
20
}
50
21
51
22
#[ test]
@@ -56,27 +27,27 @@ pub fn test_ascon128_nonce_generate() {
56
27
57
28
#[ napi]
58
29
pub fn ascon128_encrypt ( key : Vec < u8 > , nonce : Vec < u8 > , plaintext : Vec < u8 > ) -> Vec < u8 > {
59
- return AsconAead :: encrypt ( key, nonce, plaintext) ;
30
+ return < AsconAead as CASAsconAead > :: encrypt ( key, nonce, plaintext) ;
60
31
}
61
32
62
33
#[ test]
63
34
pub fn test_ascon128_encrypt ( ) {
64
- let key = AsconAead :: generate_key ( ) ;
65
- let nonce = AsconAead :: generate_nonce ( ) ;
35
+ let key = < AsconAead as CASAsconAead > :: generate_key ( ) ;
36
+ let nonce = < AsconAead as CASAsconAead > :: generate_nonce ( ) ;
66
37
let plaintext = b"Hello, World!" . to_vec ( ) ;
67
38
let ciphertext = ascon128_encrypt ( key. clone ( ) , nonce. clone ( ) , plaintext. clone ( ) ) ;
68
39
assert_ne ! ( ciphertext, plaintext) ;
69
40
}
70
41
71
42
#[ napi]
72
43
pub fn ascon128_decrypt ( key : Vec < u8 > , nonce : Vec < u8 > , ciphertext : Vec < u8 > ) -> Vec < u8 > {
73
- return AsconAead :: decrypt ( key, nonce, ciphertext) ;
44
+ return < AsconAead as CASAsconAead > :: decrypt ( key, nonce, ciphertext) ;
74
45
}
75
46
76
47
#[ test]
77
48
pub fn test_ascon128_decrypt ( ) {
78
- let key = AsconAead :: generate_key ( ) ;
79
- let nonce = AsconAead :: generate_nonce ( ) ;
49
+ let key = < AsconAead as CASAsconAead > :: generate_key ( ) ;
50
+ let nonce = < AsconAead as CASAsconAead > :: generate_nonce ( ) ;
80
51
let plaintext = b"Hello, World!" . to_vec ( ) ;
81
52
let ciphertext = ascon128_encrypt ( key. clone ( ) , nonce. clone ( ) , plaintext. clone ( ) ) ;
82
53
let decrypted = ascon128_decrypt ( key. clone ( ) , nonce. clone ( ) , ciphertext. clone ( ) ) ;
0 commit comments