// SimpleSHSStream.java /* Copyright (C) 2000 Free Software Foundation This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package gnu.gcj.io; import java.io.Serializable; import java.io.*; import java.lang.reflect.*; public class SimpleSHSStream extends java.io.DataOutputStream { int counter; final int SHS_BLOCKSIZE = 64; final int SHS_DIGESTSIZE = 20; byte buf[]; byte shs_info[]; native static byte [] shsFinal (byte info[]); native static void shsUpdate (byte info[], byte buf[], int count); native static byte [] shsInit (); private void update (byte b) { buf [counter++] = b; if (counter % SHS_BLOCKSIZE == 0) { counter = 0; shsUpdate (shs_info, buf, SHS_BLOCKSIZE); } } public void write (int b) throws IOException { update ((byte)b); super.write (b); } public void write (byte[] b, int off, int len) throws IOException { for (int i = 0; i < len; i++) write (b[i+off]); } public byte[] digest() { shsUpdate (shs_info, buf, counter); return shsFinal (shs_info); } public SimpleSHSStream (OutputStream out) { super (out); buf = new byte[SHS_BLOCKSIZE]; shs_info = shsInit (); counter = 0; } }