if (!(request instanceof HybridEncryptedContent)) {
logger.error("Received unknown object.");
return null;
}
H2HSession session;
try {
if (networkManager.getSession() == null) {
throw new NoSessionException();
} else {
session = networkManager.getSession();
}
} catch (NoSessionException e) {
logger.warn("Currently no user is logged in! Keys for decryption needed. Node ID = '{}'.",
networkManager.getNodeId());
return AcceptanceReply.FAILURE;
}
HybridEncryptedContent encryptedMessage = (HybridEncryptedContent) request;
// get signature
String senderId = encryptedMessage.getUserId();
byte[] signature = encryptedMessage.getSignature();
if (senderId == null || signature == null) {
logger.warn("No signature for message.");
return AcceptanceReply.FAILURE_SIGNATURE;
}
// asymmetrically decrypt message
byte[] decryptedMessage = null;
try {
KeyPair keys = session.getKeyPair();
decryptedMessage = EncryptionUtil.decryptHybrid(encryptedMessage, keys.getPrivate());
} catch (Exception e) {
logger.warn("Decryption of message failed.", e);
return AcceptanceReply.FAILURE_DECRYPTION;
}
// deserialize decrypted message
Object message = null;
try {
message = EncryptionUtil.deserializeObject(decryptedMessage);
} catch (IOException | ClassNotFoundException e) {
logger.error("Message could not be deserialized. Reason = '{}'.", e.getMessage());
}
if (message != null && message instanceof BaseMessage) {
BaseMessage receivedMessage = (BaseMessage) message;
// verify the signature
if (session.getKeyManager().containsPublicKey(senderId)) {
if (!verifySignature(senderId, decryptedMessage, signature))
return AcceptanceReply.FAILURE_SIGNATURE;
// give a network manager reference to work (verify, handle)
try {