Skip to content

Commit

Permalink
fix(daf-did-jwt): Fix verification of EdDSA JWTs (#289)
Browse files Browse the repository at this point in the history
fixes #288
  • Loading branch information
mirceanis authored Dec 8, 2020
1 parent 543615f commit b97f2a3
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 23 deletions.
2 changes: 1 addition & 1 deletion packages/daf-did-jwt/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"daf-core": "^7.0.0-beta.54",
"daf-message-handler": "^7.0.0-beta.54",
"debug": "^4.1.1",
"did-jwt": "4.5.0",
"did-jwt": "4.7.1",
"did-resolver": "2.1.1"
},
"devDependencies": {
Expand Down
73 changes: 73 additions & 0 deletions packages/daf-did-jwt/src/__tests__/didkey.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { DIDDocument } from 'daf-core'
import { Message } from 'daf-message-handler'
import { JwtMessageHandler, IContext } from '../message-handler'

describe('daf-did-jwt', () => {
const vcJwt =
'eyJhbGciOiJFZERTQSJ9.eyJleHAiOjE3NjQ4Nzg5MDgsImlzcyI6ImRpZDprZXk6ejZNa29USHNnTk5yYnk4SnpDTlExaVJMeVc1UVE2UjhYdXU2QUE4aWdHck1WUFVNIiwibmJmIjoxNjA3MTEyNTA4LCJzdWIiOiJkaWQ6a2V5Ono2TWtvVEhzZ05OcmJ5OEp6Q05RMWlSTHlXNVFRNlI4WHV1NkFBOGlnR3JNVlBVTSIsInZjIjp7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIiwiaHR0cHM6Ly9pZGVudGl0eS5mb3VuZGF0aW9uLy53ZWxsLWtub3duL2RpZC1jb25maWd1cmF0aW9uL3YxIl0sImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rb1RIc2dOTnJieThKekNOUTFpUkx5VzVRUTZSOFh1dTZBQThpZ0dyTVZQVU0iLCJvcmlnaW4iOiJpZGVudGl0eS5mb3VuZGF0aW9uIn0sImV4cGlyYXRpb25EYXRlIjoiMjAyNS0xMi0wNFQxNDowODoyOC0wNjowMCIsImlzc3VhbmNlRGF0ZSI6IjIwMjAtMTItMDRUMTQ6MDg6MjgtMDY6MDAiLCJpc3N1ZXIiOiJkaWQ6a2V5Ono2TWtvVEhzZ05OcmJ5OEp6Q05RMWlSTHlXNVFRNlI4WHV1NkFBOGlnR3JNVlBVTSIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJEb21haW5MaW5rYWdlQ3JlZGVudGlhbCJdfX0.6ovgQ-T_rmYueviySqXhzMzgqJMAizOGUKAObQr2iikoRNsb8DHfna4rh1puwWqYwgT3QJVpzdO_xZARAYM9Dw'

const context: IContext = {
agent: {
getSchema: jest.fn(),
execute: jest.fn(),
availableMethods: jest.fn(),
emit: jest.fn(),
resolveDid: async (args?): Promise<DIDDocument> => {
if (!args?.didUrl) throw Error('DID required')

return {
'@context': 'https://w3id.org/did/v1',
id: 'did:key:z6MkoTHsgNNrby8JzCNQ1iRLyW5QQ6R8Xuu6AA8igGrMVPUM',
publicKey: [
{
id:
'did:key:z6MkoTHsgNNrby8JzCNQ1iRLyW5QQ6R8Xuu6AA8igGrMVPUM#z6MkoTHsgNNrby8JzCNQ1iRLyW5QQ6R8Xuu6AA8igGrMVPUM',
type: 'Ed25519VerificationKey2018',
controller: 'did:key:z6MkoTHsgNNrby8JzCNQ1iRLyW5QQ6R8Xuu6AA8igGrMVPUM',
publicKeyBase58: 'A12q688RGRdqshXhL9TW8QXQaX9H82ejU9DnqztLaAgy',
},
],
}
},
},
}

it('should handle EdDsa jwt', async () => {
const mockNextHandler = {
setNext: jest.fn(),
handle: jest.fn().mockResolvedValue(true),
}
const handler = new JwtMessageHandler()
handler.setNext(mockNextHandler)

const message = new Message({ raw: vcJwt, metaData: [{ type: 'test' }] })
await handler.handle(message, context)
expect(mockNextHandler.handle).toBeCalledWith(
expect.objectContaining({
raw: vcJwt,
data: {
exp: 1764878908,
iss: 'did:key:z6MkoTHsgNNrby8JzCNQ1iRLyW5QQ6R8Xuu6AA8igGrMVPUM',
nbf: 1607112508,
sub: 'did:key:z6MkoTHsgNNrby8JzCNQ1iRLyW5QQ6R8Xuu6AA8igGrMVPUM',
vc: {
'@context': [
'https://www.w3.org/2018/credentials/v1',
'https://identity.foundation/.well-known/did-configuration/v1',
],
credentialSubject: {
id: 'did:key:z6MkoTHsgNNrby8JzCNQ1iRLyW5QQ6R8Xuu6AA8igGrMVPUM',
origin: 'identity.foundation',
},
expirationDate: '2025-12-04T14:08:28-06:00',
issuanceDate: '2020-12-04T14:08:28-06:00',
issuer: 'did:key:z6MkoTHsgNNrby8JzCNQ1iRLyW5QQ6R8Xuu6AA8igGrMVPUM',
type: ['VerifiableCredential', 'DomainLinkageCredential'],
},
},
metaData: [{ type: 'test' }, { type: undefined, value: 'EdDSA' }],
}),
context,
)
})
})
2 changes: 1 addition & 1 deletion packages/daf-libsodium/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"daf-core": "^7.0.0-beta.54",
"daf-key-manager": "^7.0.0-beta.54",
"debug": "^4.1.1",
"did-jwt": "4.5.0",
"did-jwt": "4.7.1",
"elliptic": "^6.5.2",
"ethjs-signer": "^0.1.1",
"libsodium-wrappers": "^0.7.6"
Expand Down
2 changes: 1 addition & 1 deletion packages/daf-react-native-libsodium/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"daf-core": "^7.0.0-beta.54",
"daf-key-manager": "^7.0.0-beta.54",
"debug": "^4.1.1",
"did-jwt": "4.5.0",
"did-jwt": "4.7.1",
"elliptic": "^6.5.2",
"ethjs-signer": "^0.1.1"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/daf-selective-disclosure/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"daf-typeorm": "^7.0.0-beta.54",
"daf-w3c": "^7.0.0-beta.54",
"debug": "^4.1.1",
"did-jwt": "4.5.0"
"did-jwt": "4.7.1"
},
"devDependencies": {
"@types/debug": "^4.1.5",
Expand Down
32 changes: 13 additions & 19 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6014,20 +6014,21 @@ did-jwt-vc@^1.0.3:
dependencies:
did-jwt "^4.4.2"

did-jwt@4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/did-jwt/-/did-jwt-4.5.0.tgz#9dfb1490d0c497cb86b5a1ee601b7d072e77a948"
integrity sha512-5duVhz8d9Af9ZoBYEGGfaGdM1RM2VDawbjs6FUg8gjNCfkKd9R6RNYdAma/pZAuHY1lGXnFQBKzBZhib0y5Y3g==
did-jwt@4.7.1:
version "4.7.1"
resolved "https://registry.yarnpkg.com/did-jwt/-/did-jwt-4.7.1.tgz#f340e4087a29385e08f1e750f88d746d4005ddd1"
integrity sha512-fQnNhQKmbNOiYIPEXxJMrSw5rLAiIsfJ6I9DX28ftsSxBDiMo7MARIzAn2V79/Bf/gI9UxIWrsyxLtuj6hd2kw==
dependencies:
"@babel/runtime" "^7.11.2"
"@stablelib/utf8" "^1.0.0"
buffer "^5.6.0"
did-resolver "^2.1.0"
"@stablelib/ed25519" "^1.0.1"
"@stablelib/random" "^1.0.0"
"@stablelib/sha256" "^1.0.0"
"@stablelib/x25519" "^1.0.0"
"@stablelib/xchacha20poly1305" "^1.0.0"
did-resolver "^2.1.1"
elliptic "^6.5.3"
js-sha256 "^0.9.0"
js-sha3 "^0.8.0"
tweetnacl "^1.0.3"
uport-base64url "3.0.2-alpha.0"
uint8arrays "^1.1.0"

did-jwt@^0.1.1:
version "0.1.3"
Expand Down Expand Up @@ -6066,7 +6067,7 @@ [email protected], did-resolver@^0.0.6:
resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-0.0.6.tgz#2d4638b8914871c19945fb3243f6f298c1cca9db"
integrity sha512-PqxzaoomTbJG3IzEouUGgppu3xrsbGKHS75zS3vS/Hfm56XxLpwIe7yFLokgXUbMWmLa0dczFHOibmebO4wRLA==

[email protected], did-resolver@^2.1.0, did-resolver@^2.1.1:
[email protected], did-resolver@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-2.1.1.tgz#43796f8a3e921644e5fb15a8147684ca87019cfd"
integrity sha512-FYLTkNWofjYNDGV1HTQlyVu1OqZiFxR4I8KM+oxGVOkbXva15NfWzbzciqdXUDqOhe6so5aroAdrVip6gSAYSA==
Expand Down Expand Up @@ -16641,7 +16642,7 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=

tweetnacl@^1.0.0, tweetnacl@^1.0.1, tweetnacl@^1.0.3:
tweetnacl@^1.0.0, tweetnacl@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
Expand Down Expand Up @@ -16933,13 +16934,6 @@ update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0:
semver-diff "^2.0.0"
xdg-basedir "^3.0.0"

[email protected]:
version "3.0.2-alpha.0"
resolved "https://registry.yarnpkg.com/uport-base64url/-/uport-base64url-3.0.2-alpha.0.tgz#8d921eb512af1e8dc97ac2fd0d37863df6549843"
integrity sha512-pRu0xm1K39IUzuMQEmFWdqP+H8jOzblwTXf0r9wFBCa6ZLLQsNuDeUwB2Ld+9zlBSvQQv+XEzG7cQukSCueZqw==
dependencies:
buffer "^5.2.1"

uri-js@^4.2.2:
version "4.4.0"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602"
Expand Down

0 comments on commit b97f2a3

Please sign in to comment.