1:
2:
3:
10:
11: package ;
12: import ;
13: import ;
14: import ;
15:
16: public class SimpleSHSStream extends java.io.DataOutputStream
17: {
18: int counter;
19:
20: final int SHS_BLOCKSIZE = 64;
21: final int SHS_DIGESTSIZE = 20;
22:
23: byte buf[];
24: byte shs_info[];
25:
26: native static byte [] shsFinal (byte info[]);
27: native static void shsUpdate (byte info[], byte buf[], int count);
28: native static byte [] shsInit ();
29:
30: private void update (byte b)
31: {
32: buf [counter++] = b;
33: if (counter % SHS_BLOCKSIZE == 0)
34: {
35: counter = 0;
36: shsUpdate (shs_info, buf, SHS_BLOCKSIZE);
37: }
38: }
39:
40: public void write (int b) throws IOException
41: {
42: update ((byte)b);
43: super.write (b);
44: }
45:
46: public void write (byte[] b, int off, int len) throws IOException
47: {
48: for (int i = 0; i < len; i++)
49: write (b[i+off]);
50: }
51:
52: public byte[] digest()
53: {
54: shsUpdate (shs_info, buf, counter);
55: return shsFinal (shs_info);
56: }
57:
58: public SimpleSHSStream (OutputStream out)
59: {
60: super (out);
61: buf = new byte[SHS_BLOCKSIZE];
62: shs_info = shsInit ();
63: counter = 0;
64: }
65: }