-
+
0) {
+ if (cipher.login?.fido2Credentials.length > 0) {
const confirmed = await this.dialogService.openSimpleDialog({
title: { key: "passkeyNotCopied" },
content: { key: "passkeyNotCopiedAlert" },
diff --git a/libs/angular/src/vault/components/add-edit.component.ts b/libs/angular/src/vault/components/add-edit.component.ts
index bcbfcc162bf..9dd08a33660 100644
--- a/libs/angular/src/vault/components/add-edit.component.ts
+++ b/libs/angular/src/vault/components/add-edit.component.ts
@@ -324,12 +324,12 @@ export class AddEditComponent implements OnInit, OnDestroy {
: this.collections.filter((c) => (c as any).checked).map((c) => c.id);
}
- // Clear current Cipher Id and Fido2Key if exists to trigger "Add" cipher flow
+ // Clear current Cipher Id and Fido2Credentials if exists to trigger "Add" cipher flow
if (this.cloneMode) {
this.cipher.id = null;
- if (this.cipher.type === CipherType.Login && this.cipher.login.fido2Keys.length > 0) {
- this.cipher.login.fido2Keys = [];
+ if (this.cipher.type === CipherType.Login && this.cipher.login.fido2Credentials.length > 0) {
+ this.cipher.login.fido2Credentials = [];
}
}
diff --git a/libs/angular/src/vault/components/view.component.ts b/libs/angular/src/vault/components/view.component.ts
index 56c236a1208..3be16d50ac1 100644
--- a/libs/angular/src/vault/components/view.component.ts
+++ b/libs/angular/src/vault/components/view.component.ts
@@ -157,7 +157,7 @@ export class ViewComponent implements OnDestroy, OnInit {
}
async clone() {
- if (this.cipher.login?.fido2Keys.length > 0) {
+ if (this.cipher.login?.fido2Credentials.length > 0) {
const confirmed = await this.dialogService.openSimpleDialog({
title: { key: "passkeyNotCopied" },
content: { key: "passkeyNotCopiedAlert" },
diff --git a/libs/common/src/models/api/login.api.ts b/libs/common/src/models/api/login.api.ts
index 600a3f21daf..934d2e99b5b 100644
--- a/libs/common/src/models/api/login.api.ts
+++ b/libs/common/src/models/api/login.api.ts
@@ -1,6 +1,6 @@
import { JsonObject } from "type-fest";
-import { Fido2KeyApi } from "../../vault/api/fido2-key.api";
+import { Fido2CredentialApi } from "../../vault/api/fido2-credential.api";
import { BaseResponse } from "../response/base.response";
import { LoginUriApi } from "./login-uri.api";
@@ -12,7 +12,7 @@ export class LoginApi extends BaseResponse {
passwordRevisionDate: string;
totp: string;
autofillOnPageLoad: boolean;
- fido2Keys?: Fido2KeyApi[];
+ fido2Credentials?: Fido2CredentialApi[];
constructor(data: any = null) {
super(data);
@@ -30,9 +30,11 @@ export class LoginApi extends BaseResponse {
this.uris = uris.map((u: any) => new LoginUriApi(u));
}
- const fido2Keys = this.getResponseProperty("Fido2Keys");
- if (fido2Keys != null) {
- this.fido2Keys = fido2Keys.map((key: JsonObject) => new Fido2KeyApi(key));
+ const fido2Credentials = this.getResponseProperty("Fido2Credentials");
+ if (fido2Credentials != null) {
+ this.fido2Credentials = fido2Credentials.map(
+ (key: JsonObject) => new Fido2CredentialApi(key)
+ );
}
}
}
diff --git a/libs/common/src/models/export/fido2key.export.ts b/libs/common/src/models/export/fido2-credential.export.ts
similarity index 85%
rename from libs/common/src/models/export/fido2key.export.ts
rename to libs/common/src/models/export/fido2-credential.export.ts
index 69df345cbe0..67f7b7b4408 100644
--- a/libs/common/src/models/export/fido2key.export.ts
+++ b/libs/common/src/models/export/fido2-credential.export.ts
@@ -1,11 +1,10 @@
import { EncString } from "../../platform/models/domain/enc-string";
-import { Fido2KeyView } from "../../vault/models/view/fido2-key.view";
+import { Fido2Credential } from "../../vault/models/domain/fido2-credential";
+import { Fido2CredentialView } from "../../vault/models/view/fido2-credential.view";
-import { Fido2Key as Fido2KeyDomain } from "./../../vault/models/domain/fido2-key";
-
-export class Fido2KeyExport {
- static template(): Fido2KeyExport {
- const req = new Fido2KeyExport();
+export class Fido2CredentialExport {
+ static template(): Fido2CredentialExport {
+ const req = new Fido2CredentialExport();
req.credentialId = "keyId";
req.keyType = "keyType";
req.keyAlgorithm = "keyAlgorithm";
@@ -21,7 +20,7 @@ export class Fido2KeyExport {
return req;
}
- static toView(req: Fido2KeyExport, view = new Fido2KeyView()) {
+ static toView(req: Fido2CredentialExport, view = new Fido2CredentialView()) {
view.credentialId = req.credentialId;
view.keyType = req.keyType as "public-key";
view.keyAlgorithm = req.keyAlgorithm as "ECDSA";
@@ -37,7 +36,7 @@ export class Fido2KeyExport {
return view;
}
- static toDomain(req: Fido2KeyExport, domain = new Fido2KeyDomain()) {
+ static toDomain(req: Fido2CredentialExport, domain = new Fido2Credential()) {
domain.credentialId = req.credentialId != null ? new EncString(req.credentialId) : null;
domain.keyType = req.keyType != null ? new EncString(req.keyType) : null;
domain.keyAlgorithm = req.keyAlgorithm != null ? new EncString(req.keyAlgorithm) : null;
@@ -67,12 +66,12 @@ export class Fido2KeyExport {
discoverable: string;
creationDate: Date;
- constructor(o?: Fido2KeyView | Fido2KeyDomain) {
+ constructor(o?: Fido2CredentialView | Fido2Credential) {
if (o == null) {
return;
}
- if (o instanceof Fido2KeyView) {
+ if (o instanceof Fido2CredentialView) {
this.credentialId = o.credentialId;
this.keyType = o.keyType;
this.keyAlgorithm = o.keyAlgorithm;
diff --git a/libs/common/src/models/export/index.ts b/libs/common/src/models/export/index.ts
index 8c35ee0e1ba..0b338572207 100644
--- a/libs/common/src/models/export/index.ts
+++ b/libs/common/src/models/export/index.ts
@@ -9,4 +9,4 @@ export { FolderExport } from "./folder.export";
export { IdentityExport } from "./identity.export";
export { LoginUriExport } from "./login-uri.export";
export { SecureNoteExport } from "./secure-note.export";
-export { Fido2KeyExport } from "./fido2key.export";
+export { Fido2CredentialExport } from "./fido2-credential.export";
diff --git a/libs/common/src/models/export/login.export.ts b/libs/common/src/models/export/login.export.ts
index 6fa663171dc..c64d30b5b67 100644
--- a/libs/common/src/models/export/login.export.ts
+++ b/libs/common/src/models/export/login.export.ts
@@ -2,7 +2,7 @@ import { EncString } from "../../platform/models/domain/enc-string";
import { Login as LoginDomain } from "../../vault/models/domain/login";
import { LoginView } from "../../vault/models/view/login.view";
-import { Fido2KeyExport } from "./fido2key.export";
+import { Fido2CredentialExport } from "./fido2-credential.export";
import { LoginUriExport } from "./login-uri.export";
export class LoginExport {
@@ -12,7 +12,7 @@ export class LoginExport {
req.username = "jdoe";
req.password = "myp@ssword123";
req.totp = "JBSWY3DPEHPK3PXP";
- req.fido2Keys = [Fido2KeyExport.template()];
+ req.fido2Credentials = [Fido2CredentialExport.template()];
return req;
}
@@ -23,8 +23,8 @@ export class LoginExport {
view.username = req.username;
view.password = req.password;
view.totp = req.totp;
- if (req.fido2Keys != null) {
- view.fido2Keys = req.fido2Keys.map((key) => Fido2KeyExport.toView(key));
+ if (req.fido2Credentials != null) {
+ view.fido2Credentials = req.fido2Credentials.map((key) => Fido2CredentialExport.toView(key));
}
return view;
}
@@ -36,7 +36,7 @@ export class LoginExport {
domain.username = req.username != null ? new EncString(req.username) : null;
domain.password = req.password != null ? new EncString(req.password) : null;
domain.totp = req.totp != null ? new EncString(req.totp) : null;
- //left out fido2Key for now
+ //left out fido2Credential for now
return domain;
}
@@ -44,7 +44,7 @@ export class LoginExport {
username: string;
password: string;
totp: string;
- fido2Keys: Fido2KeyExport[] = [];
+ fido2Credentials: Fido2CredentialExport[] = [];
constructor(o?: LoginView | LoginDomain) {
if (o == null) {
@@ -59,8 +59,8 @@ export class LoginExport {
}
}
- if (o.fido2Keys != null) {
- this.fido2Keys = o.fido2Keys.map((key) => new Fido2KeyExport(key));
+ if (o.fido2Credentials != null) {
+ this.fido2Credentials = o.fido2Credentials.map((key) => new Fido2CredentialExport(key));
}
if (o instanceof LoginView) {
diff --git a/libs/common/src/vault/api/fido2-key.api.ts b/libs/common/src/vault/api/fido2-credential.api.ts
similarity index 95%
rename from libs/common/src/vault/api/fido2-key.api.ts
rename to libs/common/src/vault/api/fido2-credential.api.ts
index 2205ff089bf..bfe32fc9b56 100644
--- a/libs/common/src/vault/api/fido2-key.api.ts
+++ b/libs/common/src/vault/api/fido2-credential.api.ts
@@ -1,6 +1,6 @@
import { BaseResponse } from "../../models/response/base.response";
-export class Fido2KeyApi extends BaseResponse {
+export class Fido2CredentialApi extends BaseResponse {
credentialId: string;
keyType: "public-key";
keyAlgorithm: "ECDSA";
diff --git a/libs/common/src/vault/models/data/fido2-key.data.ts b/libs/common/src/vault/models/data/fido2-credential.data.ts
similarity index 84%
rename from libs/common/src/vault/models/data/fido2-key.data.ts
rename to libs/common/src/vault/models/data/fido2-credential.data.ts
index 9d7f4b3b4d4..8f5160d91ba 100644
--- a/libs/common/src/vault/models/data/fido2-key.data.ts
+++ b/libs/common/src/vault/models/data/fido2-credential.data.ts
@@ -1,6 +1,6 @@
-import { Fido2KeyApi } from "../../api/fido2-key.api";
+import { Fido2CredentialApi } from "../../api/fido2-credential.api";
-export class Fido2KeyData {
+export class Fido2CredentialData {
credentialId: string;
keyType: "public-key";
keyAlgorithm: "ECDSA";
@@ -14,7 +14,7 @@ export class Fido2KeyData {
discoverable: string;
creationDate: string;
- constructor(data?: Fido2KeyApi) {
+ constructor(data?: Fido2CredentialApi) {
if (data == null) {
return;
}
diff --git a/libs/common/src/vault/models/data/login.data.ts b/libs/common/src/vault/models/data/login.data.ts
index b3f27e6773b..0d8c71e77b4 100644
--- a/libs/common/src/vault/models/data/login.data.ts
+++ b/libs/common/src/vault/models/data/login.data.ts
@@ -1,6 +1,6 @@
import { LoginApi } from "../../../models/api/login.api";
-import { Fido2KeyData } from "./fido2-key.data";
+import { Fido2CredentialData } from "./fido2-credential.data";
import { LoginUriData } from "./login-uri.data";
export class LoginData {
@@ -10,7 +10,7 @@ export class LoginData {
passwordRevisionDate: string;
totp: string;
autofillOnPageLoad: boolean;
- fido2Keys?: Fido2KeyData[];
+ fido2Credentials?: Fido2CredentialData[];
constructor(data?: LoginApi) {
if (data == null) {
@@ -27,8 +27,8 @@ export class LoginData {
this.uris = data.uris.map((u) => new LoginUriData(u));
}
- if (data.fido2Keys) {
- this.fido2Keys = data.fido2Keys?.map((key) => new Fido2KeyData(key));
+ if (data.fido2Credentials) {
+ this.fido2Credentials = data.fido2Credentials?.map((key) => new Fido2CredentialData(key));
}
}
}
diff --git a/libs/common/src/vault/models/domain/cipher.spec.ts b/libs/common/src/vault/models/domain/cipher.spec.ts
index a4379f4d86a..33c9cec56b4 100644
--- a/libs/common/src/vault/models/domain/cipher.spec.ts
+++ b/libs/common/src/vault/models/domain/cipher.spec.ts
@@ -82,7 +82,7 @@ describe("Cipher DTO", () => {
passwordRevisionDate: "2022-01-31T12:00:00.000Z",
totp: "EncryptedString",
autofillOnPageLoad: false,
- fido2Keys: [],
+ fido2Credentials: [],
},
passwordHistory: [
{ password: "EncryptedString", lastUsedDate: "2022-01-31T12:00:00.000Z" },
@@ -151,7 +151,7 @@ describe("Cipher DTO", () => {
password: { encryptedString: "EncryptedString", encryptionType: 0 },
totp: { encryptedString: "EncryptedString", encryptionType: 0 },
uris: [{ match: 0, uri: { encryptedString: "EncryptedString", encryptionType: 0 } }],
- fido2Keys: [],
+ fido2Credentials: [],
},
attachments: [
{
diff --git a/libs/common/src/vault/models/domain/fido2-key.spec.ts b/libs/common/src/vault/models/domain/fido2-credential.spec.ts
similarity index 56%
rename from libs/common/src/vault/models/domain/fido2-key.spec.ts
rename to libs/common/src/vault/models/domain/fido2-credential.spec.ts
index 74f3c82fe51..0b2b76a19cd 100644
--- a/libs/common/src/vault/models/domain/fido2-key.spec.ts
+++ b/libs/common/src/vault/models/domain/fido2-credential.spec.ts
@@ -1,11 +1,11 @@
import { mockEnc } from "../../../../spec";
import { EncryptionType } from "../../../enums";
import { EncString } from "../../../platform/models/domain/enc-string";
-import { Fido2KeyData } from "../data/fido2-key.data";
+import { Fido2CredentialData } from "../data/fido2-credential.data";
-import { Fido2Key } from "./fido2-key";
+import { Fido2Credential } from "./fido2-credential";
-describe("Fido2Key", () => {
+describe("Fido2Credential", () => {
let mockDate: Date;
beforeEach(() => {
@@ -14,10 +14,10 @@ describe("Fido2Key", () => {
describe("constructor", () => {
it("returns all fields null when given empty data parameter", () => {
- const data = new Fido2KeyData();
- const fido2Key = new Fido2Key(data);
+ const data = new Fido2CredentialData();
+ const credential = new Fido2Credential(data);
- expect(fido2Key).toEqual({
+ expect(credential).toEqual({
credentialId: null,
keyType: null,
keyAlgorithm: null,
@@ -33,8 +33,8 @@ describe("Fido2Key", () => {
});
});
- it("returns all fields as EncStrings except creationDate when given full Fido2KeyData", () => {
- const data: Fido2KeyData = {
+ it("returns all fields as EncStrings except creationDate when given full Fido2CredentialData", () => {
+ const data: Fido2CredentialData = {
credentialId: "credentialId",
keyType: "public-key",
keyAlgorithm: "ECDSA",
@@ -48,9 +48,9 @@ describe("Fido2Key", () => {
discoverable: "discoverable",
creationDate: mockDate.toISOString(),
};
- const fido2Key = new Fido2Key(data);
+ const credential = new Fido2Credential(data);
- expect(fido2Key).toEqual({
+ expect(credential).toEqual({
credentialId: { encryptedString: "credentialId", encryptionType: 0 },
keyType: { encryptedString: "public-key", encryptionType: 0 },
keyAlgorithm: { encryptedString: "ECDSA", encryptionType: 0 },
@@ -67,9 +67,9 @@ describe("Fido2Key", () => {
});
it("should not populate fields when data parameter is not given", () => {
- const fido2Key = new Fido2Key();
+ const credential = new Fido2Credential();
- expect(fido2Key).toEqual({
+ expect(credential).toEqual({
credentialId: null,
});
});
@@ -77,23 +77,23 @@ describe("Fido2Key", () => {
describe("decrypt", () => {
it("decrypts and populates all fields when populated with EncStrings", async () => {
- const fido2Key = new Fido2Key();
- fido2Key.credentialId = mockEnc("credentialId");
- fido2Key.keyType = mockEnc("keyType");
- fido2Key.keyAlgorithm = mockEnc("keyAlgorithm");
- fido2Key.keyCurve = mockEnc("keyCurve");
- fido2Key.keyValue = mockEnc("keyValue");
- fido2Key.rpId = mockEnc("rpId");
- fido2Key.userHandle = mockEnc("userHandle");
- fido2Key.counter = mockEnc("2");
- fido2Key.rpName = mockEnc("rpName");
- fido2Key.userDisplayName = mockEnc("userDisplayName");
- fido2Key.discoverable = mockEnc("true");
- fido2Key.creationDate = mockDate;
+ const credential = new Fido2Credential();
+ credential.credentialId = mockEnc("credentialId");
+ credential.keyType = mockEnc("keyType");
+ credential.keyAlgorithm = mockEnc("keyAlgorithm");
+ credential.keyCurve = mockEnc("keyCurve");
+ credential.keyValue = mockEnc("keyValue");
+ credential.rpId = mockEnc("rpId");
+ credential.userHandle = mockEnc("userHandle");
+ credential.counter = mockEnc("2");
+ credential.rpName = mockEnc("rpName");
+ credential.userDisplayName = mockEnc("userDisplayName");
+ credential.discoverable = mockEnc("true");
+ credential.creationDate = mockDate;
- const fido2KeyView = await fido2Key.decrypt(null);
+ const credentialView = await credential.decrypt(null);
- expect(fido2KeyView).toEqual({
+ expect(credentialView).toEqual({
credentialId: "credentialId",
keyType: "keyType",
keyAlgorithm: "keyAlgorithm",
@@ -110,9 +110,9 @@ describe("Fido2Key", () => {
});
});
- describe("toFido2KeyData", () => {
- it("encodes to data object when converted from Fido2KeyData and back", () => {
- const data: Fido2KeyData = {
+ describe("toFido2CredentialData", () => {
+ it("encodes to data object when converted from Fido2CredentialData and back", () => {
+ const data: Fido2CredentialData = {
credentialId: "credentialId",
keyType: "public-key",
keyAlgorithm: "ECDSA",
@@ -127,8 +127,8 @@ describe("Fido2Key", () => {
creationDate: mockDate.toISOString(),
};
- const fido2Key = new Fido2Key(data);
- const result = fido2Key.toFido2KeyData();
+ const credential = new Fido2Credential(data);
+ const result = credential.toFido2CredentialData();
expect(result).toEqual(data);
});
@@ -136,28 +136,28 @@ describe("Fido2Key", () => {
describe("fromJSON", () => {
it("recreates equivalent object when converted to JSON and back", () => {
- const fido2Key = new Fido2Key();
- fido2Key.credentialId = createEncryptedEncString("credentialId");
- fido2Key.keyType = createEncryptedEncString("keyType");
- fido2Key.keyAlgorithm = createEncryptedEncString("keyAlgorithm");
- fido2Key.keyCurve = createEncryptedEncString("keyCurve");
- fido2Key.keyValue = createEncryptedEncString("keyValue");
- fido2Key.rpId = createEncryptedEncString("rpId");
- fido2Key.userHandle = createEncryptedEncString("userHandle");
- fido2Key.counter = createEncryptedEncString("2");
- fido2Key.rpName = createEncryptedEncString("rpName");
- fido2Key.userDisplayName = createEncryptedEncString("userDisplayName");
- fido2Key.discoverable = createEncryptedEncString("discoverable");
- fido2Key.creationDate = mockDate;
+ const credential = new Fido2Credential();
+ credential.credentialId = createEncryptedEncString("credentialId");
+ credential.keyType = createEncryptedEncString("keyType");
+ credential.keyAlgorithm = createEncryptedEncString("keyAlgorithm");
+ credential.keyCurve = createEncryptedEncString("keyCurve");
+ credential.keyValue = createEncryptedEncString("keyValue");
+ credential.rpId = createEncryptedEncString("rpId");
+ credential.userHandle = createEncryptedEncString("userHandle");
+ credential.counter = createEncryptedEncString("2");
+ credential.rpName = createEncryptedEncString("rpName");
+ credential.userDisplayName = createEncryptedEncString("userDisplayName");
+ credential.discoverable = createEncryptedEncString("discoverable");
+ credential.creationDate = mockDate;
- const json = JSON.stringify(fido2Key);
- const result = Fido2Key.fromJSON(JSON.parse(json));
+ const json = JSON.stringify(credential);
+ const result = Fido2Credential.fromJSON(JSON.parse(json));
- expect(result).toEqual(fido2Key);
+ expect(result).toEqual(credential);
});
it("returns null if input is null", () => {
- expect(Fido2Key.fromJSON(null)).toBeNull();
+ expect(Fido2Credential.fromJSON(null)).toBeNull();
});
});
});
diff --git a/libs/common/src/vault/models/domain/fido2-key.ts b/libs/common/src/vault/models/domain/fido2-credential.ts
similarity index 87%
rename from libs/common/src/vault/models/domain/fido2-key.ts
rename to libs/common/src/vault/models/domain/fido2-credential.ts
index fc4a2b990a2..84f075458a8 100644
--- a/libs/common/src/vault/models/domain/fido2-key.ts
+++ b/libs/common/src/vault/models/domain/fido2-credential.ts
@@ -3,10 +3,10 @@ import { Jsonify } from "type-fest";
import Domain from "../../../platform/models/domain/domain-base";
import { EncString } from "../../../platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "../../../platform/models/domain/symmetric-crypto-key";
-import { Fido2KeyData } from "../data/fido2-key.data";
-import { Fido2KeyView } from "../view/fido2-key.view";
+import { Fido2CredentialData } from "../data/fido2-credential.data";
+import { Fido2CredentialView } from "../view/fido2-credential.view";
-export class Fido2Key extends Domain {
+export class Fido2Credential extends Domain {
credentialId: EncString | null = null;
keyType: EncString;
keyAlgorithm: EncString;
@@ -20,7 +20,7 @@ export class Fido2Key extends Domain {
discoverable: EncString;
creationDate: Date;
- constructor(obj?: Fido2KeyData) {
+ constructor(obj?: Fido2CredentialData) {
super();
if (obj == null) {
return;
@@ -47,9 +47,9 @@ export class Fido2Key extends Domain {
this.creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;
}
- async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {
+ async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {
const view = await this.decryptObj(
- new Fido2KeyView(),
+ new Fido2CredentialView(),
{
credentialId: null,
keyType: null,
@@ -91,8 +91,8 @@ export class Fido2Key extends Domain {
return view;
}
- toFido2KeyData(): Fido2KeyData {
- const i = new Fido2KeyData();
+ toFido2CredentialData(): Fido2CredentialData {
+ const i = new Fido2CredentialData();
i.creationDate = this.creationDate.toISOString();
this.buildDataModel(this, i, {
credentialId: null,
@@ -110,7 +110,7 @@ export class Fido2Key extends Domain {
return i;
}
- static fromJSON(obj: Jsonify): Fido2Key {
+ static fromJSON(obj: Jsonify): Fido2Credential {
if (obj == null) {
return null;
}
@@ -128,7 +128,7 @@ export class Fido2Key extends Domain {
const discoverable = EncString.fromJSON(obj.discoverable);
const creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;
- return Object.assign(new Fido2Key(), obj, {
+ return Object.assign(new Fido2Credential(), obj, {
credentialId,
keyType,
keyAlgorithm,
diff --git a/libs/common/src/vault/models/domain/login.spec.ts b/libs/common/src/vault/models/domain/login.spec.ts
index ca28ee6a6d8..69b4aa7cabf 100644
--- a/libs/common/src/vault/models/domain/login.spec.ts
+++ b/libs/common/src/vault/models/domain/login.spec.ts
@@ -4,15 +4,15 @@ import { Substitute, Arg } from "@fluffy-spoon/substitute";
import { mockEnc, mockFromJson } from "../../../../spec";
import { UriMatchType } from "../../../enums";
import { EncryptedString, EncString } from "../../../platform/models/domain/enc-string";
-import { Fido2KeyApi } from "../../api/fido2-key.api";
+import { Fido2CredentialApi } from "../../api/fido2-credential.api";
import { LoginData } from "../../models/data/login.data";
import { Login } from "../../models/domain/login";
import { LoginUri } from "../../models/domain/login-uri";
import { LoginUriView } from "../../models/view/login-uri.view";
-import { Fido2KeyData } from "../data/fido2-key.data";
-import { Fido2KeyView } from "../view/fido2-key.view";
+import { Fido2CredentialData } from "../data/fido2-credential.data";
+import { Fido2CredentialView } from "../view/fido2-credential.view";
-import { Fido2Key } from "./fido2-key";
+import { Fido2Credential } from "./fido2-credential";
describe("Login DTO", () => {
it("Convert from empty LoginData", () => {
@@ -25,12 +25,12 @@ describe("Login DTO", () => {
username: null,
password: null,
totp: null,
- fido2Keys: [],
+ fido2Credentials: [],
});
});
it("Convert from full LoginData", () => {
- const fido2KeyData = initializeFido2Key(new Fido2KeyData());
+ const fido2CredentialData = initializeFido2Credential(new Fido2CredentialData());
const data: LoginData = {
uris: [{ uri: "uri", match: UriMatchType.Domain }],
username: "username",
@@ -38,7 +38,7 @@ describe("Login DTO", () => {
passwordRevisionDate: "2022-01-31T12:00:00.000Z",
totp: "123",
autofillOnPageLoad: false,
- fido2Keys: [fido2KeyData],
+ fido2Credentials: [fido2CredentialData],
};
const login = new Login(data);
@@ -49,7 +49,7 @@ describe("Login DTO", () => {
password: { encryptedString: "password", encryptionType: 0 },
totp: { encryptedString: "123", encryptionType: 0 },
uris: [{ match: 0, uri: { encryptedString: "uri", encryptionType: 0 } }],
- fido2Keys: [encryptFido2Key(fido2KeyData)],
+ fido2Credentials: [encryptFido2Credential(fido2CredentialData)],
});
});
@@ -57,7 +57,7 @@ describe("Login DTO", () => {
const login = new Login();
expect(login).toEqual({
- fido2Keys: [],
+ fido2Credentials: [],
});
});
@@ -68,14 +68,16 @@ describe("Login DTO", () => {
loginUri.decrypt(Arg.any()).resolves(loginUriView);
const login = new Login();
- const decryptedFido2Key = Symbol();
+ const decryptedFido2Credential = Symbol();
login.uris = [loginUri];
login.username = mockEnc("encrypted username");
login.password = mockEnc("encrypted password");
login.passwordRevisionDate = new Date("2022-01-31T12:00:00.000Z");
login.totp = mockEnc("encrypted totp");
login.autofillOnPageLoad = true;
- login.fido2Keys = [{ decrypt: jest.fn().mockReturnValue(decryptedFido2Key) } as any];
+ login.fido2Credentials = [
+ { decrypt: jest.fn().mockReturnValue(decryptedFido2Credential) } as any,
+ ];
const loginView = await login.decrypt(null);
expect(loginView).toEqual({
@@ -94,7 +96,7 @@ describe("Login DTO", () => {
},
],
autofillOnPageLoad: true,
- fido2Keys: [decryptedFido2Key],
+ fido2Credentials: [decryptedFido2Credential],
});
});
@@ -106,7 +108,7 @@ describe("Login DTO", () => {
passwordRevisionDate: "2022-01-31T12:00:00.000Z",
totp: "123",
autofillOnPageLoad: false,
- fido2Keys: [initializeFido2Key(new Fido2KeyData())],
+ fido2Credentials: [initializeFido2Credential(new Fido2CredentialData())],
};
const login = new Login(data);
@@ -128,7 +130,7 @@ describe("Login DTO", () => {
password: "myPassword" as EncryptedString,
passwordRevisionDate: passwordRevisionDate.toISOString(),
totp: "myTotp" as EncryptedString,
- fido2Keys: [
+ fido2Credentials: [
{
credentialId: "keyId" as EncryptedString,
keyType: "keyType" as EncryptedString,
@@ -152,7 +154,7 @@ describe("Login DTO", () => {
password: "myPassword_fromJSON",
passwordRevisionDate: passwordRevisionDate,
totp: "myTotp_fromJSON",
- fido2Keys: [
+ fido2Credentials: [
{
credentialId: "keyId_fromJSON",
keyType: "keyType_fromJSON",
@@ -178,8 +180,8 @@ describe("Login DTO", () => {
});
});
-type Fido2KeyLike = Fido2KeyData | Fido2KeyView | Fido2KeyApi;
-function initializeFido2Key(key: T): T {
+type Fido2CredentialLike = Fido2CredentialData | Fido2CredentialView | Fido2CredentialApi;
+function initializeFido2Credential(key: T): T {
key.credentialId = "credentialId";
key.keyType = "public-key";
key.keyAlgorithm = "ECDSA";
@@ -195,8 +197,8 @@ function initializeFido2Key(key: T): T {
return key;
}
-function encryptFido2Key(key: Fido2KeyLike): Fido2Key {
- const encrypted = new Fido2Key();
+function encryptFido2Credential(key: Fido2CredentialLike): Fido2Credential {
+ const encrypted = new Fido2Credential();
encrypted.credentialId = { encryptedString: key.credentialId, encryptionType: 0 } as EncString;
encrypted.keyType = { encryptedString: key.keyType, encryptionType: 0 } as EncString;
encrypted.keyAlgorithm = { encryptedString: key.keyAlgorithm, encryptionType: 0 } as EncString;
diff --git a/libs/common/src/vault/models/domain/login.ts b/libs/common/src/vault/models/domain/login.ts
index fe9ad15c75d..ab4827ae466 100644
--- a/libs/common/src/vault/models/domain/login.ts
+++ b/libs/common/src/vault/models/domain/login.ts
@@ -6,7 +6,7 @@ import { SymmetricCryptoKey } from "../../../platform/models/domain/symmetric-cr
import { LoginData } from "../data/login.data";
import { LoginView } from "../view/login.view";
-import { Fido2Key } from "./fido2-key";
+import { Fido2Credential } from "./fido2-credential";
import { LoginUri } from "./login-uri";
export class Login extends Domain {
@@ -16,7 +16,7 @@ export class Login extends Domain {
passwordRevisionDate?: Date;
totp: EncString;
autofillOnPageLoad: boolean;
- fido2Keys: Fido2Key[] = [];
+ fido2Credentials: Fido2Credential[] = [];
constructor(obj?: LoginData) {
super();
@@ -45,8 +45,8 @@ export class Login extends Domain {
});
}
- if (obj.fido2Keys) {
- this.fido2Keys = obj.fido2Keys.map((key) => new Fido2Key(key));
+ if (obj.fido2Credentials) {
+ this.fido2Credentials = obj.fido2Credentials.map((key) => new Fido2Credential(key));
}
}
@@ -70,8 +70,10 @@ export class Login extends Domain {
}
}
- if (this.fido2Keys != null) {
- view.fido2Keys = await Promise.all(this.fido2Keys.map((key) => key.decrypt(orgId, encKey)));
+ if (this.fido2Credentials != null) {
+ view.fido2Credentials = await Promise.all(
+ this.fido2Credentials.map((key) => key.decrypt(orgId, encKey))
+ );
}
return view;
@@ -95,7 +97,7 @@ export class Login extends Domain {
});
}
- l.fido2Keys = this.fido2Keys.map((key) => key.toFido2KeyData());
+ l.fido2Credentials = this.fido2Credentials.map((key) => key.toFido2CredentialData());
return l;
}
@@ -111,7 +113,8 @@ export class Login extends Domain {
const passwordRevisionDate =
obj.passwordRevisionDate == null ? null : new Date(obj.passwordRevisionDate);
const uris = obj.uris?.map((uri: any) => LoginUri.fromJSON(uri));
- const fido2Keys = obj.fido2Keys?.map((key) => Fido2Key.fromJSON(key)) ?? [];
+ const fido2Credentials =
+ obj.fido2Credentials?.map((key) => Fido2Credential.fromJSON(key)) ?? [];
return Object.assign(new Login(), obj, {
username,
@@ -119,7 +122,7 @@ export class Login extends Domain {
totp,
passwordRevisionDate,
uris,
- fido2Keys,
+ fido2Credentials,
});
}
}
diff --git a/libs/common/src/vault/models/request/cipher.request.ts b/libs/common/src/vault/models/request/cipher.request.ts
index dde20cceb63..949d36ab051 100644
--- a/libs/common/src/vault/models/request/cipher.request.ts
+++ b/libs/common/src/vault/models/request/cipher.request.ts
@@ -4,7 +4,7 @@ import { IdentityApi } from "../../../models/api/identity.api";
import { LoginUriApi } from "../../../models/api/login-uri.api";
import { LoginApi } from "../../../models/api/login.api";
import { SecureNoteApi } from "../../../models/api/secure-note.api";
-import { Fido2KeyApi } from "../../api/fido2-key.api";
+import { Fido2CredentialApi } from "../../api/fido2-credential.api";
import { CipherRepromptType } from "../../enums/cipher-reprompt-type";
import { CipherType } from "../../enums/cipher-type";
import { Cipher } from "../domain/cipher";
@@ -65,9 +65,9 @@ export class CipherRequest {
});
}
- if (cipher.login.fido2Keys != null) {
- this.login.fido2Keys = cipher.login.fido2Keys.map((key) => {
- const keyApi = new Fido2KeyApi();
+ if (cipher.login.fido2Credentials != null) {
+ this.login.fido2Credentials = cipher.login.fido2Credentials.map((key) => {
+ const keyApi = new Fido2CredentialApi();
keyApi.credentialId =
key.credentialId != null ? key.credentialId.encryptedString : null;
keyApi.keyType =
diff --git a/libs/common/src/vault/models/view/fido2-key.view.ts b/libs/common/src/vault/models/view/fido2-credential.view.ts
similarity index 73%
rename from libs/common/src/vault/models/view/fido2-key.view.ts
rename to libs/common/src/vault/models/view/fido2-credential.view.ts
index 2ff03d368ab..b6894e84ff5 100644
--- a/libs/common/src/vault/models/view/fido2-key.view.ts
+++ b/libs/common/src/vault/models/view/fido2-credential.view.ts
@@ -2,7 +2,7 @@ import { Jsonify } from "type-fest";
import { ItemView } from "./item.view";
-export class Fido2KeyView extends ItemView {
+export class Fido2CredentialView extends ItemView {
credentialId: string;
keyType: "public-key";
keyAlgorithm: "ECDSA";
@@ -20,9 +20,9 @@ export class Fido2KeyView extends ItemView {
return this.userDisplayName;
}
- static fromJSON(obj: Partial>): Fido2KeyView {
+ static fromJSON(obj: Partial>): Fido2CredentialView {
const creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null;
- return Object.assign(new Fido2KeyView(), obj, {
+ return Object.assign(new Fido2CredentialView(), obj, {
creationDate,
});
}
diff --git a/libs/common/src/vault/models/view/login.view.ts b/libs/common/src/vault/models/view/login.view.ts
index 9518725ad12..a55943dda04 100644
--- a/libs/common/src/vault/models/view/login.view.ts
+++ b/libs/common/src/vault/models/view/login.view.ts
@@ -5,7 +5,7 @@ import { linkedFieldOption } from "../../../misc/linkedFieldOption.decorator";
import { Utils } from "../../../platform/misc/utils";
import { Login } from "../domain/login";
-import { Fido2KeyView } from "./fido2-key.view";
+import { Fido2CredentialView } from "./fido2-credential.view";
import { ItemView } from "./item.view";
import { LoginUriView } from "./login-uri.view";
@@ -19,7 +19,7 @@ export class LoginView extends ItemView {
totp: string = null;
uris: LoginUriView[] = null;
autofillOnPageLoad: boolean = null;
- fido2Keys: Fido2KeyView[] = [];
+ fido2Credentials: Fido2CredentialView[] = [];
constructor(l?: Login) {
super();
@@ -81,12 +81,13 @@ export class LoginView extends ItemView {
const passwordRevisionDate =
obj.passwordRevisionDate == null ? null : new Date(obj.passwordRevisionDate);
const uris = obj.uris?.map((uri: any) => LoginUriView.fromJSON(uri));
- const fido2Keys = obj.fido2Keys?.map((key) => Fido2KeyView.fromJSON(key)) ?? [];
+ const fido2Credentials =
+ obj.fido2Credentials?.map((key) => Fido2CredentialView.fromJSON(key)) ?? [];
return Object.assign(new LoginView(), obj, {
passwordRevisionDate,
uris,
- fido2Keys,
+ fido2Credentials,
});
}
}
diff --git a/libs/common/src/vault/services/cipher.service.ts b/libs/common/src/vault/services/cipher.service.ts
index e2c27fa7297..b5090a14883 100644
--- a/libs/common/src/vault/services/cipher.service.ts
+++ b/libs/common/src/vault/services/cipher.service.ts
@@ -30,7 +30,7 @@ import { CipherData } from "../models/data/cipher.data";
import { Attachment } from "../models/domain/attachment";
import { Card } from "../models/domain/card";
import { Cipher } from "../models/domain/cipher";
-import { Fido2Key } from "../models/domain/fido2-key";
+import { Fido2Credential } from "../models/domain/fido2-credential";
import { Field } from "../models/domain/field";
import { Identity } from "../models/domain/identity";
import { Login } from "../models/domain/login";
@@ -1138,10 +1138,10 @@ export class CipherService implements CipherServiceAbstraction {
}
}
- if (model.login.fido2Keys != null) {
- cipher.login.fido2Keys = await Promise.all(
- model.login.fido2Keys.map(async (viewKey) => {
- const domainKey = new Fido2Key();
+ if (model.login.fido2Credentials != null) {
+ cipher.login.fido2Credentials = await Promise.all(
+ model.login.fido2Credentials.map(async (viewKey) => {
+ const domainKey = new Fido2Credential();
await this.encryptObjProperty(
viewKey,
domainKey,
diff --git a/libs/common/src/vault/services/fido2/fido2-authenticator.service.spec.ts b/libs/common/src/vault/services/fido2/fido2-authenticator.service.spec.ts
index a275deca2cc..93c0becaa21 100644
--- a/libs/common/src/vault/services/fido2/fido2-authenticator.service.spec.ts
+++ b/libs/common/src/vault/services/fido2/fido2-authenticator.service.spec.ts
@@ -18,7 +18,7 @@ import { SyncService } from "../../abstractions/sync/sync.service.abstraction";
import { CipherType } from "../../enums/cipher-type";
import { Cipher } from "../../models/domain/cipher";
import { CipherView } from "../../models/view/cipher.view";
-import { Fido2KeyView } from "../../models/view/fido2-key.view";
+import { Fido2CredentialView } from "../../models/view/fido2-credential.view";
import { LoginView } from "../../models/view/login.view";
import { CBOR } from "./cbor";
@@ -116,7 +116,7 @@ describe("FidoAuthenticatorService", () => {
params = await createParams({
excludeCredentialDescriptorList: [
{
- id: guidToRawFormat(excludedCipher.login.fido2Keys[0].credentialId),
+ id: guidToRawFormat(excludedCipher.login.fido2Credentials[0].credentialId),
type: "public-key",
},
],
@@ -234,7 +234,7 @@ describe("FidoAuthenticatorService", () => {
name: existingCipher.name,
login: expect.objectContaining({
- fido2Keys: [
+ fido2Credentials: [
expect.objectContaining({
credentialId: expect.anything(),
keyType: "public-key",
@@ -304,7 +304,7 @@ describe("FidoAuthenticatorService", () => {
);
cipherService.getAllDecrypted.mockResolvedValue([await cipher]);
cipherService.encrypt.mockImplementation(async (cipher) => {
- cipher.login.fido2Keys[0].credentialId = credentialId; // Replace id for testability
+ cipher.login.fido2Credentials[0].credentialId = credentialId; // Replace id for testability
return {} as any;
});
cipherService.createWithServer.mockImplementation(async (cipher) => {
@@ -466,8 +466,8 @@ describe("FidoAuthenticatorService", () => {
it("should inform user if credential exists but rpId does not match", async () => {
const cipher = await createCipherView({ type: CipherType.Login });
- cipher.login.fido2Keys[0].credentialId = credentialId;
- cipher.login.fido2Keys[0].rpId = "mismatch-rpid";
+ cipher.login.fido2Credentials[0].credentialId = credentialId;
+ cipher.login.fido2Credentials[0].rpId = "mismatch-rpid";
cipherService.getAllDecrypted.mockResolvedValue([cipher]);
userInterfaceSession.informCredentialNotFound.mockResolvedValue();
@@ -542,7 +542,7 @@ describe("FidoAuthenticatorService", () => {
it("should only ask for discoverable credentials matched by rpId when params does not contains allowedCredentials list", async () => {
params.allowCredentialDescriptorList = undefined;
- const discoverableCiphers = ciphers.filter((c) => c.login.fido2Keys[0].discoverable);
+ const discoverableCiphers = ciphers.filter((c) => c.login.fido2Credentials[0].discoverable);
userInterfaceSession.pickCredential.mockResolvedValue({
cipherId: discoverableCiphers[0].id,
userVerified: false,
@@ -592,7 +592,7 @@ describe("FidoAuthenticatorService", () => {
let credentialIds: string[];
let selectedCredentialId: string;
let ciphers: CipherView[];
- let fido2Keys: Fido2KeyView[];
+ let fido2Credentials: Fido2CredentialView[];
let params: Fido2AuthenticatorGetAssertionParams;
const init = async () => {
@@ -607,7 +607,7 @@ describe("FidoAuthenticatorService", () => {
{ credentialId: id, rpId: RpId, counter: 9000, keyValue }
)
);
- fido2Keys = ciphers.map((c) => c.login.fido2Keys[0]);
+ fido2Credentials = ciphers.map((c) => c.login.fido2Credentials[0]);
selectedCredentialId = credentialIds[0];
params = await createParams({
allowCredentialDescriptorList: credentialIds.map((credentialId) => ({
@@ -637,7 +637,7 @@ describe("FidoAuthenticatorService", () => {
expect.objectContaining({
id: ciphers[0].id,
login: expect.objectContaining({
- fido2Keys: [
+ fido2Credentials: [
expect.objectContaining({
counter: 9001,
}),
@@ -657,7 +657,7 @@ describe("FidoAuthenticatorService", () => {
expect(result.selectedCredential.id).toEqual(guidToRawFormat(selectedCredentialId));
expect(result.selectedCredential.userHandle).toEqual(
- Fido2Utils.stringToBuffer(fido2Keys[0].userHandle)
+ Fido2Utils.stringToBuffer(fido2Credentials[0].userHandle)
);
expect(rpIdHash).toEqual(
new Uint8Array([
@@ -740,28 +740,29 @@ describe("FidoAuthenticatorService", () => {
});
function createCipherView(
- data: Partial> = {},
- fido2Key: Partial = {}
+ data: Partial> = {},
+ fido2Credential: Partial = {}
): CipherView {
const cipher = new CipherView();
cipher.id = data.id ?? Utils.newGuid();
cipher.type = CipherType.Login;
cipher.localData = {};
- const fido2KeyView = new Fido2KeyView();
- fido2KeyView.credentialId = fido2Key.credentialId ?? Utils.newGuid();
- fido2KeyView.rpId = fido2Key.rpId ?? RpId;
- fido2KeyView.counter = fido2Key.counter ?? 0;
- fido2KeyView.userHandle = fido2Key.userHandle ?? Fido2Utils.bufferToString(randomBytes(16));
- fido2KeyView.keyAlgorithm = fido2Key.keyAlgorithm ?? "ECDSA";
- fido2KeyView.keyCurve = fido2Key.keyCurve ?? "P-256";
- fido2KeyView.discoverable = fido2Key.discoverable ?? true;
- fido2KeyView.keyValue =
- fido2KeyView.keyValue ??
+ const fido2CredentialView = new Fido2CredentialView();
+ fido2CredentialView.credentialId = fido2Credential.credentialId ?? Utils.newGuid();
+ fido2CredentialView.rpId = fido2Credential.rpId ?? RpId;
+ fido2CredentialView.counter = fido2Credential.counter ?? 0;
+ fido2CredentialView.userHandle =
+ fido2Credential.userHandle ?? Fido2Utils.bufferToString(randomBytes(16));
+ fido2CredentialView.keyAlgorithm = fido2Credential.keyAlgorithm ?? "ECDSA";
+ fido2CredentialView.keyCurve = fido2Credential.keyCurve ?? "P-256";
+ fido2CredentialView.discoverable = fido2Credential.discoverable ?? true;
+ fido2CredentialView.keyValue =
+ fido2CredentialView.keyValue ??
"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTC-7XDZipXbaVBlnkjlBgO16ZmqBZWejK2iYo6lV0dehRANCAASOcM2WduNq1DriRYN7ZekvZz-bRhA-qNT4v0fbp5suUFJyWmgOQ0bybZcLXHaerK5Ep1JiSrQcewtQNgLtry7f";
cipher.login = new LoginView();
- cipher.login.fido2Keys = [fido2KeyView];
+ cipher.login.fido2Credentials = [fido2CredentialView];
return cipher;
}
diff --git a/libs/common/src/vault/services/fido2/fido2-authenticator.service.ts b/libs/common/src/vault/services/fido2/fido2-authenticator.service.ts
index 895e5ba4cef..801f7622f9d 100644
--- a/libs/common/src/vault/services/fido2/fido2-authenticator.service.ts
+++ b/libs/common/src/vault/services/fido2/fido2-authenticator.service.ts
@@ -16,7 +16,7 @@ import { Fido2UserInterfaceService } from "../../abstractions/fido2/fido2-user-i
import { SyncService } from "../../abstractions/sync/sync.service.abstraction";
import { CipherType } from "../../enums/cipher-type";
import { CipherView } from "../../models/view/cipher.view";
-import { Fido2KeyView } from "../../models/view/fido2-key.view";
+import { Fido2CredentialView } from "../../models/view/fido2-credential.view";
import { CBOR } from "./cbor";
import { joseToDer } from "./ecdsa-utils";
@@ -101,7 +101,7 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
}
let cipher: CipherView;
- let fido2Key: Fido2KeyView;
+ let fido2Credential: Fido2CredentialView;
let keyPair: CryptoKeyPair;
let userVerified = false;
let credentialId: string;
@@ -134,11 +134,11 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
cipher = await encrypted.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(encrypted)
);
- fido2Key = await createKeyView(params, keyPair.privateKey);
- cipher.login.fido2Keys = [fido2Key];
+ fido2Credential = await createKeyView(params, keyPair.privateKey);
+ cipher.login.fido2Credentials = [fido2Credential];
const reencrypted = await this.cipherService.encrypt(cipher);
await this.cipherService.updateWithServer(reencrypted);
- credentialId = fido2Key.credentialId;
+ credentialId = fido2Credential.credentialId;
} catch (error) {
this.logService?.error(
`[Fido2Authenticator] Aborting because of unknown error when creating credential: ${error}`
@@ -149,7 +149,7 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
const authData = await generateAuthData({
rpId: params.rpEntity.id,
credentialId: guidToRawFormat(credentialId),
- counter: fido2Key.counter,
+ counter: fido2Credential.counter,
userPresence: true,
userVerification: userVerified,
keyPair,
@@ -239,10 +239,10 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
}
try {
- const selectedFido2Key = selectedCipher.login.fido2Keys[0];
- const selectedCredentialId = selectedFido2Key.credentialId;
+ const selectedFido2Credential = selectedCipher.login.fido2Credentials[0];
+ const selectedCredentialId = selectedFido2Credential.credentialId;
- ++selectedFido2Key.counter;
+ ++selectedFido2Credential.counter;
selectedCipher.localData = {
...selectedCipher.localData,
@@ -252,9 +252,9 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
await this.cipherService.updateWithServer(encrypted);
const authenticatorData = await generateAuthData({
- rpId: selectedFido2Key.rpId,
+ rpId: selectedFido2Credential.rpId,
credentialId: guidToRawFormat(selectedCredentialId),
- counter: selectedFido2Key.counter,
+ counter: selectedFido2Credential.counter,
userPresence: true,
userVerification: userVerified,
});
@@ -262,14 +262,14 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
const signature = await generateSignature({
authData: authenticatorData,
clientDataHash: params.hash,
- privateKey: await getPrivateKeyFromFido2Key(selectedFido2Key),
+ privateKey: await getPrivateKeyFromFido2Credential(selectedFido2Credential),
});
return {
authenticatorData,
selectedCredential: {
id: guidToRawFormat(selectedCredentialId),
- userHandle: Fido2Utils.stringToBuffer(selectedFido2Key.userHandle),
+ userHandle: Fido2Utils.stringToBuffer(selectedFido2Credential.userHandle),
},
signature,
};
@@ -308,8 +308,8 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
!cipher.isDeleted &&
cipher.organizationId == undefined &&
cipher.type === CipherType.Login &&
- cipher.login.fido2Keys.length > 0 &&
- ids.includes(cipher.login.fido2Keys[0].credentialId)
+ cipher.login.fido2Credentials.length > 0 &&
+ ids.includes(cipher.login.fido2Credentials[0].credentialId)
)
.map((cipher) => cipher.id);
}
@@ -336,9 +336,9 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
(cipher) =>
!cipher.isDeleted &&
cipher.type === CipherType.Login &&
- cipher.login.fido2Keys.length > 0 &&
- cipher.login.fido2Keys[0].rpId === rpId &&
- ids.includes(cipher.login.fido2Keys[0].credentialId)
+ cipher.login.fido2Credentials.length > 0 &&
+ cipher.login.fido2Credentials[0].rpId === rpId &&
+ ids.includes(cipher.login.fido2Credentials[0].credentialId)
);
}
@@ -348,9 +348,9 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
(cipher) =>
!cipher.isDeleted &&
cipher.type === CipherType.Login &&
- cipher.login.fido2Keys.length > 0 &&
- cipher.login.fido2Keys[0].rpId === rpId &&
- cipher.login.fido2Keys[0].discoverable
+ cipher.login.fido2Credentials.length > 0 &&
+ cipher.login.fido2Credentials[0].rpId === rpId &&
+ cipher.login.fido2Credentials[0].discoverable
);
}
}
@@ -369,37 +369,39 @@ async function createKeyPair() {
async function createKeyView(
params: Fido2AuthenticatorMakeCredentialsParams,
keyValue: CryptoKey
-): Promise {
+): Promise {
if (keyValue.algorithm.name !== "ECDSA" && (keyValue.algorithm as any).namedCurve !== "P-256") {
throw new Fido2AutenticatorError(Fido2AutenticatorErrorCode.Unknown);
}
const pkcs8Key = await crypto.subtle.exportKey("pkcs8", keyValue);
- const fido2Key = new Fido2KeyView();
- fido2Key.credentialId = Utils.newGuid();
- fido2Key.keyType = "public-key";
- fido2Key.keyAlgorithm = "ECDSA";
- fido2Key.keyCurve = "P-256";
- fido2Key.keyValue = Fido2Utils.bufferToString(pkcs8Key);
- fido2Key.rpId = params.rpEntity.id;
- fido2Key.userHandle = Fido2Utils.bufferToString(params.userEntity.id);
- fido2Key.counter = 0;
- fido2Key.rpName = params.rpEntity.name;
- fido2Key.userDisplayName = params.userEntity.displayName;
- fido2Key.discoverable = params.requireResidentKey;
- fido2Key.creationDate = new Date();
+ const fido2Credential = new Fido2CredentialView();
+ fido2Credential.credentialId = Utils.newGuid();
+ fido2Credential.keyType = "public-key";
+ fido2Credential.keyAlgorithm = "ECDSA";
+ fido2Credential.keyCurve = "P-256";
+ fido2Credential.keyValue = Fido2Utils.bufferToString(pkcs8Key);
+ fido2Credential.rpId = params.rpEntity.id;
+ fido2Credential.userHandle = Fido2Utils.bufferToString(params.userEntity.id);
+ fido2Credential.counter = 0;
+ fido2Credential.rpName = params.rpEntity.name;
+ fido2Credential.userDisplayName = params.userEntity.displayName;
+ fido2Credential.discoverable = params.requireResidentKey;
+ fido2Credential.creationDate = new Date();
- return fido2Key;
+ return fido2Credential;
}
-async function getPrivateKeyFromFido2Key(fido2Key: Fido2KeyView): Promise {
- const keyBuffer = Fido2Utils.stringToBuffer(fido2Key.keyValue);
+async function getPrivateKeyFromFido2Credential(
+ fido2Credential: Fido2CredentialView
+): Promise {
+ const keyBuffer = Fido2Utils.stringToBuffer(fido2Credential.keyValue);
return await crypto.subtle.importKey(
"pkcs8",
keyBuffer,
{
- name: fido2Key.keyAlgorithm,
- namedCurve: fido2Key.keyCurve,
+ name: fido2Credential.keyAlgorithm,
+ namedCurve: fido2Credential.keyCurve,
} as EcKeyImportParams,
true,
KeyUsages