/** * encrypt exactly 16 bytes using the session key * * @param payload plaintext data, 16 bytes starting at inIndex * @param sessionKey private session key * @param out out parameter, 16 bytes starting at outIndex */ @Override public final void encryptBlock( byte payload[], int inIndex, SessionKey sessionKey, byte out[], int outIndex) { if (sessionKey.getPreparedKey() == null) { try { Object key = CryptixRijndael_Algorithm.makeKey(sessionKey.getData(), 16); sessionKey.setPreparedKey(key); } catch (InvalidKeyException ike) { _log.log(Log.CRIT, "Invalid key", ike); throw new IllegalArgumentException("wtf, invalid key? " + ike.getMessage()); } } CryptixRijndael_Algorithm.blockEncrypt( payload, out, inIndex, outIndex, sessionKey.getPreparedKey()); }
/** * decrypt exactly 16 bytes of data with the session key provided * * @param payload encrypted data, 16 bytes starting at inIndex * @param sessionKey private session key * @param rv out parameter, 16 bytes starting at outIndex */ @Override public final void decryptBlock( byte payload[], int inIndex, SessionKey sessionKey, byte rv[], int outIndex) { // just let it throw NPE or IAE later for speed, you'll figure it out // if ( (payload == null) || (rv == null) ) // throw new IllegalArgumentException("null block args"); // if (payload.length - inIndex > rv.length - outIndex) // throw new IllegalArgumentException("bad block args [payload.len=" + payload.length // + " inIndex=" + inIndex + " rv.len=" + rv.length // + " outIndex="+outIndex); if (sessionKey.getPreparedKey() == null) { try { Object key = CryptixRijndael_Algorithm.makeKey(sessionKey.getData(), 16); sessionKey.setPreparedKey(key); } catch (InvalidKeyException ike) { _log.log(Log.CRIT, "Invalid key", ike); throw new IllegalArgumentException("wtf, invalid key? " + ike.getMessage()); } } CryptixRijndael_Algorithm.blockDecrypt( payload, rv, inIndex, outIndex, sessionKey.getPreparedKey()); }