Newer
Older
KeeperJerry_Launcher / Launcher / source / serialize / signed / SignedObjectHolder.java
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.serialize.HInput;
import launcher.serialize.stream.StreamObject;

public final class SignedObjectHolder<O extends StreamObject> extends SignedBytesHolder {
	@LauncherAPI public final O object;

	@LauncherAPI
	public SignedObjectHolder(HInput input, RSAPublicKey publicKey, Adapter<O> adapter) throws IOException, SignatureException {
		super(input, publicKey);
		object = newInstance(adapter);
	}

	@LauncherAPI
	public SignedObjectHolder(O object, RSAPrivateKey privateKey) throws IOException {
		super(object.write(), privateKey);
		this.object = object;
	}

	@LauncherAPI
	public O newInstance(Adapter<O> adapter) throws IOException {
		try (HInput input = new HInput(bytes)) {
			return adapter.convert(input);
		}
	}

	@Override
	public boolean equals(Object obj) {
		return obj instanceof SignedObjectHolder && object.equals(((SignedObjectHolder<?>) obj).object);
	}

	@Override
	public int hashCode() {
		return object.hashCode();
	}

	@Override
	public String toString() {
		return object.toString();
	}
}