Skip to content

Commit 8d729f3

Browse files
committed
Make the code look more like the original pseudo code
Also consistently use "int" for the loop variable. It's always signed so there's no need to specify that explicitly, and there's simply no reason to use "uint32".
1 parent d52a124 commit 8d729f3

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

speck.c

+15-9
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ static void speck_key_expand48(const int64 *K, uint32 *k);
1717
static void
1818
speck_key_expand32(const int64 K, uint16 *k)
1919
{
20+
const int rounds = 22;
2021
int i;
2122
uint16 l[24];
2223

2324
l[2] = (K & 0xFFFF000000000000) >> 48;
2425
l[1] = (K & 0x0000FFFF00000000) >> 32;
2526
l[0] = (K & 0x00000000FFFF0000) >> 16;
2627

27-
for (i = 0; i < 22-1; ++i)
28+
for (i = 0; i <= rounds - 2; ++i)
2829
{
2930
l[i+3] = ((uint16) (k[i] + ROR16(l[i], 7))) ^ i;
3031
k[i+1] = (ROL16(k[i], 2) ^ l[i+3]);
@@ -34,14 +35,15 @@ speck_key_expand32(const int64 K, uint16 *k)
3435
uint32
3536
speck_encrypt32(const uint32 xy, const int64 K)
3637
{
37-
uint32 i;
38+
const int rounds = 22;
39+
int i;
3840
uint16 k[22];
3941
uint16 x = (xy & 0xFFFF0000) >> 16, y = (xy & 0xFFFF);
4042

4143
k[0] = (K & 0xFFFF);
4244
speck_key_expand32(K, k);
4345

44-
for (i = 0; i < 22; i++)
46+
for (i = 0; i <= rounds - 1; i++)
4547
{
4648
x = (uint16) (ROR16(x, 7) + y);
4749
x ^= k[i];
@@ -53,14 +55,15 @@ speck_encrypt32(const uint32 xy, const int64 K)
5355
uint32
5456
speck_decrypt32(const uint32 xy, const int64 K)
5557
{
56-
signed int i;
58+
const int rounds = 22;
59+
int i;
5760
uint16 k[22];
5861
uint16 x = (xy & 0xFFFF0000) >> 16, y = (xy & 0xFFFF);
5962

6063
k[0] = (K & 0xFFFF);
6164
speck_key_expand32(K, k);
6265

63-
for (i = 21; i >= 0; i--)
66+
for (i = rounds - 1; i >= 0; i--)
6467
{
6568
y ^= x;
6669
y = ROR16(y, 2);
@@ -73,14 +76,15 @@ speck_decrypt32(const uint32 xy, const int64 K)
7376
static void
7477
speck_key_expand48(const int64 *K, uint32 *k)
7578
{
79+
const int rounds = 23;
7680
int i;
7781
uint32 l[25];
7882

7983
l[2] = (K[0] & 0xFFFFFF000000) >> 24;
8084
l[1] = (K[0] & 0x000000FFFFFF) >> 0;
8185
l[0] = (K[1] & 0xFFFFFF000000) >> 24;
8286

83-
for (i = 0; i < 23-1; ++i)
87+
for (i = 0; i <= rounds - 2; ++i)
8488
{
8589
l[i+3] = ((k[i] + ROR24(l[i], 8)) & 0xFFFFFF) ^ i;
8690
k[i+1] = (ROL24(k[i], 3) ^ l[i+3]);
@@ -90,14 +94,15 @@ speck_key_expand48(const int64 *K, uint32 *k)
9094
int64
9195
speck_encrypt48(const int64 xy, const int64 *K)
9296
{
97+
const int rounds = 23;
9398
int i;
9499
uint32 k[23];
95100
uint32 x = (xy & 0xFFFFFF000000) >> 24, y = (xy & 0xFFFFFF);
96101

97102
k[0] = (K[1] & 0xFFFFFF);
98103
speck_key_expand48(K, k);
99104

100-
for (i = 0; i < 23; i++)
105+
for (i = 0; i <= rounds - 1; i++)
101106
{
102107
x = ((ROR24(x, 8) + y) & 0xFFFFFF);
103108
x ^= k[i];
@@ -109,14 +114,15 @@ speck_encrypt48(const int64 xy, const int64 *K)
109114
int64
110115
speck_decrypt48(const int64 xy, const int64 *K)
111116
{
112-
signed int i;
117+
const int rounds = 23;
118+
int i;
113119
uint32 k[23];
114120
uint32 x = (xy & 0xFFFFFF000000) >> 24, y = (xy & 0xFFFFFF);
115121

116122
k[0] = (K[1] & 0xFFFFFF);
117123
speck_key_expand48(K, k);
118124

119-
for (i = 22; i >= 0; i--)
125+
for (i = rounds - 1; i >= 0; i--)
120126
{
121127
y ^= x;
122128
y = ROR24(y, 3);

0 commit comments

Comments
 (0)