gdxapp4d/gdxapp4d-lib-warpme/src/main/java/love/distributedrebirth/warpme/hash/WaterShotAddict.java

77 lines
2.6 KiB
Java
Raw Normal View History

2022-02-23 17:11:05 +01:00
package love.distributedrebirth.warpme.hash;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.x4o.xml.io.X4OConnectionException;
import org.xml.sax.SAXException;
import love.distributedrebirth.bassboonyd.BãßBȍőnAuthorInfoʸᴰ;
import love.distributedrebirth.warpme.Warpᵐᵉ;
2022-08-24 17:33:39 +02:00
@BãßBȍőnAuthorInfoʸᴰ(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
2022-02-23 17:11:05 +01:00
public class WaterShotAddict {
2022-03-15 16:53:12 +01:00
public static void main(String[] args) {
try {
WaterShotAddict addict = new WaterShotAddict();
addict.updateWarpHashes(new File(args[0]));
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
2022-02-23 17:11:05 +01:00
public boolean validateWarpChainLink(File folder) throws FileNotFoundException, X4OConnectionException, SAXException, IOException, NoSuchAlgorithmException {
File fileWarpHash = new File(folder, Warpᵐᵉ.WARP_HASH);
if (!fileWarpHash.exists()) {
return false;
}
WaterShot waterShot = WaterShotDriver.newInstance().createReader().readFile(fileWarpHash);
2022-02-23 17:16:54 +01:00
for (WaterSoftHash hash:waterShot.getSoftHashes()) {
2022-02-23 17:11:05 +01:00
File checkFile = new File(folder, hash.getFile());
if (!checkFile.exists()) {
return false;
}
String fileHex = calcHashInHex(checkFile);
if (!fileHex.equals(hash.getHex())) {
return false;
}
}
return true;
}
public void updateWarpHashes(File folder) throws FileNotFoundException, X4OConnectionException, SAXException, IOException, NoSuchAlgorithmException {
File fileWarpHash = new File(folder, Warpᵐᵉ.WARP_HASH);
WaterShot waterShot = WaterShotDriver.newInstance().createReader().readFile(fileWarpHash);
2022-02-23 17:16:54 +01:00
for (WaterSoftHash hash:waterShot.getSoftHashes()) {
2022-02-23 17:11:05 +01:00
hash.setHex(calcHashInHex(new File(folder, hash.getFile())));
}
WaterShotDriver.newInstance().createWriter().writeFile(waterShot, fileWarpHash);
}
private String calcHashInHex(File file) throws IOException, NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] bytes = Files.readAllBytes(file.toPath());
byte[] encodedhash = digest.digest(bytes);
return bytesToHex(encodedhash);
}
private String bytesToHex(byte[] hash) {
StringBuilder hexString = new StringBuilder(2 * hash.length);
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if(hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
}