Skip to content

Commit

Permalink
Format tweaks
Browse files Browse the repository at this point in the history
Longer lines
  • Loading branch information
garydgregory committed Apr 19, 2024
1 parent 2490376 commit be58b03
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 85 deletions.
42 changes: 17 additions & 25 deletions src/main/java/org/apache/commons/codec/digest/Blake3.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
public final class Blake3 {

private static final class ChunkState {

private int[] chainingValue;
private final long chunkCounter;
private final int flags;
Expand Down Expand Up @@ -209,20 +210,20 @@ private void reset() {
state = new ChunkState(key, 0, flags);
}
}

/**
* Represents the state just prior to either producing an eight word chaining value or any number of output bytes
* when the ROOT flag is set.
*/
private static final class Output {

private final int[] inputChainingValue;
private final int[] blockWords;
private final long counter;
private final int blockLength;
private final int flags;

private Output(
final int[] inputChainingValue, final int[] blockWords, final long counter, final int blockLength,
final int flags) {
private Output(final int[] inputChainingValue, final int[] blockWords, final long counter, final int blockLength, final int flags) {
this.inputChainingValue = inputChainingValue;
this.blockWords = blockWords;
this.counter = counter;
Expand All @@ -231,17 +232,15 @@ private Output(
}

private int[] chainingValue() {
return Arrays
.copyOf(compress(inputChainingValue, blockWords, blockLength, counter, flags), CHAINING_VALUE_INTS);
return Arrays.copyOf(compress(inputChainingValue, blockWords, blockLength, counter, flags), CHAINING_VALUE_INTS);
}

private void rootOutputBytes(final byte[] out, int offset, int length) {
int outputBlockCounter = 0;
while (length > 0) {
int chunkLength = Math.min(OUT_LEN * 2, length);
length -= chunkLength;
final int[] words =
compress(inputChainingValue, blockWords, blockLength, outputBlockCounter++, flags | ROOT);
final int[] words = compress(inputChainingValue, blockWords, blockLength, outputBlockCounter++, flags | ROOT);
int wordCounter = 0;
while (chunkLength > 0) {
final int wordLength = Math.min(Integer.BYTES, chunkLength);
Expand All @@ -252,35 +251,33 @@ private void rootOutputBytes(final byte[] out, int offset, int length) {
}
}
}

private static final int BLOCK_LEN = 64;
private static final int BLOCK_INTS = BLOCK_LEN / Integer.BYTES;
private static final int KEY_LEN = 32;
private static final int KEY_INTS = KEY_LEN / Integer.BYTES;

private static final int OUT_LEN = 32;

private static final int CHUNK_LEN = 1024;
private static final int CHAINING_VALUE_INTS = 8;

/**
* Standard hash key used for plain hashes; same initialization vector as Blake2s.
*/
private static final int[] IV =
{ 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 };
private static final int[] IV = { 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 };

// domain flags
private static final int CHUNK_START = 1;
private static final int CHUNK_END = 1 << 1;
private static final int PARENT = 1 << 2;
private static final int ROOT = 1 << 3;

private static final int KEYED_HASH = 1 << 4;

private static final int DERIVE_KEY_CONTEXT = 1 << 5;

private static final int DERIVE_KEY_MATERIAL = 1 << 6;

/**
* Pre-permuted for all 7 rounds; the second row (2,6,3,...) indicates the base permutation.
*/
// @formatter:off
private static final byte[][] MSG_SCHEDULE = {
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
{ 2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8 },
Expand All @@ -290,6 +287,7 @@ private void rootOutputBytes(final byte[] out, int offset, int length) {
{ 9, 14, 11, 5, 8, 12, 15, 1, 13, 3, 0, 10, 2, 6, 4, 7 },
{ 11, 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13 }
};
// @formatter:on

private static void checkBufferArgs(final byte[] buffer, final int offset, final int length) {
Objects.requireNonNull(buffer);
Expand All @@ -301,14 +299,11 @@ private static void checkBufferArgs(final byte[] buffer, final int offset, final
}
final int bufferLength = buffer.length;
if (offset > bufferLength - length) {
throw new IndexOutOfBoundsException(
"Offset " + offset + " and length " + length + " out of bounds with buffer length " + bufferLength);
throw new IndexOutOfBoundsException("Offset " + offset + " and length " + length + " out of bounds with buffer length " + bufferLength);
}
}

private static int[] compress(
final int[] chainingValue, final int[] blockWords, final int blockLength, final long counter,
final int flags) {
private static int[] compress(final int[] chainingValue, final int[] blockWords, final int blockLength, final long counter, final int flags) {
final int[] state = Arrays.copyOf(chainingValue, BLOCK_INTS);
System.arraycopy(IV, 0, state, 8, 4);
state[12] = (int) counter;
Expand All @@ -329,8 +324,7 @@ private static int[] compress(
/**
* The mixing function, G, which mixes either a column or a diagonal.
*/
private static void g(
final int[] state, final int a, final int b, final int c, final int d, final int mx, final int my) {
private static void g(final int[] state, final int a, final int b, final int c, final int d, final int mx, final int my) {
state[a] += state[b] + mx;
state[d] = Integer.rotateRight(state[d] ^ state[a], 16);
state[c] += state[d];
Expand Down Expand Up @@ -414,13 +408,11 @@ private static void packInt(final int value, final byte[] dst, final int off, fi
}
}

private static int[] parentChainingValue(
final int[] leftChildCV, final int[] rightChildCV, final int[] key, final int flags) {
private static int[] parentChainingValue(final int[] leftChildCV, final int[] rightChildCV, final int[] key, final int flags) {
return parentOutput(leftChildCV, rightChildCV, key, flags).chainingValue();
}

private static Output parentOutput(
final int[] leftChildCV, final int[] rightChildCV, final int[] key, final int flags) {
private static Output parentOutput(final int[] leftChildCV, final int[] rightChildCV, final int[] key, final int flags) {
final int[] blockWords = Arrays.copyOf(leftChildCV, BLOCK_INTS);
System.arraycopy(rightChildCV, 0, blockWords, 8, CHAINING_VALUE_INTS);
return new Output(key.clone(), blockWords, 0, BLOCK_LEN, flags | PARENT);
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/org/apache/commons/codec/digest/HmacUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -196,11 +196,9 @@ public static Mac getInitializedMac(final HmacAlgorithms algorithm, final byte[]
* when a {@link NoSuchAlgorithmException} is caught or key is null or key is invalid.
*/
public static Mac getInitializedMac(final String algorithm, final byte[] key) {

if (key == null) {
throw new IllegalArgumentException("Null key");
}

try {
final SecretKeySpec keySpec = new SecretKeySpec(key, algorithm);
final Mac mac = Mac.getInstance(algorithm);
Expand Down
118 changes: 60 additions & 58 deletions src/main/java/org/apache/commons/codec/digest/PureJavaCrc32.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public class PureJavaCrc32 implements Checksum {
* CRC-32 lookup tables generated by the polynomial 0xEDB88320.
* See also TestPureJavaCrc32.Table.
*/
// @formatter:off
private static final int[] T = {
/* T8_0 */
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
Expand Down Expand Up @@ -571,74 +572,75 @@ public class PureJavaCrc32 implements Checksum {
0x2C8E0FFF, 0xE0240F61, 0x6EAB0882, 0xA201081C,
0xA8C40105, 0x646E019B, 0xEAE10678, 0x264B06E6
};
// @formatter:on

/** The current CRC value, bit-flipped */
private int crc;
/** The current CRC value, bit-flipped */
private int crc;

/** Create a new PureJavaCrc32 object. */
public PureJavaCrc32() {
resetCrc();
}
/** Create a new PureJavaCrc32 object. */
public PureJavaCrc32() {
resetCrc();
}

@Override
public long getValue() {
return ~crc & 0xffffffffL;
}

@Override
public void reset() {
resetCrc();
}

@Override
public long getValue() {
return ~crc & 0xffffffffL;
}
// called by ctor, so must not be overrideable
private void resetCrc() {
crc = 0xffffffff;
}

@Override
public void reset() {
resetCrc();
}
@Override
public void update(final byte[] b, final int offset, final int len) {
int localCrc = crc;

// called by ctor, so must not be overrideable
private void resetCrc() {
crc = 0xffffffff;
}
final int remainder = len & 0x7;
int i = offset;
for (final int end = offset + len - remainder; i < end; i += 8) {
final int x = localCrc ^
(b[i] << 24 >>> 24) + (b[i + 1] << 24 >>> 16) +
(b[i + 2] << 24 >>> 8) + (b[i + 3] << 24);

@Override
public void update(final byte[] b, final int offset, final int len) {
int localCrc = crc;
localCrc = T[(x << 24 >>> 24) + 0x700] ^ T[(x << 16 >>> 24) + 0x600] ^
T[(x << 8 >>> 24) + 0x500] ^ T[ (x >>> 24) + 0x400] ^
T[(b[i + 4] << 24 >>> 24) + 0x300] ^ T[(b[i + 5] << 24 >>> 24) + 0x200] ^
T[(b[i + 6] << 24 >>> 24) + 0x100] ^ T[b[i + 7] << 24 >>> 24];
}

final int remainder = len & 0x7;
int i = offset;
for (final int end = offset + len - remainder; i < end; i += 8) {
final int x = localCrc ^
(b[i] << 24 >>> 24) + (b[i + 1] << 24 >>> 16) +
(b[i + 2] << 24 >>> 8) + (b[i + 3] << 24);
/* loop unroll - duff's device style */
switch (remainder) {
case 7:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 6:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 5:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 4:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 3:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 2:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 1:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
default:
/* nothing */
}

localCrc = T[(x << 24 >>> 24) + 0x700] ^ T[(x << 16 >>> 24) + 0x600] ^
T[(x << 8 >>> 24) + 0x500] ^ T[ (x >>> 24) + 0x400] ^
T[(b[i + 4] << 24 >>> 24) + 0x300] ^ T[(b[i + 5] << 24 >>> 24) + 0x200] ^
T[(b[i + 6] << 24 >>> 24) + 0x100] ^ T[b[i + 7] << 24 >>> 24];
// Publish crc out to object
crc = localCrc;
}

/* loop unroll - duff's device style */
switch (remainder) {
case 7:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 6:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 5:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 4:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 3:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 2:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
case 1:
localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
default:
/* nothing */
@Override
final public void update(final int b) {
crc = crc >>> 8 ^ T[(crc ^ b) << 24 >>> 24];
}

// Publish crc out to object
crc = localCrc;
}

@Override
final public void update(final int b) {
crc = crc >>> 8 ^ T[(crc ^ b) << 24 >>> 24];
}

}

0 comments on commit be58b03

Please sign in to comment.