Launcher/LauncherAPI/src/main/java/pro/gravit/launcher/profiles/Texture.java

58 lines
1.7 KiB
Java

package pro.gravit.launcher.profiles;
import pro.gravit.launcher.serialize.HInput;
import pro.gravit.launcher.serialize.HOutput;
import pro.gravit.launcher.serialize.stream.StreamObject;
import pro.gravit.utils.helper.IOHelper;
import pro.gravit.utils.helper.SecurityHelper;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Objects;
public final class Texture extends StreamObject {
private static final SecurityHelper.DigestAlgorithm DIGEST_ALGO = SecurityHelper.DigestAlgorithm.SHA256;
// Instance
public final String url;
public final byte[] digest;
public Texture(HInput input) throws IOException {
url = IOHelper.verifyURL(input.readASCII(2048));
digest = input.readByteArray(-DIGEST_ALGO.bytes);
}
public Texture(String url, boolean cloak) throws IOException {
this.url = IOHelper.verifyURL(url);
// Fetch texture
byte[] texture;
try (InputStream input = IOHelper.newInput(new URL(url))) {
texture = IOHelper.read(input);
}
try (ByteArrayInputStream input = new ByteArrayInputStream(texture)) {
IOHelper.readTexture(input, cloak); // Verify texture
}
// Get digest of texture
digest = SecurityHelper.digest(DIGEST_ALGO, new URL(url));
}
public Texture(String url, byte[] digest) {
this.url = IOHelper.verifyURL(url);
this.digest = Objects.requireNonNull(digest, "digest");
}
@Override
public void write(HOutput output) throws IOException {
output.writeASCII(url, 2048);
output.writeByteArray(digest, -DIGEST_ALGO.bytes);
}
}