mirror of
https://github.com/bitwarden/browser
synced 2026-02-10 13:40:06 +00:00
Draft implementation of Register with models
This commit is contained in:
@@ -1,14 +1,31 @@
|
||||
import { KdfConfigService } from "../../../../key-management/src";
|
||||
import { UserKey } from "../../types/key";
|
||||
|
||||
import { CipherConfiguration } from "./models/cipher-configuration";
|
||||
import { RegistrationFinishRequest } from "./models/registration-finish.request";
|
||||
import { RegistrationStartRequest } from "./models/registration-start.request";
|
||||
import { OpaqueApiService } from "./opaque-api.service";
|
||||
import { OpaqueService } from "./opaque.service";
|
||||
|
||||
export class DefaultOpaqueService implements OpaqueService {
|
||||
constructor(private opaqueApiService: OpaqueApiService) {}
|
||||
constructor(
|
||||
private opaqueApiService: OpaqueApiService,
|
||||
private kdfConfigService: KdfConfigService,
|
||||
) {}
|
||||
|
||||
async Register(masterPassword: string, userKey: UserKey) {
|
||||
throw new Error("Not implemented");
|
||||
await Promise.resolve();
|
||||
const kdfConfig = await this.kdfConfigService.getKdfConfig(); // note: this doesn't take a UserId but probably should
|
||||
|
||||
const registrationStart = ""; // SDK call: kdfConfig => ClientRegistrationStartResult
|
||||
const serverRegistrationStart = await this.opaqueApiService.RegistrationStart(
|
||||
new RegistrationStartRequest(registrationStart, new CipherConfiguration(kdfConfig)),
|
||||
);
|
||||
|
||||
const registrationFinish = ""; // SDK call: (serverRegistrationStart.serverRegistrationStartResult, userKey) => ClientRegistrationFinishResult
|
||||
await this.opaqueApiService.RegistrationFinish(
|
||||
serverRegistrationStart.credentialId,
|
||||
new RegistrationFinishRequest(registrationFinish),
|
||||
);
|
||||
}
|
||||
|
||||
async Login(masterPassword: string) {
|
||||
|
||||
13
libs/common/src/auth/opaque/models/cipher-configuration.ts
Normal file
13
libs/common/src/auth/opaque/models/cipher-configuration.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { KdfConfig } from "../../../../../key-management/src";
|
||||
|
||||
export class CipherConfiguration {
|
||||
opaqueVersion = 1; // TODO: what's the current version?
|
||||
kdf: KdfConfig;
|
||||
oprf = "ristretto-255";
|
||||
ke = "ristretto-255";
|
||||
keyExchange = "triple-diffie-helmen";
|
||||
|
||||
constructor(kdf: KdfConfig) {
|
||||
this.kdf = kdf;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export class RegistrationFinishRequest {
|
||||
constructor(readonly clientRegistrationFinishResult: string) {}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import { CipherConfiguration } from "./cipher-configuration";
|
||||
|
||||
export class RegistrationStartRequest {
|
||||
constructor(
|
||||
readonly clientRegistrationStartResult: string,
|
||||
readonly cipherConfiguration: CipherConfiguration,
|
||||
) {}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import { BaseResponse } from "../../../models/response/base.response";
|
||||
import { OpaqueCredentialId } from "../../../types/guid";
|
||||
|
||||
export class RegistrationStartResponse extends BaseResponse {
|
||||
credentialId: OpaqueCredentialId;
|
||||
serverRegistrationStartResult: string;
|
||||
|
||||
constructor(response: any) {
|
||||
super(response);
|
||||
|
||||
this.credentialId = this.getResponseProperty("CredentialId");
|
||||
this.serverRegistrationStartResult = this.getResponseProperty("ServerRegistrationStartResult");
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,14 @@
|
||||
import { OpaqueCredentialId } from "../../types/guid";
|
||||
import { RegistrationFinishRequest } from "./models/registration-finish.request";
|
||||
import { RegistrationStartRequest } from "./models/registration-start.request";
|
||||
import { RegistrationStartResponse } from "./models/registration-start.response";
|
||||
|
||||
export abstract class OpaqueApiService {
|
||||
abstract StartRegistration(): any;
|
||||
abstract FinishRegistration(): any;
|
||||
abstract StartLogin(): any;
|
||||
abstract FinishLogin(): any;
|
||||
abstract RegistrationStart(request: RegistrationStartRequest): Promise<RegistrationStartResponse>;
|
||||
abstract RegistrationFinish(
|
||||
credentialId: OpaqueCredentialId,
|
||||
request: RegistrationFinishRequest,
|
||||
): Promise<void>;
|
||||
abstract LoginStart(): any;
|
||||
abstract LoginFinish(): any;
|
||||
}
|
||||
|
||||
@@ -11,3 +11,4 @@ export type CipherId = Opaque<string, "CipherId">;
|
||||
export type SendId = Opaque<string, "SendId">;
|
||||
export type IndexedEntityId = Opaque<string, "IndexedEntityId">;
|
||||
export type SecurityTaskId = Opaque<string, "SecurityTaskId">;
|
||||
export type OpaqueCredentialId = Opaque<string, "OpaqueCredentialId">;
|
||||
|
||||
Reference in New Issue
Block a user