Skip to content

Commit 8c3f6d9

Browse files
authored
Merge pull request #734 from 0xsequence/wdk-tee-verifier
Verify nitro attestation on identity-instrument requests
2 parents 6b719f8 + 7fd95d2 commit 8c3f6d9

3 files changed

Lines changed: 75 additions & 3 deletions

File tree

packages/wallet/wdk/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"vitest": "^3.1.2"
2525
},
2626
"dependencies": {
27+
"@0xsequence/tee-verifier": "^0.1.0",
2728
"@0xsequence/wallet-core": "workspace:^",
2829
"@0xsequence/wallet-primitives": "workspace:^",
2930
"idb": "^7.1.1",

packages/wallet/wdk/src/sequence/manager.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Signers as CoreSigners, Relayer, State } from '@0xsequence/wallet-core'
2+
23
import {
34
Attestation,
45
Config,
@@ -10,6 +11,7 @@ import {
1011
SessionConfig,
1112
Signature as SequenceSignature,
1213
} from '@0xsequence/wallet-primitives'
14+
import { createAttestationVerifyingFetch } from '@0xsequence/tee-verifier'
1315
import { Address } from 'ox'
1416
import * as Db from '../dbs/index.js'
1517
import * as Identity from '../identity/index.js'
@@ -63,6 +65,8 @@ export type ManagerOptions = {
6365
identity?: {
6466
url?: string
6567
fetch?: typeof window.fetch
68+
verifyAttestation?: boolean
69+
expectedPcr0?: string[]
6670
email?: {
6771
enabled: boolean
6872
}
@@ -121,6 +125,7 @@ export const ManagerOptionsDefaults = {
121125
// TODO: change to prod url once deployed
122126
url: 'https://dev-identity.sequence-dev.app',
123127
fetch: window.fetch,
128+
verifyAttestation: true,
124129
email: {
125130
enabled: false,
126131
},
@@ -272,12 +277,19 @@ export class Manager {
272277

273278
this.mnemonicHandler = new MnemonicHandler(modules.signatures)
274279
shared.handlers.set(Kinds.LoginMnemonic, this.mnemonicHandler)
275-
280+
276281
this.recoveryHandler = new RecoveryHandler(modules.signatures, modules.recovery)
277282
shared.handlers.set(Kinds.Recovery, this.recoveryHandler)
278283

279-
// TODO: configurable nitro rpc
280-
const nitro = new Identity.IdentityInstrument(ops.identity.url, ops.identity.fetch)
284+
const verifyingFetch = ops.identity.verifyAttestation
285+
? createAttestationVerifyingFetch({
286+
fetch: ops.identity.fetch,
287+
expectedPCRs: ops.identity.expectedPcr0 ? new Map([[0, ops.identity.expectedPcr0]]) : undefined,
288+
logTiming: true,
289+
})
290+
: ops.identity.fetch
291+
const nitro = new Identity.IdentityInstrument(ops.identity.url, verifyingFetch)
292+
281293
if (ops.identity.email?.enabled) {
282294
this.otpHandler = new OtpHandler(nitro, modules.signatures, shared.databases.authKeys)
283295
shared.handlers.set(Kinds.LoginEmailOtp, this.otpHandler)

pnpm-lock.yaml

Lines changed: 59 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)