public int processBlock(byte[] in,int inOff,byte[] out,int outOff) throws DataLengthException, IllegalStateException {
  if ((inOff + blockSize) > in.length) {
    throw new DataLengthException("input buffer too short");
  }
  if ((outOff + blockSize) > out.length) {
    throw new DataLengthException("output buffer too short");
  }
  cipher.processBlock(ofbV,0,ofbOutV,0);
  for (int i=0; i < blockSize; i++) {
    out[outOff + i]=(byte)(ofbOutV[i] ^ in[inOff + i]);
  }
  System.arraycopy(ofbV,blockSize,ofbV,0,ofbV.length - blockSize);
  System.arraycopy(ofbOutV,0,ofbV,ofbV.length - blockSize,blockSize);
  return blockSize;
}

public int processBlock ( byte [ ] in , int inOff , byte [ ] out , int outOff ) throws DataLengthException , IllegalStateException { if ( ( inOff + blockSize ) > in . length ) { throw new DataLengthException ( "input buffer too short" ) ; } if ( ( outOff + blockSize ) > out . length ) { throw new DataLengthException ( "output buffer too short" ) ; } cipher . processBlock ( ofbV , 0 , ofbOutV , 0 ) ; for ( int i = 0 ; i < blockSize ; i ++ ) { out [ outOff + i ] = ( byte ) ( ofbOutV [ i ] ^ in [ inOff + i ] ) ; } System . arraycopy ( ofbV , blockSize , ofbV , 0 , ofbV . length - blockSize ) ; System . arraycopy ( ofbOutV , 0 , ofbV , ofbV . length - blockSize , blockSize ) ; return blockSize ; }
process one block of input from the array in and write it to the out array .
