public final class ConstantTimeUtils extends Object
Modifier and Type | Method and Description |
---|---|
static int |
equalsConstantTime(byte[] bytes1,
int startPos1,
byte[] bytes2,
int startPos2,
int length)
Compare two
byte arrays for equality without leaking timing information. |
static int |
equalsConstantTime(CharSequence s1,
CharSequence s2)
Compare two
CharSequence objects without leaking timing information. |
static int |
equalsConstantTime(int x,
int y)
Compare two
int s without leaking timing information. |
static int |
equalsConstantTime(long x,
long y)
Compare two
longs s without leaking timing information. |
public static int equalsConstantTime(int x, int y)
int
s without leaking timing information.
The int
return type is intentional and is designed to allow cascading of constant time operations:
int v1 = 1; int v1 = 1; int v1 = 1; int v1 = 500; boolean equals = (equalsConstantTime(l1, l2) & equalsConstantTime(l3, l4)) != 0;
x
- the first value.y
- the second value.0
if not equal. 1
if equal.public static int equalsConstantTime(long x, long y)
longs
s without leaking timing information.
The int
return type is intentional and is designed to allow cascading of constant time operations:
long v1 = 1; long v1 = 1; long v1 = 1; long v1 = 500; boolean equals = (equalsConstantTime(l1, l2) & equalsConstantTime(l3, l4)) != 0;
x
- the first value.y
- the second value.0
if not equal. 1
if equal.public static int equalsConstantTime(byte[] bytes1, int startPos1, byte[] bytes2, int startPos2, int length)
byte
arrays for equality without leaking timing information.
For performance reasons no bounds checking on the parameters is performed.
The int
return type is intentional and is designed to allow cascading of constant time operations:
byte[] s1 = new {1, 2, 3}; byte[] s2 = new {1, 2, 3}; byte[] s3 = new {1, 2, 3}; byte[] s4 = new {4, 5, 6}; boolean equals = (equalsConstantTime(s1, 0, s2, 0, s1.length) & equalsConstantTime(s3, 0, s4, 0, s3.length)) != 0;
bytes1
- the first byte array.startPos1
- the position (inclusive) to start comparing in bytes1
.bytes2
- the second byte array.startPos2
- the position (inclusive) to start comparing in bytes2
.length
- the amount of bytes to compare. This is assumed to be validated as not going out of bounds
by the caller.0
if not equal. 1
if equal.public static int equalsConstantTime(CharSequence s1, CharSequence s2)
CharSequence
objects without leaking timing information.
The int
return type is intentional and is designed to allow cascading of constant time operations:
String s1 = "foo"; String s2 = "foo"; String s3 = "foo"; String s4 = "goo"; boolean equals = (equalsConstantTime(s1, s2) & equalsConstantTime(s3, s4)) != 0;
s1
- the first value.s2
- the second value.0
if not equal. 1
if equal.Copyright © 2008–2019 The Netty Project. All rights reserved.