System.arraycopy(decrypted, 0, payload, 0, payload.length); sendAck(sessionReader, packet.packetId); sessionReader.protectFromDuples(packet.packetId, ()->receiver.accept(payload)); } else { callErrorCallbacks("(onReceiveData) decrypted payload too short");
/** * We have received {@link PacketTypes#HELLO} packet. Should create localNonce and send it in reply. * @param packet received {@link Packet} */ private void onReceiveHello(Packet packet) throws EncryptionError { report(logLabel, ()->"received hello from " + packet.senderNodeId, VerboseLevel.BASE); NodeInfo nodeInfo = netConfig.getInfo(packet.senderNodeId); if (nodeInfo != null) { SessionReader sessionReader = getOrCreateSessionReaderCandidate(packet.senderNodeId); if (sessionReader != null) { sessionReader.protectFromDuples(packet.packetId, ()->{ if (sessionReader.nextLocalNonceGenerationTime.isBefore(Instant.now())) { sessionReader.localNonce = Do.randomBytes(64); sessionReader.nextLocalNonceGenerationTime = Instant.now().plusMillis(HANDSHAKE_TIMEOUT_MILLIS); } sessionReader.handshake_keyReqPart1 = null; sessionReader.handshake_keyReqPart2 = null; sendWelcome(sessionReader); }); } } else { throw new EncryptionError(Errors.BAD_VALUE + ": block got from unknown node " + packet.senderNodeId); } }
/** * We have received {@link PacketTypes#KEY_REQ_PART2} packet. Waiting for part1 or continue if it has got already. * @param packet received {@link Packet} */ private void onReceiveKeyReqPart2(Packet packet) { report(logLabel, ()->"received key_req_part2 from " + packet.senderNodeId + " (packetId="+packet.packetId+")", VerboseLevel.BASE); SessionReader sessionReader = getOrCreateSessionReaderCandidate(packet.senderNodeId); if (sessionReader != null) { sessionReader.protectFromDuples(packet.packetId, ()->{ sessionReader.removeHandshakePacketsFromRetransmitMap(); sessionReader.handshake_keyReqPart2 = packet.payload; onReceiveKeyReq(sessionReader); }); } }
/** * We have received {@link PacketTypes#KEY_REQ_PART1} packet. Waiting for part2 or continue if it has got already. * @param packet received {@link Packet} */ private void onReceiveKeyReqPart1(Packet packet) { report(logLabel, ()->"received key_req_part1 from " + packet.senderNodeId + " (packetId="+packet.packetId+")", VerboseLevel.BASE); SessionReader sessionReader = getOrCreateSessionReaderCandidate(packet.senderNodeId); if (sessionReader != null) { sessionReader.protectFromDuples(packet.packetId, ()->{ sessionReader.removeHandshakePacketsFromRetransmitMap(); sessionReader.handshake_keyReqPart1 = packet.payload; onReceiveKeyReq(sessionReader); }); } }