mirror of
https://github.com/Geprivilegieerde-Anonimiteit-BV/XACrypto.git
synced 2026-08-21 13:36:21 -04:00
* Update README.md (#2) * AES128.java + UnchangedData.java * Several ciphers, alot of ZekerRijndael progress * maak de j0-functie aan * maak een inc32-functie aan * progress! * GCM.java complete! * my dementia .. lol * SM4 COMPLET! * decryption bugfix * easy making these were so easy, just had to copy and paste AES128 and change like 5 numbers * read desc i feel sick. i made the rest of the functions dummy functions and will finish them in the future. i am unsure if i will continue working on this tomorrow, i may take a break or i may not, who knows. * F func finished in Camellia. several bugfixes feel much better btw, took a shower and slept :) * FL don would recommend deleting .idea when you clone. FL done * Camellia Camellia complete * add factory * bugfix,more consise * Fixed very annoying seperate AES<bitcount>.java files into one unified AES.java file :D (#4) * AES.java potential * Update AES.java bufxie * remove old libs removed old AES$.java files as they are deprecated now that AES.java is created. (AES.java should be 100% functional.) * Update Factories.java aaand rename the AES128 factory to use AES with bits:128 instead of AES128 * Update AES.java Performance Enhancements PKCS#7 OK! Safety (missing bounds protection) * Update README.md (#5) * Update AES.java ah yes i love things magically stop working after PR ! :P * something idk my head is hurting again! :D so fun. i might make AESGCM.java use GHASH.java's xor function if i can figure out why its not working. also AESGCM.java (in its current state) sucks. i need to work on it a bit but just not now. * update gitignore * uh how did it break? i didnt even change either of those files since they were working * very legit solution 4realz1 * useless * fix (#7) * GHASH compnonce + fixed AESGCM bugs * Update AES.java some fixes. * Update AESGCM.java add warning * Camelia performance enhancements + decryption (i forgot to add it before lol) + several bugfixes * "It's not a disaster, It's innovation!" * decryption + bufixes * Update Project_Default.xml * this isnt English class * Update README.md it duplicated itself lol * desc Aria.java progress, next commit will have GRK finished * Aria.java complete! * desc added support for Camelia 192 + 256 bit operation, perf enhancements and bugfixes * add ARIAGCM factory my wrapper in ARIAGCM handles GCM :) * Update README.md add TODO * added 128,192,256 support for AESGCM * desc soo... did you know sometimes you actually do want to reuse code without getting 68 warnings from intellij? * note+camellia tab * began Serpant.java * Serpent COMPLET! * desc add dummy functions to twofish * Update Twofish.java progrses on twofish + HUMOR * twofish done + readme upd * HOLY i actually finished Blowfish.java lol, almost done with ECB, just neeed 2 functions * Bfish ECB done! :D * desc - fix typo - add Aria.java support for Aria-ECB - move Aria.java to globalpackaeg * Create AriaECB.java will finish this tmr. im so tired lol * desc ariaecb complete, also forgot to add factories for blowfish too * Update AriaECB.java * sm4ecb complete
80 lines
2.3 KiB
Java
80 lines
2.3 KiB
Java
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);
|
|
}
|
|
} |