code: public void update(byte buffer[], int offset, int length)
  	{
  		int index, partlen, i, start;
  
  		/* Length can be told to be shorter, but not inter */
  		if ((length - offset) > buffer.length)
  			length = buffer.length - offset;
  
  		/* compute number of bytes mod 64 */
  		index = (int) (state.count & 0x3f);
  		state.count += length;
  
  		partlen = 64 - index;
  
  		if (length >= partlen)
  		{
  			int[] decode_buf = new int[16];
  			if (partlen == 64)
  			{
  				partlen = 0;
  			}
  			else
  			{
  				for (i = 0; i < partlen; i++)
  					state.buffer[i + index] = buffer[i + offset];
  				transform(state, state.buffer, 0, decode_buf);
  			}
  			
  			for (i = partlen; (i + 63) < length; i += 64)
  			{
  				transform(state, buffer, i + offset, decode_buf);
  			}
  
  			index = 0;
  		}
  		else
  			i = 0;
  
  		/* buffer remaining input */
  		if (i < length)
  		{
  			start = i;
  			for (; i < length; i++)
  				state.buffer[index + i - start] = buffer[i + offset];
  		}
  	}
docs: Updates hash with the bytebuffer given (using at maximum length bytes from that buffer)
  
  @param buffer Array of bytes to be hashed
  @param offset Offset to buffer array
  @param length Use at maximum `length' bytes (absolute maximum is buffer.length)