Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Merge pull request #4172 from matrix-org/foldleft/secret-requests
Browse files Browse the repository at this point in the history
Share secrets with another device on request
  • Loading branch information
foldleft authored Mar 9, 2020
2 parents 1e95048 + 26177a1 commit 49fe188
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/CrossSigningManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { deriveKey } from 'matrix-js-sdk/src/crypto/key_passphrase';
import { decodeRecoveryKey } from 'matrix-js-sdk/src/crypto/recoverykey';
import { _t } from './languageHandler';
import SettingsStore from './settings/SettingsStore';
import {encodeBase64} from "matrix-js-sdk/src/crypto/olmlib";

// This stores the secret storage private keys in memory for the JS SDK. This is
// only meant to act as a cache to avoid prompting the user multiple times
Expand Down Expand Up @@ -125,8 +126,37 @@ async function getSecretStorageKey({ keys: keyInfos }, ssssItemName) {
return [name, key];
}

const onSecretRequested = async function({
user_id: userId,
device_id: deviceId,
request_id: requestId,
name,
device_trust: deviceTrust,
}) {
console.log("onSecretRequested", userId, deviceId, requestId, name, deviceTrust);
const client = MatrixClientPeg.get();
if (userId !== client.getUserId()) {
return;
}
if (!deviceTrust || !deviceTrust.isVerified()) {
console.log(`CrossSigningManager: Ignoring request from untrusted device ${deviceId}`);
return;
}
const callbacks = client.getCrossSigningCacheCallbacks();
if (!callbacks.getCrossSigningKeyCache) return;
if (name === "m.key.self_signing") {
const key = await callbacks.getCrossSigningKeyCache("self_signing");
return key && encodeBase64(key);
} else if (name === "m.key.user_signing") {
const key = await callbacks.getCrossSigningKeyCache("user_signing");
return key && encodeBase64(key);
}
console.warn("onSecretRequested didn't recognise the secret named ", name);
};

export const crossSigningCallbacks = {
getSecretStorageKey,
onSecretRequested,
};

/**
Expand Down

0 comments on commit 49fe188

Please sign in to comment.