fix leak (#43)

- add SLF4J as a dependency in pom.xml
- replace System.out.println with log.warn (prevent leak)
This commit is contained in:
Xiao
2026-07-14 16:03:52 -04:00
committed by GitHub
parent 273f10a987
commit c8e9b50883
4 changed files with 22 additions and 5 deletions
+6
View File
@@ -55,6 +55,12 @@
</dependencyManagement> </dependencyManagement>
<dependencies> <dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.16</version>
</dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId> <artifactId>junit-jupiter-api</artifactId>
@@ -1,6 +1,8 @@
package de.caydenno1.xacrypto.hash.sha; package de.caydenno1.xacrypto.hash.sha;
import de.caydenno1.xacrypto.misc.Constants; import de.caydenno1.xacrypto.misc.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@@ -8,9 +10,10 @@ import static de.caydenno1.xacrypto.hash.sha.Shared.INT2BYTE;
import static de.caydenno1.xacrypto.hash.sha.Shared.hex; import static de.caydenno1.xacrypto.hash.sha.Shared.hex;
public class SHA0 { public class SHA0 {
// we really only need one file. very simple code private static final Logger log = LoggerFactory.getLogger(SHA0.class);
public static byte[] hash(byte[] data){ public static byte[] hash(byte[] data){
System.out.println("Beware, SHA0 is deprecated and cryptographically broken. Use at your own risk."); log.warn("SHA0 is deprecated and cryptographically broken. Use at your own risk.");
byte[] padded = Shared.pad(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 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];
@@ -1,12 +1,16 @@
package de.caydenno1.xacrypto.zekerrijndael.GCM; package de.caydenno1.xacrypto.zekerrijndael.GCM;
import de.caydenno1.xacrypto.misc.ToM; 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects; import java.util.Objects;
public class GCM { public class GCM {
private static final Logger log = LoggerFactory.getLogger(GCM.class);
private final BlockCipher cip; private final BlockCipher cip;
private final GHASH gh; private final GHASH gh;
@@ -63,7 +67,7 @@ public class GCM {
if (!corr && !override) { if (!corr && !override) {
throw new XACryptoException("GCM tag does not match. Use Flag -override to ignore this.",(byte)-1); throw new XACryptoException("GCM tag does not match. Use Flag -override to ignore this.",(byte)-1);
} else if (!corr) { } else if (!corr) {
System.out.println("GCM tag does not match. Overriding..."); log.warn("GCM tag does not match. Overriding...");
} }
return gctr(inc32(J0), ct); return gctr(inc32(J0), ct);
@@ -4,6 +4,8 @@ import de.caydenno1.xacrypto.misc.XACryptoException;
import de.caydenno1.xacrypto.zekerrijndael.GCM.GHASH; import de.caydenno1.xacrypto.zekerrijndael.GCM.GHASH;
import de.caydenno1.xacrypto.zekerrijndael.GCM.AES; import de.caydenno1.xacrypto.zekerrijndael.GCM.AES;
import de.caydenno1.xacrypto.zekerrijndael.GCM.Result; import de.caydenno1.xacrypto.zekerrijndael.GCM.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Objects; import java.util.Objects;
@@ -16,8 +18,10 @@ interface AESCipher {
} }
public class AESGCM implements AESCipher { public class AESGCM implements AESCipher {
private static final Logger log = LoggerFactory.getLogger(AESGCM.class);
public Result encryptBlock(byte[] pln, byte[] key, byte[] nonce, byte[] aad) throws XACryptoException { public Result encryptBlock(byte[] pln, byte[] key, byte[] nonce, byte[] aad) throws XACryptoException {
System.out.println("WARNING! AESGCM may not be fully functional and partially broken. I am unsure if it fully works or not."); log.warn("AESGCM may not be fully functional and partially broken. I am unsure if it fully works or not.");
AES aes = new AES(key, getKeySize(key)); AES aes = new AES(key, getKeySize(key));
byte[] H = aes.encryptBlock(new byte[16]); byte[] H = aes.encryptBlock(new byte[16]);
GHASH gh = new GHASH(H); GHASH gh = new GHASH(H);
@@ -82,7 +86,7 @@ public class AESGCM implements AESCipher {
if (!ToM(tag, expectedTag) && !flag) { if (!ToM(tag, expectedTag) && !flag) {
throw new XACryptoException("Tag does not match. USE flag \"-override\" to ignore this."); throw new XACryptoException("Tag does not match. USE flag \"-override\" to ignore this.");
} else if (!ToM(tag,expectedTag) && flag) { } else if (!ToM(tag,expectedTag) && flag) {
System.out.println("Continuing in insecure mode."); log.warn("Continuing in insecure mode.");
} }
return aes.encryptCTR(cip, J0); return aes.encryptCTR(cip, J0);