package launcher.serialize.signed; import java.io.IOException; import java.security.SignatureException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; 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 = bytes.clone(); this.sign = sign.clone(); } @LauncherAPI public SignedBytesHolder(byte[] bytes, RSAPrivateKey privateKey) { this.bytes = bytes.clone(); 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 bytes.clone(); } @LauncherAPI public final byte[] getSign() { return sign.clone(); } }