@@ -20,7 +20,8 @@ pub fn getInvKeySchedule(keySize: u32, keyWords: &[u32]) -> Vec<u32> {
2020}
2121
2222#[ wasm_bindgen]
23- pub fn doEncrypt ( mode : & str , nRounds : usize , nWordsReady : usize , blockSize : usize , iv : & [ u32 ] , dataWords : & mut [ u32 ] , keySchedule : & [ u32 ] ) {
23+ pub fn doEncrypt ( mode : & str , nRounds : usize , nWordsReady : usize , blockSize : usize , iv : & [ u32 ] , dataWords : & mut [ u32 ] , keySchedule : & [ u32 ] ) -> Vec < u32 > {
24+ let mut process: Vec < u32 > = Vec :: new ( ) ;
2425 if nWordsReady > 0 {
2526 let mut offset: usize = 0 ;
2627 match mode. to_lowercase ( ) . as_str ( ) {
@@ -32,6 +33,7 @@ pub fn doEncrypt(mode: &str, nRounds: usize, nWordsReady: usize, blockSize: usiz
3233 prevBlock = dataWords[ offset..offset + blockSize] . to_vec ( ) ;
3334 offset += blockSize;
3435 }
36+ process = prevBlock;
3537 }
3638 "ecb" => {
3739 while offset < nWordsReady {
@@ -48,6 +50,7 @@ pub fn doEncrypt(mode: &str, nRounds: usize, nWordsReady: usize, blockSize: usiz
4850 prevBlock = dataWords[ offset..offset + blockSize] . to_vec ( ) ;
4951 offset += blockSize;
5052 }
53+ process = prevBlock;
5154 }
5255 "ofb" => {
5356 let mut keystream = iv[ 0 ..blockSize] . to_vec ( ) ;
@@ -56,6 +59,7 @@ pub fn doEncrypt(mode: &str, nRounds: usize, nWordsReady: usize, blockSize: usiz
5659 xorBlock ( blockSize, keystream. to_owned ( ) , dataWords, offset) ;
5760 offset += blockSize;
5861 }
62+ process = keystream;
5963 }
6064 "ctr" => {
6165 let mut counter = iv[ 0 ..blockSize] . to_vec ( ) ;
@@ -68,14 +72,18 @@ pub fn doEncrypt(mode: &str, nRounds: usize, nWordsReady: usize, blockSize: usiz
6872 xorBlock ( blockSize, keystream. to_owned ( ) , dataWords, offset) ;
6973 offset += blockSize;
7074 }
75+ process = counter;
7176 }
7277 _ => { }
7378 }
7479 }
80+
81+ process
7582}
7683
7784#[ wasm_bindgen]
78- pub fn doDecrypt ( mode : & str , nRounds : usize , nWordsReady : usize , blockSize : usize , iv : & [ u32 ] , dataWords : & mut [ u32 ] , keySchedule : & [ u32 ] , invKeySchedule : & [ u32 ] ) {
85+ pub fn doDecrypt ( mode : & str , nRounds : usize , nWordsReady : usize , blockSize : usize , iv : & [ u32 ] , dataWords : & mut [ u32 ] , keySchedule : & [ u32 ] , invKeySchedule : & [ u32 ] ) -> Vec < u32 > {
86+ let mut process: Vec < u32 > = Vec :: new ( ) ;
7987 if nWordsReady > 0 {
8088 let mut offset: usize = 0 ;
8189 match mode. to_lowercase ( ) . as_str ( ) {
@@ -88,6 +96,7 @@ pub fn doDecrypt(mode: &str, nRounds: usize, nWordsReady: usize, blockSize: usiz
8896 prevBlock = thisBlock;
8997 offset += blockSize;
9098 }
99+ process = prevBlock;
91100 }
92101 "ecb" => {
93102 while offset < nWordsReady {
@@ -105,6 +114,7 @@ pub fn doDecrypt(mode: &str, nRounds: usize, nWordsReady: usize, blockSize: usiz
105114 prevBlock = thisBlock;
106115 offset += blockSize;
107116 }
117+ process = prevBlock;
108118 }
109119 "ofb" => {
110120 let mut keystream = iv[ 0 ..blockSize] . to_vec ( ) ;
@@ -113,6 +123,7 @@ pub fn doDecrypt(mode: &str, nRounds: usize, nWordsReady: usize, blockSize: usiz
113123 xorBlock ( blockSize, keystream. to_owned ( ) , dataWords, offset) ;
114124 offset += blockSize;
115125 }
126+ process = keystream;
116127 }
117128 "ctr" => {
118129 let mut counter = iv[ 0 ..blockSize] . to_vec ( ) ;
@@ -125,10 +136,13 @@ pub fn doDecrypt(mode: &str, nRounds: usize, nWordsReady: usize, blockSize: usiz
125136 xorBlock ( blockSize, keystream. to_owned ( ) , dataWords, offset) ;
126137 offset += blockSize;
127138 }
139+ process = counter;
128140 }
129141 _ => { }
130142 }
131143 }
144+
145+ process
132146}
133147
134148fn xorBlock ( blockSize : usize , block : Vec < u32 > , words : & mut [ u32 ] , offset : usize ) {
0 commit comments