Newer
Older
KeeperJerry_Launcher / Launcher / source / serialize / signed / SignedObjectHolder.java
@KeeperJerry KeeperJerry on 27 Jun 2020 1 KB Рефактор кода
package launcher.serialize.signed;

import launcher.LauncherAPI;
import launcher.serialize.HInput;
import launcher.serialize.stream.StreamObject;

import java.io.IOException;
import java.security.SignatureException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

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;
    }

    @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();
    }

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