Skip to content

Commit 3de04eb

Browse files
committed
fixed long AEAD length setting
1 parent ab93a9d commit 3de04eb

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

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

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -399,24 +399,24 @@ private void doProcessAADBytes(byte[] input, int inOff, int len)
399399
{
400400
ader = new byte[1 + len];
401401
ader[0] = (byte)reverseByte(len);
402-
aderlen = 1;
402+
aderlen = 0;
403403
}
404404
else
405405
{
406406
// aderlen is the highest bit position divided by 8
407-
aderlen = (32 - Integer.numberOfLeadingZeros(len)) >>> 3;
408-
ader = new byte[aderlen + 1 + len];
407+
aderlen = len_length(len);
408+
ader = new byte[1 + aderlen + len];
409409
ader[0] = (byte)reverseByte(0x80 | aderlen);
410-
int tmp = aderlen;
411-
for (int i = 1; i < ader.length; ++i)
410+
int tmp = len;
411+
for (int i = 0; i < aderlen; ++i)
412412
{
413-
ader[i] = (byte)reverseByte(tmp & 0xff);
413+
ader[1 + i] = (byte)reverseByte(tmp & 0xff);
414414
tmp >>>= 8;
415415
}
416416
}
417417
for (int i = 0; i < len; ++i)
418418
{
419-
ader[aderlen + i] = (byte)reverseByte(input[inOff + i]);
419+
ader[1 + aderlen + i] = (byte)reverseByte(input[inOff + i]);
420420
}
421421
byte adval;
422422
int adCnt = 0;
@@ -520,6 +520,24 @@ private int reverseByte(int x)
520520
return x;
521521
}
522522

523+
public int len_length(int v)
524+
{
525+
if ((v & 0xff) == v)
526+
{
527+
return 1;
528+
}
529+
if ((v & 0xffff) == v)
530+
{
531+
return 2;
532+
}
533+
if ((v & 0xffffff) == v)
534+
{
535+
return 3;
536+
}
537+
538+
return 4;
539+
}
540+
523541
private static final class ErasableOutputStream
524542
extends ByteArrayOutputStream
525543
{

0 commit comments

Comments
 (0)