Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/askar/src/kms/AskarKeyManagementService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,7 @@ export class AskarKeyManagementService implements Kms.KeyManagementService {
private async getKeyAsserted(agentContext: AgentContext, keyId: string) {
const storageKey = await this.fetchAskarKey(agentContext, keyId)
if (!storageKey) {
throw new Kms.KeyManagementKeyNotFoundError(keyId, this.backend)
throw new Kms.KeyManagementKeyNotFoundError(keyId, [this.backend])
}

return storageKey
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ describe('AskarKeyManagementService', () => {
algorithm: 'RS256',
data: new Uint8Array([1, 2, 3]),
})
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', service.backend))
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', [service.backend]))
})

it('signs with ES256', async () => {
Expand Down Expand Up @@ -421,7 +421,7 @@ describe('AskarKeyManagementService', () => {
data: new Uint8Array([1, 2, 3]),
signature: new Uint8Array([1, 2, 3]),
})
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', service.backend))
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', [service.backend]))
})

it('verifies ES256 signature', async () => {
Expand Down Expand Up @@ -971,7 +971,7 @@ describe('AskarKeyManagementService', () => {
algorithm: 'ES256',
data: new Uint8Array([1, 2, 3]),
})
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError(keyId, service.backend))
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError(keyId, [service.backend]))
})
})

Expand All @@ -995,7 +995,7 @@ describe('AskarKeyManagementService', () => {
},
data: new Uint8Array([1, 2, 3]),
})
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', service.backend))
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', [service.backend]))
})

it('throws error for unsupported ECDH-EH+A192KW key agreement', async () => {
Expand Down Expand Up @@ -1130,7 +1130,7 @@ describe('AskarKeyManagementService', () => {
},
encrypted: new Uint8Array([1, 2, 3]),
})
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', service.backend))
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', [service.backend]))
})

it('throws error for unsupported ECDH-EH+A192KW key agreement', async () => {
Expand Down
13 changes: 9 additions & 4 deletions packages/core/src/modules/kms/KeyManagementApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ export class KeyManagementApi {
const publicKey = await kms.getPublicKey(this.agentContext, keyId)

if (!publicKey) {
throw new KeyManagementKeyNotFoundError(keyId, backend)
throw new KeyManagementKeyNotFoundError(keyId, [backend])
}
}

Expand Down Expand Up @@ -317,12 +317,17 @@ export class KeyManagementApi {
}

if (operation) {
throw new KeyManagementError(
`No key management service supports ${getKmsOperationHumanDescription(operation)} that has a key with keyId '${keyId}'`
throw new KeyManagementKeyNotFoundError(
keyId,
this.keyManagementConfig.backends.map((b) => b.backend),
`The key may exist in one of the key management services in which case the key management service does not support the ${getKmsOperationHumanDescription(operation)}`
)
}

throw new KeyManagementError(`No key management service has a key with keyId '${keyId}'`)
throw new KeyManagementKeyNotFoundError(
keyId,
this.keyManagementConfig.backends.map((b) => b.backend)
)
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import { KeyManagementError } from './KeyManagementError'

export class KeyManagementKeyNotFoundError extends KeyManagementError {
public constructor(keyId: string, backend: string) {
super(`Key with key id '${keyId}' not found in backend '${backend}'`)
public constructor(keyId: string, backends: string[], extraMessage?: string) {
const base = `Key with key id '${keyId}' not found in backend`

const withBackends =
backends.length > 1 ? `${base}s ${backends.map((b) => `'${b}'`).join(', ')}` : `${base} '${backends[0]}'`

const withExtraMessage = extraMessage ? `${withBackends}. ${extraMessage}` : withBackends

super(withExtraMessage)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ describe('W3cJsonLdCredentialsService', () => {
'did:key:z6MkvePyWAApUVeDboZhNbckaWHnqtD6pCETd6xoqGbcpEBV#z6MkvePyWAApUVeDboZhNbckaWHnqtD6pCETd6xoqGbcpEBV',
})
}).rejects.toThrow(
`No key management service supports 'sign' operation with algorithm 'EdDSA' that has a key with keyId 'HC8vuuvP8x9kVJizh2eujQjo2JwFQJz6w63szzdbu1Q7`
`Error issuing W3C JSON-LD VC. Key with key id 'HC8vuuvP8x9kVJizh2eujQjo2JwFQJz6w63szzdbu1Q7' not found in backend 'node'. The key may exist in one of the key management services in which case the key management service does not support the 'sign' operation with algorithm 'EdDSA'`
)
})
})
Expand Down
2 changes: 1 addition & 1 deletion packages/node/src/kms/NodeKeyManagementService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ export class NodeKeyManagementService implements Kms.KeyManagementService {
private async getKeyAsserted(agentContext: AgentContext, keyId: string) {
const storageKey = await this.#storage.get(agentContext, keyId)
if (!storageKey) {
throw new Kms.KeyManagementKeyNotFoundError(keyId, this.backend)
throw new Kms.KeyManagementKeyNotFoundError(keyId, [this.backend])
}

return storageKey
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ describe('NodeKeyManagementService', () => {
algorithm: 'RS256',
data: new Uint8Array([1, 2, 3]),
})
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', service.backend))
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', [service.backend]))
})

it('signs with RS256', async () => {
Expand Down Expand Up @@ -598,7 +598,7 @@ describe('NodeKeyManagementService', () => {
data: new Uint8Array([1, 2, 3]),
signature: new Uint8Array([1, 2, 3]),
})
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', service.backend))
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError('nonexistent', [service.backend]))
})

it('verifies RS256 signature', async () => {
Expand Down Expand Up @@ -1894,7 +1894,7 @@ describe('NodeKeyManagementService', () => {
algorithm: 'RS256',
data: new Uint8Array([1, 2, 3]),
})
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError(keyId, service.backend))
).rejects.toThrow(new Kms.KeyManagementKeyNotFoundError(keyId, [service.backend]))
})
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ export class SecureEnvironmentKeyManagementService implements Kms.KeyManagementS
}
} catch (error) {
if (error instanceof secureEnvironment.KeyNotFoundError) {
throw new Kms.KeyManagementKeyNotFoundError(options.keyId, this.backend)
throw new Kms.KeyManagementKeyNotFoundError(options.keyId, [this.backend])
}

throw new Kms.KeyManagementError('Error signing with key', { cause: error })
Expand Down Expand Up @@ -156,7 +156,7 @@ export class SecureEnvironmentKeyManagementService implements Kms.KeyManagementS
return this.publicJwkFromPublicKeyBytes(publicKeyBytes, keyId)
} catch (error) {
if (error instanceof secureEnvironment.KeyNotFoundError) {
throw new Kms.KeyManagementKeyNotFoundError(keyId, this.backend)
throw new Kms.KeyManagementKeyNotFoundError(keyId, [this.backend])
}

throw new Kms.KeyManagementError(`Error retrieving key with id '${keyId}' from backend ${this.backend}`, {
Expand Down