mirror of
https://github.com/Geprivilegieerde-Anonimiteit-BV/XACrypto.git
synced 2026-08-21 13:36:21 -04:00
Maven (#9)
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package de.caydenno1.xacrypto.hash.sha;
|
||||
|
||||
import de.caydenno1.xacrypto.misc.Constants;
|
||||
import de.caydenno1.xacrypto.hash.sha.Shared;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static de.caydenno1.xacrypto.hash.sha.Shared.hex;
|
||||
|
||||
public class SHA1 {
|
||||
|
||||
public static byte[] hash(byte[] data){
|
||||
byte[] padded = Shared.pad(data);
|
||||
|
||||
int a0 = Constants.SHA_H[0], a1 = Constants.SHA_H[1], a2 = Constants.SHA_H[2], a3 = Constants.SHA_H[3], a4 = Constants.SHA_H[4];
|
||||
|
||||
int[] w = new int[80];
|
||||
|
||||
for (int i = 0 ; i < padded.length ; i += 64) {
|
||||
|
||||
for (int j = 0 ; j < 16 ; j++) {
|
||||
int o = i + j * 4;
|
||||
w[j] = ((padded[o] & 0xff) << 24)
|
||||
| ((padded[o + 1] & 0xff) << 16)
|
||||
| ((padded[o + 2] & 0xff) << 8)
|
||||
| (padded[o + 3] & 0xff);
|
||||
}
|
||||
|
||||
for (int t = 16; t < 80; t++) {
|
||||
w[t] = de.caydenno1.xacrypto.hash.ROT.ROTL(
|
||||
w[t-3] ^ w[t-8] ^ w[t-14] ^ w[t-16], 1
|
||||
);
|
||||
}
|
||||
|
||||
int a = a0, b = a1, c = a2, d = a3, e = a4;
|
||||
|
||||
for (int t = 0 ; t < 80 ; t++) {
|
||||
int f, k;
|
||||
|
||||
if (t < 20) {
|
||||
f = (b & c) | ((~b) & d);
|
||||
k = Constants.SHA1_K[0];
|
||||
} else if (t < 40) {
|
||||
f = b ^ c ^ d;
|
||||
k = Constants.SHA1_K[1];
|
||||
} else if (t < 60) {
|
||||
f = (b & c) | (b & d) | (c & d);
|
||||
k = Constants.SHA1_K[2];
|
||||
} else {
|
||||
f = b ^ c ^ d;
|
||||
k = Constants.SHA1_K[3];
|
||||
}
|
||||
|
||||
int temp = de.caydenno1.xacrypto.hash.ROT.ROTL(a, 5);
|
||||
temp += f;
|
||||
temp += e;
|
||||
temp += k;
|
||||
temp += w[t];
|
||||
|
||||
e = d;
|
||||
d = c;
|
||||
c = de.caydenno1.xacrypto.hash.ROT.ROTL(b, 30);
|
||||
b = a;
|
||||
a = temp;
|
||||
}
|
||||
|
||||
a0 += a;
|
||||
a1 += b;
|
||||
a2 += c;
|
||||
a3 += d;
|
||||
a4 += e;
|
||||
}
|
||||
|
||||
return Shared.INT2BYTE(a0, a1, a2, a3, a4);
|
||||
}
|
||||
|
||||
public static String hash(String data) {
|
||||
byte[] result = hash(data.getBytes(StandardCharsets.UTF_8));
|
||||
return hex(result);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user