1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.crypto;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/**
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Signer with message recovery.
5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */
6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic interface SignerWithRecovery
7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    extends Signer
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Returns true if the signer has recovered the full message as
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * part of signature verification.
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @return true if full message recovered.
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public boolean hasFullMessage();
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Returns a reference to what message was recovered (if any).
19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @return full/partial message, null if nothing.
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public byte[] getRecoveredMessage();
236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    /**
256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Perform an update with the recovered message before adding any other data. This must
266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * be the first update method called, and calling it will result in the signer assuming
276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * that further calls to update will include message content past what is recoverable.
286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *
296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * @param signature the signature that we are in the process of verifying.
306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * @throws IllegalStateException
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     */
326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public void updateWithRecoveredMessage(byte[] signature)
336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        throws InvalidCipherTextException;
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
35