package org.bouncycastle.crypto.params;

import java.math.BigInteger;

public class CramerShoupPrivateKeyParameters
    extends CramerShoupKeyParameters
{

    private BigInteger x1, x2, y1, y2, z; // Z_p
    private CramerShoupPublicKeyParameters pk; // public key

    public CramerShoupPrivateKeyParameters(CramerShoupParameters params, BigInteger x1, BigInteger x2, BigInteger y1, BigInteger y2, BigInteger z)
    {
        super(true, params);

        this.x1 = x1;
        this.x2 = x2;
        this.y1 = y1;
        this.y2 = y2;
        this.z = z;
    }

    public BigInteger getX1()
    {
        return x1;
    }

    public BigInteger getX2()
    {
        return x2;
    }

    public BigInteger getY1()
    {
        return y1;
    }

    public BigInteger getY2()
    {
        return y2;
    }

    public BigInteger getZ()
    {
        return z;
    }

    public void setPk(CramerShoupPublicKeyParameters pk)
    {
        this.pk = pk;
    }

    public CramerShoupPublicKeyParameters getPk()
    {
        return pk;
    }

    public int hashCode()
    {
        return x1.hashCode() ^ x2.hashCode() ^ y1.hashCode() ^ y2.hashCode() ^ z.hashCode() ^ super.hashCode();
    }

    public boolean equals(Object obj)
    {
        if (!(obj instanceof CramerShoupPrivateKeyParameters))
        {
            return false;
        }

        CramerShoupPrivateKeyParameters other = (CramerShoupPrivateKeyParameters)obj;

        return other.getX1().equals(this.x1) && other.getX2().equals(this.x2) && other.getY1().equals(this.y1) && other.getY2().equals(this.y2) && other.getZ().equals(this.z) && super.equals(obj);
    }
}
