You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-25 05:23:13 +03:00
RustCrypto: fix ordering of methods (#4230)
* RustCrypto: Move CryptoBackend impl to CryptoBackend impl section Given there is a `CryptoBackend implementation` section, the methods implementing CryptoBackend should be there. * RustCrypto: Fix documentation on dehydration methods * RustCrypto: reunite `resetKeyBackup` with its helper A couple of new methods had snuck into the middle.
This commit is contained in:
committed by
GitHub
parent
a0fadeb4ec
commit
43022d5b2f
@@ -309,6 +309,40 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, RustCryptoEv
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@link CryptoBackend#getBackupDecryptor}.
|
||||||
|
*/
|
||||||
|
public async getBackupDecryptor(backupInfo: KeyBackupInfo, privKey: ArrayLike<number>): Promise<BackupDecryptor> {
|
||||||
|
if (backupInfo.algorithm != "m.megolm_backup.v1.curve25519-aes-sha2") {
|
||||||
|
throw new Error(`getBackupDecryptor Unsupported algorithm ${backupInfo.algorithm}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const authData = <Curve25519AuthData>backupInfo.auth_data;
|
||||||
|
|
||||||
|
if (!(privKey instanceof Uint8Array)) {
|
||||||
|
throw new Error(`getBackupDecryptor expects Uint8Array`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const backupDecryptionKey = RustSdkCryptoJs.BackupDecryptionKey.fromBase64(encodeBase64(privKey));
|
||||||
|
|
||||||
|
if (authData.public_key != backupDecryptionKey.megolmV1PublicKey.publicKeyBase64) {
|
||||||
|
throw new Error(`getBackupDecryptor key mismatch error`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.backupManager.createBackupDecryptor(backupDecryptionKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@link CryptoBackend#importBackedUpRoomKeys}.
|
||||||
|
*/
|
||||||
|
public async importBackedUpRoomKeys(
|
||||||
|
keys: IMegolmSessionData[],
|
||||||
|
backupVersion: string,
|
||||||
|
opts?: ImportRoomKeysOpts,
|
||||||
|
): Promise<void> {
|
||||||
|
return await this.backupManager.importBackedUpRoomKeys(keys, backupVersion, opts);
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// CryptoApi implementation
|
// CryptoApi implementation
|
||||||
@@ -1166,30 +1200,12 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, RustCryptoEv
|
|||||||
this.checkKeyBackupAndEnable();
|
this.checkKeyBackupAndEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of {@link CryptoApi#importSecretsBundle}.
|
|
||||||
*/
|
|
||||||
public async importSecretsBundle(
|
|
||||||
secrets: Parameters<NonNullable<CryptoApi["importSecretsBundle"]>>[0],
|
|
||||||
): Promise<void> {
|
|
||||||
const secretsBundle = RustSdkCryptoJs.SecretsBundle.from_json(secrets);
|
|
||||||
await this.getOlmMachineOrThrow().importSecretsBundle(secretsBundle); // this method frees the SecretsBundle
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of {@link CryptoApi#exportSecretsBundle}.
|
|
||||||
*/
|
|
||||||
public async exportsSecretsBundle(): ReturnType<NonNullable<CryptoApi["exportSecretsBundle"]>> {
|
|
||||||
const secretsBundle = await this.getOlmMachineOrThrow().exportSecretsBundle();
|
|
||||||
const secrets = secretsBundle.to_json();
|
|
||||||
secretsBundle.free();
|
|
||||||
return secrets;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Signs the given object with the current device and current identity (if available).
|
* Signs the given object with the current device and current identity (if available).
|
||||||
* As defined in {@link https://spec.matrix.org/v1.8/appendices/#signing-json | Signing JSON}.
|
* As defined in {@link https://spec.matrix.org/v1.8/appendices/#signing-json | Signing JSON}.
|
||||||
*
|
*
|
||||||
|
* Helper for {@link RustCrypto#resetKeyBackup}.
|
||||||
|
*
|
||||||
* @param obj - The object to sign
|
* @param obj - The object to sign
|
||||||
*/
|
*/
|
||||||
private async signObject<T extends ISignableObject & object>(obj: T): Promise<void> {
|
private async signObject<T extends ISignableObject & object>(obj: T): Promise<void> {
|
||||||
@@ -1213,48 +1229,14 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, RustCryptoEv
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of {@link CryptoBackend#getBackupDecryptor}.
|
* Implementation of {@link CryptoApi#isDehydrationSupported}.
|
||||||
*/
|
|
||||||
public async getBackupDecryptor(backupInfo: KeyBackupInfo, privKey: ArrayLike<number>): Promise<BackupDecryptor> {
|
|
||||||
if (backupInfo.algorithm != "m.megolm_backup.v1.curve25519-aes-sha2") {
|
|
||||||
throw new Error(`getBackupDecryptor Unsupported algorithm ${backupInfo.algorithm}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const authData = <Curve25519AuthData>backupInfo.auth_data;
|
|
||||||
|
|
||||||
if (!(privKey instanceof Uint8Array)) {
|
|
||||||
throw new Error(`getBackupDecryptor expects Uint8Array`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const backupDecryptionKey = RustSdkCryptoJs.BackupDecryptionKey.fromBase64(encodeBase64(privKey));
|
|
||||||
|
|
||||||
if (authData.public_key != backupDecryptionKey.megolmV1PublicKey.publicKeyBase64) {
|
|
||||||
throw new Error(`getBackupDecryptor key mismatch error`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.backupManager.createBackupDecryptor(backupDecryptionKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of {@link CryptoBackend#importBackedUpRoomKeys}.
|
|
||||||
*/
|
|
||||||
public async importBackedUpRoomKeys(
|
|
||||||
keys: IMegolmSessionData[],
|
|
||||||
backupVersion: string,
|
|
||||||
opts?: ImportRoomKeysOpts,
|
|
||||||
): Promise<void> {
|
|
||||||
return await this.backupManager.importBackedUpRoomKeys(keys, backupVersion, opts);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of {@link CryptoBackend#isDehydrationSupported}.
|
|
||||||
*/
|
*/
|
||||||
public async isDehydrationSupported(): Promise<boolean> {
|
public async isDehydrationSupported(): Promise<boolean> {
|
||||||
return await this.dehydratedDeviceManager.isSupported();
|
return await this.dehydratedDeviceManager.isSupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of {@link CryptoBackend#startDehydration}.
|
* Implementation of {@link CryptoApi#startDehydration}.
|
||||||
*/
|
*/
|
||||||
public async startDehydration(createNewKey?: boolean): Promise<void> {
|
public async startDehydration(createNewKey?: boolean): Promise<void> {
|
||||||
if (!(await this.isCrossSigningReady()) || !(await this.isSecretStorageReady())) {
|
if (!(await this.isCrossSigningReady()) || !(await this.isSecretStorageReady())) {
|
||||||
@@ -1263,6 +1245,26 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, RustCryptoEv
|
|||||||
return await this.dehydratedDeviceManager.start(createNewKey);
|
return await this.dehydratedDeviceManager.start(createNewKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@link CryptoApi#importSecretsBundle}.
|
||||||
|
*/
|
||||||
|
public async importSecretsBundle(
|
||||||
|
secrets: Parameters<NonNullable<CryptoApi["importSecretsBundle"]>>[0],
|
||||||
|
): Promise<void> {
|
||||||
|
const secretsBundle = RustSdkCryptoJs.SecretsBundle.from_json(secrets);
|
||||||
|
await this.getOlmMachineOrThrow().importSecretsBundle(secretsBundle); // this method frees the SecretsBundle
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@link CryptoApi#exportSecretsBundle}.
|
||||||
|
*/
|
||||||
|
public async exportsSecretsBundle(): ReturnType<NonNullable<CryptoApi["exportSecretsBundle"]>> {
|
||||||
|
const secretsBundle = await this.getOlmMachineOrThrow().exportSecretsBundle();
|
||||||
|
const secrets = secretsBundle.to_json();
|
||||||
|
secretsBundle.free();
|
||||||
|
return secrets;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// SyncCryptoCallbacks implementation
|
// SyncCryptoCallbacks implementation
|
||||||
|
|||||||
Reference in New Issue
Block a user