Skip to content

Commit

Permalink
doc: add examples of json serialization
Browse files Browse the repository at this point in the history
Signed-off-by: Lukas.J.Han <[email protected]>
  • Loading branch information
lukasjhan committed Nov 11, 2024
1 parent 56a0ef8 commit 116326d
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 1 deletion.
57 changes: 57 additions & 0 deletions examples/sd-jwt-example/flattenJSON.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { FlattenJSON, SDJwtInstance } from '@sd-jwt/core';
import type { DisclosureFrame } from '@sd-jwt/types';
import { createSignerVerifier, digest, generateSalt, ES256 } from './utils';

(async () => {
const { signer, verifier } = await createSignerVerifier();

// Create SDJwt instance for use
const sdjwt = new SDJwtInstance({
signer,
signAlg: ES256.alg,
verifier,
hasher: digest,
saltGenerator: generateSalt,
kbSigner: signer,
kbSignAlg: ES256.alg,
kbVerifier: verifier,
});
const claims = {
firstname: 'John',
lastname: 'Doe',
ssn: '123-45-6789',
id: '1234',
};
const disclosureFrame: DisclosureFrame<typeof claims> = {
_sd: ['firstname', 'id'],
};

const kbPayload = {
iat: Math.floor(Date.now() / 1000),
aud: 'https://example.com',
nonce: '1234',
custom: 'data',
};

const encodedSdjwt = await sdjwt.issue(claims, disclosureFrame);
console.log('encodedSdjwt:', encodedSdjwt);

const flattenJSON = FlattenJSON.fromEncode(encodedSdjwt);
console.log('flattenJSON(credential): ', flattenJSON.toJson());

const presentedSdJwt = await sdjwt.present<typeof claims>(
encodedSdjwt,
{ id: true },
{
kb: {
payload: kbPayload,
},
},
);

const flattenPresentationJSON = FlattenJSON.fromEncode(presentedSdJwt);
console.log('flattenJSON(presentation): ', flattenPresentationJSON.toJson());

const verified = await sdjwt.verify(presentedSdJwt, ['id', 'ssn'], true);
console.log(verified);
})();
71 changes: 71 additions & 0 deletions examples/sd-jwt-example/generalJSON.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { GeneralJSON, SDJwtInstance } from '@sd-jwt/core';
import type { DisclosureFrame } from '@sd-jwt/types';
import { createSignerVerifier, digest, generateSalt, ES256 } from './utils';

(async () => {
const { signer, verifier } = await createSignerVerifier();

// Create SDJwt instance for use
const sdjwt = new SDJwtInstance({
signer,
signAlg: ES256.alg,
verifier,
hasher: digest,
saltGenerator: generateSalt,
kbSigner: signer,
kbSignAlg: ES256.alg,
kbVerifier: verifier,
});
const claims = {
firstname: 'John',
lastname: 'Doe',
ssn: '123-45-6789',
id: '1234',
};
const disclosureFrame: DisclosureFrame<typeof claims> = {
_sd: ['firstname', 'id'],
};

const kbPayload = {
iat: Math.floor(Date.now() / 1000),
aud: 'https://example.com',
nonce: '1234',
custom: 'data',
};

const encodedSdjwt = await sdjwt.issue(claims, disclosureFrame);
console.log('encodedSdjwt:', encodedSdjwt);

const generalJSON = GeneralJSON.fromEncode(encodedSdjwt);
console.log('flattenJSON(credential): ', generalJSON.toJson());

const presentedSdJwt = await sdjwt.present<typeof claims>(
encodedSdjwt,
{ id: true },
{
kb: {
payload: kbPayload,
},
},
);

const generalPresentationJSON = GeneralJSON.fromEncode(presentedSdJwt);

await generalPresentationJSON.addSignature(
{
alg: 'ES256',
typ: 'sd+jwt',
kid: 'key-1',
},
signer,
'key-1',
);

console.log(
'flattenJSON(presentation): ',
JSON.stringify(generalPresentationJSON.toJson(), null, 2),
);

const verified = await sdjwt.verify(presentedSdJwt, ['id', 'ssn'], true);
console.log(verified);
})();
4 changes: 3 additions & 1 deletion examples/sd-jwt-example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
"decoy": "ts-node decoy.ts",
"custom_header": "ts-node custom_header.ts",
"kb": "ts-node kb.ts",
"decode": "ts-node decode.ts"
"decode": "ts-node decode.ts",
"flattenJSON": "ts-node flattenJSON.ts",
"generalJSON": "ts-node generalJSON.ts"
},
"keywords": [],
"author": "",
Expand Down

0 comments on commit 116326d

Please sign in to comment.