Skip to content

Commit 4e29c46

Browse files
committed
Enable creating did:jwk from key array
1 parent 514340b commit 4e29c46

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

src/Did/DidJwkResolver.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,20 @@ public function extractJwkFromDidJwk(string $didJwk): array
5151
throw new DidException('Error processing did:jwk: ' . $exception->getMessage(), 0, $exception);
5252
}
5353
}
54+
55+
56+
/**
57+
* Generate a did:jwk value from a JWK array.
58+
*
59+
* @param mixed[] $jwk The JWK representation of the key
60+
* @return string The did:jwk value (e.g., did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwidXNlIjoic2lnIiwieCI6IjExLU9fSjZfSzhfbXUyXzVfSzhfbXUyXzVfSzhfbXUyXzUifQ)
61+
* @throws \JsonException If the JWK cannot be encoded to JSON
62+
*/
63+
public function generateDidJwkFromJwk(array $jwk): string
64+
{
65+
$jsonJwk = $this->helpers->json()->encode($jwk);
66+
$encodedJwk = $this->helpers->base64Url()->encode($jsonJwk);
67+
68+
return 'did:jwk:' . $encodedJwk;
69+
}
5470
}

tests/src/Did/DidJwkResolverTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,19 @@ public function testExtractJwkFromDidJwkThrowsExceptionOnInvalidJson(): void
6868
// 'abc' in base64url is 'YWJj'
6969
$this->resolver->extractJwkFromDidJwk('did:jwk:YWJj');
7070
}
71+
72+
73+
public function testGenerateDidJwkFromJwkSucceeds(): void
74+
{
75+
$jwk = [
76+
'kty' => 'OKP',
77+
'crv' => 'Ed25519',
78+
'x' => '11-O_J6_K8_mu2_5_K8_mu2_5_K8_mu2_5',
79+
];
80+
// phpcs:ignore
81+
$expectedDidJwk = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjExLU9fSjZfSzhfbXUyXzVfSzhfbXUyXzVfSzhfbXUyXzUifQ';
82+
83+
$didJwk = $this->resolver->generateDidJwkFromJwk($jwk);
84+
$this->assertSame($expectedDidJwk, $didJwk);
85+
}
7186
}

0 commit comments

Comments
 (0)