summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/server/src')
-rw-r--r--packages/server/src/metadata/parseJWT.ts6
-rw-r--r--packages/server/src/metadata/verifyAttestationWithMetadata.test.ts3
-rw-r--r--packages/server/src/registration/verifications/verifyAttestationAndroidKey.test.ts5
-rw-r--r--packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.test.ts3
-rw-r--r--packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.ts3
-rw-r--r--packages/server/src/registration/verifications/verifyAttestationApple.test.ts6
-rw-r--r--packages/server/src/registration/verifyRegistrationResponse.test.ts12
-rw-r--r--packages/server/src/registration/verifyRegistrationResponse.ts2
8 files changed, 16 insertions, 24 deletions
diff --git a/packages/server/src/metadata/parseJWT.ts b/packages/server/src/metadata/parseJWT.ts
index 254e14e..72a83dd 100644
--- a/packages/server/src/metadata/parseJWT.ts
+++ b/packages/server/src/metadata/parseJWT.ts
@@ -1,4 +1,4 @@
-import base64url from 'base64url';
+import * as base64url from "../helpers/base64url";
/**
* Process a JWT into Javascript-friendly data structures
@@ -6,8 +6,8 @@ import base64url from 'base64url';
export function parseJWT<T1, T2>(jwt: string): [T1, T2, string] {
const parts = jwt.split('.');
return [
- JSON.parse(base64url.decode(parts[0])) as T1,
- JSON.parse(base64url.decode(parts[1])) as T2,
+ JSON.parse(base64url.toString(parts[0])) as T1,
+ JSON.parse(base64url.toString(parts[1])) as T2,
parts[2],
];
}
diff --git a/packages/server/src/metadata/verifyAttestationWithMetadata.test.ts b/packages/server/src/metadata/verifyAttestationWithMetadata.test.ts
index b48ef2e..228a1b7 100644
--- a/packages/server/src/metadata/verifyAttestationWithMetadata.test.ts
+++ b/packages/server/src/metadata/verifyAttestationWithMetadata.test.ts
@@ -1,7 +1,6 @@
-import base64url from 'base64url';
-
import { verifyAttestationWithMetadata } from './verifyAttestationWithMetadata';
import { MetadataStatement } from '../metadata/mdsTypes';
+import * as base64url from '../helpers/base64url';
test('should verify attestation with metadata (android-safetynet)', async () => {
const metadataStatementJSONSafetyNet: MetadataStatement = {
diff --git a/packages/server/src/registration/verifications/verifyAttestationAndroidKey.test.ts b/packages/server/src/registration/verifications/verifyAttestationAndroidKey.test.ts
index f7cdd4f..7e9ce37 100644
--- a/packages/server/src/registration/verifications/verifyAttestationAndroidKey.test.ts
+++ b/packages/server/src/registration/verifications/verifyAttestationAndroidKey.test.ts
@@ -1,6 +1,5 @@
-import base64url from 'base64url';
-
import { SettingsService } from '../../services/settingsService';
+import * as base64url from '../../helpers/base64url';
import { verifyRegistrationResponse } from '../verifyRegistrationResponse';
@@ -12,7 +11,7 @@ SettingsService.setRootCertificates({ identifier: 'android-key', certificates: [
test('should verify Android KeyStore response', async () => {
const expectedChallenge = '4ab7dfd1-a695-4777-985f-ad2993828e99';
- jest.spyOn(base64url, 'encode').mockReturnValueOnce(expectedChallenge);
+ jest.spyOn(base64url, 'fromString').mockReturnValueOnce(expectedChallenge);
const verification = await verifyRegistrationResponse({
credential: {
id: 'V51GE29tGbhby7sbg1cZ_qL8V8njqEsXpAnwQBobvgw',
diff --git a/packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.test.ts b/packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.test.ts
index 16f5bae..51b0f22 100644
--- a/packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.test.ts
+++ b/packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.test.ts
@@ -1,5 +1,3 @@
-import base64url from 'base64url';
-
import { verifyAttestationAndroidSafetyNet } from './verifyAttestationAndroidSafetyNet';
import {
@@ -8,6 +6,7 @@ import {
} from '../../helpers/decodeAttestationObject';
import { parseAuthenticatorData } from '../../helpers/parseAuthenticatorData';
import { toHash } from '../../helpers/toHash';
+import * as base64url from '../../helpers/base64url';
import { SettingsService } from '../../services/settingsService';
const rootCertificates = SettingsService.getRootCertificates({
diff --git a/packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.ts b/packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.ts
index e40028b..c32ca5e 100644
--- a/packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.ts
+++ b/packages/server/src/registration/verifications/verifyAttestationAndroidSafetyNet.ts
@@ -1,5 +1,3 @@
-import base64url from 'base64url';
-
import type { AttestationFormatVerifierOpts } from '../verifyRegistrationResponse';
import { toHash } from '../../helpers/toHash';
@@ -8,6 +6,7 @@ import { getCertificateInfo } from '../../helpers/getCertificateInfo';
import { validateCertificatePath } from '../../helpers/validateCertificatePath';
import { convertCertBufferToPEM } from '../../helpers/convertCertBufferToPEM';
import * as uint8Array from '../../helpers/uint8Array';
+import * as base64url from '../../helpers/base64url';
import { MetadataService } from '../../services/metadataService';
import { verifyAttestationWithMetadata } from '../../metadata/verifyAttestationWithMetadata';
diff --git a/packages/server/src/registration/verifications/verifyAttestationApple.test.ts b/packages/server/src/registration/verifications/verifyAttestationApple.test.ts
index c2d4a49..6d2e0e8 100644
--- a/packages/server/src/registration/verifications/verifyAttestationApple.test.ts
+++ b/packages/server/src/registration/verifications/verifyAttestationApple.test.ts
@@ -1,10 +1,6 @@
-import base64url from 'base64url';
-
import { verifyRegistrationResponse } from '../verifyRegistrationResponse';
test('should verify Apple attestation', async () => {
- const expectedChallenge = 'h5xSyIRMx2IQPr1mQk6GD98XSQOBHgMHVpJIkMV9Nkc';
- jest.spyOn(base64url, 'encode').mockReturnValueOnce(expectedChallenge);
const verification = await verifyRegistrationResponse({
credential: {
id: 'J4lAqPXhefDrUD7oh5LQMbBH5TE',
@@ -18,7 +14,7 @@ test('should verify Apple attestation', async () => {
type: 'public-key',
clientExtensionResults: {},
},
- expectedChallenge,
+ expectedChallenge: 'h5xSyIRMx2IQPr1mQk6GD98XSQOBHgMHVpJIkMV9Nkc',
expectedOrigin: 'https://dev.dontneeda.pw',
expectedRPID: 'dev.dontneeda.pw',
});
diff --git a/packages/server/src/registration/verifyRegistrationResponse.test.ts b/packages/server/src/registration/verifyRegistrationResponse.test.ts
index 21562bf..b04853a 100644
--- a/packages/server/src/registration/verifyRegistrationResponse.test.ts
+++ b/packages/server/src/registration/verifyRegistrationResponse.test.ts
@@ -1,4 +1,3 @@
-import base64url from 'base64url';
import { verifyRegistrationResponse } from './verifyRegistrationResponse';
@@ -6,6 +5,7 @@ import * as esmDecodeAttestationObject from '../helpers/decodeAttestationObject'
import * as esmDecodeClientDataJSON from '../helpers/decodeClientDataJSON';
import * as esmParseAuthenticatorData from '../helpers/parseAuthenticatorData';
import * as esmDecodeCredentialPublicKey from '../helpers/decodeCredentialPublicKey';
+import * as base64url from '../helpers/base64url';
import { SettingsService } from '../services/settingsService';
import * as esmVerifyAttestationFIDOU2F from './verifications/verifyAttestationFIDOU2F';
@@ -546,7 +546,7 @@ test('should pass verification if custom challenge verifier returns true', async
},
expectedChallenge: (challenge: string) => {
const parsedChallenge: { actualChallenge: string; arbitraryData: string } = JSON.parse(
- base64url.decode(challenge),
+ base64url.toString(challenge),
);
return parsedChallenge.actualChallenge === 'xRsYdCQv5WZOqmxReiZl6C9q5SfrZne4lNSr9QVtPig';
},
@@ -635,7 +635,7 @@ const attestationFIDOU2F: RegistrationCredentialJSON = {
clientExtensionResults: {},
type: 'public-key',
};
-const attestationFIDOU2FChallenge = base64url.encode('totallyUniqueValueEveryAttestation');
+const attestationFIDOU2FChallenge = base64url.fromString('totallyUniqueValueEveryAttestation');
const attestationPacked: RegistrationCredentialJSON = {
id: 'bbb',
@@ -656,7 +656,7 @@ const attestationPacked: RegistrationCredentialJSON = {
clientExtensionResults: {},
type: 'public-key',
};
-const attestationPackedChallenge = base64url.encode('s6PIbBnPPnrGNSBxNdtDrT7UrVYJK9HM');
+const attestationPackedChallenge = base64url.fromString('s6PIbBnPPnrGNSBxNdtDrT7UrVYJK9HM');
const attestationPackedX5C: RegistrationCredentialJSON = {
// TODO: Grab these from another iPhone attestation
@@ -687,7 +687,7 @@ const attestationPackedX5C: RegistrationCredentialJSON = {
clientExtensionResults: {},
type: 'public-key',
};
-const attestationPackedX5CChallenge = base64url.encode('totallyUniqueValueEveryTime');
+const attestationPackedX5CChallenge = base64url.fromString('totallyUniqueValueEveryTime');
const attestationNone: RegistrationCredentialJSON = {
id: 'AdKXJEch1aV5Wo7bj7qLHskVY4OoNaj9qu8TPdJ7kSAgUeRxWNngXlcNIGt4gexZGKVGcqZpqqWordXb_he1izY',
@@ -706,4 +706,4 @@ const attestationNone: RegistrationCredentialJSON = {
clientExtensionResults: {},
type: 'public-key',
};
-const attestationNoneChallenge = base64url.encode('hEccPWuziP00H0p5gxh2_u5_PC4NeYgd');
+const attestationNoneChallenge = base64url.fromString('hEccPWuziP00H0p5gxh2_u5_PC4NeYgd');
diff --git a/packages/server/src/registration/verifyRegistrationResponse.ts b/packages/server/src/registration/verifyRegistrationResponse.ts
index 1711108..c8a4e21 100644
--- a/packages/server/src/registration/verifyRegistrationResponse.ts
+++ b/packages/server/src/registration/verifyRegistrationResponse.ts
@@ -1,4 +1,3 @@
-import base64url from 'base64url';
import {
RegistrationCredentialJSON,
COSEAlgorithmIdentifier,
@@ -19,6 +18,7 @@ import { COSEKEYS } from '../helpers/convertCOSEtoPKCS';
import { convertAAGUIDToString } from '../helpers/convertAAGUIDToString';
import { parseBackupFlags } from '../helpers/parseBackupFlags';
import * as uint8Array from '../helpers/uint8Array';
+import * as base64url from '../helpers/base64url';
import { SettingsService } from '../services/settingsService';
import { supportedCOSEAlgorithmIdentifiers } from './generateRegistrationOptions';