Search in sources :

Example 1 with RoomKeyContent

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);
}
Also used : RoomKeyContent(org.matrix.androidsdk.rest.model.crypto.RoomKeyContent) IMXDecrypting(org.matrix.androidsdk.crypto.algorithms.IMXDecrypting)

Example 2 with RoomKeyContent

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);
}
Also used : ForwardedRoomKeyContent(org.matrix.androidsdk.rest.model.crypto.ForwardedRoomKeyContent) HashMap(java.util.HashMap) RoomKeyContent(org.matrix.androidsdk.rest.model.crypto.RoomKeyContent) ForwardedRoomKeyContent(org.matrix.androidsdk.rest.model.crypto.ForwardedRoomKeyContent)

Aggregations

RoomKeyContent (org.matrix.androidsdk.rest.model.crypto.RoomKeyContent)2 HashMap (java.util.HashMap)1 IMXDecrypting (org.matrix.androidsdk.crypto.algorithms.IMXDecrypting)1 ForwardedRoomKeyContent (org.matrix.androidsdk.rest.model.crypto.ForwardedRoomKeyContent)1