Skip to content

Commit b3dedb7

Browse files
Support logo URI in OID4VC metadata + update README
Signed-off-by: Alexander Shenshin <alexander.shenshin@dsr-corporation.com>
1 parent 70bfef3 commit b3dedb7

4 files changed

Lines changed: 23 additions & 9 deletions

File tree

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
The **Heka Identity Platform** is a ready-to-use decentralized identity (aka Self-Sovereign Identity or SSI) solution for the Hiero ecosystem. The project delivers a complete set of applications and tools that enable issuance, management, and verification of verifiable credentials using global identity standards, while serving as a baseline reference implementation for Hiero / Hedera-based identity solutions.
99

10-
The Heka Identity Platform is intended to accelerate adoption of decentralized identity within the Hiero ecosystem and provide a practical, standards-aligned example for developers, integrators, and community members.
10+
The Heka Identity Platform is intended to speed up adoption of decentralized identity within the Hiero ecosystem and provide a practical, standards-aligned example for developers, integrators, and community members.
1111

1212
## Core Components
1313

@@ -26,6 +26,12 @@ The platform supports a wide range of global decentralized identity standards, i
2626
- **Credential Formats**: W3C Verifiable Credentials, SD-JWT VC, ISO mDL, Hyperledger AnonCreds
2727
- **DID Methods**: Multiple DID methods, including Hiero / Hedera-based DIDs
2828

29+
## Demos
30+
31+
Please see the [demo folder](./demo) to explore demos showcasing various decentralized identity use cases implemented with Heka Identity Platform.
32+
33+
- [Agent-to-Agent (A2A) + OID4VP integration](./demo/a2a-oid4vp): A demo showcasing OID4VP-based authentication for AI agents leveraging Agent2Agent (A2A) protocol
34+
2935
## Governance
3036

3137
The Heka Identity Platform operates under the governance of the **Hiero Technical Steering Committee (TSC)**, in alignment with existing Hiero project policies.

demo/a2a-oid4vp/README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
# Agent-to-Agent (A2A) + OID4V integration demo
1+
# Agent-to-Agent (A2A) + OID4VP integration demo
22

33
This demo is built around one of the relevant use cases for Agentic AI identity – VC-based authentication for interaction with Agents.
44
It leverages [Agent-to-Agent (A2A)](https://a2a-protocol.org/latest/specification/) and [OpenID for Verifiable Presentations](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html) protocols, specifically demonstrating how to use OID4VP for A2A Task Authentication by implementing [OID4VP In-Task Authentication extension for A2A](https://github.com/DSRCorporation/a2a-oid4vp-in-task-auth-extension/blob/main/v1/spec.md).
55

66
The demo is built using [Genkit](https://genkit.dev/) with the OpenAI API.
77
Heka Identity Platform is used as a decentralized identity wallet / agent providing support for OID4VP (for both Holder and Verifier parties).
88

9-
This is a demo code not intended for production-quality usage.
10-
119
## Scenario and Demo Flow
1210

1311
This demo showcases how an AI agent can request additional authentication from a user using the **OID4VP** protocol and how Heka Identity Platform enables such capabilities.

heka-wallet/app/src/credentials/mappers/credential-display.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
CredentialOverlay,
1212
RemoteOCABundleResolver,
1313
} from '@hyperledger/aries-oca/build/legacy'
14+
import { ImageInfo } from '@sphereon/oid4vci-common'
1415

1516
import { agencyProviderURL, fallbackDisplay } from '../../config'
1617
import { OpenId4VcCredentialMetadata } from '../metadata'
@@ -46,7 +47,7 @@ export function getSdJwtCredentialDisplay(
4647

4748
if (openidCredentialDisplay.logo) {
4849
credentialDisplay.logo = {
49-
url: openidCredentialDisplay.logo.url,
50+
url: getImageInfoLogoUrl(openidCredentialDisplay.logo),
5051
altText: openidCredentialDisplay.logo.alt_text,
5152
}
5253
}
@@ -108,7 +109,7 @@ export function getW3cCredentialDisplay(
108109

109110
if (openidCredentialDisplay.logo) {
110111
credentialDisplay.logo = {
111-
url: openidCredentialDisplay.logo.url,
112+
url: getImageInfoLogoUrl(openidCredentialDisplay.logo),
112113
altText: openidCredentialDisplay.logo.alt_text,
113114
}
114115
}
@@ -196,7 +197,7 @@ export function getMdocCredentialDisplay(
196197

197198
if (openidCredentialDisplay.background_image) {
198199
credentialDisplay.backgroundImage = {
199-
url: openidCredentialDisplay.background_image.url,
200+
url: getImageInfoLogoUrl(openidCredentialDisplay.background_image),
200201
altText: openidCredentialDisplay.background_image.alt_text,
201202
}
202203
}
@@ -344,6 +345,10 @@ function findDisplay<Display extends { locale?: string }>(display?: Display[]):
344345
return item
345346
}
346347

348+
function getImageInfoLogoUrl(logo: ImageInfo): string | undefined {
349+
return logo.url ?? (logo.uri as string | undefined)
350+
}
351+
347352
function getW3cIssuerDisplay(
348353
credential: W3cCredentialJson,
349354
openId4VcMetadata?: OpenId4VcCredentialMetadata | null
@@ -398,7 +403,7 @@ export function getOpenId4VcIssuerDisplay(
398403

399404
if (openidIssuerDisplay.logo) {
400405
issuerDisplay.logo = {
401-
url: openidIssuerDisplay.logo?.url,
406+
url: getImageInfoLogoUrl(openidIssuerDisplay.logo),
402407
altText: openidIssuerDisplay.logo?.alt_text,
403408
}
404409
}
@@ -408,7 +413,7 @@ export function getOpenId4VcIssuerDisplay(
408413
const openidCredentialDisplay = findDisplay(openId4VcMetadata.credential.display)
409414
if (openidCredentialDisplay && !issuerDisplay.logo && openidCredentialDisplay.logo) {
410415
issuerDisplay.logo = {
411-
url: openidCredentialDisplay.logo?.url,
416+
url: getImageInfoLogoUrl(openidCredentialDisplay.logo),
412417
altText: openidCredentialDisplay.logo?.alt_text,
413418
}
414419
}

heka-wallet/app/src/credentials/useOpenIdHandlers.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,11 @@ export const useOpenIdHandlers = () => {
254254
display: resolvedCredentialOffer.metadata.credentialIssuerMetadata.display,
255255
})
256256

257+
agent.config.logger.info('Resolved openid issuer metadata', {
258+
display: resolvedCredentialOffer.metadata.credentialIssuerMetadata?.display,
259+
issuerId: openId4VcMetadata.issuer.id,
260+
})
261+
257262
setOpenId4VcCredentialMetadata(record, openId4VcMetadata)
258263

259264
return record

0 commit comments

Comments
 (0)