package meerkat.mixer.proofs;

import com.google.protobuf.Message;

import java.math.BigInteger;

/**
 * Generic Sigma Protocol.
 * The challenge is always a {@link java.math.BigInteger}.
 */
public interface SigmaProtocol {
    public interface Prover <FirstMsgType, FinalMessageType> {
        public FirstMsgType getFirstMessage();
        public FinalMessageType getFinalMessage(BigInteger challenge);
    }

    public interface Simulator <FirstMsgType, FinalMessageType> {
        public FirstMsgType getFirstMessage(BigInteger challenge);
        public FinalMessageType getFinalMessage();
    }

    public interface Verifier <FirstMsgType, FinalMessageType>  {
        public boolean verify(FirstMsgType firstMessage, BigInteger challenge, FinalMessageType finalMessage);
    }
}
