/** Generates session key and mac key. Caller must synch on this. */ private void generateSessionKey() throws DHSessionKeyBuilder.InvalidPublicParameterException { if (_sessionKey != null) return; if (_keyBuilder == null) throw new DHSessionKeyBuilder.InvalidPublicParameterException( "Illegal state - never generated a key builder"); _keyBuilder.setPeerPublicValue(_receivedY); _sessionKey = _keyBuilder.getSessionKey(); ByteArray extra = _keyBuilder.getExtraBytes(); _macKey = new SessionKey(new byte[SessionKey.KEYSIZE_BYTES]); System.arraycopy(extra.getData(), 0, _macKey.getData(), 0, SessionKey.KEYSIZE_BYTES); if (_log.shouldLog(Log.DEBUG)) _log.debug("Established outbound keys. cipher: " + _sessionKey + " mac: " + _macKey); }
/** caller must synch - only call once */ private void prepareSessionRequest() { _keyBuilder = _keyFactory.getBuilder(); _sentX = new byte[UDPPacketReader.SessionRequestReader.X_LENGTH]; byte X[] = _keyBuilder.getMyPublicValue().toByteArray(); if (X.length == 257) System.arraycopy(X, 1, _sentX, 0, _sentX.length); else if (X.length == 256) System.arraycopy(X, 0, _sentX, 0, _sentX.length); else System.arraycopy(X, 0, _sentX, _sentX.length - X.length, X.length); }