Skip to content

Commit 1b32536

Browse files
committed
PhotonBeetle perf. opts.
- still very slow
1 parent 581c10c commit 1b32536

File tree

2 files changed

+34
-42
lines changed

2 files changed

+34
-42
lines changed

core/src/main/java/org/bouncycastle/crypto/digests/PhotonBeetleDigest.java

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public void reset()
149149

150150
void PHOTON_Permutation()
151151
{
152-
int i, j, k, l;
152+
int i, j, k;
153153
for (i = 0; i < DSquare; i++)
154154
{
155155
state_2d[i >>> Dq][i & Dr] = (byte)(((state[i >> 1] & 0xFF) >>> (4 * (i & 1))) & 0xf);
@@ -181,29 +181,25 @@ void PHOTON_Permutation()
181181
{
182182
for (i = 0; i < D; i++)
183183
{
184-
byte sum = 0;
184+
int sum = 0;
185+
185186
for (k = 0; k < D; k++)
186187
{
187-
int x = MixColMatrix[i][k], ret = 0, b = state_2d[k][j];
188-
for (l = 0; l < S; l++)
189-
{
190-
if (((b >>> l) & 1) != 0)
191-
{
192-
ret ^= x;
193-
}
194-
if (((x >>> S_1) & 1) != 0)
195-
{
196-
x <<= 1;
197-
x ^= 0x3;
198-
}
199-
else
200-
{
201-
x <<= 1;
202-
}
203-
}
204-
sum ^= ret & 15;
188+
int x = MixColMatrix[i][k], b = state_2d[k][j];
189+
190+
sum ^= x * (b & 1);
191+
sum ^= x * (b & 2);
192+
sum ^= x * (b & 4);
193+
sum ^= x * (b & 8);
205194
}
206-
state[i] = sum;
195+
196+
int t0 = sum >>> 4;
197+
sum = (sum & 15) ^ t0 ^ (t0 << 1);
198+
199+
int t1 = sum >>> 4;
200+
sum = (sum & 15) ^ t1 ^ (t1 << 1);
201+
202+
state[i] = (byte)sum;
207203
}
208204
for (i = 0; i < D; i++)
209205
{

core/src/main/java/org/bouncycastle/crypto/engines/PhotonBeetleEngine.java

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ private void reset(boolean clearMac)
306306

307307
private void PHOTON_Permutation()
308308
{
309-
int i, j, k, l;
309+
int i, j, k;
310310
for (i = 0; i < DSquare; i++)
311311
{
312312
state_2d[i >>> Dq][i & Dr] = (byte)(((state[i >> 1] & 0xFF) >>> (4 * (i & 1))) & 0xf);
@@ -338,29 +338,25 @@ private void PHOTON_Permutation()
338338
{
339339
for (i = 0; i < D; i++)
340340
{
341-
byte sum = 0;
341+
int sum = 0;
342+
342343
for (k = 0; k < D; k++)
343344
{
344-
int x = MixColMatrix[i][k], ret = 0, b = state_2d[k][j];
345-
for (l = 0; l < S; l++)
346-
{
347-
if (((b >>> l) & 1) != 0)
348-
{
349-
ret ^= x;
350-
}
351-
if (((x >>> S_1) & 1) != 0)
352-
{
353-
x <<= 1;
354-
x ^= 0x3;
355-
}
356-
else
357-
{
358-
x <<= 1;
359-
}
360-
}
361-
sum ^= ret & 15;
345+
int x = MixColMatrix[i][k], b = state_2d[k][j];
346+
347+
sum ^= x * (b & 1);
348+
sum ^= x * (b & 2);
349+
sum ^= x * (b & 4);
350+
sum ^= x * (b & 8);
362351
}
363-
state[i] = sum;
352+
353+
int t0 = sum >>> 4;
354+
sum = (sum & 15) ^ t0 ^ (t0 << 1);
355+
356+
int t1 = sum >>> 4;
357+
sum = (sum & 15) ^ t1 ^ (t1 << 1);
358+
359+
state[i] = (byte)sum;
364360
}
365361
for (i = 0; i < D; i++)
366362
{

0 commit comments

Comments
 (0)