@@ -31,6 +31,8 @@ use cipher::{
31
31
use core:: fmt;
32
32
33
33
mod bitslice;
34
+ #[ macro_use]
35
+ mod unroll;
34
36
35
37
#[ cfg( feature = "zeroize" ) ]
36
38
use cipher:: zeroize:: { Zeroize , ZeroizeOnDrop } ;
@@ -56,73 +58,6 @@ fn xor(b1: Words, k: Words) -> Words {
56
58
res
57
59
}
58
60
59
- macro_rules! repeat31 {
60
- ( $i: ident, $body: block) => {
61
- let $i = 0 ;
62
- $body;
63
- let $i = 1 ;
64
- $body;
65
- let $i = 2 ;
66
- $body;
67
- let $i = 3 ;
68
- $body;
69
- let $i = 4 ;
70
- $body;
71
- let $i = 5 ;
72
- $body;
73
- let $i = 6 ;
74
- $body;
75
- let $i = 7 ;
76
- $body;
77
- let $i = 8 ;
78
- $body;
79
- let $i = 9 ;
80
- $body;
81
- let $i = 10 ;
82
- $body;
83
- let $i = 11 ;
84
- $body;
85
- let $i = 12 ;
86
- $body;
87
- let $i = 13 ;
88
- $body;
89
- let $i = 14 ;
90
- $body;
91
- let $i = 15 ;
92
- $body;
93
- let $i = 16 ;
94
- $body;
95
- let $i = 17 ;
96
- $body;
97
- let $i = 18 ;
98
- $body;
99
- let $i = 19 ;
100
- $body;
101
- let $i = 20 ;
102
- $body;
103
- let $i = 21 ;
104
- $body;
105
- let $i = 22 ;
106
- $body;
107
- let $i = 23 ;
108
- $body;
109
- let $i = 24 ;
110
- $body;
111
- let $i = 25 ;
112
- $body;
113
- let $i = 26 ;
114
- $body;
115
- let $i = 27 ;
116
- $body;
117
- let $i = 28 ;
118
- $body;
119
- let $i = 29 ;
120
- $body;
121
- let $i = 30 ;
122
- $body;
123
- } ;
124
- }
125
-
126
61
fn expand_key ( source : & [ u8 ] , len_bits : usize ) -> [ u8 ; 32 ] {
127
62
let mut key = [ 0u8 ; 32 ] ;
128
63
key[ ..source. len ( ) ] . copy_from_slice ( source) ;
@@ -208,7 +143,7 @@ impl BlockCipherEncBackend for Serpent {
208
143
fn encrypt_block ( & self , mut block : InOut < ' _ , ' _ , Block < Self > > ) {
209
144
let mut b: [ u32 ; 4 ] = read_words ( block. get_in ( ) . into ( ) ) ;
210
145
211
- repeat31 ! ( i, {
146
+ unroll31 ! ( i, {
212
147
let xb = xor( b, self . round_keys[ i] ) ;
213
148
let s = bitslice:: apply_s( i, xb) ;
214
149
b = bitslice:: linear_transform( s) ;
@@ -238,7 +173,7 @@ impl BlockCipherDecBackend for Serpent {
238
173
let xb = bitslice:: apply_s_inv ( ROUNDS - 1 , s) ;
239
174
b = xor ( xb, self . round_keys [ ROUNDS - 1 ] ) ;
240
175
241
- repeat31 ! ( i, {
176
+ unroll31 ! ( i, {
242
177
let i = 30 - i;
243
178
let s = bitslice:: linear_transform_inv( b) ;
244
179
let xb = bitslice:: apply_s_inv( i, s) ;
0 commit comments