use of org.matrix.androidsdk.rest.model.crypto.RoomKeyContent in project matrix-android-sdk by matrix-org.
the class MXCrypto method onRoomKeyEvent.
/**
* Handle a key event.
* This method must be called on getDecryptingThreadHandler() thread.
*
* @param event the key event.
*/
private void onRoomKeyEvent(Event event) {
// sanity check
if (null == event) {
Log.e(LOG_TAG, "## onRoomKeyEvent() : null event");
return;
}
RoomKeyContent roomKeyContent = JsonUtils.toRoomKeyContent(event.getContentAsJsonObject());
String roomId = roomKeyContent.room_id;
String algorithm = roomKeyContent.algorithm;
if (TextUtils.isEmpty(roomId) || TextUtils.isEmpty(algorithm)) {
Log.e(LOG_TAG, "## onRoomKeyEvent() : missing fields");
return;
}
IMXDecrypting alg = getRoomDecryptor(roomId, algorithm);
if (null == alg) {
Log.e(LOG_TAG, "## onRoomKeyEvent() : Unable to handle keys for " + algorithm);
return;
}
alg.onRoomKeyEvent(event);
}
use of org.matrix.androidsdk.rest.model.crypto.RoomKeyContent in project matrix-android-sdk by matrix-org.
the class MXMegolmDecryption method onRoomKeyEvent.
/**
* Handle a key event.
*
* @param roomKeyEvent the key event.
*/
@Override
public void onRoomKeyEvent(Event roomKeyEvent) {
boolean exportFormat = false;
RoomKeyContent roomKeyContent = JsonUtils.toRoomKeyContent(roomKeyEvent.getContentAsJsonObject());
String roomId = roomKeyContent.room_id;
String sessionId = roomKeyContent.session_id;
String sessionKey = roomKeyContent.session_key;
String senderKey = roomKeyEvent.senderKey();
Map<String, String> keysClaimed = new HashMap<>();
List<String> forwarding_curve25519_key_chain = null;
if (TextUtils.isEmpty(roomId) || TextUtils.isEmpty(sessionId) || TextUtils.isEmpty(sessionKey)) {
Log.e(LOG_TAG, "## onRoomKeyEvent() : Key event is missing fields");
return;
}
if (TextUtils.equals(roomKeyEvent.getType(), Event.EVENT_TYPE_FORWARDED_ROOM_KEY)) {
// from " + event);
Log.d(LOG_TAG, "## onRoomKeyEvent(), forward adding key : roomId " + roomId + " sessionId " + sessionId + " sessionKey " + sessionKey);
ForwardedRoomKeyContent forwardedRoomKeyContent = JsonUtils.toForwardedRoomKeyContent(roomKeyEvent.getContentAsJsonObject());
if (null == forwardedRoomKeyContent.forwarding_curve25519_key_chain) {
forwarding_curve25519_key_chain = new ArrayList<>();
} else {
forwarding_curve25519_key_chain = new ArrayList<>(forwardedRoomKeyContent.forwarding_curve25519_key_chain);
}
forwarding_curve25519_key_chain.add(senderKey);
exportFormat = true;
senderKey = forwardedRoomKeyContent.sender_key;
if (null == senderKey) {
Log.e(LOG_TAG, "## onRoomKeyEvent() : forwarded_room_key event is missing sender_key field");
return;
}
String ed25519Key = forwardedRoomKeyContent.sender_claimed_ed25519_key;
if (null == ed25519Key) {
Log.e(LOG_TAG, "## forwarded_room_key_event is missing sender_claimed_ed25519_key field");
return;
}
keysClaimed.put("ed25519", ed25519Key);
} else {
// from " + event);
Log.d(LOG_TAG, "## onRoomKeyEvent(), Adding key : roomId " + roomId + " sessionId " + sessionId + " sessionKey " + sessionKey);
if (null == senderKey) {
Log.e(LOG_TAG, "## onRoomKeyEvent() : key event has no sender key (not encrypted?)");
return;
}
// inherit the claimed ed25519 key from the setup message
keysClaimed = roomKeyEvent.getKeysClaimed();
}
mOlmDevice.addInboundGroupSession(sessionId, sessionKey, roomId, senderKey, forwarding_curve25519_key_chain, keysClaimed, exportFormat);
Map<String, String> content = new HashMap<>();
content.put("algorithm", roomKeyContent.algorithm);
content.put("room_id", roomKeyContent.room_id);
content.put("session_id", roomKeyContent.session_id);
content.put("sender_key", senderKey);
mSession.getCrypto().cancelRoomKeyRequest(content);
onNewSession(senderKey, sessionId);
}
Aggregations