com.simplaex.bedrock.Hash Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bedrock Show documentation
Show all versions of bedrock Show documentation
Essential utilities for modern Java.
package com.simplaex.bedrock;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import javax.annotation.Nonnull;
import java.nio.ByteBuffer;
public interface Hash> extends Comparable {
byte[] getBytes();
@Override
default int compareTo(final H hash) {
return toString().compareTo(hash.toString());
}
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@EqualsAndHashCode
abstract class Hash256> implements Hash {
static final int LENGTH = 32;
private final long v0;
private final long v1;
private final long v2;
private final long v3;
Hash256(final byte[] digest) {
this(
Numbers.longFromBytes(digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7]),
Numbers.longFromBytes(digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]),
Numbers.longFromBytes(digest[16], digest[17], digest[18], digest[19], digest[20], digest[21], digest[22], digest[23]),
Numbers.longFromBytes(digest[24], digest[25], digest[26], digest[27], digest[28], digest[29], digest[30], digest[31])
);
}
@Nonnull
public byte[] getBytes() {
final byte[] result = new byte[LENGTH];
final ByteBuffer bb = ByteBuffer.wrap(result);
bb.putLong(v0);
bb.putLong(v1);
bb.putLong(v2);
bb.putLong(v3);
return result;
}
@Nonnull
public String toString() {
return String.format("%016x%016x%016x%016x", v0, v1, v2, v3);
}
}
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@EqualsAndHashCode
abstract class Hash512> implements Hash {
static final int LENGTH = 64;
private final long v0;
private final long v1;
private final long v2;
private final long v3;
private final long v4;
private final long v5;
private final long v6;
private final long v7;
Hash512(final byte[] digest) {
this(
Numbers.longFromBytes(digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7]),
Numbers.longFromBytes(digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]),
Numbers.longFromBytes(digest[16], digest[17], digest[18], digest[19], digest[20], digest[21], digest[22], digest[23]),
Numbers.longFromBytes(digest[24], digest[25], digest[26], digest[27], digest[28], digest[29], digest[30], digest[31]),
Numbers.longFromBytes(digest[32], digest[33], digest[34], digest[35], digest[36], digest[37], digest[38], digest[39]),
Numbers.longFromBytes(digest[40], digest[41], digest[42], digest[43], digest[44], digest[45], digest[46], digest[47]),
Numbers.longFromBytes(digest[48], digest[49], digest[50], digest[51], digest[52], digest[53], digest[54], digest[55]),
Numbers.longFromBytes(digest[56], digest[57], digest[58], digest[59], digest[60], digest[61], digest[62], digest[63])
);
}
@Nonnull
public byte[] getBytes() {
final byte[] result = new byte[LENGTH];
final ByteBuffer bb = ByteBuffer.wrap(result);
bb.putLong(v0);
bb.putLong(v1);
bb.putLong(v2);
bb.putLong(v3);
bb.putLong(v4);
bb.putLong(v5);
bb.putLong(v6);
bb.putLong(v7);
return result;
}
@Nonnull
public String toString() {
return String.format("%016x%016x%016x%016x%016x%016x%016x%016x", v0, v1, v2, v3, v4, v5, v6, v7);
}
@Override
public int compareTo(final H hash) {
return toString().compareTo(hash.toString());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy