1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.crypto.io;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.io.FilterInputStream;
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.io.IOException;
5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.io.InputStream;
6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.crypto.Digest;
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class DigestInputStream
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    extends FilterInputStream
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected Digest digest;
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public DigestInputStream(
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        InputStream stream,
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Digest      digest)
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        super(stream);
19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.digest = digest;
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public int read()
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        throws IOException
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        int b = in.read();
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (b >= 0)
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            digest.update((byte)b);
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return b;
32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public int read(
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        byte[] b,
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        int off,
37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        int len)
38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        throws IOException
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        int n = in.read(b, off, len);
41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (n > 0)
42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            digest.update(b, off, n);
44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return n;
46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Digest getDigest()
49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return digest;
51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
53