1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.crypto;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/**
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Generic signer interface for hash based and message recovery signers.
5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */
6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic interface Signer
7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Initialise the signer for signing or verification.
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @param forSigning true if for signing, false otherwise
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @param param necessary parameters.
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void init(boolean forSigning, CipherParameters param);
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * update the internal digest with the byte b
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void update(byte b);
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * update the internal digest with the byte array in
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void update(byte[] in, int off, int len);
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * generate a signature for the message we've been loaded with using
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * the key we were initialised with.
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public byte[] generateSignature()
31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        throws CryptoException, DataLengthException;
32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * return true if the internal state represents the signature described
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * in the passed in array.
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public boolean verifySignature(byte[] signature);
38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * reset the internal state
41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void reset();
43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
44