package launcher.serialize.signed;
import java.io.IOException;
import java.security.SignatureException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Arrays;
import launcher.LauncherAPI;
import launcher.helper.SecurityHelper;
import launcher.serialize.HInput;
import launcher.serialize.HOutput;
import launcher.serialize.stream.StreamObject;
public class SignedBytesHolder extends StreamObject {
protected final byte[] bytes;
private final byte[] sign;
@LauncherAPI
public SignedBytesHolder(HInput input, RSAPublicKey publicKey) throws IOException, SignatureException {
this(input.readByteArray(0), input.readByteArray(-SecurityHelper.RSA_KEY_LENGTH), publicKey);
}
@LauncherAPI
public SignedBytesHolder(byte[] bytes, byte[] sign, RSAPublicKey publicKey) throws SignatureException {
SecurityHelper.verifySign(bytes, sign, publicKey);
this.bytes = Arrays.copyOf(bytes, bytes.length);
this.sign = Arrays.copyOf(sign, sign.length);
}
@LauncherAPI
public SignedBytesHolder(byte[] bytes, RSAPrivateKey privateKey) {
this.bytes = Arrays.copyOf(bytes, bytes.length);
sign = SecurityHelper.sign(bytes, privateKey);
}
@Override
public final void write(HOutput output) throws IOException {
output.writeByteArray(bytes, 0);
output.writeByteArray(sign, -SecurityHelper.RSA_KEY_LENGTH);
}
@LauncherAPI
public final byte[] getBytes() {
return Arrays.copyOf(bytes, bytes.length);
}
@LauncherAPI
public final byte[] getSign() {
return Arrays.copyOf(sign, sign.length);
}
}