mirror of
https://github.com/Geprivilegieerde-Anonimiteit-BV/XACrypto.git
synced 2026-08-21 13:36:21 -04:00
Java mirror fix (#20)
* Update ARIAGCM.java removed reflection-only exceptions * desc bulk remove reflection-only * Update Factories.java more removal! * desc camellia - add block cipher implements + encryptBlock XACryptoException twofish- add implement for blockcipher * lot stuff + cleanup
This commit is contained in:
@@ -7,22 +7,20 @@ import de.caydenno1.xacrypto.zekerrijndael.ECB.ciphers.interfaces.ECBExceptionle
|
|||||||
import de.caydenno1.xacrypto.zekerrijndael.GCM.AES;
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.AES;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.GCM.ciphers.*;
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.ciphers.*;
|
||||||
|
import de.caydenno1.xacrypto.zekerrijndael.Global.Aria;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.Global.Camellia;
|
import de.caydenno1.xacrypto.zekerrijndael.Global.Camellia;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
|
|
||||||
public class Factories {
|
public class Factories {
|
||||||
public static class GCM {
|
public static class GCM {
|
||||||
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM AES128(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new AES(key, 128)); }
|
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM AES128(byte[] key) throws XACryptoException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new AES(key, 128)); }
|
||||||
|
|
||||||
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM SM4GCM(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new SM4GCM(key)); }
|
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM SM4GCM(byte[] key) throws XACryptoException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new SM4GCM(key)); }
|
||||||
|
|
||||||
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM Camellia(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new Camellia(key)); }
|
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM Camellia(byte[] key) throws XACryptoException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new Camellia(key)); }
|
||||||
|
|
||||||
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM AESGCM() throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new AESGCM()); }
|
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM ARIAGCM(byte[] key) throws XACryptoException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new Aria(true, key)); }
|
||||||
|
|
||||||
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM ARIAGCM(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new ARIAGCM(key)); }
|
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM SerpentGCM(byte[] key) throws XACryptoException { return new SerpentGCM(key); }
|
||||||
|
|
||||||
public static de.caydenno1.xacrypto.zekerrijndael.GCM.GCM SerpentGCM(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { return new de.caydenno1.xacrypto.zekerrijndael.GCM.GCM(new SerpentGCM(key)); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ECB {
|
public static class ECB {
|
||||||
|
|||||||
@@ -3,26 +3,20 @@ import de.caydenno1.xacrypto.misc.ToM;
|
|||||||
import de.caydenno1.xacrypto.misc.XACryptoException;
|
import de.caydenno1.xacrypto.misc.XACryptoException;
|
||||||
import de.caydenno1.xacrypto.misc.isNull;
|
import de.caydenno1.xacrypto.misc.isNull;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class GCM {
|
public class GCM {
|
||||||
private final Object cip;
|
private final BlockCipher cip;
|
||||||
private final GHASH gh;
|
private final GHASH gh;
|
||||||
private final Method encryptor;
|
|
||||||
|
|
||||||
public GCM(Object cip) throws XACryptoException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
public GCM(BlockCipher cip) throws XACryptoException {
|
||||||
this.cip = cip;
|
this.cip = cip;
|
||||||
this.encryptor = cip.getClass().getMethod("encryptBlock", byte[].class);
|
byte[] H = cip.encryptBlock(new byte[16]);
|
||||||
|
|
||||||
byte[] H = (byte[]) this.encryptor.invoke(cip, (Object) new byte[16]);
|
|
||||||
|
|
||||||
this.gh = new GHASH(H);
|
this.gh = new GHASH(H);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Result encrypt(byte[] pln, byte[] aad, byte[] iv) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
public Result encrypt(byte[] pln, byte[] aad, byte[] iv) throws XACryptoException {
|
||||||
if (iv.length <= 0) throw new XACryptoException("iv does not have data or is corrupted :[");
|
if (iv.length <= 0) throw new XACryptoException("iv does not have data or is corrupted :[");
|
||||||
if (pln == null) pln = new byte[0];
|
if (pln == null) pln = new byte[0];
|
||||||
if (aad == null) aad = new byte[0];
|
if (aad == null) aad = new byte[0];
|
||||||
@@ -38,23 +32,23 @@ public class GCM {
|
|||||||
return new Result(packaged,tag);
|
return new Result(packaged,tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] decrypt(Result res, byte[] aad) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
public byte[] decrypt(Result res, byte[] aad) throws XACryptoException {
|
||||||
return dec(res, aad, 12, false);
|
return dec(res, aad, 12, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] decrypt(Result res, byte[] aad, String optflag) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
public byte[] decrypt(Result res, byte[] aad, String optflag) throws XACryptoException {
|
||||||
return dec(res, aad, 12, Objects.equals(optflag, "-override"));
|
return dec(res, aad, 12, Objects.equals(optflag, "-override"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] decrypt(Result res, byte[] aad, int ivLen) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
public byte[] decrypt(Result res, byte[] aad, int ivLen) throws XACryptoException {
|
||||||
return dec(res, aad, ivLen, false);
|
return dec(res, aad, ivLen, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] decrypt(Result res, byte[] aad, int ivLen, String optflag) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
public byte[] decrypt(Result res, byte[] aad, int ivLen, String optflag) throws XACryptoException {
|
||||||
return dec(res, aad, ivLen, Objects.equals(optflag, "-override"));
|
return dec(res, aad, ivLen, Objects.equals(optflag, "-override"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] dec(Result res, byte[] aad, int ivLen, boolean override) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
private byte[] dec(Result res, byte[] aad, int ivLen, boolean override) throws XACryptoException {
|
||||||
if (res.cip().length < 12) throw new XACryptoException("ciptext min len is 12 char");
|
if (res.cip().length < 12) throw new XACryptoException("ciptext min len is 12 char");
|
||||||
if (isNull.isNull(aad)) aad = new byte[0];
|
if (isNull.isNull(aad)) aad = new byte[0];
|
||||||
|
|
||||||
@@ -86,17 +80,17 @@ public class GCM {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] tag(byte[] aad, byte[] ct, byte[] J0) throws InvocationTargetException, IllegalAccessException {
|
private byte[] tag(byte[] aad, byte[] ct, byte[] J0) throws XACryptoException {
|
||||||
byte[] S = gh.compute(aad, ct);
|
byte[] S = gh.compute(aad, ct);
|
||||||
byte[] EJ0 = (byte[]) this.encryptor.invoke(J0);
|
byte[] EJ0 = cip.encryptBlock(J0);
|
||||||
for (int i = 0; i < 16; i++) S[i] ^= EJ0[i];
|
for (int i = 0; i < 16; i++) S[i] ^= EJ0[i];
|
||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
private byte[] gctr(byte[] icb, byte[] in) throws InvocationTargetException, IllegalAccessException {
|
private byte[] gctr(byte[] icb, byte[] in) throws XACryptoException {
|
||||||
byte[] o = new byte[in.length];
|
byte[] o = new byte[in.length];
|
||||||
byte[] cnt = Arrays.copyOf(icb, 16);
|
byte[] cnt = Arrays.copyOf(icb, 16);
|
||||||
for (int i = 0 ; i < in.length ; i += 16){
|
for (int i = 0 ; i < in.length ; i += 16){
|
||||||
byte[] ks = (byte[]) this.encryptor.invoke(cnt);
|
byte[] ks = cip.encryptBlock(cnt);
|
||||||
int len = Math.min(16, in.length -i);
|
int len = Math.min(16, in.length -i);
|
||||||
for (int j = 0; j < len; j++) o[i + j] = (byte)(in[i + j] ^ ks[j]);
|
for (int j = 0; j < len; j++) o[i + j] = (byte)(in[i + j] ^ ks[j]);
|
||||||
if (i+16<in.length) cnt = inc32(cnt);
|
if (i+16<in.length) cnt = inc32(cnt);
|
||||||
|
|||||||
@@ -5,12 +5,10 @@ import de.caydenno1.xacrypto.zekerrijndael.Global.Aria;
|
|||||||
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.GCM.Result;
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.Result;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
|
|
||||||
interface AriaCipher {
|
interface AriaCipher {
|
||||||
Result encrypt(byte[] pln, byte[] aad, byte[] iv) throws XACryptoException, InvocationTargetException, IllegalAccessException;
|
Result encrypt(byte[] pln, byte[] aad, byte[] iv) throws XACryptoException;
|
||||||
byte[] decrypt(Result res, byte[] aad) throws XACryptoException, InvocationTargetException, IllegalAccessException;
|
byte[] decrypt(Result res, byte[] aad) throws XACryptoException;
|
||||||
byte[] decrypt(Result res, byte[] aad, String optflag) throws XACryptoException, InvocationTargetException, IllegalAccessException;
|
byte[] decrypt(Result res, byte[] aad, String optflag) throws XACryptoException;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ARIAGCM implements AriaCipher {
|
public class ARIAGCM implements AriaCipher {
|
||||||
@@ -18,19 +16,19 @@ public class ARIAGCM implements AriaCipher {
|
|||||||
// i basically wrote the entire thing in Aria.java already lol. just inheriting it here
|
// i basically wrote the entire thing in Aria.java already lol. just inheriting it here
|
||||||
private final GCM engine;
|
private final GCM engine;
|
||||||
|
|
||||||
public ARIAGCM(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
public ARIAGCM(byte[] key) throws XACryptoException {
|
||||||
Aria aria = new Aria(true, key);
|
Aria aria = new Aria(true, key);
|
||||||
this.engine = new GCM(aria);
|
this.engine = new GCM(aria);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Result encrypt(byte[] pln, byte[] aad, byte[] iv) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
public Result encrypt(byte[] pln, byte[] aad, byte[] iv) throws XACryptoException {
|
||||||
return engine.encrypt(pln, aad,iv);
|
return engine.encrypt(pln, aad,iv);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] decrypt(Result res, byte[] aad) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
public byte[] decrypt(Result res, byte[] aad) throws XACryptoException {
|
||||||
return engine.decrypt(res, aad);
|
return engine.decrypt(res, aad);
|
||||||
}
|
}
|
||||||
public byte[] decrypt(Result res, byte[] aad, String optflag) throws XACryptoException, InvocationTargetException, IllegalAccessException {
|
public byte[] decrypt(Result res, byte[] aad, String optflag) throws XACryptoException {
|
||||||
return engine.decrypt(res, aad, optflag);
|
return engine.decrypt(res, aad, optflag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,8 @@ import de.caydenno1.xacrypto.misc.XACryptoException;
|
|||||||
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.Global.Camellia;
|
import de.caydenno1.xacrypto.zekerrijndael.Global.Camellia;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
|
|
||||||
public class CamelliaGCM extends GCM {
|
public class CamelliaGCM extends GCM {
|
||||||
public CamelliaGCM(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
public CamelliaGCM(byte[] key) throws XACryptoException {
|
||||||
super(new Camellia(key));
|
super(new Camellia(key));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import de.caydenno1.xacrypto.misc.XACryptoException;
|
|||||||
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.Global.Serpent;
|
import de.caydenno1.xacrypto.zekerrijndael.Global.Serpent;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
|
|
||||||
public class SerpentGCM extends GCM {
|
public class SerpentGCM extends GCM {
|
||||||
public SerpentGCM(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { super(new Serpent(key)); }
|
public SerpentGCM(byte[] key) throws XACryptoException { super(new Serpent(key)); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,8 @@ import de.caydenno1.xacrypto.misc.XACryptoException;
|
|||||||
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.GCM;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.Global.Twofish;
|
import de.caydenno1.xacrypto.zekerrijndael.Global.Twofish;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
|
|
||||||
public class TwofishGCM extends GCM {
|
public class TwofishGCM extends GCM {
|
||||||
public TwofishGCM(byte[] key) throws XACryptoException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
public TwofishGCM(byte[] key) throws XACryptoException {
|
||||||
super(new Twofish(key));
|
super(new Twofish(key));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
package de.caydenno1.xacrypto.zekerrijndael.Global;
|
package de.caydenno1.xacrypto.zekerrijndael.Global;
|
||||||
|
|
||||||
import de.caydenno1.xacrypto.misc.XACryptoException;
|
import de.caydenno1.xacrypto.misc.XACryptoException;
|
||||||
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.BlockCipher;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.UnchangingData;
|
import de.caydenno1.xacrypto.zekerrijndael.UnchangingData;
|
||||||
|
|
||||||
public class Aria {
|
public class Aria implements BlockCipher {
|
||||||
// this is NOT a cipher, more or less and encryption type/method
|
// this is NOT a cipher, more or less and encryption type/method
|
||||||
private final int round;
|
private final int round;
|
||||||
private final byte[][] encRK;
|
private final byte[][] encRK;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package de.caydenno1.xacrypto.zekerrijndael.Global;
|
package de.caydenno1.xacrypto.zekerrijndael.Global;
|
||||||
|
|
||||||
import de.caydenno1.xacrypto.misc.XACryptoException;
|
import de.caydenno1.xacrypto.misc.XACryptoException;
|
||||||
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.BlockCipher;
|
||||||
import de.caydenno1.xacrypto.zekerrijndael.UnchangingData;
|
import de.caydenno1.xacrypto.zekerrijndael.UnchangingData;
|
||||||
import de.caydenno1.xacrypto.hash.ROT;
|
import de.caydenno1.xacrypto.hash.ROT;
|
||||||
|
|
||||||
@@ -9,7 +10,7 @@ interface CamelliaCipher {
|
|||||||
byte[] decryptBlock(byte[] in);
|
byte[] decryptBlock(byte[] in);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Camellia implements CamelliaCipher {
|
public class Camellia implements CamelliaCipher, BlockCipher {
|
||||||
private final long[] subkeys;
|
private final long[] subkeys;
|
||||||
|
|
||||||
public Camellia(byte[] key) throws XACryptoException {
|
public Camellia(byte[] key) throws XACryptoException {
|
||||||
@@ -18,7 +19,7 @@ public class Camellia implements CamelliaCipher {
|
|||||||
genKeySchedule(key);
|
genKeySchedule(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] encryptBlock(byte[] in) {
|
public byte[] encryptBlock(byte[] in) throws XACryptoException {
|
||||||
return encryptBlock(in, 0, new byte[16], 0);
|
return encryptBlock(in, 0, new byte[16], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
package de.caydenno1.xacrypto.zekerrijndael.Global;
|
package de.caydenno1.xacrypto.zekerrijndael.Global;
|
||||||
|
|
||||||
import de.caydenno1.xacrypto.misc.XACryptoException;
|
import de.caydenno1.xacrypto.misc.XACryptoException;
|
||||||
|
import de.caydenno1.xacrypto.zekerrijndael.GCM.BlockCipher;
|
||||||
|
|
||||||
import static de.caydenno1.xacrypto.zekerrijndael.UnchangingData.TWOFISH_Q0;
|
import static de.caydenno1.xacrypto.zekerrijndael.UnchangingData.TWOFISH_Q0;
|
||||||
import static de.caydenno1.xacrypto.zekerrijndael.UnchangingData.TWOFISH_Q1;
|
import static de.caydenno1.xacrypto.zekerrijndael.UnchangingData.TWOFISH_Q1;
|
||||||
import static de.caydenno1.xacrypto.zekerrijndael.Global.LE32.*;
|
import static de.caydenno1.xacrypto.zekerrijndael.Global.LE32.*;
|
||||||
|
|
||||||
public class Twofish {
|
public class Twofish implements BlockCipher {
|
||||||
private final int[] K = new int[40];
|
private final int[] K = new int[40];
|
||||||
private final int[] S;
|
private final int[] S;
|
||||||
private final int kW;
|
private final int kW;
|
||||||
|
|||||||
Reference in New Issue
Block a user