diff --git a/packages/pq-jws/scripts/generate-test-jws-fixtures.ts b/packages/pq-jws/scripts/generate-test-jws-fixtures.ts new file mode 100644 index 0000000..854b3cd --- /dev/null +++ b/packages/pq-jws/scripts/generate-test-jws-fixtures.ts @@ -0,0 +1,152 @@ +import { createHash } from 'node:crypto'; +import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import { dirname, resolve } from 'node:path'; + +type InvalidVariantFixture = { + id: string; + compact: string; + expectedFailure: 'signature_mismatch' | 'format_error'; +}; + +type ValidFixture = { + id: string; + algorithm: string; + protectedHeader: Record; + payload: Record; + compact: string; + signingInput: string; + encodedProtectedHeader: string; + encodedPayload: string; + signatureBase64Url: string; + verificationMaterial: { + publicKeyPem: string; + publicKeyDerBase64: string; + provider: string; + }; + invalidVariants: InvalidVariantFixture[]; +}; + +type FixtureTemplate = { + metadata: { + generatedAt: string; + source: { + backend: string; + image: string; + commandSet: string[]; + deterministicControls: { + canonicalFixtureOrdering: boolean; + seedMode: string; + note: string; + }; + }; + }; + fixtures: ValidFixture[]; +}; + +type FixtureManifest = { + schemaVersion: 1; + generatedBy: string; + fixtureFile: string; + fixtureSha256: string; + fixtureCount: number; + invalidVariantCount: number; + generationModel: string; + deterministicControls: { + canonicalFixtureOrdering: boolean; + seedMode: string; + note: string; + }; + source: { + backend: string; + image: string; + commandSet: string[]; + capturedAt: string; + }; +}; + +const scriptDir = dirname(new URL(import.meta.url).pathname); +const sourcePath = resolve(scriptDir, 'test-jws-source-fixtures.json'); +const outputDir = resolve(scriptDir, '../test-data/test-jws'); +const outputFixturePath = resolve(outputDir, 'fixtures.json'); +const outputManifestPath = resolve(outputDir, 'manifest.json'); + +function stableSortFixtures(fixtures: ValidFixture[]): ValidFixture[] { + return fixtures + .map((fixture) => ({ + ...fixture, + invalidVariants: [...fixture.invalidVariants].sort((a, b) => a.id.localeCompare(b.id)), + })) + .sort((a, b) => a.id.localeCompare(b.id)); +} + +function renderFixtureJson(template: FixtureTemplate): string { + const sortedTemplate: FixtureTemplate = { + ...template, + fixtures: stableSortFixtures(template.fixtures), + }; + return `${JSON.stringify(sortedTemplate, null, 2)}\n`; +} + +function createManifest(template: FixtureTemplate, fixtureSha256: string): FixtureManifest { + const fixtureCount = template.fixtures.length; + const invalidVariantCount = template.fixtures.reduce( + (count, fixture) => count + fixture.invalidVariants.length, + 0, + ); + + return { + schemaVersion: 1, + generatedBy: 'packages/pq-jws/scripts/generate-test-jws-fixtures.ts', + fixtureFile: 'fixtures.json', + fixtureSha256, + fixtureCount, + invalidVariantCount, + generationModel: 'template-replay', + deterministicControls: { + canonicalFixtureOrdering: template.metadata.source.deterministicControls.canonicalFixtureOrdering, + seedMode: template.metadata.source.deterministicControls.seedMode, + note: template.metadata.source.deterministicControls.note, + }, + source: { + backend: template.metadata.source.backend, + image: template.metadata.source.image, + commandSet: template.metadata.source.commandSet, + capturedAt: template.metadata.generatedAt, + }, + }; +} + +function sha256(input: string): string { + return createHash('sha256').update(input, 'utf8').digest('hex'); +} + +function run(checkOnly: boolean): void { + const template = JSON.parse(readFileSync(sourcePath, 'utf8')) as FixtureTemplate; + const fixtureJson = renderFixtureJson(template); + const fixtureSha256 = sha256(fixtureJson); + const manifestJson = `${JSON.stringify(createManifest(template, fixtureSha256), null, 2)}\n`; + + if (checkOnly) { + const existingFixture = readFileSync(outputFixturePath, 'utf8'); + const existingManifest = readFileSync(outputManifestPath, 'utf8'); + + if (existingFixture !== fixtureJson) { + throw new Error('fixtures.json is out of date. Run fixture generator without --check.'); + } + + if (existingManifest !== manifestJson) { + throw new Error('manifest.json is out of date. Run fixture generator without --check.'); + } + + console.log('Fixtures are up to date.'); + return; + } + + mkdirSync(outputDir, { recursive: true }); + writeFileSync(outputFixturePath, fixtureJson); + writeFileSync(outputManifestPath, manifestJson); + console.log(`Wrote ${outputFixturePath}`); + console.log(`Wrote ${outputManifestPath}`); +} + +run(process.argv.includes('--check')); diff --git a/packages/pq-jws/scripts/test-jws-source-fixtures.json b/packages/pq-jws/scripts/test-jws-source-fixtures.json new file mode 100644 index 0000000..1bc80ab --- /dev/null +++ b/packages/pq-jws/scripts/test-jws-source-fixtures.json @@ -0,0 +1,135 @@ +{ + "metadata": { + "generatedAt": "2026-02-26T11:48:55.576Z", + "source": { + "backend": "openquantumsafe/oqs-ossl3", + "image": "openquantumsafe/oqs-ossl3@sha256:48b586a2734452fcaff76bad81cba63d37bc8410510e05a40674b450c0ded559", + "commandSet": [ + "openssl genpkey -algorithm ", + "openssl pkey -in -pubout", + "openssl pkeyutl -sign -inkey -in " + ], + "deterministicControls": { + "canonicalFixtureOrdering": true, + "seedMode": "template-replay", + "note": "ML-DSA keygen/signing in OQS OpenSSL are randomized; committed fixtures are replayed deterministically by generator script." + } + } + }, + "fixtures": [ + { + "id": "ml_dsa_44", + "algorithm": "ML-DSA-44", + "protectedHeader": { + "alg": "ML-DSA-44", + "kid": "ml_dsa_44-fixture-key", + "typ": "JOSE" + }, + "payload": { + "iss": "pq-jws-fixture-suite", + "sub": "alice", + "scope": "read:fixtures", + "iat": 1735689600, + "alg": "ML-DSA-44" + }, + "compact": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNDQifQ.q_j7uMeBTIHLrotkVYeWHUMur_yQTSBOzZxakOVhv6wvr-YXk1cAoL-ihluS2boI1dFMZQhMQtxu1xNlIiOBkbExNgyPG3TZhImUxeXwaYz_HVl1_ImxYl7ZjgktBCh1bl-nF86clhGlmNWXBckMf-u02bgxquxMr4xuR32uRbmG87k-sL0VUoV2orpLkBGKhJJ53a1zINi8mxU33D2WeBN8Xv3oWSqtuyAQfyHva499UJDK98YbQ32ICQIueicg32DCq2meDOFJyjwzdJ2glqFvWcgvS2LfiU5Rm_PfN10gL0lTMSyAUjYJoybmR9DMA7vzt22MWto3pF5_05uEypZF1cJGIWTcSbUKOzzCqZff6yfoG1lgrjdzu-D5IzCxYGqB4xEPlWbPtgslDfjgSH2SalKBH9iaByRLcmSTI5I-SLevNDFKd_TrCYh_kLlD_ljJjOT4ynQgRyUllMlVolLJCxwyqEBxCw2iJ7ER0uUcppZFD69RPb4d_n4rC73Ia6ogorWOYXpr140NJM6P7S6-DWpX-0gcHmktdq_SKO7RGvyUqy6UVRh3NAVgEl7eZxd1QaXSOpmKo20sC8HBNqEIXDl1aYJrcgWMflINECP2O2HkExjRftVcIHAz2SKryTYIM0Equh8slJXXDM8NQORrJ5d5OqPdpAIhcsnn32RL-XocumXtFaqxoXq8E39TfjtuEUrv1bzKRLRjtfKKNFSZhGVAoyZ8iECgcpScD7Lez0gqYxyRwRgxi7hIZ0qhM2HEnJOeOKz3Orl7T4W3JUF3luiDhYkj-Yw40G5tyi1pMGZcuPWFa99b_ZN6CmmjtfoOtnxIRNv8zoGW1cld5TQ0UvWk-95aX8zS8_S_RA8LPmyby1OiQHltni2EJrfdQ3C8A8tIS82lerLAeNAQZMpUEpUaOfh7lvZ5VSQFIW7GE4KqpZkLRSGXZv8iDs6kzS2rl6Ye4CNMZn0p3_ArK7cM1kIxUWJ5vdJ0cyRtTBIKJjqDLLPb6PVkgH3nM-hdKssoG0OUTk_GBtZIIKEfx30Zm0TygmSSRHNie2maCKjiOurXn32-dxydnZN0eA_6ELx_q7ur8ZDPst_uunBpP9sIUVks_kZGQPh7xpJOAUjm0F-IC0Gu6zeggeQ2DlirjzVqCd5nMHCq4WUZZ9NEqta4RVb-zfO_Mk0p2d4nx1smUFJJg7W8SRyOpvpU6W9EITUjG9kgDKpqIZ8ClzckpM7dUxoXa9iBrxqUzzDI2qXooWp2OgiPaq3TB16xfZnq5xzhOAP4kNK0E-Rd_asEyFkE4k4OubLa_swKrQ4s8o4ifeOSeFGkUPQGLJ-KwN49eFwWqbp34-e_Ys31bDjc36tLiajXdeZD0b10eJX6IOPLBJNY8syz2p88xzG914S0JB5UHMixicYRC8qKN4RTKHKtL2bQohKxHh23mCf2akgfH8HJA5tf_sYNx6B4XS0jvcWuIxHYL0D3unQxNOQjf44A9MhEZogVN7SgsJtp19LFqS55C-c7dH_Dup6ETAxguADljlgzlq98bxzDaq3sSRGhC9ELVYKwfjKRK8FhAzg-66Jg0ReBq4WRci8S4VvIvJT4J-EeHS0sPmi_Do3Sim_tTBROrQMP_XM_1mpmjJ0P9EC-Iw9mjUEcxrVPzGNAn3O_C6nKw_8ST4iw1ZtsPmtX5zx9XO9tytaV1L04K9sVIHtNI7aKbsOukGRUsdE4QHoFT8ND3TvTkGOIsNm8clSEG55YV3HdepvGctJIfdm0-i_ruRQh8s4Qwj05wjvo9Sw1J8Z9We4_p3csJJxNC1bGmkRgAzanTmgLg9RSjbxPaBXqjXgG8m9asmap6xOQZUANhz1EGB40gib7screPvULcPo_dCzW0o0v4HIEn1bfj0bHG2Ac5-_MmVSfTv8py2NGuzWbApPJBx7hCIpTZrSSSq2T4OkNoSFxeHpVN2867WtKbG8vgXVG-ggJqdtCgLdCZlEwF2vbAzrUy8F7L75Y4x3AaYGaGGVANlVGsK5WvVw85hYU5liRRCLmxhrTU-VxAPZp6Ksnx9X-_OgAgLFTxxL4nzViBSd7B0C25yenYV9d2CM7qYzw_ZPprxdB5dI6h-sIEETJgdlfKhz4njTYRn0tY8_yuTbr_IQgqt4tdaG50ihWtXhr80yuqilEW7gKlO1Glix9U2gquett8Sqbk0JqI_uJyPoq2YmObvz9WCwpY0zW3wmbvxJf8EHEvlJiJWurTQjTNTSTI4XaeizQgR7tGr5LhI8OKEgulbm66vMnG91_ukPXvOobzOn-Lnh4I0UaIHR31ySm2clyp95AfEFH1WnkaJ1p6iXahNzOULVCnvIsPV2Mne4lsMCugjBbeMTp1hcHWdR5IiYmaeS3-J37QsSJlgQVgJh6WCXPRpmP3bzc6dwA9XD8SyyXHrYT_bU1cFY-rwsysanqVk1pV6ujookJpz7xqgBiimr6kiKFoGlyzLqRFQK5mdj97sJGRyLAcO57xt9HROzWPl3veb1uOSjISSlxFI8w7dAIaFAy4ao6Hr05Fzcd4sl5-GkgF6yH3n9Qzl0Wmmh1CR00D3VEQH--41fbI9YFmD2A1oGWPTUYCsuCswfe9nXvKuGj7h2IK8gfLici4G38x7huA_kNA_xnEQbrdcNhKEvDK_6gYQap5Ri4gsE90lyazoO8Xpy9I1euPAArX45UeY5KdPMYA80zAyfo-O96KNe-Un4Do_b8FFDUUXfxvvt1x4DCwJjM5m2LcrBgsFkPwNy9vjwCt07am7YmfzgNEaZLp7A93Xbzy-VZezfC9Ne3vf6Vkophlp9snFNA0eibiyzsiaah2w75l-dM7Ms3olus3r9WmrTrf5T39Cp8Iyx1RaLJ_LQxBaunZoyN_EmlH46Kg5Atjw6KOwjt-bswnLfY0U3dYQXuKbPnOKZMNq0xaBfAnRv2KeAowaiMGFmQH2nzE74vzZKh5OItZXpFuqzvt-Ig6TrLyDHTyd6ccdMonQXj3cuv4OJdr7-55qLRyQ4R5jcgjkfb2YntIt77IgLjUkilH9KGF6fmWQisbZP4TW0O00Mvu5qZ9DetS5DLtf7IwV-EHXQkc-0GY8OAQHQBBw8VGy80P4WVpK60w97x-xMWKisuND9AQ3N1fYSTlJu4wsTKzevv_R4iQk1UWnp8iqivv_kmLjFMTVdjcnuZnrLBy9zj5_oAAAAAAAAAABEpNkg", + "signingInput": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNDQifQ", + "encodedProtectedHeader": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0", + "encodedPayload": "eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNDQifQ", + "signatureBase64Url": "q_j7uMeBTIHLrotkVYeWHUMur_yQTSBOzZxakOVhv6wvr-YXk1cAoL-ihluS2boI1dFMZQhMQtxu1xNlIiOBkbExNgyPG3TZhImUxeXwaYz_HVl1_ImxYl7ZjgktBCh1bl-nF86clhGlmNWXBckMf-u02bgxquxMr4xuR32uRbmG87k-sL0VUoV2orpLkBGKhJJ53a1zINi8mxU33D2WeBN8Xv3oWSqtuyAQfyHva499UJDK98YbQ32ICQIueicg32DCq2meDOFJyjwzdJ2glqFvWcgvS2LfiU5Rm_PfN10gL0lTMSyAUjYJoybmR9DMA7vzt22MWto3pF5_05uEypZF1cJGIWTcSbUKOzzCqZff6yfoG1lgrjdzu-D5IzCxYGqB4xEPlWbPtgslDfjgSH2SalKBH9iaByRLcmSTI5I-SLevNDFKd_TrCYh_kLlD_ljJjOT4ynQgRyUllMlVolLJCxwyqEBxCw2iJ7ER0uUcppZFD69RPb4d_n4rC73Ia6ogorWOYXpr140NJM6P7S6-DWpX-0gcHmktdq_SKO7RGvyUqy6UVRh3NAVgEl7eZxd1QaXSOpmKo20sC8HBNqEIXDl1aYJrcgWMflINECP2O2HkExjRftVcIHAz2SKryTYIM0Equh8slJXXDM8NQORrJ5d5OqPdpAIhcsnn32RL-XocumXtFaqxoXq8E39TfjtuEUrv1bzKRLRjtfKKNFSZhGVAoyZ8iECgcpScD7Lez0gqYxyRwRgxi7hIZ0qhM2HEnJOeOKz3Orl7T4W3JUF3luiDhYkj-Yw40G5tyi1pMGZcuPWFa99b_ZN6CmmjtfoOtnxIRNv8zoGW1cld5TQ0UvWk-95aX8zS8_S_RA8LPmyby1OiQHltni2EJrfdQ3C8A8tIS82lerLAeNAQZMpUEpUaOfh7lvZ5VSQFIW7GE4KqpZkLRSGXZv8iDs6kzS2rl6Ye4CNMZn0p3_ArK7cM1kIxUWJ5vdJ0cyRtTBIKJjqDLLPb6PVkgH3nM-hdKssoG0OUTk_GBtZIIKEfx30Zm0TygmSSRHNie2maCKjiOurXn32-dxydnZN0eA_6ELx_q7ur8ZDPst_uunBpP9sIUVks_kZGQPh7xpJOAUjm0F-IC0Gu6zeggeQ2DlirjzVqCd5nMHCq4WUZZ9NEqta4RVb-zfO_Mk0p2d4nx1smUFJJg7W8SRyOpvpU6W9EITUjG9kgDKpqIZ8ClzckpM7dUxoXa9iBrxqUzzDI2qXooWp2OgiPaq3TB16xfZnq5xzhOAP4kNK0E-Rd_asEyFkE4k4OubLa_swKrQ4s8o4ifeOSeFGkUPQGLJ-KwN49eFwWqbp34-e_Ys31bDjc36tLiajXdeZD0b10eJX6IOPLBJNY8syz2p88xzG914S0JB5UHMixicYRC8qKN4RTKHKtL2bQohKxHh23mCf2akgfH8HJA5tf_sYNx6B4XS0jvcWuIxHYL0D3unQxNOQjf44A9MhEZogVN7SgsJtp19LFqS55C-c7dH_Dup6ETAxguADljlgzlq98bxzDaq3sSRGhC9ELVYKwfjKRK8FhAzg-66Jg0ReBq4WRci8S4VvIvJT4J-EeHS0sPmi_Do3Sim_tTBROrQMP_XM_1mpmjJ0P9EC-Iw9mjUEcxrVPzGNAn3O_C6nKw_8ST4iw1ZtsPmtX5zx9XO9tytaV1L04K9sVIHtNI7aKbsOukGRUsdE4QHoFT8ND3TvTkGOIsNm8clSEG55YV3HdepvGctJIfdm0-i_ruRQh8s4Qwj05wjvo9Sw1J8Z9We4_p3csJJxNC1bGmkRgAzanTmgLg9RSjbxPaBXqjXgG8m9asmap6xOQZUANhz1EGB40gib7screPvULcPo_dCzW0o0v4HIEn1bfj0bHG2Ac5-_MmVSfTv8py2NGuzWbApPJBx7hCIpTZrSSSq2T4OkNoSFxeHpVN2867WtKbG8vgXVG-ggJqdtCgLdCZlEwF2vbAzrUy8F7L75Y4x3AaYGaGGVANlVGsK5WvVw85hYU5liRRCLmxhrTU-VxAPZp6Ksnx9X-_OgAgLFTxxL4nzViBSd7B0C25yenYV9d2CM7qYzw_ZPprxdB5dI6h-sIEETJgdlfKhz4njTYRn0tY8_yuTbr_IQgqt4tdaG50ihWtXhr80yuqilEW7gKlO1Glix9U2gquett8Sqbk0JqI_uJyPoq2YmObvz9WCwpY0zW3wmbvxJf8EHEvlJiJWurTQjTNTSTI4XaeizQgR7tGr5LhI8OKEgulbm66vMnG91_ukPXvOobzOn-Lnh4I0UaIHR31ySm2clyp95AfEFH1WnkaJ1p6iXahNzOULVCnvIsPV2Mne4lsMCugjBbeMTp1hcHWdR5IiYmaeS3-J37QsSJlgQVgJh6WCXPRpmP3bzc6dwA9XD8SyyXHrYT_bU1cFY-rwsysanqVk1pV6ujookJpz7xqgBiimr6kiKFoGlyzLqRFQK5mdj97sJGRyLAcO57xt9HROzWPl3veb1uOSjISSlxFI8w7dAIaFAy4ao6Hr05Fzcd4sl5-GkgF6yH3n9Qzl0Wmmh1CR00D3VEQH--41fbI9YFmD2A1oGWPTUYCsuCswfe9nXvKuGj7h2IK8gfLici4G38x7huA_kNA_xnEQbrdcNhKEvDK_6gYQap5Ri4gsE90lyazoO8Xpy9I1euPAArX45UeY5KdPMYA80zAyfo-O96KNe-Un4Do_b8FFDUUXfxvvt1x4DCwJjM5m2LcrBgsFkPwNy9vjwCt07am7YmfzgNEaZLp7A93Xbzy-VZezfC9Ne3vf6Vkophlp9snFNA0eibiyzsiaah2w75l-dM7Ms3olus3r9WmrTrf5T39Cp8Iyx1RaLJ_LQxBaunZoyN_EmlH46Kg5Atjw6KOwjt-bswnLfY0U3dYQXuKbPnOKZMNq0xaBfAnRv2KeAowaiMGFmQH2nzE74vzZKh5OItZXpFuqzvt-Ig6TrLyDHTyd6ccdMonQXj3cuv4OJdr7-55qLRyQ4R5jcgjkfb2YntIt77IgLjUkilH9KGF6fmWQisbZP4TW0O00Mvu5qZ9DetS5DLtf7IwV-EHXQkc-0GY8OAQHQBBw8VGy80P4WVpK60w97x-xMWKisuND9AQ3N1fYSTlJu4wsTKzevv_R4iQk1UWnp8iqivv_kmLjFMTVdjcnuZnrLBy9zj5_oAAAAAAAAAABEpNkg", + "verificationMaterial": { + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIFMjALBglghkgBZQMEAxEDggUhANV/2i1JpILPaeFl5ODKVSTMP9AQfVXuetRF\nBsNEqgQjXFrK6s09yodJOkn9jJj95eX7wq4jxb3rue3eLNXhszrTy1rg51WjEbYE\n6gGHnVi91f20U8F33FniuD1uaxlZlSiGJpLjyeloniUar1LkdDizJSQiBk8m5N6K\n1TCBlNdJdeGC+5bNjzxh8YeQaOJ6d6ojRdBmo2YuAI+xXToCErld3Zu2HDj8HyqO\ngEB00vDBnRUNy+tSUWuzKmQdZ6VxhK+RZIzYrPxwzE2+nIK+FxET9pR+nGY4KQt9\nBr/adnxIwe4L+wu46ZzUAVzkDTrKHMEpaD/GLDW7L9Up8uRWAY3BLtF81CwyVljP\nmwGjYkap0NGOazbZYrV46SekxXPI78kzS2roe92mZty9dUpspRsvXLDyZbsKsxmx\nxbR17eG6M271XTNn4PVYsjeEH3NZ58ThcoKJbnyS+vpOwAp/Fobcn2QFr/G5VNqi\nhgCLMTqZY3WHIVrEIR3ykhm4S0hZ29VwP93haf+ptWWV0ph85+Hu7kZVhUUajlC9\n+704yu3YuAStrsKi3WnoJHLS0sZ178I7WfxIeJOq/vSf66QasUCo5brhKESxDpHh\nbdmB02rU9ve7vpaXkjYOJtgVVW07sUY3KfPDfZ08UzYifzRQd+lLvnlzG2nnsjNT\nCghk2JHvrpKnHeUaPGce7p16vxSqbbJ4rUFONzXKnpLgPU55tXMEhUD3LUWWd7Jr\nScgTq3BPwPia3zJbcaYP3WoqwVXhRcRH3RlwrdZUowmP4zB0nBydU3N8mXyEr5Wm\nqI6z/T0yR8dbxQ6joB4W+45pMQh1UlxUe9E70JNjXPZQUax4gmfb+0MqnHpk/GJd\nP85W2TKQEAdcKuAy7X0rGplkxLMRfneQCSxrhavq1CYXWWDRrGZ0a+e9rIWa91IB\n786udtL02Bxg9hbp+3XfG+wtJd6thfpA6hB1ZZCuPdF1vAvnn8MirgJdqM1yO58+\nvM2Tk/N3eznfym4NcpJjh57WiHH4fKKb6jAWy9rCVOdXtSpZnT/mLEMbAaiFYGm4\n+URIQ8g6gx2VDFt/ywRZN2eC0ml8f/mNffmJQkp2R22Nh67HjjogPe77nNNRM+df\nHJs/8RgzewQfvBZ6mfWryc6MDBio5PIpEG5lXqtanJecwX5cVMh/NK99GdLKdt0G\nxzhbQrmgtAl1N2JS6TqXTCAKvKKfNF6VGzSspu6yAt+shctwBv494QlAxKKWvHFG\nRHaKPb2TqUpW5AOWX0IQknx7V1SWZf2VqzUGvdJGEer9i7xF+Em3Ti0zd5fK4OFW\nWL6oEEVQ4pyPfjHgF5QX7+TKhkQsPP3YFq5SZKDEFqQvWy+Cn2QRImOE7M3AxUJm\nwvNY5ITff8sB1WUXbjvG1TJ2EoGgkp/5GsMRm6LPLinskLLJCZqNe88L7ftu8O5B\n9I6r7IEK2wpy8Zx+c+dXEV5uzh8tifNzNGPmUvQjSuu/AI/gdmqexIV+zBFPSwFO\nvYfhabMaInQT/+/MOyfgs4SbPqAVqMgURjKTZJD4yQWHdvoE06O61DlQRkI4Pogt\nF4b25S2LrRLTFCKWVlK9P+BXWjHCXPM8r5+GJekTTgfzeYgUHBs/Idpl6/J/YiJG\nvPkmGOds0e9HgNLy4BU42X4hrWlksdj9rkneCu+T9nYgQwoCw1Z17FBvUP/dBGTV\naYVyBIOIXGSaTyBrfFQsteu0AmimP0mwB2YuFsRWcuweVDQLeOE=\n-----END PUBLIC KEY-----", + "publicKeyDerBase64": "MIIFMjALBglghkgBZQMEAxEDggUhANV/2i1JpILPaeFl5ODKVSTMP9AQfVXuetRFBsNEqgQjXFrK6s09yodJOkn9jJj95eX7wq4jxb3rue3eLNXhszrTy1rg51WjEbYE6gGHnVi91f20U8F33FniuD1uaxlZlSiGJpLjyeloniUar1LkdDizJSQiBk8m5N6K1TCBlNdJdeGC+5bNjzxh8YeQaOJ6d6ojRdBmo2YuAI+xXToCErld3Zu2HDj8HyqOgEB00vDBnRUNy+tSUWuzKmQdZ6VxhK+RZIzYrPxwzE2+nIK+FxET9pR+nGY4KQt9Br/adnxIwe4L+wu46ZzUAVzkDTrKHMEpaD/GLDW7L9Up8uRWAY3BLtF81CwyVljPmwGjYkap0NGOazbZYrV46SekxXPI78kzS2roe92mZty9dUpspRsvXLDyZbsKsxmxxbR17eG6M271XTNn4PVYsjeEH3NZ58ThcoKJbnyS+vpOwAp/Fobcn2QFr/G5VNqihgCLMTqZY3WHIVrEIR3ykhm4S0hZ29VwP93haf+ptWWV0ph85+Hu7kZVhUUajlC9+704yu3YuAStrsKi3WnoJHLS0sZ178I7WfxIeJOq/vSf66QasUCo5brhKESxDpHhbdmB02rU9ve7vpaXkjYOJtgVVW07sUY3KfPDfZ08UzYifzRQd+lLvnlzG2nnsjNTCghk2JHvrpKnHeUaPGce7p16vxSqbbJ4rUFONzXKnpLgPU55tXMEhUD3LUWWd7JrScgTq3BPwPia3zJbcaYP3WoqwVXhRcRH3RlwrdZUowmP4zB0nBydU3N8mXyEr5WmqI6z/T0yR8dbxQ6joB4W+45pMQh1UlxUe9E70JNjXPZQUax4gmfb+0MqnHpk/GJdP85W2TKQEAdcKuAy7X0rGplkxLMRfneQCSxrhavq1CYXWWDRrGZ0a+e9rIWa91IB786udtL02Bxg9hbp+3XfG+wtJd6thfpA6hB1ZZCuPdF1vAvnn8MirgJdqM1yO58+vM2Tk/N3eznfym4NcpJjh57WiHH4fKKb6jAWy9rCVOdXtSpZnT/mLEMbAaiFYGm4+URIQ8g6gx2VDFt/ywRZN2eC0ml8f/mNffmJQkp2R22Nh67HjjogPe77nNNRM+dfHJs/8RgzewQfvBZ6mfWryc6MDBio5PIpEG5lXqtanJecwX5cVMh/NK99GdLKdt0GxzhbQrmgtAl1N2JS6TqXTCAKvKKfNF6VGzSspu6yAt+shctwBv494QlAxKKWvHFGRHaKPb2TqUpW5AOWX0IQknx7V1SWZf2VqzUGvdJGEer9i7xF+Em3Ti0zd5fK4OFWWL6oEEVQ4pyPfjHgF5QX7+TKhkQsPP3YFq5SZKDEFqQvWy+Cn2QRImOE7M3AxUJmwvNY5ITff8sB1WUXbjvG1TJ2EoGgkp/5GsMRm6LPLinskLLJCZqNe88L7ftu8O5B9I6r7IEK2wpy8Zx+c+dXEV5uzh8tifNzNGPmUvQjSuu/AI/gdmqexIV+zBFPSwFOvYfhabMaInQT/+/MOyfgs4SbPqAVqMgURjKTZJD4yQWHdvoE06O61DlQRkI4PogtF4b25S2LrRLTFCKWVlK9P+BXWjHCXPM8r5+GJekTTgfzeYgUHBs/Idpl6/J/YiJGvPkmGOds0e9HgNLy4BU42X4hrWlksdj9rkneCu+T9nYgQwoCw1Z17FBvUP/dBGTVaYVyBIOIXGSaTyBrfFQsteu0AmimP0mwB2YuFsRWcuweVDQLeOE=", + "provider": "default" + }, + "invalidVariants": [ + { + "id": "ml_dsa_44-tampered-payload", + "compact": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJ3cml0ZTp0YW1wZXJlZCIsImlhdCI6MTczNTY4OTYwMCwiYWxnIjoiTUwtRFNBLTQ0In0.q_j7uMeBTIHLrotkVYeWHUMur_yQTSBOzZxakOVhv6wvr-YXk1cAoL-ihluS2boI1dFMZQhMQtxu1xNlIiOBkbExNgyPG3TZhImUxeXwaYz_HVl1_ImxYl7ZjgktBCh1bl-nF86clhGlmNWXBckMf-u02bgxquxMr4xuR32uRbmG87k-sL0VUoV2orpLkBGKhJJ53a1zINi8mxU33D2WeBN8Xv3oWSqtuyAQfyHva499UJDK98YbQ32ICQIueicg32DCq2meDOFJyjwzdJ2glqFvWcgvS2LfiU5Rm_PfN10gL0lTMSyAUjYJoybmR9DMA7vzt22MWto3pF5_05uEypZF1cJGIWTcSbUKOzzCqZff6yfoG1lgrjdzu-D5IzCxYGqB4xEPlWbPtgslDfjgSH2SalKBH9iaByRLcmSTI5I-SLevNDFKd_TrCYh_kLlD_ljJjOT4ynQgRyUllMlVolLJCxwyqEBxCw2iJ7ER0uUcppZFD69RPb4d_n4rC73Ia6ogorWOYXpr140NJM6P7S6-DWpX-0gcHmktdq_SKO7RGvyUqy6UVRh3NAVgEl7eZxd1QaXSOpmKo20sC8HBNqEIXDl1aYJrcgWMflINECP2O2HkExjRftVcIHAz2SKryTYIM0Equh8slJXXDM8NQORrJ5d5OqPdpAIhcsnn32RL-XocumXtFaqxoXq8E39TfjtuEUrv1bzKRLRjtfKKNFSZhGVAoyZ8iECgcpScD7Lez0gqYxyRwRgxi7hIZ0qhM2HEnJOeOKz3Orl7T4W3JUF3luiDhYkj-Yw40G5tyi1pMGZcuPWFa99b_ZN6CmmjtfoOtnxIRNv8zoGW1cld5TQ0UvWk-95aX8zS8_S_RA8LPmyby1OiQHltni2EJrfdQ3C8A8tIS82lerLAeNAQZMpUEpUaOfh7lvZ5VSQFIW7GE4KqpZkLRSGXZv8iDs6kzS2rl6Ye4CNMZn0p3_ArK7cM1kIxUWJ5vdJ0cyRtTBIKJjqDLLPb6PVkgH3nM-hdKssoG0OUTk_GBtZIIKEfx30Zm0TygmSSRHNie2maCKjiOurXn32-dxydnZN0eA_6ELx_q7ur8ZDPst_uunBpP9sIUVks_kZGQPh7xpJOAUjm0F-IC0Gu6zeggeQ2DlirjzVqCd5nMHCq4WUZZ9NEqta4RVb-zfO_Mk0p2d4nx1smUFJJg7W8SRyOpvpU6W9EITUjG9kgDKpqIZ8ClzckpM7dUxoXa9iBrxqUzzDI2qXooWp2OgiPaq3TB16xfZnq5xzhOAP4kNK0E-Rd_asEyFkE4k4OubLa_swKrQ4s8o4ifeOSeFGkUPQGLJ-KwN49eFwWqbp34-e_Ys31bDjc36tLiajXdeZD0b10eJX6IOPLBJNY8syz2p88xzG914S0JB5UHMixicYRC8qKN4RTKHKtL2bQohKxHh23mCf2akgfH8HJA5tf_sYNx6B4XS0jvcWuIxHYL0D3unQxNOQjf44A9MhEZogVN7SgsJtp19LFqS55C-c7dH_Dup6ETAxguADljlgzlq98bxzDaq3sSRGhC9ELVYKwfjKRK8FhAzg-66Jg0ReBq4WRci8S4VvIvJT4J-EeHS0sPmi_Do3Sim_tTBROrQMP_XM_1mpmjJ0P9EC-Iw9mjUEcxrVPzGNAn3O_C6nKw_8ST4iw1ZtsPmtX5zx9XO9tytaV1L04K9sVIHtNI7aKbsOukGRUsdE4QHoFT8ND3TvTkGOIsNm8clSEG55YV3HdepvGctJIfdm0-i_ruRQh8s4Qwj05wjvo9Sw1J8Z9We4_p3csJJxNC1bGmkRgAzanTmgLg9RSjbxPaBXqjXgG8m9asmap6xOQZUANhz1EGB40gib7screPvULcPo_dCzW0o0v4HIEn1bfj0bHG2Ac5-_MmVSfTv8py2NGuzWbApPJBx7hCIpTZrSSSq2T4OkNoSFxeHpVN2867WtKbG8vgXVG-ggJqdtCgLdCZlEwF2vbAzrUy8F7L75Y4x3AaYGaGGVANlVGsK5WvVw85hYU5liRRCLmxhrTU-VxAPZp6Ksnx9X-_OgAgLFTxxL4nzViBSd7B0C25yenYV9d2CM7qYzw_ZPprxdB5dI6h-sIEETJgdlfKhz4njTYRn0tY8_yuTbr_IQgqt4tdaG50ihWtXhr80yuqilEW7gKlO1Glix9U2gquett8Sqbk0JqI_uJyPoq2YmObvz9WCwpY0zW3wmbvxJf8EHEvlJiJWurTQjTNTSTI4XaeizQgR7tGr5LhI8OKEgulbm66vMnG91_ukPXvOobzOn-Lnh4I0UaIHR31ySm2clyp95AfEFH1WnkaJ1p6iXahNzOULVCnvIsPV2Mne4lsMCugjBbeMTp1hcHWdR5IiYmaeS3-J37QsSJlgQVgJh6WCXPRpmP3bzc6dwA9XD8SyyXHrYT_bU1cFY-rwsysanqVk1pV6ujookJpz7xqgBiimr6kiKFoGlyzLqRFQK5mdj97sJGRyLAcO57xt9HROzWPl3veb1uOSjISSlxFI8w7dAIaFAy4ao6Hr05Fzcd4sl5-GkgF6yH3n9Qzl0Wmmh1CR00D3VEQH--41fbI9YFmD2A1oGWPTUYCsuCswfe9nXvKuGj7h2IK8gfLici4G38x7huA_kNA_xnEQbrdcNhKEvDK_6gYQap5Ri4gsE90lyazoO8Xpy9I1euPAArX45UeY5KdPMYA80zAyfo-O96KNe-Un4Do_b8FFDUUXfxvvt1x4DCwJjM5m2LcrBgsFkPwNy9vjwCt07am7YmfzgNEaZLp7A93Xbzy-VZezfC9Ne3vf6Vkophlp9snFNA0eibiyzsiaah2w75l-dM7Ms3olus3r9WmrTrf5T39Cp8Iyx1RaLJ_LQxBaunZoyN_EmlH46Kg5Atjw6KOwjt-bswnLfY0U3dYQXuKbPnOKZMNq0xaBfAnRv2KeAowaiMGFmQH2nzE74vzZKh5OItZXpFuqzvt-Ig6TrLyDHTyd6ccdMonQXj3cuv4OJdr7-55qLRyQ4R5jcgjkfb2YntIt77IgLjUkilH9KGF6fmWQisbZP4TW0O00Mvu5qZ9DetS5DLtf7IwV-EHXQkc-0GY8OAQHQBBw8VGy80P4WVpK60w97x-xMWKisuND9AQ3N1fYSTlJu4wsTKzevv_R4iQk1UWnp8iqivv_kmLjFMTVdjcnuZnrLBy9zj5_oAAAAAAAAAABEpNkg", + "expectedFailure": "signature_mismatch" + }, + { + "id": "ml_dsa_44-malformed", + "compact": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNDQifQ", + "expectedFailure": "format_error" + } + ] + }, + { + "id": "ml_dsa_65", + "algorithm": "ML-DSA-65", + "protectedHeader": { + "alg": "ML-DSA-65", + "kid": "ml_dsa_65-fixture-key", + "typ": "JOSE" + }, + "payload": { + "iss": "pq-jws-fixture-suite", + "sub": "alice", + "scope": "read:fixtures", + "iat": 1735689600, + "alg": "ML-DSA-65" + }, + "compact": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNjUifQ.Nxb9kPqyuZUT3ns940K6tAUHBarVzmp8R2Z2pmwR-a9xTbQSdvYSDQTVg-9366HOcn59wlfMX-IGa3dFdLdmq1KxgnQX2lyuUoID7Ze5uRT5iXDEwhlmU_NipXn5bw0CYQ__2qs2Aalgw0pdJ_1gpIMQ65UsjsIPfzz-4izlG8UM_hG6Dyt1ZB95wVD7p9MezzLisZNO-DOTPBd8Mq6EYmSQRYbqgbpwopD7u0tMTZ4k9TZTh5kr_5nQzlW-wgpYWeA0cbBqoFJ0te5PhUmLaWe-FBuEDglYjC0WUM-EDplmGCsZI9tGfpM841YYyrrNbiOXmI5WM7sgsuu67Umvjd2vvAD5aA92IjqhsVncMp-_byoh2gw0Xgz0BjqjnAw2CDeofek4pOdxOg0OzOkXcb8ptD-7b6FHq0lFdVixPrmqLaKtNpehP45yGFVigyhN-OkaKB1UsPFwbQKhmuwR1DlgqqVS9sFxGulx3qsCBDCd1Nh02IRKPjku-iRNOT3PoD90b2msrXSCFKO5ciGyD9upoCO-BppSTxh3ZeYfssdtpvgPAuuULGqgxrh1qTyq6tk8vfadOhT-nXD2iHbAwXbv4oBBZGvhmrHAGindwJnihGPTcx8v1gh1gJJy_FM8wFsKydu1HKj-CGM9hbS_v8-WLTPgCQsSb7EWLugLTsHOrQVOrNXvoUdQh07LzK5WUyfyR2UN2UO4qN1MAcJGQzseDzVuPGS0dE0M9w8wldjLcFxGUMjy21sJ6TtiioEyg8b5DgWkyraQWwa-AWe0Yy6tghnUBmERXojYwOZaUwJ0cKM-rJgxkT6CuGwdgkGbI7KpAhSKQbRvav89kIS-s1fRkyeVlT1ujurF0Dyp-H2G1ngfNk1DnMzuIztCPtqK0MwXeqf2R1Xf3-nv9CtHCcW9P5hS3WByzpeifrApT7Xn6eyYn3K53qDu5PttfDuks4_Ky-oP56I7AWxVtaD4h6piqrNjCpK56S5yH3ZGaMrO-gxxCIkilupP604UPVGdpcSF2c3c3i0o_GH67TxT4k96Kk5O9o6c3HYIKhW57z8VgfUgrQue8lLBhwFXS-SXe782pgMYqTnlIIqnJrR-T5K6kTQ4n8GE5HqBg6GXR6fv3Td4DMIf83ltSzJSfS78JJfLRqM6kWQiJimCSqGfarc2K49NgNLyobiUrcY-nvwGQqCISa2I4QXU4ZZIenwo4cwI4ikBrNusjpywpXHjSotYWhnwwQYzP6AAt9FKXPFIdJc1h5fiCJvuwHdJ2_HrEYT6FVJbMoIkuN8Fhgw8DtERCJn4DrEZ1NVxSc-cZqcGfGLPdeF0fx19zfgl_Tt-1tEfhKQ7nInsagg_d6d6304uY0RC7C0ZoziKaMuOnKLx6uC3WA4k-cAVbhqfWF63lk_3PmulMO-Xqbvk5soylKxPdqss99x3SJDPZbiUWCbuap1u-wGNmaH5Fifqw6cNVNdhB9TRq3swbayebu3U1DM1AaMZf78nXNx29M5cYjKvC_INmf0_q91IuE8oOaxMcqlU-aFZU6bjxN0jpBwWUjf90UFooddnrOWTwpfK-iEnhlFIjnTQAJ9G7wMB1QcFz5_AUu7vdZ6JO8exsioLR0JTu0nfzqHvx0Qgz4PMtvDN7wZCDE-FLRWGFO6ORcPmFrbJNlq0w8Qvf6QBjkZL7WuqEKM8L9L-NKjXkM2J5TQIhSQPoNH3J7HdI9GtzEO9bHxtsqTGaWq02FD-4-BFOMQpKqTTiIh9EdaOg2SWdvjPBIwS8hcIQ8SfWR5NFQk6NvwzI1NIJwOTSjVT3keqOEl54KXRe2-GLR6YjoeAxf1omk1Kbf0Wk9RaIDrwXbLCLeaZzYX6zIk2Q2m7l13BhvrU9y_pIWha8pCkTI-ioT2sCZ5Bq7YbwX0z4BM0UPoDUIkpyaaFZcEZ4h7SiQte8wB6IFI-i-iMmw-_bHQ-rYoOtK0UKchKEGm-OmuRsJepwZsfo9-7y4mlWUyCb_UdZoyeaHBNoMRswh7nvT06M1snzCd87fL0lf4_nV9vS4ty1p9yMz7z0kMbHflsOBThpLfWNRHJ3Dqhl9ViYB21Ro86dRPa-PpkRO1qiVzkU2wRNgXyXaidQfaWzSKwwl0AHWmD48ECSPei5ZsLDpJDEQnHHbkHLrzVd14NaI49MVlb_ZOwrj7GL5O2G0SipFZSQhW_rCi7rK5_djLfR_liu_qgCs2nLTveBaciogZvwkJdNb8NWa8g_ZshRen-_cOR6E3W-9GfdLJ9wyWEc4nuq8cqx7KmTeyj5MCLN9HIyCvEGbxm-LV7g0rKEwWLUIs-Klgm7uKjr2lAE-0tlLwfgJIX9XSRLFDtCO3ErwR1WGc77T4ylwod4ugzfCkWBkGZKMQ6-Tslj4YSEVyVWgVqFmnxMDgf84fdmri73RPGNypk5DBNVmUk4PgCY_dXYvVf2onXwlwsqXVOXUvR2jI_kn-sxxZoJ72mENxreEfgV2E4eh_alOhYyL4n-3nsO3Mkqoa7_-EGLThF8o20v79a-HoRhCY13GAUgqs3OcMXKXv-wTrmjN9tVSCRpyVRG8QUXXXDXqUeF3kyL3xX6gdPoqM2wSLQvi3sUIOFK9CZQgVuaKXuSachjKA1EHoz8wBkMgS00R8SkxXgxhH47WwJLD-NEa-Jc6baD9XyrsX5mFvFgznyzfXsOQ8w1WXY0YcqAAt2s0oi9cFWhXUQ6PC1JGqYPaMsdVZp0qemmP4RaNKW0ES1czQkBswndwGXHOgQ7_SsGhNzdrQSBt9sWUfvKCY7NFVPS1VZNtH8kMEls0M2EAqA49xANapoId4PTxv0s_o0UkFrnwX4IVuLBfFVsSqe33jHh4ypcHfO645KmJntmcqSvwFbsDXsCY8XmXlC8A3W61mx8pyb5lZBwyevtIIfjSltuP4P2mD0Ifzd-BwB-ThdzRKMGqV5cDzH3tzKtJX2Zv38VjDXHAwUnYhu5A5Foo37km2NP3ANE4aXGlbr-iy0Eug6ypwXxVFC8Xe5X7TxXA96hTiBDuMRA4XLNdJtM6AEUSCmCnRfSNuL4xsi3CtCMbEvqcMmjidd-IK1yhTXn4wLHPBnp7QhHXbs0Ad0tf3u9KeAackwrvhcLjM7lCeDftiooZq_U1RDa1zkdmWGAtAsSIe7AnEnc3u9xt6fd-Qt76WxQw3r0IyiGVjG4Y9Gf7GOTrnP-Wkukx2s1aB7y-hbM7CBGrJXFYDddYY3KjEO30VXP6XywmcDTnw3iyKYXa6jqimZ6NFg8gDixtpXElFaZI6IOi-nxKrpBFBWEmorqNpJ0TVog0fGzDR3-pmuvqNyM6052sYmwKeJVD-Y80lSHLEKVcu9MaoKCYtcxtggb1nczyHR7hONFw8WXLZOvgrk2wcZyi2YMjWDosPEOPlla0fQSZ5XlkXHwL9pctpCjM9bnFh-u0WyZFq-P945-W6MvdstyE2DG7k3nTxwwvIPVeJ92wg7Ew2VJ5aIGh3bUFBOECbu9FOyy-OZObSCXtarRpQ5XXbJ9NqO2idcKzLTBt_FIPERhc2nED63SgWNxvUh0Ai5KrwTz_aZOsmbRhRB7KEQmBzrDUFqA-Kocd27ZI9bGKf4-R_kAIJbtht_ohuD0LWf41FlZibQbMSyN0QvHGhrGFY41QuLJctQqO93YWy7L8U3vg2WHvrOd3F8Nw3b6YQFaOYsqK9JK-qELYjHABN5yyxvk_KbdKuIgc4HMt-iRn-Y0iI2mvyJlzHdAefaeshzY5a8LqsPe9ZOUMyZTv5y_ufXjQYPd9WY47iIkN8TR5MGLyFospMMH4bmzeroX1rg93RBSyauivq4521S3TaYkIIRs71ob_MiV2rzYVAsbbYWa_3eqoI2rpLqxTK6eo8qo8lyJVbxUCcuGG0_ptCNobVfvOaly6AAYTDYEl62P9RBKRMsOQ6cAKBWAsBxCNFmzeqQkxMmY9pBiA1xLRarIIl7LSp3j7ucMWAYZtYOPTmAKj3BgIbxuigkyR3qDsuL7ajMHwmdObGuOTfU_AOdDMGcS2iSHw1ry2WkT7WwS-SEn25LnFe9ChRULTR_pOs8ed4aYTtayseuKnEvJ_Wh4Vu7kCz7XA-fRqBXtgQbL5P0gaVRWdT4NeVWQBvIW-KLIhpBAkI5_or5ExQA8t_YpqNDPr3aCig_s57MkPztAXnPI2yzmHIpYnUH2FeZ2hEr_jGqj0stWapJ9jBD96bEjICwHqAFu-BiYFbAPYrhNezLFd_R2eosdUtJFUlDrLVK6sdc_bAYeRU-WoK90o3oeARJfhP5dqjZjKQJgQ_ISyKhjo_1k2UxMka3ISJ0marD1di_zQhDd4_T2_wWOHWLAClQUlxecnuJ9QAAAAAAAAAAAAAAAAAAAAAAAAAABAwOFRkj", + "signingInput": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNjUifQ", + "encodedProtectedHeader": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0", + "encodedPayload": "eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNjUifQ", + "signatureBase64Url": "Nxb9kPqyuZUT3ns940K6tAUHBarVzmp8R2Z2pmwR-a9xTbQSdvYSDQTVg-9366HOcn59wlfMX-IGa3dFdLdmq1KxgnQX2lyuUoID7Ze5uRT5iXDEwhlmU_NipXn5bw0CYQ__2qs2Aalgw0pdJ_1gpIMQ65UsjsIPfzz-4izlG8UM_hG6Dyt1ZB95wVD7p9MezzLisZNO-DOTPBd8Mq6EYmSQRYbqgbpwopD7u0tMTZ4k9TZTh5kr_5nQzlW-wgpYWeA0cbBqoFJ0te5PhUmLaWe-FBuEDglYjC0WUM-EDplmGCsZI9tGfpM841YYyrrNbiOXmI5WM7sgsuu67Umvjd2vvAD5aA92IjqhsVncMp-_byoh2gw0Xgz0BjqjnAw2CDeofek4pOdxOg0OzOkXcb8ptD-7b6FHq0lFdVixPrmqLaKtNpehP45yGFVigyhN-OkaKB1UsPFwbQKhmuwR1DlgqqVS9sFxGulx3qsCBDCd1Nh02IRKPjku-iRNOT3PoD90b2msrXSCFKO5ciGyD9upoCO-BppSTxh3ZeYfssdtpvgPAuuULGqgxrh1qTyq6tk8vfadOhT-nXD2iHbAwXbv4oBBZGvhmrHAGindwJnihGPTcx8v1gh1gJJy_FM8wFsKydu1HKj-CGM9hbS_v8-WLTPgCQsSb7EWLugLTsHOrQVOrNXvoUdQh07LzK5WUyfyR2UN2UO4qN1MAcJGQzseDzVuPGS0dE0M9w8wldjLcFxGUMjy21sJ6TtiioEyg8b5DgWkyraQWwa-AWe0Yy6tghnUBmERXojYwOZaUwJ0cKM-rJgxkT6CuGwdgkGbI7KpAhSKQbRvav89kIS-s1fRkyeVlT1ujurF0Dyp-H2G1ngfNk1DnMzuIztCPtqK0MwXeqf2R1Xf3-nv9CtHCcW9P5hS3WByzpeifrApT7Xn6eyYn3K53qDu5PttfDuks4_Ky-oP56I7AWxVtaD4h6piqrNjCpK56S5yH3ZGaMrO-gxxCIkilupP604UPVGdpcSF2c3c3i0o_GH67TxT4k96Kk5O9o6c3HYIKhW57z8VgfUgrQue8lLBhwFXS-SXe782pgMYqTnlIIqnJrR-T5K6kTQ4n8GE5HqBg6GXR6fv3Td4DMIf83ltSzJSfS78JJfLRqM6kWQiJimCSqGfarc2K49NgNLyobiUrcY-nvwGQqCISa2I4QXU4ZZIenwo4cwI4ikBrNusjpywpXHjSotYWhnwwQYzP6AAt9FKXPFIdJc1h5fiCJvuwHdJ2_HrEYT6FVJbMoIkuN8Fhgw8DtERCJn4DrEZ1NVxSc-cZqcGfGLPdeF0fx19zfgl_Tt-1tEfhKQ7nInsagg_d6d6304uY0RC7C0ZoziKaMuOnKLx6uC3WA4k-cAVbhqfWF63lk_3PmulMO-Xqbvk5soylKxPdqss99x3SJDPZbiUWCbuap1u-wGNmaH5Fifqw6cNVNdhB9TRq3swbayebu3U1DM1AaMZf78nXNx29M5cYjKvC_INmf0_q91IuE8oOaxMcqlU-aFZU6bjxN0jpBwWUjf90UFooddnrOWTwpfK-iEnhlFIjnTQAJ9G7wMB1QcFz5_AUu7vdZ6JO8exsioLR0JTu0nfzqHvx0Qgz4PMtvDN7wZCDE-FLRWGFO6ORcPmFrbJNlq0w8Qvf6QBjkZL7WuqEKM8L9L-NKjXkM2J5TQIhSQPoNH3J7HdI9GtzEO9bHxtsqTGaWq02FD-4-BFOMQpKqTTiIh9EdaOg2SWdvjPBIwS8hcIQ8SfWR5NFQk6NvwzI1NIJwOTSjVT3keqOEl54KXRe2-GLR6YjoeAxf1omk1Kbf0Wk9RaIDrwXbLCLeaZzYX6zIk2Q2m7l13BhvrU9y_pIWha8pCkTI-ioT2sCZ5Bq7YbwX0z4BM0UPoDUIkpyaaFZcEZ4h7SiQte8wB6IFI-i-iMmw-_bHQ-rYoOtK0UKchKEGm-OmuRsJepwZsfo9-7y4mlWUyCb_UdZoyeaHBNoMRswh7nvT06M1snzCd87fL0lf4_nV9vS4ty1p9yMz7z0kMbHflsOBThpLfWNRHJ3Dqhl9ViYB21Ro86dRPa-PpkRO1qiVzkU2wRNgXyXaidQfaWzSKwwl0AHWmD48ECSPei5ZsLDpJDEQnHHbkHLrzVd14NaI49MVlb_ZOwrj7GL5O2G0SipFZSQhW_rCi7rK5_djLfR_liu_qgCs2nLTveBaciogZvwkJdNb8NWa8g_ZshRen-_cOR6E3W-9GfdLJ9wyWEc4nuq8cqx7KmTeyj5MCLN9HIyCvEGbxm-LV7g0rKEwWLUIs-Klgm7uKjr2lAE-0tlLwfgJIX9XSRLFDtCO3ErwR1WGc77T4ylwod4ugzfCkWBkGZKMQ6-Tslj4YSEVyVWgVqFmnxMDgf84fdmri73RPGNypk5DBNVmUk4PgCY_dXYvVf2onXwlwsqXVOXUvR2jI_kn-sxxZoJ72mENxreEfgV2E4eh_alOhYyL4n-3nsO3Mkqoa7_-EGLThF8o20v79a-HoRhCY13GAUgqs3OcMXKXv-wTrmjN9tVSCRpyVRG8QUXXXDXqUeF3kyL3xX6gdPoqM2wSLQvi3sUIOFK9CZQgVuaKXuSachjKA1EHoz8wBkMgS00R8SkxXgxhH47WwJLD-NEa-Jc6baD9XyrsX5mFvFgznyzfXsOQ8w1WXY0YcqAAt2s0oi9cFWhXUQ6PC1JGqYPaMsdVZp0qemmP4RaNKW0ES1czQkBswndwGXHOgQ7_SsGhNzdrQSBt9sWUfvKCY7NFVPS1VZNtH8kMEls0M2EAqA49xANapoId4PTxv0s_o0UkFrnwX4IVuLBfFVsSqe33jHh4ypcHfO645KmJntmcqSvwFbsDXsCY8XmXlC8A3W61mx8pyb5lZBwyevtIIfjSltuP4P2mD0Ifzd-BwB-ThdzRKMGqV5cDzH3tzKtJX2Zv38VjDXHAwUnYhu5A5Foo37km2NP3ANE4aXGlbr-iy0Eug6ypwXxVFC8Xe5X7TxXA96hTiBDuMRA4XLNdJtM6AEUSCmCnRfSNuL4xsi3CtCMbEvqcMmjidd-IK1yhTXn4wLHPBnp7QhHXbs0Ad0tf3u9KeAackwrvhcLjM7lCeDftiooZq_U1RDa1zkdmWGAtAsSIe7AnEnc3u9xt6fd-Qt76WxQw3r0IyiGVjG4Y9Gf7GOTrnP-Wkukx2s1aB7y-hbM7CBGrJXFYDddYY3KjEO30VXP6XywmcDTnw3iyKYXa6jqimZ6NFg8gDixtpXElFaZI6IOi-nxKrpBFBWEmorqNpJ0TVog0fGzDR3-pmuvqNyM6052sYmwKeJVD-Y80lSHLEKVcu9MaoKCYtcxtggb1nczyHR7hONFw8WXLZOvgrk2wcZyi2YMjWDosPEOPlla0fQSZ5XlkXHwL9pctpCjM9bnFh-u0WyZFq-P945-W6MvdstyE2DG7k3nTxwwvIPVeJ92wg7Ew2VJ5aIGh3bUFBOECbu9FOyy-OZObSCXtarRpQ5XXbJ9NqO2idcKzLTBt_FIPERhc2nED63SgWNxvUh0Ai5KrwTz_aZOsmbRhRB7KEQmBzrDUFqA-Kocd27ZI9bGKf4-R_kAIJbtht_ohuD0LWf41FlZibQbMSyN0QvHGhrGFY41QuLJctQqO93YWy7L8U3vg2WHvrOd3F8Nw3b6YQFaOYsqK9JK-qELYjHABN5yyxvk_KbdKuIgc4HMt-iRn-Y0iI2mvyJlzHdAefaeshzY5a8LqsPe9ZOUMyZTv5y_ufXjQYPd9WY47iIkN8TR5MGLyFospMMH4bmzeroX1rg93RBSyauivq4521S3TaYkIIRs71ob_MiV2rzYVAsbbYWa_3eqoI2rpLqxTK6eo8qo8lyJVbxUCcuGG0_ptCNobVfvOaly6AAYTDYEl62P9RBKRMsOQ6cAKBWAsBxCNFmzeqQkxMmY9pBiA1xLRarIIl7LSp3j7ucMWAYZtYOPTmAKj3BgIbxuigkyR3qDsuL7ajMHwmdObGuOTfU_AOdDMGcS2iSHw1ry2WkT7WwS-SEn25LnFe9ChRULTR_pOs8ed4aYTtayseuKnEvJ_Wh4Vu7kCz7XA-fRqBXtgQbL5P0gaVRWdT4NeVWQBvIW-KLIhpBAkI5_or5ExQA8t_YpqNDPr3aCig_s57MkPztAXnPI2yzmHIpYnUH2FeZ2hEr_jGqj0stWapJ9jBD96bEjICwHqAFu-BiYFbAPYrhNezLFd_R2eosdUtJFUlDrLVK6sdc_bAYeRU-WoK90o3oeARJfhP5dqjZjKQJgQ_ISyKhjo_1k2UxMka3ISJ0marD1di_zQhDd4_T2_wWOHWLAClQUlxecnuJ9QAAAAAAAAAAAAAAAAAAAAAAAAAABAwOFRkj", + "verificationMaterial": { + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\n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\nkjw2tsBl\n-----END PUBLIC KEY-----", + "publicKeyDerBase64": "MIIHsjALBglghkgBZQMEAxIDggehAKy8XvEC0Gs3iYGbESynTKcjnNkF2ALZi2022KvMBca1ZRH6IrgTNwvkoak71LVILjp44Lbk0bCLZ+gHu9NNAn6EuRO0pmLzgjdW7i1Ot/qTIRwiYeco39VOLMUqmsvoCRDdLOw6qBPf2OauxBll/c5FREgroOzLz5qSDoND4J8EcTvJC2XPF0ZzJ+FeVAmtczT+ajKRO9AyjHmvWav2rRrRWvy6UdcBgDGH4p6vp5xEylT5+DLvnJH8LmcJYI2SA53AR9aSPXhtMHVveVvZMPKUV1IEYGmfLyU+ZW/yLFf1981msr5N9QJfQljlOZdsiGM4AFvSmHfQ0OsC+z4eHtcMJsFwEAEzeDaMNWoIc+e9zz7DoIYWBsguRTHWwqWFvUY0y3N2dIov9uU4LSj5pF359mO5nA3LgNrYHaCy5E2pQYHGwiW6gbcZuyRA8u63PsZciBwhL+1FrQa67dcCq7lXVHSG4d+21nAL86jbsHqvfGEsDrCSvJEJC3OAINPKgcCqLRswoMGnfMC+6nxjGWcGozRNvAHiejOnB0E/91VqZOwCreKVPpxv3hp2v/CpRX5v38GyJtpLs0PwBn9B4ZMW6tgJ3F74XOYxI4MKS8HyrCel6PeX99Q3kQMtiwgiSq32vqUCOyhueurLE73rDw3Ee7nuCLsmeFd8uWstrFFIiCs/xACbf1pFogyjjq+FhmivIW2NEn8sghZDo/oy58VmYtyucytLu43JQyzjkUdDR6GJhZ13TWW61pGayf+6KYEQRzjbVrFWVqmGzJc5qCj9DSwtjAtvGi2MRIVE/9IsY7hCt/C0FEQmf05+ZbFRuWozvYACzssyaTFOr+vK3cMK/vX4RFaSA+fWAomvCnrxHaZhZjVgyqqWI7oOjC1ZK3WGIFOzf7bv2gajsGFdfqTU+9TNrK+pspGq1P0DJ5AOOi37jBqP4nWb8SE1pdM2H0xKq1GQ4hmVQZDVSCVGMHKkCfM4dsfenN38Z7qrGw06BMZT2vzx7mopIzJOhZuNkqSMQexat9ForIDOwGyrsOaJBefA7U7VFA8Sa+XTfHbw+LvBOqbXdPTmIDdd06B6Nu5XfVaXCY+GGuA3j2vFSNEwXIDIheZ1c9w9prmherpU74QcsjEMPbMwbIIzTfvOMgWni41E0XXZOiTTVjml/lyZTp69Hd/tlyzA4Njh0ztJ8mju242+nPBDoueML+yvzUY2eDXxdGUg7hW86BlQUINH3Cs0FBsdUpbxBPVEB5/eGzrJVf90Gh4P7mY1t/SVT0dTCvht9G/rGRo0JJtUmJvSfo7AkuIcTYZ4RSjjnIvB286/HjWLBAh/nWYn4Io8XEMMgM5qQffumlxEMFybuwSTlKhOlYUQg3fhUsZJjwwqpC/+x++ppXU6Ub4XN13I+hX+x6aGpmUsyvJK57iqvdwE5LAws5yt4Ei8HoMMU74FQ11OCwQ0L2UeKBs42+rPr4SwxSAWFvYlbOcIY6wWMXW37GLbyuXx4HattNPt1BlARLJprHb1mBkdvsZNdiyhQAtxEf32mfoW/xfnUoO178gN0lZe5TZ9e8LDB7GznQoqHqA52Ji8kLI5Hlu48a48LjpMyO4tufFjgz6lCi10gYEt9aeZ3Ray3SyTFPOzgef9SN6XGH/f9NtjMUYBJvfEcrFIMgw2HgoeFPhguAWXZcMY4a7FrsAYeIulLk5q5yGohM3i8vfSkY6oieCHspaGG6DbKsWWf7kGse0ijU52SvwohVc0PE+x74FLYXXjWw0r5BJt08HwQPx5ydM1lXU1o8SHN3vdV8CzZy+kt3mftXTmC+lK4rJll2BgNXAeeLkQo7iZKYBupN+IZDlQnTkS3WQnEksNLj2MbmBnUhgEfJZVJY46Y3wh9EctcM3ib1gDo0Hy0dTUyVc/sf0ORP7UiOX2znfcdpdNbycuepgrNPM918T7Zfmah2/MCnJ2TyyBev3MCsBqwxNqGJ20x2R0AOZZkfNS9UXviJCjmhHX04ixWSvS75OMESAjvqVJo02qt2RZgr9ju4bLH2HheYLnddvfrw5f+RFvZFy94ghbEseWLtAnWZyQaD9bQBZ3wd+l6gZreCT0UZS8dkQ//L65o/QFdA7ZA9kIvjNSVdpBX4FEHssl6KNaUbCpbYb3AWt2bi1UzAJiy2QdS3pg+TkeilIr2q24tgrsyIx0oe21ir5/ZQwyFpxzXuxBj2ePZ/fzQbTytdoOFwSpzB9xM05k2ufE9sQcOIQgyx8PX0EwomcwO276uebq1ByIfqOfjpWB6zLQ0L/zUMwh4eV6C0WnMFbemLUJAusDhQiXpjmZtatYARKxLvqUTi33zNADu5fYIsJ6llJo4wTAsxUoqsGKJyhxdT1cEy2hq+QE9cbO315YMsdbezbepO625QaWrjJJ1sLv9/58/e8dQHHo1Bm/kEbA8XQwny+eW/by8Pg7A5ZHooA5Wg2HpkN4VSaSsBYFUD717Gs3svkr8d5JTG2e2XORQumNgtsCxR4XxvQhv5QkLMOl5YAur2JZfk0iO50vteUWuwiThPRfqZtPQvgdt0clGO3ZTUi1bCTg0Mf1aYGvwNfKlFenueqJkjw2tsBl", + "provider": "default" + }, + "invalidVariants": [ + { + "id": "ml_dsa_65-tampered-payload", + "compact": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJ3cml0ZTp0YW1wZXJlZCIsImlhdCI6MTczNTY4OTYwMCwiYWxnIjoiTUwtRFNBLTY1In0.Nxb9kPqyuZUT3ns940K6tAUHBarVzmp8R2Z2pmwR-a9xTbQSdvYSDQTVg-9366HOcn59wlfMX-IGa3dFdLdmq1KxgnQX2lyuUoID7Ze5uRT5iXDEwhlmU_NipXn5bw0CYQ__2qs2Aalgw0pdJ_1gpIMQ65UsjsIPfzz-4izlG8UM_hG6Dyt1ZB95wVD7p9MezzLisZNO-DOTPBd8Mq6EYmSQRYbqgbpwopD7u0tMTZ4k9TZTh5kr_5nQzlW-wgpYWeA0cbBqoFJ0te5PhUmLaWe-FBuEDglYjC0WUM-EDplmGCsZI9tGfpM841YYyrrNbiOXmI5WM7sgsuu67Umvjd2vvAD5aA92IjqhsVncMp-_byoh2gw0Xgz0BjqjnAw2CDeofek4pOdxOg0OzOkXcb8ptD-7b6FHq0lFdVixPrmqLaKtNpehP45yGFVigyhN-OkaKB1UsPFwbQKhmuwR1DlgqqVS9sFxGulx3qsCBDCd1Nh02IRKPjku-iRNOT3PoD90b2msrXSCFKO5ciGyD9upoCO-BppSTxh3ZeYfssdtpvgPAuuULGqgxrh1qTyq6tk8vfadOhT-nXD2iHbAwXbv4oBBZGvhmrHAGindwJnihGPTcx8v1gh1gJJy_FM8wFsKydu1HKj-CGM9hbS_v8-WLTPgCQsSb7EWLugLTsHOrQVOrNXvoUdQh07LzK5WUyfyR2UN2UO4qN1MAcJGQzseDzVuPGS0dE0M9w8wldjLcFxGUMjy21sJ6TtiioEyg8b5DgWkyraQWwa-AWe0Yy6tghnUBmERXojYwOZaUwJ0cKM-rJgxkT6CuGwdgkGbI7KpAhSKQbRvav89kIS-s1fRkyeVlT1ujurF0Dyp-H2G1ngfNk1DnMzuIztCPtqK0MwXeqf2R1Xf3-nv9CtHCcW9P5hS3WByzpeifrApT7Xn6eyYn3K53qDu5PttfDuks4_Ky-oP56I7AWxVtaD4h6piqrNjCpK56S5yH3ZGaMrO-gxxCIkilupP604UPVGdpcSF2c3c3i0o_GH67TxT4k96Kk5O9o6c3HYIKhW57z8VgfUgrQue8lLBhwFXS-SXe782pgMYqTnlIIqnJrR-T5K6kTQ4n8GE5HqBg6GXR6fv3Td4DMIf83ltSzJSfS78JJfLRqM6kWQiJimCSqGfarc2K49NgNLyobiUrcY-nvwGQqCISa2I4QXU4ZZIenwo4cwI4ikBrNusjpywpXHjSotYWhnwwQYzP6AAt9FKXPFIdJc1h5fiCJvuwHdJ2_HrEYT6FVJbMoIkuN8Fhgw8DtERCJn4DrEZ1NVxSc-cZqcGfGLPdeF0fx19zfgl_Tt-1tEfhKQ7nInsagg_d6d6304uY0RC7C0ZoziKaMuOnKLx6uC3WA4k-cAVbhqfWF63lk_3PmulMO-Xqbvk5soylKxPdqss99x3SJDPZbiUWCbuap1u-wGNmaH5Fifqw6cNVNdhB9TRq3swbayebu3U1DM1AaMZf78nXNx29M5cYjKvC_INmf0_q91IuE8oOaxMcqlU-aFZU6bjxN0jpBwWUjf90UFooddnrOWTwpfK-iEnhlFIjnTQAJ9G7wMB1QcFz5_AUu7vdZ6JO8exsioLR0JTu0nfzqHvx0Qgz4PMtvDN7wZCDE-FLRWGFO6ORcPmFrbJNlq0w8Qvf6QBjkZL7WuqEKM8L9L-NKjXkM2J5TQIhSQPoNH3J7HdI9GtzEO9bHxtsqTGaWq02FD-4-BFOMQpKqTTiIh9EdaOg2SWdvjPBIwS8hcIQ8SfWR5NFQk6NvwzI1NIJwOTSjVT3keqOEl54KXRe2-GLR6YjoeAxf1omk1Kbf0Wk9RaIDrwXbLCLeaZzYX6zIk2Q2m7l13BhvrU9y_pIWha8pCkTI-ioT2sCZ5Bq7YbwX0z4BM0UPoDUIkpyaaFZcEZ4h7SiQte8wB6IFI-i-iMmw-_bHQ-rYoOtK0UKchKEGm-OmuRsJepwZsfo9-7y4mlWUyCb_UdZoyeaHBNoMRswh7nvT06M1snzCd87fL0lf4_nV9vS4ty1p9yMz7z0kMbHflsOBThpLfWNRHJ3Dqhl9ViYB21Ro86dRPa-PpkRO1qiVzkU2wRNgXyXaidQfaWzSKwwl0AHWmD48ECSPei5ZsLDpJDEQnHHbkHLrzVd14NaI49MVlb_ZOwrj7GL5O2G0SipFZSQhW_rCi7rK5_djLfR_liu_qgCs2nLTveBaciogZvwkJdNb8NWa8g_ZshRen-_cOR6E3W-9GfdLJ9wyWEc4nuq8cqx7KmTeyj5MCLN9HIyCvEGbxm-LV7g0rKEwWLUIs-Klgm7uKjr2lAE-0tlLwfgJIX9XSRLFDtCO3ErwR1WGc77T4ylwod4ugzfCkWBkGZKMQ6-Tslj4YSEVyVWgVqFmnxMDgf84fdmri73RPGNypk5DBNVmUk4PgCY_dXYvVf2onXwlwsqXVOXUvR2jI_kn-sxxZoJ72mENxreEfgV2E4eh_alOhYyL4n-3nsO3Mkqoa7_-EGLThF8o20v79a-HoRhCY13GAUgqs3OcMXKXv-wTrmjN9tVSCRpyVRG8QUXXXDXqUeF3kyL3xX6gdPoqM2wSLQvi3sUIOFK9CZQgVuaKXuSachjKA1EHoz8wBkMgS00R8SkxXgxhH47WwJLD-NEa-Jc6baD9XyrsX5mFvFgznyzfXsOQ8w1WXY0YcqAAt2s0oi9cFWhXUQ6PC1JGqYPaMsdVZp0qemmP4RaNKW0ES1czQkBswndwGXHOgQ7_SsGhNzdrQSBt9sWUfvKCY7NFVPS1VZNtH8kMEls0M2EAqA49xANapoId4PTxv0s_o0UkFrnwX4IVuLBfFVsSqe33jHh4ypcHfO645KmJntmcqSvwFbsDXsCY8XmXlC8A3W61mx8pyb5lZBwyevtIIfjSltuP4P2mD0Ifzd-BwB-ThdzRKMGqV5cDzH3tzKtJX2Zv38VjDXHAwUnYhu5A5Foo37km2NP3ANE4aXGlbr-iy0Eug6ypwXxVFC8Xe5X7TxXA96hTiBDuMRA4XLNdJtM6AEUSCmCnRfSNuL4xsi3CtCMbEvqcMmjidd-IK1yhTXn4wLHPBnp7QhHXbs0Ad0tf3u9KeAackwrvhcLjM7lCeDftiooZq_U1RDa1zkdmWGAtAsSIe7AnEnc3u9xt6fd-Qt76WxQw3r0IyiGVjG4Y9Gf7GOTrnP-Wkukx2s1aB7y-hbM7CBGrJXFYDddYY3KjEO30VXP6XywmcDTnw3iyKYXa6jqimZ6NFg8gDixtpXElFaZI6IOi-nxKrpBFBWEmorqNpJ0TVog0fGzDR3-pmuvqNyM6052sYmwKeJVD-Y80lSHLEKVcu9MaoKCYtcxtggb1nczyHR7hONFw8WXLZOvgrk2wcZyi2YMjWDosPEOPlla0fQSZ5XlkXHwL9pctpCjM9bnFh-u0WyZFq-P945-W6MvdstyE2DG7k3nTxwwvIPVeJ92wg7Ew2VJ5aIGh3bUFBOECbu9FOyy-OZObSCXtarRpQ5XXbJ9NqO2idcKzLTBt_FIPERhc2nED63SgWNxvUh0Ai5KrwTz_aZOsmbRhRB7KEQmBzrDUFqA-Kocd27ZI9bGKf4-R_kAIJbtht_ohuD0LWf41FlZibQbMSyN0QvHGhrGFY41QuLJctQqO93YWy7L8U3vg2WHvrOd3F8Nw3b6YQFaOYsqK9JK-qELYjHABN5yyxvk_KbdKuIgc4HMt-iRn-Y0iI2mvyJlzHdAefaeshzY5a8LqsPe9ZOUMyZTv5y_ufXjQYPd9WY47iIkN8TR5MGLyFospMMH4bmzeroX1rg93RBSyauivq4521S3TaYkIIRs71ob_MiV2rzYVAsbbYWa_3eqoI2rpLqxTK6eo8qo8lyJVbxUCcuGG0_ptCNobVfvOaly6AAYTDYEl62P9RBKRMsOQ6cAKBWAsBxCNFmzeqQkxMmY9pBiA1xLRarIIl7LSp3j7ucMWAYZtYOPTmAKj3BgIbxuigkyR3qDsuL7ajMHwmdObGuOTfU_AOdDMGcS2iSHw1ry2WkT7WwS-SEn25LnFe9ChRULTR_pOs8ed4aYTtayseuKnEvJ_Wh4Vu7kCz7XA-fRqBXtgQbL5P0gaVRWdT4NeVWQBvIW-KLIhpBAkI5_or5ExQA8t_YpqNDPr3aCig_s57MkPztAXnPI2yzmHIpYnUH2FeZ2hEr_jGqj0stWapJ9jBD96bEjICwHqAFu-BiYFbAPYrhNezLFd_R2eosdUtJFUlDrLVK6sdc_bAYeRU-WoK90o3oeARJfhP5dqjZjKQJgQ_ISyKhjo_1k2UxMka3ISJ0marD1di_zQhDd4_T2_wWOHWLAClQUlxecnuJ9QAAAAAAAAAAAAAAAAAAAAAAAAAABAwOFRkj", + "expectedFailure": "signature_mismatch" + }, + { + "id": "ml_dsa_65-malformed", + "compact": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNjUifQ", + "expectedFailure": "format_error" + } + ] + }, + { + "id": "ml_dsa_87", + "algorithm": "ML-DSA-87", + "protectedHeader": { + "alg": "ML-DSA-87", + "kid": "ml_dsa_87-fixture-key", + "typ": "JOSE" + }, + "payload": { + "iss": "pq-jws-fixture-suite", + "sub": "alice", + "scope": "read:fixtures", + "iat": 1735689600, + "alg": "ML-DSA-87" + }, + "compact": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtODcifQ.I0J2SMyWPKN20TnhmLVV8WfXxlIbZaOly0T7omgCdih_-0gEI4D0N8ZCkZrjoDOw9GPtX-8sgM9KraHyWkZoVF9zkgKsQeSZ7TOzsPYZ7C8tODi6oxwyD8uRm3n6DY91MfSiJ_kEcqH7n8PMwSdeHaTgV7RZu7LVmiVe9Kf3Lwx_caqB1B4AmDO9-otx9uxPVoJjmtU_JlT9QCQb4e4UogBGHS_iU9NdV1E74jGUrVd3jPsfpUCACb0kx5rW_27U4JyXTAoZ0M34bd2QU7z9qdq1gQq9SaaFx7IhVAvCxrWJQSrsprxRzb2MR0epdGnnXdCRn9q8o6TnAE1pVS17jOzVsGRTY62WkTObyHw-PJRAu-oEOAetNfnF2E1lH9Na-eofzoabo8d-VKy7G7i9oDAx-JbSj4wlYhfsByhyVI-LyObririv0c7ObGvhi5kMvUoK8JhuL9YsGUeWA4pR4lE_y-7bBc5Xa6D_ewMtsgtIEJZ-CKc0yb4q9xjRsaQnSWnQj17dXvlnzvmsL2SPWp3lDn4T4wH5IqGnecibLxiomuUU_wkY5jO_SqAIBf2-V3qnM29a8r8psStFRRNNmS-v32kcmmpuRkyAuXoS0w-6j7B9hYu08vDCMbXZXTlRZBCfYpmc3_IDwVK4oOcFyL5-klqc6t_urZCGxeN3XOwN58LnlZPSAIzabZ4-72B526iUuNUpXAR1zx_Wq0OaQTQLN3I6FojGZHG7V1GcQSvYka3SbzWbMomc7Iu_QPnpEliiVFu5qQviAKaKkidUi5_7zAp5pkcoI97pelzZiSoXPSSlxPbLS5LGE2FdCAudeGAoHMMyJX1EpHtxkGJZiT4kBvD6LdXReqvzzgA4Vct3jfKM71qxdlYZvBcwLujrVgqNSWW9R_Fu5r6AS-ZzlS7MlrT1zeh5aNpZ8cw3HJWvG2oGUhKvwQY6NBGz98UP6erLpPDpbGOS8HnkoLvL5HvgHWwDe_6uvLVLM49h06gpoLe30nOETRNfhU-sQuF1MU8B_2LOzJxBxI6IcSQSTabZDZIhYcFdEzJvQrXJSwI6FXs0NbLv_B8q7ZqgYbQDWxPa0fQvHo3Fq8M0MAAF0eLx9nXu2MYIHf-S-JP96Sywe_B3NtjjrOsAna9YlUo-6oy4s8UOq60CV4U9hN_SNMGudi_FPFtM13Il1hhgHpB_8FwMIUoBwWsmCL21AmNRf-cdyHayDW6-ldmoA5UAkVE8U4YH9ETzdw63zO1Ve3t6y9FSLJYBT0k7cZot3OUQOhpBgkSRJMSS9PF-4Wbqa4pyZj7nWY2s8H_iaGbk2FtcOWnBuRd0UB0DTjVnP_90MOvHdvvlqIeHurahT-Izf3Llq6hbOy498lUaLst6E5RB5lJS7NzKrI8zmEOnRbiZw4jfy1ZtP3f5WUENcb5bWRR8Y0DUSYYvAFEl_gsdglFN_YPcZa8uKGq4ASwGJg1x_jCB19I5BxOi2uYHYIwyEJzKOfgYjlQBspscsqMl_OW7iyEuLSO_OiuYcFzl6Oi6TlxS9XcbrrgvNb8rrL8s6cODi9K_8OWnUA4RWxivNJ0J0fnvvDny1tRKCBpvGOvCGEYGEmzDogAfWpDYsBYycLJdgnvgf-QFKZr-ksIbnA9TLOG6o1gvVTgBIvsQYy32BNrav32E4QSkEk08I9sKV53bvKdN1xZFG08nj4OJo2JfBip0bH2rX519-Bitta_eGqp08jY68roF8Uvq85y5A0QB7FzoP_ZOEzOUkNuuU2Ccc1jbMWe6asjkS6OwmXrS5WZqyY3wK5hRWRcnSD02NVjpST93PuI9ywiXSPXEBQwgN7_aYWJP-5c7MEArVCaO8Ro3K4cknGpCQYY3lFp85peRAPWrVrj8-Kb1DugBEE6qc1CvGVKYKx0cEFey2aHaCJ66MB2yqYANmMhdd7RCc4iTTXa0KJW2p48gXeep1Dhtv6x9fsB7jyqQRa13bOFdcpzj9FUe0xrN94e-ajDqaf_FXJAJPtGj29iTDQGBtZnMu0V66h0Q1kpx7i1eNzBCveoYYUVunC137EcbXZh3seu8Dal83eCpaw-Y7BJvGLRTCz2UPEUOisTLsdxuBuXSX96yKoUZ_Ye6LIj1FNXSvrlMM0Invh2t4siUPkI1GvA6Z5QwgQZIFDHURt_7DM-LWxekFtdh9r3CpUwlXb8BMzqcZnVrzFlD1Ti1OZpupTjXcHHm5KJ5GmeaW_9iVb1o5uTjtEwMaaqIioSXGUWKFQIZi7rqJ9iZm6LHpnS3gElG20XIfNu0Z4pEPXKiOPwxXFtdJetDnd7_RVJeppAcQlB9DBFDKJwwqfKEvoyB_iNp0_UrTfNIkDxMxPt-ZOICa_qnEvH5Dnxa1dRqgeBfJKgKP46EbkoBRWiiZp0cGANe5IU4sVZ7NqvvBHdwAltxwNUDjucRWR9-3juqrHPKTrfY0xoiO-rH0ZUf8c4Ackm2bL0dx9JVwikjZzAIbGidsaI6wmo2BywKRAw1B61Qlgp1M86mB6xq56EoTLc9VDRGRQQVzW1H0MQwvaDFgl87YfYgksWiIksQN3dcrE2qrzX_JrwX0J8bM81xzbR1HqSO414llP_d_xIDKQdDNr45DMRdUbzfA-mMCN995ByS3-1nEOoXz1lc0bsBM0dMBPBsQ_UVmLuuC_0vMkQeGEKhkUuut3T_ib_wk91bZTNaF_zkJvQm1ic0DhtA4ZpjgvXlzF_0-iKnzV6VNEk4kNSb6JQGlrDKTyPfKW2XdVlHiH69iCSuXsa_oDlHShfpSEVhYXUhoUFIToCIWeYli43bOseHk39zNi7nFOjK_HRv7Yq6_5hiEgbNqZvmXz_F6-E4LT-AwrEgkysK9CTLACb3-fvRY_2xPjUSn6yUsocut1xdC1p8Tx83TsUAD26O9bQTh-MxdtVCV3WNhnWz21JnJbZfIfFC44_MeYrOlJMSahrs2UhhD-DouPVT60H4Q2bPud0Ka0_86qyv0tvF9CXIu5jz6dBsFLEPpdSNO10u_tU6X_KTwrXZC67QX3T6xwS3rzuOuMpBHnhJm8VTyHv629Hu9mzzR0LS4uNRD8y-X0S1qRzBgYR8CDyudraD4hnNYZuHoarJerMsV8qwri-nCp7ibQf14k-7qjKCKWaXWpQ6nTUJUxFEAcHdAjtN2oECof1WpBAguQixGtZr0TQFWxCsiGQAk1QXacrGNr3-tiN36622ixq0YQQm-L31hZZ5ZZTkSXYrSE0gm0U_FNEZ6joHAxcuQuTmIu_irDOYJz9PiCmVlWlFM8SA7Fiw-aoGxLBg1DgzNzB5ZLMAAz5lvi1n7fByt2fhlnZdf2fSVyNfA2Q1V58eAfrqqKM-FRIZ7vQPODuct5oCbANti2xnnFcAHJBanfYVe6pZ75Jb_Mv6dRKG-9fuIvf3AP4g3XZHNkj38HAM4-HezgFsVdu4KWiK8KqcEiI8F9st2Cgaxe-SNEXDuYO0a7HI9v6fCA39i9UoMZ6SxYsXOoaw9tTJuSYvHB0oN_Jwacv3JtLUWm0Zy58nclqWN2nd0UkPfc1jdfYEd_aVGsJUm5P_Dy6EL_0LJoDO9LueMbHGde_p8AWVa5ZiMSxOQLyYnPUHrgK3zoe40mIjA9TbBJZokQ_sYzEVrxRLu0j9es8db5s4dPmPzLaU-S7eEdPJrPmCGKLZiJiuSimkHCFAqMF4x3sFm6McPqo0vt304uYeEIDE1oUl_B7pgUEfjVKkiPQpNn0F6bbL07vimJeavWvCBicvymMVLlRzAivpdfcRFdzZcCO1N-3LKXgYzktyZDed-LRQgzTCB1zcpr4zDk8iZ2GCZRqxDnHJVaePF4_-IR6gR9Z9QpKPkGMeNoixqvppKjrByeI0C0mznTxI1fTRFlik-_IoirqOO8kyIxVeqwo6UHQNNJCzlrgS53ZcZEZGY63kGi0LNaDVcZdqbikVCoAF9TnHNzO0hIwB3HxszEyvyZFeENDVnl6g0rXUpFEt0QgFm987V1A7_vKUB00vfam5SMTJg9GqbBM-x8WuW_Uvg2voxA1BiWOx4l2tx9txdfJg4eDekY6tk-i5v53lW6JeLXIvRA3SJU9atj0kf3HvHCZc5VTct0CfCpXtEqjMnjvgjY97qUfXx0GMfQMmWPvkdAIqkxGLxT-Njy2yarm9pgMoJjm6EnWxorkV7hqifrhWog6U9Ni05vPQ9mBsNU4mIOIFEW-PUb2WBbqWqXHaALwJoeQzI3W5Cwb8CIJGjwvQtH2dg4rGMG-GZA-pa4d7VNmmmQ6MHgeKPcjyviy0-3sKTKqZosvv-aIWXah4yxvCYSyDviSKw9lMF24I9Q9KzE9lk_P2Wxkd9yFCwwuTgnFG3BDAXjrMEWfXCvhZsJf3yfU3iMyXcCje0Vz_UEgqHSNaDdNhLWf2-iz-OG4_0Ivc6foFaEbi7InyObH0TKAkqzNeSknMxnkapCArItwKWLObxvkdTjTaFT-N1TBODUci9TNENmjvBAWXzu1R9NHmJknVHzrQUSxzGoJiCrRMZRe4vjOOYWaVQVHUkVq3bxZA9RL444LG10mu8e_1iEjFy0eE87fQtBvn9y1qtvW_H7WxfmF8DM8BkvSwJKmfoIJ-0sL73gOtH1z4_IBr_bBxVF471Kn_1LkQLmFONKJV9KZjRTBp_vM6UnwiYGBKYDBFDWQ-0ossz0rOAk664XjPbdMRNWnXsRH5baK-t_PyxA2JfPNJ0lmxwIK6r28ldoEt6aZVN1umHF73djNnwWRpIcTjvXzKCyNs0OQmW6olQejORRVHCuXRT4xUQfuK1Q98ix885sVmcPCMNRRAdtspXRWEiOe6SKyfcChvPDObm1ls6H2TP0s16uVztJ0wkmWUTKpWDJ4_ProECs22Mgehl9Q2ehB4v_PPVnR6a-K1PIxzPVJJ-AHKQIbQaoIz6zLNawtCJPbLI4ebp4dRU6DduDnkVB-EO47qfUNiKf_ohzYcQKTqQT63SGI_T-Np39p_lYEgeHxbtOnWrthKhrBvPSvRjIWQBrkbATsMU4unOoj068mP6b3BPBP_2Rip1cK4hU9WH-afKwhAs50EQ9yjZ8TSZweeB9Fwld0VQGY3O1_RDgamKKO0jza9RQnLaSA4wRZj3NZ7ElhP2PwWJa_Luw5j_TiYBkXpI71PsBpjcvAmZi18h0OKN3RCT96k5Hh_WJs37tmP96nXqaL5PUkAO6ZhH6uDccHL3GNnOJy7RFf4N1VHj4WOeOHBOg0kdMs1HVeFwnDFFPVAbJyHTpvnNKFnxrwlYeCJDnFZHZCK8EZ3Tmd_dgYUyco2hNFzLGHLurhDx_3KFIJ0cO5iBMHJ0cN4FKH8xT6ZF4__XvovCjDoWFAtvC-ZWIFYZl-HD0kiAZtQISUU_VKWexqAlip-ixwt_H2cx7CnWm2c9HeVJE-Y8BtwWQBXWAJ_sof9T2tARMRwUKOJ6ZzwoDgfLWoTDEWpHFkozPGrnLGqeI3ERr1l7E8XHEIYaw92ruD2oAErmP325mm6wfIA9FIfeFD5jT48n9G4w5JQrRZMrAtu6sfjnCN6lloosNYnoEz1g6V_Uyuf_Vls83l6VdqyOj2zHyqWwTwkajkP9CH2Ee7I0IlKrNXH2sNlnNSgxFN3sQ0XaYKbAO4hOgSyYHXIvJh-B2rWEnOGyf-IG0PFr-1vjBydhAnGp9zmriun3FO7Uc-8pxvrcdGuGUfgoaUrdxXudGy1CJXTDJUaOzHjczJQb9MnHhj4PvjdaewYGZPpzTdmYz0DHyMr8qriRwqSnMd_TUs69RsxbMjOH3NS4nGqcBjcpRxUIC-NINDTByHMor6A-3QCAnTAXSZNFxxzivNfNfYztQSWvSJCg4XQ9H_ubxBxJL85Da5OJ002bJVik7KVPFFxp97GQdQMzT0-OvjQdP3n4-fwyxBSL4On6iTgPbiSLZaW3KxkLY7tK_ufeMyZjYh1scIvD1tK7rlD7fD-zhTH1ZYtMxWW1z7Z8FzN2u1FX7ynVcf6b-zhVRgpXcUnw7W0Ps1DQn3E7uMMOkcUw-URImaOp7W50eT5GjNjcoe_4fwmcJywt_MKCy-HkaKwwANNg4zk6_JLW3qBueRDasTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDRUbIyowNA", + "signingInput": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtODcifQ", + "encodedProtectedHeader": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0", + "encodedPayload": "eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtODcifQ", + "signatureBase64Url": "I0J2SMyWPKN20TnhmLVV8WfXxlIbZaOly0T7omgCdih_-0gEI4D0N8ZCkZrjoDOw9GPtX-8sgM9KraHyWkZoVF9zkgKsQeSZ7TOzsPYZ7C8tODi6oxwyD8uRm3n6DY91MfSiJ_kEcqH7n8PMwSdeHaTgV7RZu7LVmiVe9Kf3Lwx_caqB1B4AmDO9-otx9uxPVoJjmtU_JlT9QCQb4e4UogBGHS_iU9NdV1E74jGUrVd3jPsfpUCACb0kx5rW_27U4JyXTAoZ0M34bd2QU7z9qdq1gQq9SaaFx7IhVAvCxrWJQSrsprxRzb2MR0epdGnnXdCRn9q8o6TnAE1pVS17jOzVsGRTY62WkTObyHw-PJRAu-oEOAetNfnF2E1lH9Na-eofzoabo8d-VKy7G7i9oDAx-JbSj4wlYhfsByhyVI-LyObririv0c7ObGvhi5kMvUoK8JhuL9YsGUeWA4pR4lE_y-7bBc5Xa6D_ewMtsgtIEJZ-CKc0yb4q9xjRsaQnSWnQj17dXvlnzvmsL2SPWp3lDn4T4wH5IqGnecibLxiomuUU_wkY5jO_SqAIBf2-V3qnM29a8r8psStFRRNNmS-v32kcmmpuRkyAuXoS0w-6j7B9hYu08vDCMbXZXTlRZBCfYpmc3_IDwVK4oOcFyL5-klqc6t_urZCGxeN3XOwN58LnlZPSAIzabZ4-72B526iUuNUpXAR1zx_Wq0OaQTQLN3I6FojGZHG7V1GcQSvYka3SbzWbMomc7Iu_QPnpEliiVFu5qQviAKaKkidUi5_7zAp5pkcoI97pelzZiSoXPSSlxPbLS5LGE2FdCAudeGAoHMMyJX1EpHtxkGJZiT4kBvD6LdXReqvzzgA4Vct3jfKM71qxdlYZvBcwLujrVgqNSWW9R_Fu5r6AS-ZzlS7MlrT1zeh5aNpZ8cw3HJWvG2oGUhKvwQY6NBGz98UP6erLpPDpbGOS8HnkoLvL5HvgHWwDe_6uvLVLM49h06gpoLe30nOETRNfhU-sQuF1MU8B_2LOzJxBxI6IcSQSTabZDZIhYcFdEzJvQrXJSwI6FXs0NbLv_B8q7ZqgYbQDWxPa0fQvHo3Fq8M0MAAF0eLx9nXu2MYIHf-S-JP96Sywe_B3NtjjrOsAna9YlUo-6oy4s8UOq60CV4U9hN_SNMGudi_FPFtM13Il1hhgHpB_8FwMIUoBwWsmCL21AmNRf-cdyHayDW6-ldmoA5UAkVE8U4YH9ETzdw63zO1Ve3t6y9FSLJYBT0k7cZot3OUQOhpBgkSRJMSS9PF-4Wbqa4pyZj7nWY2s8H_iaGbk2FtcOWnBuRd0UB0DTjVnP_90MOvHdvvlqIeHurahT-Izf3Llq6hbOy498lUaLst6E5RB5lJS7NzKrI8zmEOnRbiZw4jfy1ZtP3f5WUENcb5bWRR8Y0DUSYYvAFEl_gsdglFN_YPcZa8uKGq4ASwGJg1x_jCB19I5BxOi2uYHYIwyEJzKOfgYjlQBspscsqMl_OW7iyEuLSO_OiuYcFzl6Oi6TlxS9XcbrrgvNb8rrL8s6cODi9K_8OWnUA4RWxivNJ0J0fnvvDny1tRKCBpvGOvCGEYGEmzDogAfWpDYsBYycLJdgnvgf-QFKZr-ksIbnA9TLOG6o1gvVTgBIvsQYy32BNrav32E4QSkEk08I9sKV53bvKdN1xZFG08nj4OJo2JfBip0bH2rX519-Bitta_eGqp08jY68roF8Uvq85y5A0QB7FzoP_ZOEzOUkNuuU2Ccc1jbMWe6asjkS6OwmXrS5WZqyY3wK5hRWRcnSD02NVjpST93PuI9ywiXSPXEBQwgN7_aYWJP-5c7MEArVCaO8Ro3K4cknGpCQYY3lFp85peRAPWrVrj8-Kb1DugBEE6qc1CvGVKYKx0cEFey2aHaCJ66MB2yqYANmMhdd7RCc4iTTXa0KJW2p48gXeep1Dhtv6x9fsB7jyqQRa13bOFdcpzj9FUe0xrN94e-ajDqaf_FXJAJPtGj29iTDQGBtZnMu0V66h0Q1kpx7i1eNzBCveoYYUVunC137EcbXZh3seu8Dal83eCpaw-Y7BJvGLRTCz2UPEUOisTLsdxuBuXSX96yKoUZ_Ye6LIj1FNXSvrlMM0Invh2t4siUPkI1GvA6Z5QwgQZIFDHURt_7DM-LWxekFtdh9r3CpUwlXb8BMzqcZnVrzFlD1Ti1OZpupTjXcHHm5KJ5GmeaW_9iVb1o5uTjtEwMaaqIioSXGUWKFQIZi7rqJ9iZm6LHpnS3gElG20XIfNu0Z4pEPXKiOPwxXFtdJetDnd7_RVJeppAcQlB9DBFDKJwwqfKEvoyB_iNp0_UrTfNIkDxMxPt-ZOICa_qnEvH5Dnxa1dRqgeBfJKgKP46EbkoBRWiiZp0cGANe5IU4sVZ7NqvvBHdwAltxwNUDjucRWR9-3juqrHPKTrfY0xoiO-rH0ZUf8c4Ackm2bL0dx9JVwikjZzAIbGidsaI6wmo2BywKRAw1B61Qlgp1M86mB6xq56EoTLc9VDRGRQQVzW1H0MQwvaDFgl87YfYgksWiIksQN3dcrE2qrzX_JrwX0J8bM81xzbR1HqSO414llP_d_xIDKQdDNr45DMRdUbzfA-mMCN995ByS3-1nEOoXz1lc0bsBM0dMBPBsQ_UVmLuuC_0vMkQeGEKhkUuut3T_ib_wk91bZTNaF_zkJvQm1ic0DhtA4ZpjgvXlzF_0-iKnzV6VNEk4kNSb6JQGlrDKTyPfKW2XdVlHiH69iCSuXsa_oDlHShfpSEVhYXUhoUFIToCIWeYli43bOseHk39zNi7nFOjK_HRv7Yq6_5hiEgbNqZvmXz_F6-E4LT-AwrEgkysK9CTLACb3-fvRY_2xPjUSn6yUsocut1xdC1p8Tx83TsUAD26O9bQTh-MxdtVCV3WNhnWz21JnJbZfIfFC44_MeYrOlJMSahrs2UhhD-DouPVT60H4Q2bPud0Ka0_86qyv0tvF9CXIu5jz6dBsFLEPpdSNO10u_tU6X_KTwrXZC67QX3T6xwS3rzuOuMpBHnhJm8VTyHv629Hu9mzzR0LS4uNRD8y-X0S1qRzBgYR8CDyudraD4hnNYZuHoarJerMsV8qwri-nCp7ibQf14k-7qjKCKWaXWpQ6nTUJUxFEAcHdAjtN2oECof1WpBAguQixGtZr0TQFWxCsiGQAk1QXacrGNr3-tiN36622ixq0YQQm-L31hZZ5ZZTkSXYrSE0gm0U_FNEZ6joHAxcuQuTmIu_irDOYJz9PiCmVlWlFM8SA7Fiw-aoGxLBg1DgzNzB5ZLMAAz5lvi1n7fByt2fhlnZdf2fSVyNfA2Q1V58eAfrqqKM-FRIZ7vQPODuct5oCbANti2xnnFcAHJBanfYVe6pZ75Jb_Mv6dRKG-9fuIvf3AP4g3XZHNkj38HAM4-HezgFsVdu4KWiK8KqcEiI8F9st2Cgaxe-SNEXDuYO0a7HI9v6fCA39i9UoMZ6SxYsXOoaw9tTJuSYvHB0oN_Jwacv3JtLUWm0Zy58nclqWN2nd0UkPfc1jdfYEd_aVGsJUm5P_Dy6EL_0LJoDO9LueMbHGde_p8AWVa5ZiMSxOQLyYnPUHrgK3zoe40mIjA9TbBJZokQ_sYzEVrxRLu0j9es8db5s4dPmPzLaU-S7eEdPJrPmCGKLZiJiuSimkHCFAqMF4x3sFm6McPqo0vt304uYeEIDE1oUl_B7pgUEfjVKkiPQpNn0F6bbL07vimJeavWvCBicvymMVLlRzAivpdfcRFdzZcCO1N-3LKXgYzktyZDed-LRQgzTCB1zcpr4zDk8iZ2GCZRqxDnHJVaePF4_-IR6gR9Z9QpKPkGMeNoixqvppKjrByeI0C0mznTxI1fTRFlik-_IoirqOO8kyIxVeqwo6UHQNNJCzlrgS53ZcZEZGY63kGi0LNaDVcZdqbikVCoAF9TnHNzO0hIwB3HxszEyvyZFeENDVnl6g0rXUpFEt0QgFm987V1A7_vKUB00vfam5SMTJg9GqbBM-x8WuW_Uvg2voxA1BiWOx4l2tx9txdfJg4eDekY6tk-i5v53lW6JeLXIvRA3SJU9atj0kf3HvHCZc5VTct0CfCpXtEqjMnjvgjY97qUfXx0GMfQMmWPvkdAIqkxGLxT-Njy2yarm9pgMoJjm6EnWxorkV7hqifrhWog6U9Ni05vPQ9mBsNU4mIOIFEW-PUb2WBbqWqXHaALwJoeQzI3W5Cwb8CIJGjwvQtH2dg4rGMG-GZA-pa4d7VNmmmQ6MHgeKPcjyviy0-3sKTKqZosvv-aIWXah4yxvCYSyDviSKw9lMF24I9Q9KzE9lk_P2Wxkd9yFCwwuTgnFG3BDAXjrMEWfXCvhZsJf3yfU3iMyXcCje0Vz_UEgqHSNaDdNhLWf2-iz-OG4_0Ivc6foFaEbi7InyObH0TKAkqzNeSknMxnkapCArItwKWLObxvkdTjTaFT-N1TBODUci9TNENmjvBAWXzu1R9NHmJknVHzrQUSxzGoJiCrRMZRe4vjOOYWaVQVHUkVq3bxZA9RL444LG10mu8e_1iEjFy0eE87fQtBvn9y1qtvW_H7WxfmF8DM8BkvSwJKmfoIJ-0sL73gOtH1z4_IBr_bBxVF471Kn_1LkQLmFONKJV9KZjRTBp_vM6UnwiYGBKYDBFDWQ-0ossz0rOAk664XjPbdMRNWnXsRH5baK-t_PyxA2JfPNJ0lmxwIK6r28ldoEt6aZVN1umHF73djNnwWRpIcTjvXzKCyNs0OQmW6olQejORRVHCuXRT4xUQfuK1Q98ix885sVmcPCMNRRAdtspXRWEiOe6SKyfcChvPDObm1ls6H2TP0s16uVztJ0wkmWUTKpWDJ4_ProECs22Mgehl9Q2ehB4v_PPVnR6a-K1PIxzPVJJ-AHKQIbQaoIz6zLNawtCJPbLI4ebp4dRU6DduDnkVB-EO47qfUNiKf_ohzYcQKTqQT63SGI_T-Np39p_lYEgeHxbtOnWrthKhrBvPSvRjIWQBrkbATsMU4unOoj068mP6b3BPBP_2Rip1cK4hU9WH-afKwhAs50EQ9yjZ8TSZweeB9Fwld0VQGY3O1_RDgamKKO0jza9RQnLaSA4wRZj3NZ7ElhP2PwWJa_Luw5j_TiYBkXpI71PsBpjcvAmZi18h0OKN3RCT96k5Hh_WJs37tmP96nXqaL5PUkAO6ZhH6uDccHL3GNnOJy7RFf4N1VHj4WOeOHBOg0kdMs1HVeFwnDFFPVAbJyHTpvnNKFnxrwlYeCJDnFZHZCK8EZ3Tmd_dgYUyco2hNFzLGHLurhDx_3KFIJ0cO5iBMHJ0cN4FKH8xT6ZF4__XvovCjDoWFAtvC-ZWIFYZl-HD0kiAZtQISUU_VKWexqAlip-ixwt_H2cx7CnWm2c9HeVJE-Y8BtwWQBXWAJ_sof9T2tARMRwUKOJ6ZzwoDgfLWoTDEWpHFkozPGrnLGqeI3ERr1l7E8XHEIYaw92ruD2oAErmP325mm6wfIA9FIfeFD5jT48n9G4w5JQrRZMrAtu6sfjnCN6lloosNYnoEz1g6V_Uyuf_Vls83l6VdqyOj2zHyqWwTwkajkP9CH2Ee7I0IlKrNXH2sNlnNSgxFN3sQ0XaYKbAO4hOgSyYHXIvJh-B2rWEnOGyf-IG0PFr-1vjBydhAnGp9zmriun3FO7Uc-8pxvrcdGuGUfgoaUrdxXudGy1CJXTDJUaOzHjczJQb9MnHhj4PvjdaewYGZPpzTdmYz0DHyMr8qriRwqSnMd_TUs69RsxbMjOH3NS4nGqcBjcpRxUIC-NINDTByHMor6A-3QCAnTAXSZNFxxzivNfNfYztQSWvSJCg4XQ9H_ubxBxJL85Da5OJ002bJVik7KVPFFxp97GQdQMzT0-OvjQdP3n4-fwyxBSL4On6iTgPbiSLZaW3KxkLY7tK_ufeMyZjYh1scIvD1tK7rlD7fD-zhTH1ZYtMxWW1z7Z8FzN2u1FX7ynVcf6b-zhVRgpXcUnw7W0Ps1DQn3E7uMMOkcUw-URImaOp7W50eT5GjNjcoe_4fwmcJywt_MKCy-HkaKwwANNg4zk6_JLW3qBueRDasTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDRUbIyowNA", + "verificationMaterial": { + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIKMjALBglghkgBZQMEAxMDggohAAOcWzf9oAha5NdqC/yEHCQvwusOT33MPs0X\n0JUrizhkDrUCc8VROju45w0kteEFAD9fRmssIpQbRiqfZkhaVDe0K1bsmuA3cXCx\nBaJG4ioSN9jpIZSYrK+N0BHg9Jr/FtabjbmbO63N/D2V/zbt/Y99QjXIL52Ja9w1\nyVj9w2ldGq8NUyufG3yDXH6RAMLPUH4OVGHEO9vcEkCeD6aypblBrA7rxwpoY6yO\nQ9AdcnJ79z3r0z8Hxc8DeYHu8+Nw9XAE2bo58Q90o92c7dkgE9eZAuQVX+GZ0wGm\nJIoSSXnvLMSuXof/UTqtxVkSGCTsSytOE7jTobBdRltfBI/sfkDVd/qDVWjkfrPf\nxq6kMKBpFtBazV/qLlII0bWLQgo7JtT0gDZR3X4moMQIFQ6sNpVUvP2x490vtvkt\nhA0rme7BZNLOhNLK5VqXhXGisKxQvOmCTb7CCnFJDGpbNRUrsvqx+5adAJdO3W2x\n25yK4osp2Hj0YvLXd10+nfJ/5td/aqH7a+BWwOoJgDdgfVMVhQXPanJcs1iPAv04\n/GX4z8kr76ZjTQgr69CWOZQtINLlDmZJ27sfpmwiJoDoejfiaWHIhWhpRdHXTB2p\nWwweTZj37gi3o3jw78Ps60WfrpgHRv2fqudU5yrsN0VVgS9/r5OVY4L6wYxs6Jmx\n/ASWGUx5MNn3RwLkV/Tpx9z1Dw8mb4midQxYrRCZKYfgSE/3Vh2FD8EffGrOZDTZ\nCfCeqJ8Pqj9qdcPUZHEWxKaoLcX6XKMgs+hAkOEYfomvWwWW6CtvAw74qlCHq8C4\nAjkBWcMe75wNvqsdlmD16JF32+GxZq9lUVc/H53gJjOOU7xq/TLvvHVX1vwovAno\nFygyWpBTvtXHIJuTV2jxhr6cM3IAUowMCrZR5xv3M7wmj0AP4YM+/InVryih8J/d\nrmiG+PpvI6kWT/9ZEo8INWdrkwZtjx/+L92P27hTs6Rl5xjUWXnizhidzzVL39z7\n0QEy56LvpdV/xfBaJuDgqgFaGm4hBbCpefuChOn6Hrmv6SjPqsJZb+HouDbmpcCh\nTuRwaqKRT7lC/LdG3jY3DRUK+XVN3V0zkH9C3Ne94CsoW+dBc+CaahiXr2pD4f0m\nBVu3F1D1raNWIHa9tx06qbK6TsFQ3svr73nTupVXB/oVJC54CWfBQ378dI/u6y5b\n//m/SF4j0F4obMJH6cpv6MW5Yookeki2dFy3zKBpDUMi+8zdUhCGYVAx+ZRhusyM\nSznAc/afl/i72zNXgB9xSes2RABbFpEQh5ZCRSgt37kjrzazhMoiUsm06oV7FsNb\nJl7R16cZ/7np1n9pA57i2Ip3dohzMts0Q78x7LAQi5TvNivu8q1yFDJv1vLps+Je\nWanSMVfiUA6IZr34vcrZcYPLl5yCyvjiHmGdZTAVRPs+D6UqKarRLMhktxZW45Dq\nNCHy1OmDL63T8NkYZZ94GYCtCC5Y5MoRyarnlfFQnZeNQNZ+g2ulej7LpOYKS1E1\nsA/J+lxyjvlKj4OKpeYLxEZkuCowCV2eJI2DVHaXQUGtm9i+Zf65upwl/NVwZ0Gj\nQOQZksnMbP2L1M7lb1pbmILD1aV/2/x8yitPyjrV+bZojdRoENFAym/1Jcl61dyN\nc7OWMnEgIFR2u3cASj4peyqfG9/TXKINft7TxoDfOxVHBWY9lQRWvsfndoREbR3i\nQJ7jYkkxRtzcGlFgGoRMRAMOIgkvsXN+IICEJ561BPWuYWEEO9KX68C0AzTWsZ39\n+2Q2K+czzC1nAvfdhouKVg1x9OgDhD/Pzd/LECMtCbCZRpj7X0J/yfRl9DCsVaiH\n4YoskVQR5TrKnEHARCoE4XkcWbCJjLr+AyajaUAJcbjdhWxzARW8CKPvedrMf+8z\nbtU7GGQUOxwXzJ+3cuN+wohz6+1GyslfIhFrMUa/JQk/m2gJiL5fNSMD+Ob5UYhR\nn52ncIU7mZjfCUdLDBEuDYSHfrwJLut/5nUte+P5cqnoxVYCbjRfVEqgGEpcXpEi\nEmyHhe6VXV+uLZI+6XL/o8jReAfqZjexLf4T4+4u+teT9fgZheljBErUY9YH2zw8\neEyvqN7rOrrRV3PWhHPK0e17nk9RsvHv8TLqjtKn1dkoT5Rc2E++e/ve3MfZBat7\nFTI9Vw3j75Kr0QygYinIKQT3l3yHzi6DcEUfmXLQI/sH1rJ6IZIcqSiCkAoXLko1\nX/UECHNPN8/ByT0y21DACnzoGWzR902box+vp2Ach5Bseqplg/TVPrjxXX+KOcMx\npCU4xZhxRAD4QedRXmcuOgWA77WEyxoOCwSoh7BRevc/nltCbajiafR7+ETZZZEk\nk8jhbrKLlmH66sNuQdVlzgehUubwOfPEGiOWHUaVNTiTmq/VA9JHzZi4LaArT7Hl\n7IE3SBY9lMxaafAl2wKc8ZSNaloLzinRxCNR30eOd3crNU+ko+Oo7+p2oRo6qfAb\nuZR+Xt8aCrgdftYj+qwISMgrZLDRBirHGLkk8zaE9IlQ1UcKq3jxUr+Aj/Ic4ltd\nQyEXOSo8hZ3OrVn73v4+jqUMz1JdSc7nS3ZPSV1smXzV2EMqgg7/m9krm6uSgF53\nkiA4D6GOUknqldfmZVgJxqqHHTUs1F8JMZf8eq09itYAc5/pI9kaY0iwveiPu6n6\np9r7CqbdHNNLZZBXF1AOq0VftXZ4JaTMeC/ulnQW/MRLhbW05el6X4mukM15b6UT\n7D7bKDCnLEbCZqsXaCql0k1FUq8NtNpJUapfNBEr+kyH6tprwBmUA3toeLshNAj0\nnn9idkm5LjnW3k8TbktxaI1bCG/Q7fJNTtb96p3frts5bnVJRJ4QuyzbyBpUDa2v\nBlY3qO7dlWpJTYBOiRP6pR6cVTB9l9IPUv9NjT6gE2m47O42lIDc6qamOsD7KwM/\nEQZcnIwWmN8dMULg+/uoVZ5hqmarQbAg6Yg8ogK7Xw63IN+0LXqRN8WbEAEo7iBG\n4JmczPGuvR8uV6F6vYmVarIc8TXoDiCQ24DsFtIbStNHgjWiil20lcIOrJBzqUTW\nnA10V93kK0w3B6cfRpfSpiydxRWJYbJfJp9j7N9iaVNTUWx4l2E2PG08zB3qSODQ\nGexEVZtOzgziLIBza/OO2tV0cHcejuPLO4I0S5EhPkGPvMW0BDFqM2oBPE7shUMK\nSUwu1j5cQK1mVEEo8hiprtf8ehcHYr6gxpCQbyr+jV8G5+OAT4k14+GzJ+n3WF1S\n+2ykMm8K1wa2TbhaITk+GmrjyqmIIqEBqQdvb1WbgQOQiA2fwdsTN4ePo3avd9C9\nQkPMYZRMilCThG4CNZZb7pJWP1UOFyfMBZH4F868SYjMVMICju+guC1dQ+g2dMZ4\nXPu7RrvA8xOnKkEdRX9zuLWDNQaLReeD/YEbjNPxqqFUTW/knxEMhX4ZhW2Xe166\nUgkBJvpEW1r00hnMXfOLqH5ZJPa8pA==\n-----END PUBLIC KEY-----", + "publicKeyDerBase64": "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", + "provider": "default" + }, + "invalidVariants": [ + { + "id": "ml_dsa_87-tampered-payload", + "compact": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJ3cml0ZTp0YW1wZXJlZCIsImlhdCI6MTczNTY4OTYwMCwiYWxnIjoiTUwtRFNBLTg3In0.I0J2SMyWPKN20TnhmLVV8WfXxlIbZaOly0T7omgCdih_-0gEI4D0N8ZCkZrjoDOw9GPtX-8sgM9KraHyWkZoVF9zkgKsQeSZ7TOzsPYZ7C8tODi6oxwyD8uRm3n6DY91MfSiJ_kEcqH7n8PMwSdeHaTgV7RZu7LVmiVe9Kf3Lwx_caqB1B4AmDO9-otx9uxPVoJjmtU_JlT9QCQb4e4UogBGHS_iU9NdV1E74jGUrVd3jPsfpUCACb0kx5rW_27U4JyXTAoZ0M34bd2QU7z9qdq1gQq9SaaFx7IhVAvCxrWJQSrsprxRzb2MR0epdGnnXdCRn9q8o6TnAE1pVS17jOzVsGRTY62WkTObyHw-PJRAu-oEOAetNfnF2E1lH9Na-eofzoabo8d-VKy7G7i9oDAx-JbSj4wlYhfsByhyVI-LyObririv0c7ObGvhi5kMvUoK8JhuL9YsGUeWA4pR4lE_y-7bBc5Xa6D_ewMtsgtIEJZ-CKc0yb4q9xjRsaQnSWnQj17dXvlnzvmsL2SPWp3lDn4T4wH5IqGnecibLxiomuUU_wkY5jO_SqAIBf2-V3qnM29a8r8psStFRRNNmS-v32kcmmpuRkyAuXoS0w-6j7B9hYu08vDCMbXZXTlRZBCfYpmc3_IDwVK4oOcFyL5-klqc6t_urZCGxeN3XOwN58LnlZPSAIzabZ4-72B526iUuNUpXAR1zx_Wq0OaQTQLN3I6FojGZHG7V1GcQSvYka3SbzWbMomc7Iu_QPnpEliiVFu5qQviAKaKkidUi5_7zAp5pkcoI97pelzZiSoXPSSlxPbLS5LGE2FdCAudeGAoHMMyJX1EpHtxkGJZiT4kBvD6LdXReqvzzgA4Vct3jfKM71qxdlYZvBcwLujrVgqNSWW9R_Fu5r6AS-ZzlS7MlrT1zeh5aNpZ8cw3HJWvG2oGUhKvwQY6NBGz98UP6erLpPDpbGOS8HnkoLvL5HvgHWwDe_6uvLVLM49h06gpoLe30nOETRNfhU-sQuF1MU8B_2LOzJxBxI6IcSQSTabZDZIhYcFdEzJvQrXJSwI6FXs0NbLv_B8q7ZqgYbQDWxPa0fQvHo3Fq8M0MAAF0eLx9nXu2MYIHf-S-JP96Sywe_B3NtjjrOsAna9YlUo-6oy4s8UOq60CV4U9hN_SNMGudi_FPFtM13Il1hhgHpB_8FwMIUoBwWsmCL21AmNRf-cdyHayDW6-ldmoA5UAkVE8U4YH9ETzdw63zO1Ve3t6y9FSLJYBT0k7cZot3OUQOhpBgkSRJMSS9PF-4Wbqa4pyZj7nWY2s8H_iaGbk2FtcOWnBuRd0UB0DTjVnP_90MOvHdvvlqIeHurahT-Izf3Llq6hbOy498lUaLst6E5RB5lJS7NzKrI8zmEOnRbiZw4jfy1ZtP3f5WUENcb5bWRR8Y0DUSYYvAFEl_gsdglFN_YPcZa8uKGq4ASwGJg1x_jCB19I5BxOi2uYHYIwyEJzKOfgYjlQBspscsqMl_OW7iyEuLSO_OiuYcFzl6Oi6TlxS9XcbrrgvNb8rrL8s6cODi9K_8OWnUA4RWxivNJ0J0fnvvDny1tRKCBpvGOvCGEYGEmzDogAfWpDYsBYycLJdgnvgf-QFKZr-ksIbnA9TLOG6o1gvVTgBIvsQYy32BNrav32E4QSkEk08I9sKV53bvKdN1xZFG08nj4OJo2JfBip0bH2rX519-Bitta_eGqp08jY68roF8Uvq85y5A0QB7FzoP_ZOEzOUkNuuU2Ccc1jbMWe6asjkS6OwmXrS5WZqyY3wK5hRWRcnSD02NVjpST93PuI9ywiXSPXEBQwgN7_aYWJP-5c7MEArVCaO8Ro3K4cknGpCQYY3lFp85peRAPWrVrj8-Kb1DugBEE6qc1CvGVKYKx0cEFey2aHaCJ66MB2yqYANmMhdd7RCc4iTTXa0KJW2p48gXeep1Dhtv6x9fsB7jyqQRa13bOFdcpzj9FUe0xrN94e-ajDqaf_FXJAJPtGj29iTDQGBtZnMu0V66h0Q1kpx7i1eNzBCveoYYUVunC137EcbXZh3seu8Dal83eCpaw-Y7BJvGLRTCz2UPEUOisTLsdxuBuXSX96yKoUZ_Ye6LIj1FNXSvrlMM0Invh2t4siUPkI1GvA6Z5QwgQZIFDHURt_7DM-LWxekFtdh9r3CpUwlXb8BMzqcZnVrzFlD1Ti1OZpupTjXcHHm5KJ5GmeaW_9iVb1o5uTjtEwMaaqIioSXGUWKFQIZi7rqJ9iZm6LHpnS3gElG20XIfNu0Z4pEPXKiOPwxXFtdJetDnd7_RVJeppAcQlB9DBFDKJwwqfKEvoyB_iNp0_UrTfNIkDxMxPt-ZOICa_qnEvH5Dnxa1dRqgeBfJKgKP46EbkoBRWiiZp0cGANe5IU4sVZ7NqvvBHdwAltxwNUDjucRWR9-3juqrHPKTrfY0xoiO-rH0ZUf8c4Ackm2bL0dx9JVwikjZzAIbGidsaI6wmo2BywKRAw1B61Qlgp1M86mB6xq56EoTLc9VDRGRQQVzW1H0MQwvaDFgl87YfYgksWiIksQN3dcrE2qrzX_JrwX0J8bM81xzbR1HqSO414llP_d_xIDKQdDNr45DMRdUbzfA-mMCN995ByS3-1nEOoXz1lc0bsBM0dMBPBsQ_UVmLuuC_0vMkQeGEKhkUuut3T_ib_wk91bZTNaF_zkJvQm1ic0DhtA4ZpjgvXlzF_0-iKnzV6VNEk4kNSb6JQGlrDKTyPfKW2XdVlHiH69iCSuXsa_oDlHShfpSEVhYXUhoUFIToCIWeYli43bOseHk39zNi7nFOjK_HRv7Yq6_5hiEgbNqZvmXz_F6-E4LT-AwrEgkysK9CTLACb3-fvRY_2xPjUSn6yUsocut1xdC1p8Tx83TsUAD26O9bQTh-MxdtVCV3WNhnWz21JnJbZfIfFC44_MeYrOlJMSahrs2UhhD-DouPVT60H4Q2bPud0Ka0_86qyv0tvF9CXIu5jz6dBsFLEPpdSNO10u_tU6X_KTwrXZC67QX3T6xwS3rzuOuMpBHnhJm8VTyHv629Hu9mzzR0LS4uNRD8y-X0S1qRzBgYR8CDyudraD4hnNYZuHoarJerMsV8qwri-nCp7ibQf14k-7qjKCKWaXWpQ6nTUJUxFEAcHdAjtN2oECof1WpBAguQixGtZr0TQFWxCsiGQAk1QXacrGNr3-tiN36622ixq0YQQm-L31hZZ5ZZTkSXYrSE0gm0U_FNEZ6joHAxcuQuTmIu_irDOYJz9PiCmVlWlFM8SA7Fiw-aoGxLBg1DgzNzB5ZLMAAz5lvi1n7fByt2fhlnZdf2fSVyNfA2Q1V58eAfrqqKM-FRIZ7vQPODuct5oCbANti2xnnFcAHJBanfYVe6pZ75Jb_Mv6dRKG-9fuIvf3AP4g3XZHNkj38HAM4-HezgFsVdu4KWiK8KqcEiI8F9st2Cgaxe-SNEXDuYO0a7HI9v6fCA39i9UoMZ6SxYsXOoaw9tTJuSYvHB0oN_Jwacv3JtLUWm0Zy58nclqWN2nd0UkPfc1jdfYEd_aVGsJUm5P_Dy6EL_0LJoDO9LueMbHGde_p8AWVa5ZiMSxOQLyYnPUHrgK3zoe40mIjA9TbBJZokQ_sYzEVrxRLu0j9es8db5s4dPmPzLaU-S7eEdPJrPmCGKLZiJiuSimkHCFAqMF4x3sFm6McPqo0vt304uYeEIDE1oUl_B7pgUEfjVKkiPQpNn0F6bbL07vimJeavWvCBicvymMVLlRzAivpdfcRFdzZcCO1N-3LKXgYzktyZDed-LRQgzTCB1zcpr4zDk8iZ2GCZRqxDnHJVaePF4_-IR6gR9Z9QpKPkGMeNoixqvppKjrByeI0C0mznTxI1fTRFlik-_IoirqOO8kyIxVeqwo6UHQNNJCzlrgS53ZcZEZGY63kGi0LNaDVcZdqbikVCoAF9TnHNzO0hIwB3HxszEyvyZFeENDVnl6g0rXUpFEt0QgFm987V1A7_vKUB00vfam5SMTJg9GqbBM-x8WuW_Uvg2voxA1BiWOx4l2tx9txdfJg4eDekY6tk-i5v53lW6JeLXIvRA3SJU9atj0kf3HvHCZc5VTct0CfCpXtEqjMnjvgjY97qUfXx0GMfQMmWPvkdAIqkxGLxT-Njy2yarm9pgMoJjm6EnWxorkV7hqifrhWog6U9Ni05vPQ9mBsNU4mIOIFEW-PUb2WBbqWqXHaALwJoeQzI3W5Cwb8CIJGjwvQtH2dg4rGMG-GZA-pa4d7VNmmmQ6MHgeKPcjyviy0-3sKTKqZosvv-aIWXah4yxvCYSyDviSKw9lMF24I9Q9KzE9lk_P2Wxkd9yFCwwuTgnFG3BDAXjrMEWfXCvhZsJf3yfU3iMyXcCje0Vz_UEgqHSNaDdNhLWf2-iz-OG4_0Ivc6foFaEbi7InyObH0TKAkqzNeSknMxnkapCArItwKWLObxvkdTjTaFT-N1TBODUci9TNENmjvBAWXzu1R9NHmJknVHzrQUSxzGoJiCrRMZRe4vjOOYWaVQVHUkVq3bxZA9RL444LG10mu8e_1iEjFy0eE87fQtBvn9y1qtvW_H7WxfmF8DM8BkvSwJKmfoIJ-0sL73gOtH1z4_IBr_bBxVF471Kn_1LkQLmFONKJV9KZjRTBp_vM6UnwiYGBKYDBFDWQ-0ossz0rOAk664XjPbdMRNWnXsRH5baK-t_PyxA2JfPNJ0lmxwIK6r28ldoEt6aZVN1umHF73djNnwWRpIcTjvXzKCyNs0OQmW6olQejORRVHCuXRT4xUQfuK1Q98ix885sVmcPCMNRRAdtspXRWEiOe6SKyfcChvPDObm1ls6H2TP0s16uVztJ0wkmWUTKpWDJ4_ProECs22Mgehl9Q2ehB4v_PPVnR6a-K1PIxzPVJJ-AHKQIbQaoIz6zLNawtCJPbLI4ebp4dRU6DduDnkVB-EO47qfUNiKf_ohzYcQKTqQT63SGI_T-Np39p_lYEgeHxbtOnWrthKhrBvPSvRjIWQBrkbATsMU4unOoj068mP6b3BPBP_2Rip1cK4hU9WH-afKwhAs50EQ9yjZ8TSZweeB9Fwld0VQGY3O1_RDgamKKO0jza9RQnLaSA4wRZj3NZ7ElhP2PwWJa_Luw5j_TiYBkXpI71PsBpjcvAmZi18h0OKN3RCT96k5Hh_WJs37tmP96nXqaL5PUkAO6ZhH6uDccHL3GNnOJy7RFf4N1VHj4WOeOHBOg0kdMs1HVeFwnDFFPVAbJyHTpvnNKFnxrwlYeCJDnFZHZCK8EZ3Tmd_dgYUyco2hNFzLGHLurhDx_3KFIJ0cO5iBMHJ0cN4FKH8xT6ZF4__XvovCjDoWFAtvC-ZWIFYZl-HD0kiAZtQISUU_VKWexqAlip-ixwt_H2cx7CnWm2c9HeVJE-Y8BtwWQBXWAJ_sof9T2tARMRwUKOJ6ZzwoDgfLWoTDEWpHFkozPGrnLGqeI3ERr1l7E8XHEIYaw92ruD2oAErmP325mm6wfIA9FIfeFD5jT48n9G4w5JQrRZMrAtu6sfjnCN6lloosNYnoEz1g6V_Uyuf_Vls83l6VdqyOj2zHyqWwTwkajkP9CH2Ee7I0IlKrNXH2sNlnNSgxFN3sQ0XaYKbAO4hOgSyYHXIvJh-B2rWEnOGyf-IG0PFr-1vjBydhAnGp9zmriun3FO7Uc-8pxvrcdGuGUfgoaUrdxXudGy1CJXTDJUaOzHjczJQb9MnHhj4PvjdaewYGZPpzTdmYz0DHyMr8qriRwqSnMd_TUs69RsxbMjOH3NS4nGqcBjcpRxUIC-NINDTByHMor6A-3QCAnTAXSZNFxxzivNfNfYztQSWvSJCg4XQ9H_ubxBxJL85Da5OJ002bJVik7KVPFFxp97GQdQMzT0-OvjQdP3n4-fwyxBSL4On6iTgPbiSLZaW3KxkLY7tK_ufeMyZjYh1scIvD1tK7rlD7fD-zhTH1ZYtMxWW1z7Z8FzN2u1FX7ynVcf6b-zhVRgpXcUnw7W0Ps1DQn3E7uMMOkcUw-URImaOp7W50eT5GjNjcoe_4fwmcJywt_MKCy-HkaKwwANNg4zk6_JLW3qBueRDasTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDRUbIyowNA", + "expectedFailure": "signature_mismatch" + }, + { + "id": "ml_dsa_87-malformed", + "compact": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtODcifQ", + "expectedFailure": "format_error" + } + ] + } + ] +} diff --git a/packages/pq-jws/test-data/test-jws/README.md b/packages/pq-jws/test-data/test-jws/README.md new file mode 100644 index 0000000..fb35e85 --- /dev/null +++ b/packages/pq-jws/test-data/test-jws/README.md @@ -0,0 +1,46 @@ +# pq-jws Test Fixtures + +This directory stores committed compact JWS fixture data for `packages/pq-jws/ts/tests/fixtures.test.ts`. + +## Generation Source + +- Backend tooling: `openquantumsafe/oqs-ossl3` +- Pinned image: `openquantumsafe/oqs-ossl3@sha256:48b586a2734452fcaff76bad81cba63d37bc8410510e05a40674b450c0ded559` +- Provider: `default` +- Algorithms captured: `ML-DSA-44`, `ML-DSA-65`, `ML-DSA-87` +- Initial capture date: `2026-02-26` + +Captured command set used to produce source material: + +```bash +openssl genpkey -algorithm -out +openssl pkey -in -pubout -out +openssl pkeyutl -sign -inkey -in -out +``` + +## Deterministic Reproduction Contract + +`ML-DSA` key generation and signing in OQS OpenSSL are randomized, so this package uses deterministic template replay for reproducibility. + +- Source template: `packages/pq-jws/scripts/test-jws-source-fixtures.json` +- Deterministic controls: + - fixed canonical fixture ordering + - pinned source image digest + provider metadata + - `seedMode: template-replay` + +To regenerate committed artifacts: + +```bash +bun packages/pq-jws/scripts/generate-test-jws-fixtures.ts +``` + +To verify artifacts are up to date: + +```bash +bun packages/pq-jws/scripts/generate-test-jws-fixtures.ts --check +``` + +## Artifact Files + +- `fixtures.json`: fixture vectors (valid + invalid variants) +- `manifest.json`: fixture integrity metadata (`sha256`, counts, deterministic controls) diff --git a/packages/pq-jws/test-data/test-jws/fixtures.json b/packages/pq-jws/test-data/test-jws/fixtures.json new file mode 100644 index 0000000..f58b1e3 --- /dev/null +++ b/packages/pq-jws/test-data/test-jws/fixtures.json @@ -0,0 +1,135 @@ +{ + "metadata": { + "generatedAt": "2026-02-26T11:48:55.576Z", + "source": { + "backend": "openquantumsafe/oqs-ossl3", + "image": "openquantumsafe/oqs-ossl3@sha256:48b586a2734452fcaff76bad81cba63d37bc8410510e05a40674b450c0ded559", + "commandSet": [ + "openssl genpkey -algorithm ", + "openssl pkey -in -pubout", + "openssl pkeyutl -sign -inkey -in " + ], + "deterministicControls": { + "canonicalFixtureOrdering": true, + "seedMode": "template-replay", + "note": "ML-DSA keygen/signing in OQS OpenSSL are randomized; committed fixtures are replayed deterministically by generator script." + } + } + }, + "fixtures": [ + { + "id": "ml_dsa_44", + "algorithm": "ML-DSA-44", + "protectedHeader": { + "alg": "ML-DSA-44", + "kid": "ml_dsa_44-fixture-key", + "typ": "JOSE" + }, + "payload": { + "iss": "pq-jws-fixture-suite", + "sub": "alice", + "scope": "read:fixtures", + "iat": 1735689600, + "alg": "ML-DSA-44" + }, + "compact": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNDQifQ.q_j7uMeBTIHLrotkVYeWHUMur_yQTSBOzZxakOVhv6wvr-YXk1cAoL-ihluS2boI1dFMZQhMQtxu1xNlIiOBkbExNgyPG3TZhImUxeXwaYz_HVl1_ImxYl7ZjgktBCh1bl-nF86clhGlmNWXBckMf-u02bgxquxMr4xuR32uRbmG87k-sL0VUoV2orpLkBGKhJJ53a1zINi8mxU33D2WeBN8Xv3oWSqtuyAQfyHva499UJDK98YbQ32ICQIueicg32DCq2meDOFJyjwzdJ2glqFvWcgvS2LfiU5Rm_PfN10gL0lTMSyAUjYJoybmR9DMA7vzt22MWto3pF5_05uEypZF1cJGIWTcSbUKOzzCqZff6yfoG1lgrjdzu-D5IzCxYGqB4xEPlWbPtgslDfjgSH2SalKBH9iaByRLcmSTI5I-SLevNDFKd_TrCYh_kLlD_ljJjOT4ynQgRyUllMlVolLJCxwyqEBxCw2iJ7ER0uUcppZFD69RPb4d_n4rC73Ia6ogorWOYXpr140NJM6P7S6-DWpX-0gcHmktdq_SKO7RGvyUqy6UVRh3NAVgEl7eZxd1QaXSOpmKo20sC8HBNqEIXDl1aYJrcgWMflINECP2O2HkExjRftVcIHAz2SKryTYIM0Equh8slJXXDM8NQORrJ5d5OqPdpAIhcsnn32RL-XocumXtFaqxoXq8E39TfjtuEUrv1bzKRLRjtfKKNFSZhGVAoyZ8iECgcpScD7Lez0gqYxyRwRgxi7hIZ0qhM2HEnJOeOKz3Orl7T4W3JUF3luiDhYkj-Yw40G5tyi1pMGZcuPWFa99b_ZN6CmmjtfoOtnxIRNv8zoGW1cld5TQ0UvWk-95aX8zS8_S_RA8LPmyby1OiQHltni2EJrfdQ3C8A8tIS82lerLAeNAQZMpUEpUaOfh7lvZ5VSQFIW7GE4KqpZkLRSGXZv8iDs6kzS2rl6Ye4CNMZn0p3_ArK7cM1kIxUWJ5vdJ0cyRtTBIKJjqDLLPb6PVkgH3nM-hdKssoG0OUTk_GBtZIIKEfx30Zm0TygmSSRHNie2maCKjiOurXn32-dxydnZN0eA_6ELx_q7ur8ZDPst_uunBpP9sIUVks_kZGQPh7xpJOAUjm0F-IC0Gu6zeggeQ2DlirjzVqCd5nMHCq4WUZZ9NEqta4RVb-zfO_Mk0p2d4nx1smUFJJg7W8SRyOpvpU6W9EITUjG9kgDKpqIZ8ClzckpM7dUxoXa9iBrxqUzzDI2qXooWp2OgiPaq3TB16xfZnq5xzhOAP4kNK0E-Rd_asEyFkE4k4OubLa_swKrQ4s8o4ifeOSeFGkUPQGLJ-KwN49eFwWqbp34-e_Ys31bDjc36tLiajXdeZD0b10eJX6IOPLBJNY8syz2p88xzG914S0JB5UHMixicYRC8qKN4RTKHKtL2bQohKxHh23mCf2akgfH8HJA5tf_sYNx6B4XS0jvcWuIxHYL0D3unQxNOQjf44A9MhEZogVN7SgsJtp19LFqS55C-c7dH_Dup6ETAxguADljlgzlq98bxzDaq3sSRGhC9ELVYKwfjKRK8FhAzg-66Jg0ReBq4WRci8S4VvIvJT4J-EeHS0sPmi_Do3Sim_tTBROrQMP_XM_1mpmjJ0P9EC-Iw9mjUEcxrVPzGNAn3O_C6nKw_8ST4iw1ZtsPmtX5zx9XO9tytaV1L04K9sVIHtNI7aKbsOukGRUsdE4QHoFT8ND3TvTkGOIsNm8clSEG55YV3HdepvGctJIfdm0-i_ruRQh8s4Qwj05wjvo9Sw1J8Z9We4_p3csJJxNC1bGmkRgAzanTmgLg9RSjbxPaBXqjXgG8m9asmap6xOQZUANhz1EGB40gib7screPvULcPo_dCzW0o0v4HIEn1bfj0bHG2Ac5-_MmVSfTv8py2NGuzWbApPJBx7hCIpTZrSSSq2T4OkNoSFxeHpVN2867WtKbG8vgXVG-ggJqdtCgLdCZlEwF2vbAzrUy8F7L75Y4x3AaYGaGGVANlVGsK5WvVw85hYU5liRRCLmxhrTU-VxAPZp6Ksnx9X-_OgAgLFTxxL4nzViBSd7B0C25yenYV9d2CM7qYzw_ZPprxdB5dI6h-sIEETJgdlfKhz4njTYRn0tY8_yuTbr_IQgqt4tdaG50ihWtXhr80yuqilEW7gKlO1Glix9U2gquett8Sqbk0JqI_uJyPoq2YmObvz9WCwpY0zW3wmbvxJf8EHEvlJiJWurTQjTNTSTI4XaeizQgR7tGr5LhI8OKEgulbm66vMnG91_ukPXvOobzOn-Lnh4I0UaIHR31ySm2clyp95AfEFH1WnkaJ1p6iXahNzOULVCnvIsPV2Mne4lsMCugjBbeMTp1hcHWdR5IiYmaeS3-J37QsSJlgQVgJh6WCXPRpmP3bzc6dwA9XD8SyyXHrYT_bU1cFY-rwsysanqVk1pV6ujookJpz7xqgBiimr6kiKFoGlyzLqRFQK5mdj97sJGRyLAcO57xt9HROzWPl3veb1uOSjISSlxFI8w7dAIaFAy4ao6Hr05Fzcd4sl5-GkgF6yH3n9Qzl0Wmmh1CR00D3VEQH--41fbI9YFmD2A1oGWPTUYCsuCswfe9nXvKuGj7h2IK8gfLici4G38x7huA_kNA_xnEQbrdcNhKEvDK_6gYQap5Ri4gsE90lyazoO8Xpy9I1euPAArX45UeY5KdPMYA80zAyfo-O96KNe-Un4Do_b8FFDUUXfxvvt1x4DCwJjM5m2LcrBgsFkPwNy9vjwCt07am7YmfzgNEaZLp7A93Xbzy-VZezfC9Ne3vf6Vkophlp9snFNA0eibiyzsiaah2w75l-dM7Ms3olus3r9WmrTrf5T39Cp8Iyx1RaLJ_LQxBaunZoyN_EmlH46Kg5Atjw6KOwjt-bswnLfY0U3dYQXuKbPnOKZMNq0xaBfAnRv2KeAowaiMGFmQH2nzE74vzZKh5OItZXpFuqzvt-Ig6TrLyDHTyd6ccdMonQXj3cuv4OJdr7-55qLRyQ4R5jcgjkfb2YntIt77IgLjUkilH9KGF6fmWQisbZP4TW0O00Mvu5qZ9DetS5DLtf7IwV-EHXQkc-0GY8OAQHQBBw8VGy80P4WVpK60w97x-xMWKisuND9AQ3N1fYSTlJu4wsTKzevv_R4iQk1UWnp8iqivv_kmLjFMTVdjcnuZnrLBy9zj5_oAAAAAAAAAABEpNkg", + "signingInput": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNDQifQ", + "encodedProtectedHeader": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0", + "encodedPayload": "eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNDQifQ", + "signatureBase64Url": "q_j7uMeBTIHLrotkVYeWHUMur_yQTSBOzZxakOVhv6wvr-YXk1cAoL-ihluS2boI1dFMZQhMQtxu1xNlIiOBkbExNgyPG3TZhImUxeXwaYz_HVl1_ImxYl7ZjgktBCh1bl-nF86clhGlmNWXBckMf-u02bgxquxMr4xuR32uRbmG87k-sL0VUoV2orpLkBGKhJJ53a1zINi8mxU33D2WeBN8Xv3oWSqtuyAQfyHva499UJDK98YbQ32ICQIueicg32DCq2meDOFJyjwzdJ2glqFvWcgvS2LfiU5Rm_PfN10gL0lTMSyAUjYJoybmR9DMA7vzt22MWto3pF5_05uEypZF1cJGIWTcSbUKOzzCqZff6yfoG1lgrjdzu-D5IzCxYGqB4xEPlWbPtgslDfjgSH2SalKBH9iaByRLcmSTI5I-SLevNDFKd_TrCYh_kLlD_ljJjOT4ynQgRyUllMlVolLJCxwyqEBxCw2iJ7ER0uUcppZFD69RPb4d_n4rC73Ia6ogorWOYXpr140NJM6P7S6-DWpX-0gcHmktdq_SKO7RGvyUqy6UVRh3NAVgEl7eZxd1QaXSOpmKo20sC8HBNqEIXDl1aYJrcgWMflINECP2O2HkExjRftVcIHAz2SKryTYIM0Equh8slJXXDM8NQORrJ5d5OqPdpAIhcsnn32RL-XocumXtFaqxoXq8E39TfjtuEUrv1bzKRLRjtfKKNFSZhGVAoyZ8iECgcpScD7Lez0gqYxyRwRgxi7hIZ0qhM2HEnJOeOKz3Orl7T4W3JUF3luiDhYkj-Yw40G5tyi1pMGZcuPWFa99b_ZN6CmmjtfoOtnxIRNv8zoGW1cld5TQ0UvWk-95aX8zS8_S_RA8LPmyby1OiQHltni2EJrfdQ3C8A8tIS82lerLAeNAQZMpUEpUaOfh7lvZ5VSQFIW7GE4KqpZkLRSGXZv8iDs6kzS2rl6Ye4CNMZn0p3_ArK7cM1kIxUWJ5vdJ0cyRtTBIKJjqDLLPb6PVkgH3nM-hdKssoG0OUTk_GBtZIIKEfx30Zm0TygmSSRHNie2maCKjiOurXn32-dxydnZN0eA_6ELx_q7ur8ZDPst_uunBpP9sIUVks_kZGQPh7xpJOAUjm0F-IC0Gu6zeggeQ2DlirjzVqCd5nMHCq4WUZZ9NEqta4RVb-zfO_Mk0p2d4nx1smUFJJg7W8SRyOpvpU6W9EITUjG9kgDKpqIZ8ClzckpM7dUxoXa9iBrxqUzzDI2qXooWp2OgiPaq3TB16xfZnq5xzhOAP4kNK0E-Rd_asEyFkE4k4OubLa_swKrQ4s8o4ifeOSeFGkUPQGLJ-KwN49eFwWqbp34-e_Ys31bDjc36tLiajXdeZD0b10eJX6IOPLBJNY8syz2p88xzG914S0JB5UHMixicYRC8qKN4RTKHKtL2bQohKxHh23mCf2akgfH8HJA5tf_sYNx6B4XS0jvcWuIxHYL0D3unQxNOQjf44A9MhEZogVN7SgsJtp19LFqS55C-c7dH_Dup6ETAxguADljlgzlq98bxzDaq3sSRGhC9ELVYKwfjKRK8FhAzg-66Jg0ReBq4WRci8S4VvIvJT4J-EeHS0sPmi_Do3Sim_tTBROrQMP_XM_1mpmjJ0P9EC-Iw9mjUEcxrVPzGNAn3O_C6nKw_8ST4iw1ZtsPmtX5zx9XO9tytaV1L04K9sVIHtNI7aKbsOukGRUsdE4QHoFT8ND3TvTkGOIsNm8clSEG55YV3HdepvGctJIfdm0-i_ruRQh8s4Qwj05wjvo9Sw1J8Z9We4_p3csJJxNC1bGmkRgAzanTmgLg9RSjbxPaBXqjXgG8m9asmap6xOQZUANhz1EGB40gib7screPvULcPo_dCzW0o0v4HIEn1bfj0bHG2Ac5-_MmVSfTv8py2NGuzWbApPJBx7hCIpTZrSSSq2T4OkNoSFxeHpVN2867WtKbG8vgXVG-ggJqdtCgLdCZlEwF2vbAzrUy8F7L75Y4x3AaYGaGGVANlVGsK5WvVw85hYU5liRRCLmxhrTU-VxAPZp6Ksnx9X-_OgAgLFTxxL4nzViBSd7B0C25yenYV9d2CM7qYzw_ZPprxdB5dI6h-sIEETJgdlfKhz4njTYRn0tY8_yuTbr_IQgqt4tdaG50ihWtXhr80yuqilEW7gKlO1Glix9U2gquett8Sqbk0JqI_uJyPoq2YmObvz9WCwpY0zW3wmbvxJf8EHEvlJiJWurTQjTNTSTI4XaeizQgR7tGr5LhI8OKEgulbm66vMnG91_ukPXvOobzOn-Lnh4I0UaIHR31ySm2clyp95AfEFH1WnkaJ1p6iXahNzOULVCnvIsPV2Mne4lsMCugjBbeMTp1hcHWdR5IiYmaeS3-J37QsSJlgQVgJh6WCXPRpmP3bzc6dwA9XD8SyyXHrYT_bU1cFY-rwsysanqVk1pV6ujookJpz7xqgBiimr6kiKFoGlyzLqRFQK5mdj97sJGRyLAcO57xt9HROzWPl3veb1uOSjISSlxFI8w7dAIaFAy4ao6Hr05Fzcd4sl5-GkgF6yH3n9Qzl0Wmmh1CR00D3VEQH--41fbI9YFmD2A1oGWPTUYCsuCswfe9nXvKuGj7h2IK8gfLici4G38x7huA_kNA_xnEQbrdcNhKEvDK_6gYQap5Ri4gsE90lyazoO8Xpy9I1euPAArX45UeY5KdPMYA80zAyfo-O96KNe-Un4Do_b8FFDUUXfxvvt1x4DCwJjM5m2LcrBgsFkPwNy9vjwCt07am7YmfzgNEaZLp7A93Xbzy-VZezfC9Ne3vf6Vkophlp9snFNA0eibiyzsiaah2w75l-dM7Ms3olus3r9WmrTrf5T39Cp8Iyx1RaLJ_LQxBaunZoyN_EmlH46Kg5Atjw6KOwjt-bswnLfY0U3dYQXuKbPnOKZMNq0xaBfAnRv2KeAowaiMGFmQH2nzE74vzZKh5OItZXpFuqzvt-Ig6TrLyDHTyd6ccdMonQXj3cuv4OJdr7-55qLRyQ4R5jcgjkfb2YntIt77IgLjUkilH9KGF6fmWQisbZP4TW0O00Mvu5qZ9DetS5DLtf7IwV-EHXQkc-0GY8OAQHQBBw8VGy80P4WVpK60w97x-xMWKisuND9AQ3N1fYSTlJu4wsTKzevv_R4iQk1UWnp8iqivv_kmLjFMTVdjcnuZnrLBy9zj5_oAAAAAAAAAABEpNkg", + "verificationMaterial": { + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIFMjALBglghkgBZQMEAxEDggUhANV/2i1JpILPaeFl5ODKVSTMP9AQfVXuetRF\nBsNEqgQjXFrK6s09yodJOkn9jJj95eX7wq4jxb3rue3eLNXhszrTy1rg51WjEbYE\n6gGHnVi91f20U8F33FniuD1uaxlZlSiGJpLjyeloniUar1LkdDizJSQiBk8m5N6K\n1TCBlNdJdeGC+5bNjzxh8YeQaOJ6d6ojRdBmo2YuAI+xXToCErld3Zu2HDj8HyqO\ngEB00vDBnRUNy+tSUWuzKmQdZ6VxhK+RZIzYrPxwzE2+nIK+FxET9pR+nGY4KQt9\nBr/adnxIwe4L+wu46ZzUAVzkDTrKHMEpaD/GLDW7L9Up8uRWAY3BLtF81CwyVljP\nmwGjYkap0NGOazbZYrV46SekxXPI78kzS2roe92mZty9dUpspRsvXLDyZbsKsxmx\nxbR17eG6M271XTNn4PVYsjeEH3NZ58ThcoKJbnyS+vpOwAp/Fobcn2QFr/G5VNqi\nhgCLMTqZY3WHIVrEIR3ykhm4S0hZ29VwP93haf+ptWWV0ph85+Hu7kZVhUUajlC9\n+704yu3YuAStrsKi3WnoJHLS0sZ178I7WfxIeJOq/vSf66QasUCo5brhKESxDpHh\nbdmB02rU9ve7vpaXkjYOJtgVVW07sUY3KfPDfZ08UzYifzRQd+lLvnlzG2nnsjNT\nCghk2JHvrpKnHeUaPGce7p16vxSqbbJ4rUFONzXKnpLgPU55tXMEhUD3LUWWd7Jr\nScgTq3BPwPia3zJbcaYP3WoqwVXhRcRH3RlwrdZUowmP4zB0nBydU3N8mXyEr5Wm\nqI6z/T0yR8dbxQ6joB4W+45pMQh1UlxUe9E70JNjXPZQUax4gmfb+0MqnHpk/GJd\nP85W2TKQEAdcKuAy7X0rGplkxLMRfneQCSxrhavq1CYXWWDRrGZ0a+e9rIWa91IB\n786udtL02Bxg9hbp+3XfG+wtJd6thfpA6hB1ZZCuPdF1vAvnn8MirgJdqM1yO58+\nvM2Tk/N3eznfym4NcpJjh57WiHH4fKKb6jAWy9rCVOdXtSpZnT/mLEMbAaiFYGm4\n+URIQ8g6gx2VDFt/ywRZN2eC0ml8f/mNffmJQkp2R22Nh67HjjogPe77nNNRM+df\nHJs/8RgzewQfvBZ6mfWryc6MDBio5PIpEG5lXqtanJecwX5cVMh/NK99GdLKdt0G\nxzhbQrmgtAl1N2JS6TqXTCAKvKKfNF6VGzSspu6yAt+shctwBv494QlAxKKWvHFG\nRHaKPb2TqUpW5AOWX0IQknx7V1SWZf2VqzUGvdJGEer9i7xF+Em3Ti0zd5fK4OFW\nWL6oEEVQ4pyPfjHgF5QX7+TKhkQsPP3YFq5SZKDEFqQvWy+Cn2QRImOE7M3AxUJm\nwvNY5ITff8sB1WUXbjvG1TJ2EoGgkp/5GsMRm6LPLinskLLJCZqNe88L7ftu8O5B\n9I6r7IEK2wpy8Zx+c+dXEV5uzh8tifNzNGPmUvQjSuu/AI/gdmqexIV+zBFPSwFO\nvYfhabMaInQT/+/MOyfgs4SbPqAVqMgURjKTZJD4yQWHdvoE06O61DlQRkI4Pogt\nF4b25S2LrRLTFCKWVlK9P+BXWjHCXPM8r5+GJekTTgfzeYgUHBs/Idpl6/J/YiJG\nvPkmGOds0e9HgNLy4BU42X4hrWlksdj9rkneCu+T9nYgQwoCw1Z17FBvUP/dBGTV\naYVyBIOIXGSaTyBrfFQsteu0AmimP0mwB2YuFsRWcuweVDQLeOE=\n-----END PUBLIC KEY-----", + "publicKeyDerBase64": "MIIFMjALBglghkgBZQMEAxEDggUhANV/2i1JpILPaeFl5ODKVSTMP9AQfVXuetRFBsNEqgQjXFrK6s09yodJOkn9jJj95eX7wq4jxb3rue3eLNXhszrTy1rg51WjEbYE6gGHnVi91f20U8F33FniuD1uaxlZlSiGJpLjyeloniUar1LkdDizJSQiBk8m5N6K1TCBlNdJdeGC+5bNjzxh8YeQaOJ6d6ojRdBmo2YuAI+xXToCErld3Zu2HDj8HyqOgEB00vDBnRUNy+tSUWuzKmQdZ6VxhK+RZIzYrPxwzE2+nIK+FxET9pR+nGY4KQt9Br/adnxIwe4L+wu46ZzUAVzkDTrKHMEpaD/GLDW7L9Up8uRWAY3BLtF81CwyVljPmwGjYkap0NGOazbZYrV46SekxXPI78kzS2roe92mZty9dUpspRsvXLDyZbsKsxmxxbR17eG6M271XTNn4PVYsjeEH3NZ58ThcoKJbnyS+vpOwAp/Fobcn2QFr/G5VNqihgCLMTqZY3WHIVrEIR3ykhm4S0hZ29VwP93haf+ptWWV0ph85+Hu7kZVhUUajlC9+704yu3YuAStrsKi3WnoJHLS0sZ178I7WfxIeJOq/vSf66QasUCo5brhKESxDpHhbdmB02rU9ve7vpaXkjYOJtgVVW07sUY3KfPDfZ08UzYifzRQd+lLvnlzG2nnsjNTCghk2JHvrpKnHeUaPGce7p16vxSqbbJ4rUFONzXKnpLgPU55tXMEhUD3LUWWd7JrScgTq3BPwPia3zJbcaYP3WoqwVXhRcRH3RlwrdZUowmP4zB0nBydU3N8mXyEr5WmqI6z/T0yR8dbxQ6joB4W+45pMQh1UlxUe9E70JNjXPZQUax4gmfb+0MqnHpk/GJdP85W2TKQEAdcKuAy7X0rGplkxLMRfneQCSxrhavq1CYXWWDRrGZ0a+e9rIWa91IB786udtL02Bxg9hbp+3XfG+wtJd6thfpA6hB1ZZCuPdF1vAvnn8MirgJdqM1yO58+vM2Tk/N3eznfym4NcpJjh57WiHH4fKKb6jAWy9rCVOdXtSpZnT/mLEMbAaiFYGm4+URIQ8g6gx2VDFt/ywRZN2eC0ml8f/mNffmJQkp2R22Nh67HjjogPe77nNNRM+dfHJs/8RgzewQfvBZ6mfWryc6MDBio5PIpEG5lXqtanJecwX5cVMh/NK99GdLKdt0GxzhbQrmgtAl1N2JS6TqXTCAKvKKfNF6VGzSspu6yAt+shctwBv494QlAxKKWvHFGRHaKPb2TqUpW5AOWX0IQknx7V1SWZf2VqzUGvdJGEer9i7xF+Em3Ti0zd5fK4OFWWL6oEEVQ4pyPfjHgF5QX7+TKhkQsPP3YFq5SZKDEFqQvWy+Cn2QRImOE7M3AxUJmwvNY5ITff8sB1WUXbjvG1TJ2EoGgkp/5GsMRm6LPLinskLLJCZqNe88L7ftu8O5B9I6r7IEK2wpy8Zx+c+dXEV5uzh8tifNzNGPmUvQjSuu/AI/gdmqexIV+zBFPSwFOvYfhabMaInQT/+/MOyfgs4SbPqAVqMgURjKTZJD4yQWHdvoE06O61DlQRkI4PogtF4b25S2LrRLTFCKWVlK9P+BXWjHCXPM8r5+GJekTTgfzeYgUHBs/Idpl6/J/YiJGvPkmGOds0e9HgNLy4BU42X4hrWlksdj9rkneCu+T9nYgQwoCw1Z17FBvUP/dBGTVaYVyBIOIXGSaTyBrfFQsteu0AmimP0mwB2YuFsRWcuweVDQLeOE=", + "provider": "default" + }, + "invalidVariants": [ + { + "id": "ml_dsa_44-malformed", + "compact": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNDQifQ", + "expectedFailure": "format_error" + }, + { + "id": "ml_dsa_44-tampered-payload", + "compact": "eyJhbGciOiJNTC1EU0EtNDQiLCJraWQiOiJtbF9kc2FfNDQtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJ3cml0ZTp0YW1wZXJlZCIsImlhdCI6MTczNTY4OTYwMCwiYWxnIjoiTUwtRFNBLTQ0In0.q_j7uMeBTIHLrotkVYeWHUMur_yQTSBOzZxakOVhv6wvr-YXk1cAoL-ihluS2boI1dFMZQhMQtxu1xNlIiOBkbExNgyPG3TZhImUxeXwaYz_HVl1_ImxYl7ZjgktBCh1bl-nF86clhGlmNWXBckMf-u02bgxquxMr4xuR32uRbmG87k-sL0VUoV2orpLkBGKhJJ53a1zINi8mxU33D2WeBN8Xv3oWSqtuyAQfyHva499UJDK98YbQ32ICQIueicg32DCq2meDOFJyjwzdJ2glqFvWcgvS2LfiU5Rm_PfN10gL0lTMSyAUjYJoybmR9DMA7vzt22MWto3pF5_05uEypZF1cJGIWTcSbUKOzzCqZff6yfoG1lgrjdzu-D5IzCxYGqB4xEPlWbPtgslDfjgSH2SalKBH9iaByRLcmSTI5I-SLevNDFKd_TrCYh_kLlD_ljJjOT4ynQgRyUllMlVolLJCxwyqEBxCw2iJ7ER0uUcppZFD69RPb4d_n4rC73Ia6ogorWOYXpr140NJM6P7S6-DWpX-0gcHmktdq_SKO7RGvyUqy6UVRh3NAVgEl7eZxd1QaXSOpmKo20sC8HBNqEIXDl1aYJrcgWMflINECP2O2HkExjRftVcIHAz2SKryTYIM0Equh8slJXXDM8NQORrJ5d5OqPdpAIhcsnn32RL-XocumXtFaqxoXq8E39TfjtuEUrv1bzKRLRjtfKKNFSZhGVAoyZ8iECgcpScD7Lez0gqYxyRwRgxi7hIZ0qhM2HEnJOeOKz3Orl7T4W3JUF3luiDhYkj-Yw40G5tyi1pMGZcuPWFa99b_ZN6CmmjtfoOtnxIRNv8zoGW1cld5TQ0UvWk-95aX8zS8_S_RA8LPmyby1OiQHltni2EJrfdQ3C8A8tIS82lerLAeNAQZMpUEpUaOfh7lvZ5VSQFIW7GE4KqpZkLRSGXZv8iDs6kzS2rl6Ye4CNMZn0p3_ArK7cM1kIxUWJ5vdJ0cyRtTBIKJjqDLLPb6PVkgH3nM-hdKssoG0OUTk_GBtZIIKEfx30Zm0TygmSSRHNie2maCKjiOurXn32-dxydnZN0eA_6ELx_q7ur8ZDPst_uunBpP9sIUVks_kZGQPh7xpJOAUjm0F-IC0Gu6zeggeQ2DlirjzVqCd5nMHCq4WUZZ9NEqta4RVb-zfO_Mk0p2d4nx1smUFJJg7W8SRyOpvpU6W9EITUjG9kgDKpqIZ8ClzckpM7dUxoXa9iBrxqUzzDI2qXooWp2OgiPaq3TB16xfZnq5xzhOAP4kNK0E-Rd_asEyFkE4k4OubLa_swKrQ4s8o4ifeOSeFGkUPQGLJ-KwN49eFwWqbp34-e_Ys31bDjc36tLiajXdeZD0b10eJX6IOPLBJNY8syz2p88xzG914S0JB5UHMixicYRC8qKN4RTKHKtL2bQohKxHh23mCf2akgfH8HJA5tf_sYNx6B4XS0jvcWuIxHYL0D3unQxNOQjf44A9MhEZogVN7SgsJtp19LFqS55C-c7dH_Dup6ETAxguADljlgzlq98bxzDaq3sSRGhC9ELVYKwfjKRK8FhAzg-66Jg0ReBq4WRci8S4VvIvJT4J-EeHS0sPmi_Do3Sim_tTBROrQMP_XM_1mpmjJ0P9EC-Iw9mjUEcxrVPzGNAn3O_C6nKw_8ST4iw1ZtsPmtX5zx9XO9tytaV1L04K9sVIHtNI7aKbsOukGRUsdE4QHoFT8ND3TvTkGOIsNm8clSEG55YV3HdepvGctJIfdm0-i_ruRQh8s4Qwj05wjvo9Sw1J8Z9We4_p3csJJxNC1bGmkRgAzanTmgLg9RSjbxPaBXqjXgG8m9asmap6xOQZUANhz1EGB40gib7screPvULcPo_dCzW0o0v4HIEn1bfj0bHG2Ac5-_MmVSfTv8py2NGuzWbApPJBx7hCIpTZrSSSq2T4OkNoSFxeHpVN2867WtKbG8vgXVG-ggJqdtCgLdCZlEwF2vbAzrUy8F7L75Y4x3AaYGaGGVANlVGsK5WvVw85hYU5liRRCLmxhrTU-VxAPZp6Ksnx9X-_OgAgLFTxxL4nzViBSd7B0C25yenYV9d2CM7qYzw_ZPprxdB5dI6h-sIEETJgdlfKhz4njTYRn0tY8_yuTbr_IQgqt4tdaG50ihWtXhr80yuqilEW7gKlO1Glix9U2gquett8Sqbk0JqI_uJyPoq2YmObvz9WCwpY0zW3wmbvxJf8EHEvlJiJWurTQjTNTSTI4XaeizQgR7tGr5LhI8OKEgulbm66vMnG91_ukPXvOobzOn-Lnh4I0UaIHR31ySm2clyp95AfEFH1WnkaJ1p6iXahNzOULVCnvIsPV2Mne4lsMCugjBbeMTp1hcHWdR5IiYmaeS3-J37QsSJlgQVgJh6WCXPRpmP3bzc6dwA9XD8SyyXHrYT_bU1cFY-rwsysanqVk1pV6ujookJpz7xqgBiimr6kiKFoGlyzLqRFQK5mdj97sJGRyLAcO57xt9HROzWPl3veb1uOSjISSlxFI8w7dAIaFAy4ao6Hr05Fzcd4sl5-GkgF6yH3n9Qzl0Wmmh1CR00D3VEQH--41fbI9YFmD2A1oGWPTUYCsuCswfe9nXvKuGj7h2IK8gfLici4G38x7huA_kNA_xnEQbrdcNhKEvDK_6gYQap5Ri4gsE90lyazoO8Xpy9I1euPAArX45UeY5KdPMYA80zAyfo-O96KNe-Un4Do_b8FFDUUXfxvvt1x4DCwJjM5m2LcrBgsFkPwNy9vjwCt07am7YmfzgNEaZLp7A93Xbzy-VZezfC9Ne3vf6Vkophlp9snFNA0eibiyzsiaah2w75l-dM7Ms3olus3r9WmrTrf5T39Cp8Iyx1RaLJ_LQxBaunZoyN_EmlH46Kg5Atjw6KOwjt-bswnLfY0U3dYQXuKbPnOKZMNq0xaBfAnRv2KeAowaiMGFmQH2nzE74vzZKh5OItZXpFuqzvt-Ig6TrLyDHTyd6ccdMonQXj3cuv4OJdr7-55qLRyQ4R5jcgjkfb2YntIt77IgLjUkilH9KGF6fmWQisbZP4TW0O00Mvu5qZ9DetS5DLtf7IwV-EHXQkc-0GY8OAQHQBBw8VGy80P4WVpK60w97x-xMWKisuND9AQ3N1fYSTlJu4wsTKzevv_R4iQk1UWnp8iqivv_kmLjFMTVdjcnuZnrLBy9zj5_oAAAAAAAAAABEpNkg", + "expectedFailure": "signature_mismatch" + } + ] + }, + { + "id": "ml_dsa_65", + "algorithm": "ML-DSA-65", + "protectedHeader": { + "alg": "ML-DSA-65", + "kid": "ml_dsa_65-fixture-key", + "typ": "JOSE" + }, + "payload": { + "iss": "pq-jws-fixture-suite", + "sub": "alice", + "scope": "read:fixtures", + "iat": 1735689600, + "alg": "ML-DSA-65" + }, + "compact": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNjUifQ.Nxb9kPqyuZUT3ns940K6tAUHBarVzmp8R2Z2pmwR-a9xTbQSdvYSDQTVg-9366HOcn59wlfMX-IGa3dFdLdmq1KxgnQX2lyuUoID7Ze5uRT5iXDEwhlmU_NipXn5bw0CYQ__2qs2Aalgw0pdJ_1gpIMQ65UsjsIPfzz-4izlG8UM_hG6Dyt1ZB95wVD7p9MezzLisZNO-DOTPBd8Mq6EYmSQRYbqgbpwopD7u0tMTZ4k9TZTh5kr_5nQzlW-wgpYWeA0cbBqoFJ0te5PhUmLaWe-FBuEDglYjC0WUM-EDplmGCsZI9tGfpM841YYyrrNbiOXmI5WM7sgsuu67Umvjd2vvAD5aA92IjqhsVncMp-_byoh2gw0Xgz0BjqjnAw2CDeofek4pOdxOg0OzOkXcb8ptD-7b6FHq0lFdVixPrmqLaKtNpehP45yGFVigyhN-OkaKB1UsPFwbQKhmuwR1DlgqqVS9sFxGulx3qsCBDCd1Nh02IRKPjku-iRNOT3PoD90b2msrXSCFKO5ciGyD9upoCO-BppSTxh3ZeYfssdtpvgPAuuULGqgxrh1qTyq6tk8vfadOhT-nXD2iHbAwXbv4oBBZGvhmrHAGindwJnihGPTcx8v1gh1gJJy_FM8wFsKydu1HKj-CGM9hbS_v8-WLTPgCQsSb7EWLugLTsHOrQVOrNXvoUdQh07LzK5WUyfyR2UN2UO4qN1MAcJGQzseDzVuPGS0dE0M9w8wldjLcFxGUMjy21sJ6TtiioEyg8b5DgWkyraQWwa-AWe0Yy6tghnUBmERXojYwOZaUwJ0cKM-rJgxkT6CuGwdgkGbI7KpAhSKQbRvav89kIS-s1fRkyeVlT1ujurF0Dyp-H2G1ngfNk1DnMzuIztCPtqK0MwXeqf2R1Xf3-nv9CtHCcW9P5hS3WByzpeifrApT7Xn6eyYn3K53qDu5PttfDuks4_Ky-oP56I7AWxVtaD4h6piqrNjCpK56S5yH3ZGaMrO-gxxCIkilupP604UPVGdpcSF2c3c3i0o_GH67TxT4k96Kk5O9o6c3HYIKhW57z8VgfUgrQue8lLBhwFXS-SXe782pgMYqTnlIIqnJrR-T5K6kTQ4n8GE5HqBg6GXR6fv3Td4DMIf83ltSzJSfS78JJfLRqM6kWQiJimCSqGfarc2K49NgNLyobiUrcY-nvwGQqCISa2I4QXU4ZZIenwo4cwI4ikBrNusjpywpXHjSotYWhnwwQYzP6AAt9FKXPFIdJc1h5fiCJvuwHdJ2_HrEYT6FVJbMoIkuN8Fhgw8DtERCJn4DrEZ1NVxSc-cZqcGfGLPdeF0fx19zfgl_Tt-1tEfhKQ7nInsagg_d6d6304uY0RC7C0ZoziKaMuOnKLx6uC3WA4k-cAVbhqfWF63lk_3PmulMO-Xqbvk5soylKxPdqss99x3SJDPZbiUWCbuap1u-wGNmaH5Fifqw6cNVNdhB9TRq3swbayebu3U1DM1AaMZf78nXNx29M5cYjKvC_INmf0_q91IuE8oOaxMcqlU-aFZU6bjxN0jpBwWUjf90UFooddnrOWTwpfK-iEnhlFIjnTQAJ9G7wMB1QcFz5_AUu7vdZ6JO8exsioLR0JTu0nfzqHvx0Qgz4PMtvDN7wZCDE-FLRWGFO6ORcPmFrbJNlq0w8Qvf6QBjkZL7WuqEKM8L9L-NKjXkM2J5TQIhSQPoNH3J7HdI9GtzEO9bHxtsqTGaWq02FD-4-BFOMQpKqTTiIh9EdaOg2SWdvjPBIwS8hcIQ8SfWR5NFQk6NvwzI1NIJwOTSjVT3keqOEl54KXRe2-GLR6YjoeAxf1omk1Kbf0Wk9RaIDrwXbLCLeaZzYX6zIk2Q2m7l13BhvrU9y_pIWha8pCkTI-ioT2sCZ5Bq7YbwX0z4BM0UPoDUIkpyaaFZcEZ4h7SiQte8wB6IFI-i-iMmw-_bHQ-rYoOtK0UKchKEGm-OmuRsJepwZsfo9-7y4mlWUyCb_UdZoyeaHBNoMRswh7nvT06M1snzCd87fL0lf4_nV9vS4ty1p9yMz7z0kMbHflsOBThpLfWNRHJ3Dqhl9ViYB21Ro86dRPa-PpkRO1qiVzkU2wRNgXyXaidQfaWzSKwwl0AHWmD48ECSPei5ZsLDpJDEQnHHbkHLrzVd14NaI49MVlb_ZOwrj7GL5O2G0SipFZSQhW_rCi7rK5_djLfR_liu_qgCs2nLTveBaciogZvwkJdNb8NWa8g_ZshRen-_cOR6E3W-9GfdLJ9wyWEc4nuq8cqx7KmTeyj5MCLN9HIyCvEGbxm-LV7g0rKEwWLUIs-Klgm7uKjr2lAE-0tlLwfgJIX9XSRLFDtCO3ErwR1WGc77T4ylwod4ugzfCkWBkGZKMQ6-Tslj4YSEVyVWgVqFmnxMDgf84fdmri73RPGNypk5DBNVmUk4PgCY_dXYvVf2onXwlwsqXVOXUvR2jI_kn-sxxZoJ72mENxreEfgV2E4eh_alOhYyL4n-3nsO3Mkqoa7_-EGLThF8o20v79a-HoRhCY13GAUgqs3OcMXKXv-wTrmjN9tVSCRpyVRG8QUXXXDXqUeF3kyL3xX6gdPoqM2wSLQvi3sUIOFK9CZQgVuaKXuSachjKA1EHoz8wBkMgS00R8SkxXgxhH47WwJLD-NEa-Jc6baD9XyrsX5mFvFgznyzfXsOQ8w1WXY0YcqAAt2s0oi9cFWhXUQ6PC1JGqYPaMsdVZp0qemmP4RaNKW0ES1czQkBswndwGXHOgQ7_SsGhNzdrQSBt9sWUfvKCY7NFVPS1VZNtH8kMEls0M2EAqA49xANapoId4PTxv0s_o0UkFrnwX4IVuLBfFVsSqe33jHh4ypcHfO645KmJntmcqSvwFbsDXsCY8XmXlC8A3W61mx8pyb5lZBwyevtIIfjSltuP4P2mD0Ifzd-BwB-ThdzRKMGqV5cDzH3tzKtJX2Zv38VjDXHAwUnYhu5A5Foo37km2NP3ANE4aXGlbr-iy0Eug6ypwXxVFC8Xe5X7TxXA96hTiBDuMRA4XLNdJtM6AEUSCmCnRfSNuL4xsi3CtCMbEvqcMmjidd-IK1yhTXn4wLHPBnp7QhHXbs0Ad0tf3u9KeAackwrvhcLjM7lCeDftiooZq_U1RDa1zkdmWGAtAsSIe7AnEnc3u9xt6fd-Qt76WxQw3r0IyiGVjG4Y9Gf7GOTrnP-Wkukx2s1aB7y-hbM7CBGrJXFYDddYY3KjEO30VXP6XywmcDTnw3iyKYXa6jqimZ6NFg8gDixtpXElFaZI6IOi-nxKrpBFBWEmorqNpJ0TVog0fGzDR3-pmuvqNyM6052sYmwKeJVD-Y80lSHLEKVcu9MaoKCYtcxtggb1nczyHR7hONFw8WXLZOvgrk2wcZyi2YMjWDosPEOPlla0fQSZ5XlkXHwL9pctpCjM9bnFh-u0WyZFq-P945-W6MvdstyE2DG7k3nTxwwvIPVeJ92wg7Ew2VJ5aIGh3bUFBOECbu9FOyy-OZObSCXtarRpQ5XXbJ9NqO2idcKzLTBt_FIPERhc2nED63SgWNxvUh0Ai5KrwTz_aZOsmbRhRB7KEQmBzrDUFqA-Kocd27ZI9bGKf4-R_kAIJbtht_ohuD0LWf41FlZibQbMSyN0QvHGhrGFY41QuLJctQqO93YWy7L8U3vg2WHvrOd3F8Nw3b6YQFaOYsqK9JK-qELYjHABN5yyxvk_KbdKuIgc4HMt-iRn-Y0iI2mvyJlzHdAefaeshzY5a8LqsPe9ZOUMyZTv5y_ufXjQYPd9WY47iIkN8TR5MGLyFospMMH4bmzeroX1rg93RBSyauivq4521S3TaYkIIRs71ob_MiV2rzYVAsbbYWa_3eqoI2rpLqxTK6eo8qo8lyJVbxUCcuGG0_ptCNobVfvOaly6AAYTDYEl62P9RBKRMsOQ6cAKBWAsBxCNFmzeqQkxMmY9pBiA1xLRarIIl7LSp3j7ucMWAYZtYOPTmAKj3BgIbxuigkyR3qDsuL7ajMHwmdObGuOTfU_AOdDMGcS2iSHw1ry2WkT7WwS-SEn25LnFe9ChRULTR_pOs8ed4aYTtayseuKnEvJ_Wh4Vu7kCz7XA-fRqBXtgQbL5P0gaVRWdT4NeVWQBvIW-KLIhpBAkI5_or5ExQA8t_YpqNDPr3aCig_s57MkPztAXnPI2yzmHIpYnUH2FeZ2hEr_jGqj0stWapJ9jBD96bEjICwHqAFu-BiYFbAPYrhNezLFd_R2eosdUtJFUlDrLVK6sdc_bAYeRU-WoK90o3oeARJfhP5dqjZjKQJgQ_ISyKhjo_1k2UxMka3ISJ0marD1di_zQhDd4_T2_wWOHWLAClQUlxecnuJ9QAAAAAAAAAAAAAAAAAAAAAAAAAABAwOFRkj", + "signingInput": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNjUifQ", + "encodedProtectedHeader": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0", + "encodedPayload": "eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNjUifQ", + "signatureBase64Url": "Nxb9kPqyuZUT3ns940K6tAUHBarVzmp8R2Z2pmwR-a9xTbQSdvYSDQTVg-9366HOcn59wlfMX-IGa3dFdLdmq1KxgnQX2lyuUoID7Ze5uRT5iXDEwhlmU_NipXn5bw0CYQ__2qs2Aalgw0pdJ_1gpIMQ65UsjsIPfzz-4izlG8UM_hG6Dyt1ZB95wVD7p9MezzLisZNO-DOTPBd8Mq6EYmSQRYbqgbpwopD7u0tMTZ4k9TZTh5kr_5nQzlW-wgpYWeA0cbBqoFJ0te5PhUmLaWe-FBuEDglYjC0WUM-EDplmGCsZI9tGfpM841YYyrrNbiOXmI5WM7sgsuu67Umvjd2vvAD5aA92IjqhsVncMp-_byoh2gw0Xgz0BjqjnAw2CDeofek4pOdxOg0OzOkXcb8ptD-7b6FHq0lFdVixPrmqLaKtNpehP45yGFVigyhN-OkaKB1UsPFwbQKhmuwR1DlgqqVS9sFxGulx3qsCBDCd1Nh02IRKPjku-iRNOT3PoD90b2msrXSCFKO5ciGyD9upoCO-BppSTxh3ZeYfssdtpvgPAuuULGqgxrh1qTyq6tk8vfadOhT-nXD2iHbAwXbv4oBBZGvhmrHAGindwJnihGPTcx8v1gh1gJJy_FM8wFsKydu1HKj-CGM9hbS_v8-WLTPgCQsSb7EWLugLTsHOrQVOrNXvoUdQh07LzK5WUyfyR2UN2UO4qN1MAcJGQzseDzVuPGS0dE0M9w8wldjLcFxGUMjy21sJ6TtiioEyg8b5DgWkyraQWwa-AWe0Yy6tghnUBmERXojYwOZaUwJ0cKM-rJgxkT6CuGwdgkGbI7KpAhSKQbRvav89kIS-s1fRkyeVlT1ujurF0Dyp-H2G1ngfNk1DnMzuIztCPtqK0MwXeqf2R1Xf3-nv9CtHCcW9P5hS3WByzpeifrApT7Xn6eyYn3K53qDu5PttfDuks4_Ky-oP56I7AWxVtaD4h6piqrNjCpK56S5yH3ZGaMrO-gxxCIkilupP604UPVGdpcSF2c3c3i0o_GH67TxT4k96Kk5O9o6c3HYIKhW57z8VgfUgrQue8lLBhwFXS-SXe782pgMYqTnlIIqnJrR-T5K6kTQ4n8GE5HqBg6GXR6fv3Td4DMIf83ltSzJSfS78JJfLRqM6kWQiJimCSqGfarc2K49NgNLyobiUrcY-nvwGQqCISa2I4QXU4ZZIenwo4cwI4ikBrNusjpywpXHjSotYWhnwwQYzP6AAt9FKXPFIdJc1h5fiCJvuwHdJ2_HrEYT6FVJbMoIkuN8Fhgw8DtERCJn4DrEZ1NVxSc-cZqcGfGLPdeF0fx19zfgl_Tt-1tEfhKQ7nInsagg_d6d6304uY0RC7C0ZoziKaMuOnKLx6uC3WA4k-cAVbhqfWF63lk_3PmulMO-Xqbvk5soylKxPdqss99x3SJDPZbiUWCbuap1u-wGNmaH5Fifqw6cNVNdhB9TRq3swbayebu3U1DM1AaMZf78nXNx29M5cYjKvC_INmf0_q91IuE8oOaxMcqlU-aFZU6bjxN0jpBwWUjf90UFooddnrOWTwpfK-iEnhlFIjnTQAJ9G7wMB1QcFz5_AUu7vdZ6JO8exsioLR0JTu0nfzqHvx0Qgz4PMtvDN7wZCDE-FLRWGFO6ORcPmFrbJNlq0w8Qvf6QBjkZL7WuqEKM8L9L-NKjXkM2J5TQIhSQPoNH3J7HdI9GtzEO9bHxtsqTGaWq02FD-4-BFOMQpKqTTiIh9EdaOg2SWdvjPBIwS8hcIQ8SfWR5NFQk6NvwzI1NIJwOTSjVT3keqOEl54KXRe2-GLR6YjoeAxf1omk1Kbf0Wk9RaIDrwXbLCLeaZzYX6zIk2Q2m7l13BhvrU9y_pIWha8pCkTI-ioT2sCZ5Bq7YbwX0z4BM0UPoDUIkpyaaFZcEZ4h7SiQte8wB6IFI-i-iMmw-_bHQ-rYoOtK0UKchKEGm-OmuRsJepwZsfo9-7y4mlWUyCb_UdZoyeaHBNoMRswh7nvT06M1snzCd87fL0lf4_nV9vS4ty1p9yMz7z0kMbHflsOBThpLfWNRHJ3Dqhl9ViYB21Ro86dRPa-PpkRO1qiVzkU2wRNgXyXaidQfaWzSKwwl0AHWmD48ECSPei5ZsLDpJDEQnHHbkHLrzVd14NaI49MVlb_ZOwrj7GL5O2G0SipFZSQhW_rCi7rK5_djLfR_liu_qgCs2nLTveBaciogZvwkJdNb8NWa8g_ZshRen-_cOR6E3W-9GfdLJ9wyWEc4nuq8cqx7KmTeyj5MCLN9HIyCvEGbxm-LV7g0rKEwWLUIs-Klgm7uKjr2lAE-0tlLwfgJIX9XSRLFDtCO3ErwR1WGc77T4ylwod4ugzfCkWBkGZKMQ6-Tslj4YSEVyVWgVqFmnxMDgf84fdmri73RPGNypk5DBNVmUk4PgCY_dXYvVf2onXwlwsqXVOXUvR2jI_kn-sxxZoJ72mENxreEfgV2E4eh_alOhYyL4n-3nsO3Mkqoa7_-EGLThF8o20v79a-HoRhCY13GAUgqs3OcMXKXv-wTrmjN9tVSCRpyVRG8QUXXXDXqUeF3kyL3xX6gdPoqM2wSLQvi3sUIOFK9CZQgVuaKXuSachjKA1EHoz8wBkMgS00R8SkxXgxhH47WwJLD-NEa-Jc6baD9XyrsX5mFvFgznyzfXsOQ8w1WXY0YcqAAt2s0oi9cFWhXUQ6PC1JGqYPaMsdVZp0qemmP4RaNKW0ES1czQkBswndwGXHOgQ7_SsGhNzdrQSBt9sWUfvKCY7NFVPS1VZNtH8kMEls0M2EAqA49xANapoId4PTxv0s_o0UkFrnwX4IVuLBfFVsSqe33jHh4ypcHfO645KmJntmcqSvwFbsDXsCY8XmXlC8A3W61mx8pyb5lZBwyevtIIfjSltuP4P2mD0Ifzd-BwB-ThdzRKMGqV5cDzH3tzKtJX2Zv38VjDXHAwUnYhu5A5Foo37km2NP3ANE4aXGlbr-iy0Eug6ypwXxVFC8Xe5X7TxXA96hTiBDuMRA4XLNdJtM6AEUSCmCnRfSNuL4xsi3CtCMbEvqcMmjidd-IK1yhTXn4wLHPBnp7QhHXbs0Ad0tf3u9KeAackwrvhcLjM7lCeDftiooZq_U1RDa1zkdmWGAtAsSIe7AnEnc3u9xt6fd-Qt76WxQw3r0IyiGVjG4Y9Gf7GOTrnP-Wkukx2s1aB7y-hbM7CBGrJXFYDddYY3KjEO30VXP6XywmcDTnw3iyKYXa6jqimZ6NFg8gDixtpXElFaZI6IOi-nxKrpBFBWEmorqNpJ0TVog0fGzDR3-pmuvqNyM6052sYmwKeJVD-Y80lSHLEKVcu9MaoKCYtcxtggb1nczyHR7hONFw8WXLZOvgrk2wcZyi2YMjWDosPEOPlla0fQSZ5XlkXHwL9pctpCjM9bnFh-u0WyZFq-P945-W6MvdstyE2DG7k3nTxwwvIPVeJ92wg7Ew2VJ5aIGh3bUFBOECbu9FOyy-OZObSCXtarRpQ5XXbJ9NqO2idcKzLTBt_FIPERhc2nED63SgWNxvUh0Ai5KrwTz_aZOsmbRhRB7KEQmBzrDUFqA-Kocd27ZI9bGKf4-R_kAIJbtht_ohuD0LWf41FlZibQbMSyN0QvHGhrGFY41QuLJctQqO93YWy7L8U3vg2WHvrOd3F8Nw3b6YQFaOYsqK9JK-qELYjHABN5yyxvk_KbdKuIgc4HMt-iRn-Y0iI2mvyJlzHdAefaeshzY5a8LqsPe9ZOUMyZTv5y_ufXjQYPd9WY47iIkN8TR5MGLyFospMMH4bmzeroX1rg93RBSyauivq4521S3TaYkIIRs71ob_MiV2rzYVAsbbYWa_3eqoI2rpLqxTK6eo8qo8lyJVbxUCcuGG0_ptCNobVfvOaly6AAYTDYEl62P9RBKRMsOQ6cAKBWAsBxCNFmzeqQkxMmY9pBiA1xLRarIIl7LSp3j7ucMWAYZtYOPTmAKj3BgIbxuigkyR3qDsuL7ajMHwmdObGuOTfU_AOdDMGcS2iSHw1ry2WkT7WwS-SEn25LnFe9ChRULTR_pOs8ed4aYTtayseuKnEvJ_Wh4Vu7kCz7XA-fRqBXtgQbL5P0gaVRWdT4NeVWQBvIW-KLIhpBAkI5_or5ExQA8t_YpqNDPr3aCig_s57MkPztAXnPI2yzmHIpYnUH2FeZ2hEr_jGqj0stWapJ9jBD96bEjICwHqAFu-BiYFbAPYrhNezLFd_R2eosdUtJFUlDrLVK6sdc_bAYeRU-WoK90o3oeARJfhP5dqjZjKQJgQ_ISyKhjo_1k2UxMka3ISJ0marD1di_zQhDd4_T2_wWOHWLAClQUlxecnuJ9QAAAAAAAAAAAAAAAAAAAAAAAAAABAwOFRkj", + "verificationMaterial": { + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\n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\nkjw2tsBl\n-----END PUBLIC KEY-----", + "publicKeyDerBase64": "MIIHsjALBglghkgBZQMEAxIDggehAKy8XvEC0Gs3iYGbESynTKcjnNkF2ALZi2022KvMBca1ZRH6IrgTNwvkoak71LVILjp44Lbk0bCLZ+gHu9NNAn6EuRO0pmLzgjdW7i1Ot/qTIRwiYeco39VOLMUqmsvoCRDdLOw6qBPf2OauxBll/c5FREgroOzLz5qSDoND4J8EcTvJC2XPF0ZzJ+FeVAmtczT+ajKRO9AyjHmvWav2rRrRWvy6UdcBgDGH4p6vp5xEylT5+DLvnJH8LmcJYI2SA53AR9aSPXhtMHVveVvZMPKUV1IEYGmfLyU+ZW/yLFf1981msr5N9QJfQljlOZdsiGM4AFvSmHfQ0OsC+z4eHtcMJsFwEAEzeDaMNWoIc+e9zz7DoIYWBsguRTHWwqWFvUY0y3N2dIov9uU4LSj5pF359mO5nA3LgNrYHaCy5E2pQYHGwiW6gbcZuyRA8u63PsZciBwhL+1FrQa67dcCq7lXVHSG4d+21nAL86jbsHqvfGEsDrCSvJEJC3OAINPKgcCqLRswoMGnfMC+6nxjGWcGozRNvAHiejOnB0E/91VqZOwCreKVPpxv3hp2v/CpRX5v38GyJtpLs0PwBn9B4ZMW6tgJ3F74XOYxI4MKS8HyrCel6PeX99Q3kQMtiwgiSq32vqUCOyhueurLE73rDw3Ee7nuCLsmeFd8uWstrFFIiCs/xACbf1pFogyjjq+FhmivIW2NEn8sghZDo/oy58VmYtyucytLu43JQyzjkUdDR6GJhZ13TWW61pGayf+6KYEQRzjbVrFWVqmGzJc5qCj9DSwtjAtvGi2MRIVE/9IsY7hCt/C0FEQmf05+ZbFRuWozvYACzssyaTFOr+vK3cMK/vX4RFaSA+fWAomvCnrxHaZhZjVgyqqWI7oOjC1ZK3WGIFOzf7bv2gajsGFdfqTU+9TNrK+pspGq1P0DJ5AOOi37jBqP4nWb8SE1pdM2H0xKq1GQ4hmVQZDVSCVGMHKkCfM4dsfenN38Z7qrGw06BMZT2vzx7mopIzJOhZuNkqSMQexat9ForIDOwGyrsOaJBefA7U7VFA8Sa+XTfHbw+LvBOqbXdPTmIDdd06B6Nu5XfVaXCY+GGuA3j2vFSNEwXIDIheZ1c9w9prmherpU74QcsjEMPbMwbIIzTfvOMgWni41E0XXZOiTTVjml/lyZTp69Hd/tlyzA4Njh0ztJ8mju242+nPBDoueML+yvzUY2eDXxdGUg7hW86BlQUINH3Cs0FBsdUpbxBPVEB5/eGzrJVf90Gh4P7mY1t/SVT0dTCvht9G/rGRo0JJtUmJvSfo7AkuIcTYZ4RSjjnIvB286/HjWLBAh/nWYn4Io8XEMMgM5qQffumlxEMFybuwSTlKhOlYUQg3fhUsZJjwwqpC/+x++ppXU6Ub4XN13I+hX+x6aGpmUsyvJK57iqvdwE5LAws5yt4Ei8HoMMU74FQ11OCwQ0L2UeKBs42+rPr4SwxSAWFvYlbOcIY6wWMXW37GLbyuXx4HattNPt1BlARLJprHb1mBkdvsZNdiyhQAtxEf32mfoW/xfnUoO178gN0lZe5TZ9e8LDB7GznQoqHqA52Ji8kLI5Hlu48a48LjpMyO4tufFjgz6lCi10gYEt9aeZ3Ray3SyTFPOzgef9SN6XGH/f9NtjMUYBJvfEcrFIMgw2HgoeFPhguAWXZcMY4a7FrsAYeIulLk5q5yGohM3i8vfSkY6oieCHspaGG6DbKsWWf7kGse0ijU52SvwohVc0PE+x74FLYXXjWw0r5BJt08HwQPx5ydM1lXU1o8SHN3vdV8CzZy+kt3mftXTmC+lK4rJll2BgNXAeeLkQo7iZKYBupN+IZDlQnTkS3WQnEksNLj2MbmBnUhgEfJZVJY46Y3wh9EctcM3ib1gDo0Hy0dTUyVc/sf0ORP7UiOX2znfcdpdNbycuepgrNPM918T7Zfmah2/MCnJ2TyyBev3MCsBqwxNqGJ20x2R0AOZZkfNS9UXviJCjmhHX04ixWSvS75OMESAjvqVJo02qt2RZgr9ju4bLH2HheYLnddvfrw5f+RFvZFy94ghbEseWLtAnWZyQaD9bQBZ3wd+l6gZreCT0UZS8dkQ//L65o/QFdA7ZA9kIvjNSVdpBX4FEHssl6KNaUbCpbYb3AWt2bi1UzAJiy2QdS3pg+TkeilIr2q24tgrsyIx0oe21ir5/ZQwyFpxzXuxBj2ePZ/fzQbTytdoOFwSpzB9xM05k2ufE9sQcOIQgyx8PX0EwomcwO276uebq1ByIfqOfjpWB6zLQ0L/zUMwh4eV6C0WnMFbemLUJAusDhQiXpjmZtatYARKxLvqUTi33zNADu5fYIsJ6llJo4wTAsxUoqsGKJyhxdT1cEy2hq+QE9cbO315YMsdbezbepO625QaWrjJJ1sLv9/58/e8dQHHo1Bm/kEbA8XQwny+eW/by8Pg7A5ZHooA5Wg2HpkN4VSaSsBYFUD717Gs3svkr8d5JTG2e2XORQumNgtsCxR4XxvQhv5QkLMOl5YAur2JZfk0iO50vteUWuwiThPRfqZtPQvgdt0clGO3ZTUi1bCTg0Mf1aYGvwNfKlFenueqJkjw2tsBl", + "provider": "default" + }, + "invalidVariants": [ + { + "id": "ml_dsa_65-malformed", + "compact": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtNjUifQ", + "expectedFailure": "format_error" + }, + { + "id": "ml_dsa_65-tampered-payload", + "compact": "eyJhbGciOiJNTC1EU0EtNjUiLCJraWQiOiJtbF9kc2FfNjUtZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJ3cml0ZTp0YW1wZXJlZCIsImlhdCI6MTczNTY4OTYwMCwiYWxnIjoiTUwtRFNBLTY1In0.Nxb9kPqyuZUT3ns940K6tAUHBarVzmp8R2Z2pmwR-a9xTbQSdvYSDQTVg-9366HOcn59wlfMX-IGa3dFdLdmq1KxgnQX2lyuUoID7Ze5uRT5iXDEwhlmU_NipXn5bw0CYQ__2qs2Aalgw0pdJ_1gpIMQ65UsjsIPfzz-4izlG8UM_hG6Dyt1ZB95wVD7p9MezzLisZNO-DOTPBd8Mq6EYmSQRYbqgbpwopD7u0tMTZ4k9TZTh5kr_5nQzlW-wgpYWeA0cbBqoFJ0te5PhUmLaWe-FBuEDglYjC0WUM-EDplmGCsZI9tGfpM841YYyrrNbiOXmI5WM7sgsuu67Umvjd2vvAD5aA92IjqhsVncMp-_byoh2gw0Xgz0BjqjnAw2CDeofek4pOdxOg0OzOkXcb8ptD-7b6FHq0lFdVixPrmqLaKtNpehP45yGFVigyhN-OkaKB1UsPFwbQKhmuwR1DlgqqVS9sFxGulx3qsCBDCd1Nh02IRKPjku-iRNOT3PoD90b2msrXSCFKO5ciGyD9upoCO-BppSTxh3ZeYfssdtpvgPAuuULGqgxrh1qTyq6tk8vfadOhT-nXD2iHbAwXbv4oBBZGvhmrHAGindwJnihGPTcx8v1gh1gJJy_FM8wFsKydu1HKj-CGM9hbS_v8-WLTPgCQsSb7EWLugLTsHOrQVOrNXvoUdQh07LzK5WUyfyR2UN2UO4qN1MAcJGQzseDzVuPGS0dE0M9w8wldjLcFxGUMjy21sJ6TtiioEyg8b5DgWkyraQWwa-AWe0Yy6tghnUBmERXojYwOZaUwJ0cKM-rJgxkT6CuGwdgkGbI7KpAhSKQbRvav89kIS-s1fRkyeVlT1ujurF0Dyp-H2G1ngfNk1DnMzuIztCPtqK0MwXeqf2R1Xf3-nv9CtHCcW9P5hS3WByzpeifrApT7Xn6eyYn3K53qDu5PttfDuks4_Ky-oP56I7AWxVtaD4h6piqrNjCpK56S5yH3ZGaMrO-gxxCIkilupP604UPVGdpcSF2c3c3i0o_GH67TxT4k96Kk5O9o6c3HYIKhW57z8VgfUgrQue8lLBhwFXS-SXe782pgMYqTnlIIqnJrR-T5K6kTQ4n8GE5HqBg6GXR6fv3Td4DMIf83ltSzJSfS78JJfLRqM6kWQiJimCSqGfarc2K49NgNLyobiUrcY-nvwGQqCISa2I4QXU4ZZIenwo4cwI4ikBrNusjpywpXHjSotYWhnwwQYzP6AAt9FKXPFIdJc1h5fiCJvuwHdJ2_HrEYT6FVJbMoIkuN8Fhgw8DtERCJn4DrEZ1NVxSc-cZqcGfGLPdeF0fx19zfgl_Tt-1tEfhKQ7nInsagg_d6d6304uY0RC7C0ZoziKaMuOnKLx6uC3WA4k-cAVbhqfWF63lk_3PmulMO-Xqbvk5soylKxPdqss99x3SJDPZbiUWCbuap1u-wGNmaH5Fifqw6cNVNdhB9TRq3swbayebu3U1DM1AaMZf78nXNx29M5cYjKvC_INmf0_q91IuE8oOaxMcqlU-aFZU6bjxN0jpBwWUjf90UFooddnrOWTwpfK-iEnhlFIjnTQAJ9G7wMB1QcFz5_AUu7vdZ6JO8exsioLR0JTu0nfzqHvx0Qgz4PMtvDN7wZCDE-FLRWGFO6ORcPmFrbJNlq0w8Qvf6QBjkZL7WuqEKM8L9L-NKjXkM2J5TQIhSQPoNH3J7HdI9GtzEO9bHxtsqTGaWq02FD-4-BFOMQpKqTTiIh9EdaOg2SWdvjPBIwS8hcIQ8SfWR5NFQk6NvwzI1NIJwOTSjVT3keqOEl54KXRe2-GLR6YjoeAxf1omk1Kbf0Wk9RaIDrwXbLCLeaZzYX6zIk2Q2m7l13BhvrU9y_pIWha8pCkTI-ioT2sCZ5Bq7YbwX0z4BM0UPoDUIkpyaaFZcEZ4h7SiQte8wB6IFI-i-iMmw-_bHQ-rYoOtK0UKchKEGm-OmuRsJepwZsfo9-7y4mlWUyCb_UdZoyeaHBNoMRswh7nvT06M1snzCd87fL0lf4_nV9vS4ty1p9yMz7z0kMbHflsOBThpLfWNRHJ3Dqhl9ViYB21Ro86dRPa-PpkRO1qiVzkU2wRNgXyXaidQfaWzSKwwl0AHWmD48ECSPei5ZsLDpJDEQnHHbkHLrzVd14NaI49MVlb_ZOwrj7GL5O2G0SipFZSQhW_rCi7rK5_djLfR_liu_qgCs2nLTveBaciogZvwkJdNb8NWa8g_ZshRen-_cOR6E3W-9GfdLJ9wyWEc4nuq8cqx7KmTeyj5MCLN9HIyCvEGbxm-LV7g0rKEwWLUIs-Klgm7uKjr2lAE-0tlLwfgJIX9XSRLFDtCO3ErwR1WGc77T4ylwod4ugzfCkWBkGZKMQ6-Tslj4YSEVyVWgVqFmnxMDgf84fdmri73RPGNypk5DBNVmUk4PgCY_dXYvVf2onXwlwsqXVOXUvR2jI_kn-sxxZoJ72mENxreEfgV2E4eh_alOhYyL4n-3nsO3Mkqoa7_-EGLThF8o20v79a-HoRhCY13GAUgqs3OcMXKXv-wTrmjN9tVSCRpyVRG8QUXXXDXqUeF3kyL3xX6gdPoqM2wSLQvi3sUIOFK9CZQgVuaKXuSachjKA1EHoz8wBkMgS00R8SkxXgxhH47WwJLD-NEa-Jc6baD9XyrsX5mFvFgznyzfXsOQ8w1WXY0YcqAAt2s0oi9cFWhXUQ6PC1JGqYPaMsdVZp0qemmP4RaNKW0ES1czQkBswndwGXHOgQ7_SsGhNzdrQSBt9sWUfvKCY7NFVPS1VZNtH8kMEls0M2EAqA49xANapoId4PTxv0s_o0UkFrnwX4IVuLBfFVsSqe33jHh4ypcHfO645KmJntmcqSvwFbsDXsCY8XmXlC8A3W61mx8pyb5lZBwyevtIIfjSltuP4P2mD0Ifzd-BwB-ThdzRKMGqV5cDzH3tzKtJX2Zv38VjDXHAwUnYhu5A5Foo37km2NP3ANE4aXGlbr-iy0Eug6ypwXxVFC8Xe5X7TxXA96hTiBDuMRA4XLNdJtM6AEUSCmCnRfSNuL4xsi3CtCMbEvqcMmjidd-IK1yhTXn4wLHPBnp7QhHXbs0Ad0tf3u9KeAackwrvhcLjM7lCeDftiooZq_U1RDa1zkdmWGAtAsSIe7AnEnc3u9xt6fd-Qt76WxQw3r0IyiGVjG4Y9Gf7GOTrnP-Wkukx2s1aB7y-hbM7CBGrJXFYDddYY3KjEO30VXP6XywmcDTnw3iyKYXa6jqimZ6NFg8gDixtpXElFaZI6IOi-nxKrpBFBWEmorqNpJ0TVog0fGzDR3-pmuvqNyM6052sYmwKeJVD-Y80lSHLEKVcu9MaoKCYtcxtggb1nczyHR7hONFw8WXLZOvgrk2wcZyi2YMjWDosPEOPlla0fQSZ5XlkXHwL9pctpCjM9bnFh-u0WyZFq-P945-W6MvdstyE2DG7k3nTxwwvIPVeJ92wg7Ew2VJ5aIGh3bUFBOECbu9FOyy-OZObSCXtarRpQ5XXbJ9NqO2idcKzLTBt_FIPERhc2nED63SgWNxvUh0Ai5KrwTz_aZOsmbRhRB7KEQmBzrDUFqA-Kocd27ZI9bGKf4-R_kAIJbtht_ohuD0LWf41FlZibQbMSyN0QvHGhrGFY41QuLJctQqO93YWy7L8U3vg2WHvrOd3F8Nw3b6YQFaOYsqK9JK-qELYjHABN5yyxvk_KbdKuIgc4HMt-iRn-Y0iI2mvyJlzHdAefaeshzY5a8LqsPe9ZOUMyZTv5y_ufXjQYPd9WY47iIkN8TR5MGLyFospMMH4bmzeroX1rg93RBSyauivq4521S3TaYkIIRs71ob_MiV2rzYVAsbbYWa_3eqoI2rpLqxTK6eo8qo8lyJVbxUCcuGG0_ptCNobVfvOaly6AAYTDYEl62P9RBKRMsOQ6cAKBWAsBxCNFmzeqQkxMmY9pBiA1xLRarIIl7LSp3j7ucMWAYZtYOPTmAKj3BgIbxuigkyR3qDsuL7ajMHwmdObGuOTfU_AOdDMGcS2iSHw1ry2WkT7WwS-SEn25LnFe9ChRULTR_pOs8ed4aYTtayseuKnEvJ_Wh4Vu7kCz7XA-fRqBXtgQbL5P0gaVRWdT4NeVWQBvIW-KLIhpBAkI5_or5ExQA8t_YpqNDPr3aCig_s57MkPztAXnPI2yzmHIpYnUH2FeZ2hEr_jGqj0stWapJ9jBD96bEjICwHqAFu-BiYFbAPYrhNezLFd_R2eosdUtJFUlDrLVK6sdc_bAYeRU-WoK90o3oeARJfhP5dqjZjKQJgQ_ISyKhjo_1k2UxMka3ISJ0marD1di_zQhDd4_T2_wWOHWLAClQUlxecnuJ9QAAAAAAAAAAAAAAAAAAAAAAAAAABAwOFRkj", + "expectedFailure": "signature_mismatch" + } + ] + }, + { + "id": "ml_dsa_87", + "algorithm": "ML-DSA-87", + "protectedHeader": { + "alg": "ML-DSA-87", + "kid": "ml_dsa_87-fixture-key", + "typ": "JOSE" + }, + "payload": { + "iss": "pq-jws-fixture-suite", + "sub": "alice", + "scope": "read:fixtures", + "iat": 1735689600, + "alg": "ML-DSA-87" + }, + "compact": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtODcifQ.I0J2SMyWPKN20TnhmLVV8WfXxlIbZaOly0T7omgCdih_-0gEI4D0N8ZCkZrjoDOw9GPtX-8sgM9KraHyWkZoVF9zkgKsQeSZ7TOzsPYZ7C8tODi6oxwyD8uRm3n6DY91MfSiJ_kEcqH7n8PMwSdeHaTgV7RZu7LVmiVe9Kf3Lwx_caqB1B4AmDO9-otx9uxPVoJjmtU_JlT9QCQb4e4UogBGHS_iU9NdV1E74jGUrVd3jPsfpUCACb0kx5rW_27U4JyXTAoZ0M34bd2QU7z9qdq1gQq9SaaFx7IhVAvCxrWJQSrsprxRzb2MR0epdGnnXdCRn9q8o6TnAE1pVS17jOzVsGRTY62WkTObyHw-PJRAu-oEOAetNfnF2E1lH9Na-eofzoabo8d-VKy7G7i9oDAx-JbSj4wlYhfsByhyVI-LyObririv0c7ObGvhi5kMvUoK8JhuL9YsGUeWA4pR4lE_y-7bBc5Xa6D_ewMtsgtIEJZ-CKc0yb4q9xjRsaQnSWnQj17dXvlnzvmsL2SPWp3lDn4T4wH5IqGnecibLxiomuUU_wkY5jO_SqAIBf2-V3qnM29a8r8psStFRRNNmS-v32kcmmpuRkyAuXoS0w-6j7B9hYu08vDCMbXZXTlRZBCfYpmc3_IDwVK4oOcFyL5-klqc6t_urZCGxeN3XOwN58LnlZPSAIzabZ4-72B526iUuNUpXAR1zx_Wq0OaQTQLN3I6FojGZHG7V1GcQSvYka3SbzWbMomc7Iu_QPnpEliiVFu5qQviAKaKkidUi5_7zAp5pkcoI97pelzZiSoXPSSlxPbLS5LGE2FdCAudeGAoHMMyJX1EpHtxkGJZiT4kBvD6LdXReqvzzgA4Vct3jfKM71qxdlYZvBcwLujrVgqNSWW9R_Fu5r6AS-ZzlS7MlrT1zeh5aNpZ8cw3HJWvG2oGUhKvwQY6NBGz98UP6erLpPDpbGOS8HnkoLvL5HvgHWwDe_6uvLVLM49h06gpoLe30nOETRNfhU-sQuF1MU8B_2LOzJxBxI6IcSQSTabZDZIhYcFdEzJvQrXJSwI6FXs0NbLv_B8q7ZqgYbQDWxPa0fQvHo3Fq8M0MAAF0eLx9nXu2MYIHf-S-JP96Sywe_B3NtjjrOsAna9YlUo-6oy4s8UOq60CV4U9hN_SNMGudi_FPFtM13Il1hhgHpB_8FwMIUoBwWsmCL21AmNRf-cdyHayDW6-ldmoA5UAkVE8U4YH9ETzdw63zO1Ve3t6y9FSLJYBT0k7cZot3OUQOhpBgkSRJMSS9PF-4Wbqa4pyZj7nWY2s8H_iaGbk2FtcOWnBuRd0UB0DTjVnP_90MOvHdvvlqIeHurahT-Izf3Llq6hbOy498lUaLst6E5RB5lJS7NzKrI8zmEOnRbiZw4jfy1ZtP3f5WUENcb5bWRR8Y0DUSYYvAFEl_gsdglFN_YPcZa8uKGq4ASwGJg1x_jCB19I5BxOi2uYHYIwyEJzKOfgYjlQBspscsqMl_OW7iyEuLSO_OiuYcFzl6Oi6TlxS9XcbrrgvNb8rrL8s6cODi9K_8OWnUA4RWxivNJ0J0fnvvDny1tRKCBpvGOvCGEYGEmzDogAfWpDYsBYycLJdgnvgf-QFKZr-ksIbnA9TLOG6o1gvVTgBIvsQYy32BNrav32E4QSkEk08I9sKV53bvKdN1xZFG08nj4OJo2JfBip0bH2rX519-Bitta_eGqp08jY68roF8Uvq85y5A0QB7FzoP_ZOEzOUkNuuU2Ccc1jbMWe6asjkS6OwmXrS5WZqyY3wK5hRWRcnSD02NVjpST93PuI9ywiXSPXEBQwgN7_aYWJP-5c7MEArVCaO8Ro3K4cknGpCQYY3lFp85peRAPWrVrj8-Kb1DugBEE6qc1CvGVKYKx0cEFey2aHaCJ66MB2yqYANmMhdd7RCc4iTTXa0KJW2p48gXeep1Dhtv6x9fsB7jyqQRa13bOFdcpzj9FUe0xrN94e-ajDqaf_FXJAJPtGj29iTDQGBtZnMu0V66h0Q1kpx7i1eNzBCveoYYUVunC137EcbXZh3seu8Dal83eCpaw-Y7BJvGLRTCz2UPEUOisTLsdxuBuXSX96yKoUZ_Ye6LIj1FNXSvrlMM0Invh2t4siUPkI1GvA6Z5QwgQZIFDHURt_7DM-LWxekFtdh9r3CpUwlXb8BMzqcZnVrzFlD1Ti1OZpupTjXcHHm5KJ5GmeaW_9iVb1o5uTjtEwMaaqIioSXGUWKFQIZi7rqJ9iZm6LHpnS3gElG20XIfNu0Z4pEPXKiOPwxXFtdJetDnd7_RVJeppAcQlB9DBFDKJwwqfKEvoyB_iNp0_UrTfNIkDxMxPt-ZOICa_qnEvH5Dnxa1dRqgeBfJKgKP46EbkoBRWiiZp0cGANe5IU4sVZ7NqvvBHdwAltxwNUDjucRWR9-3juqrHPKTrfY0xoiO-rH0ZUf8c4Ackm2bL0dx9JVwikjZzAIbGidsaI6wmo2BywKRAw1B61Qlgp1M86mB6xq56EoTLc9VDRGRQQVzW1H0MQwvaDFgl87YfYgksWiIksQN3dcrE2qrzX_JrwX0J8bM81xzbR1HqSO414llP_d_xIDKQdDNr45DMRdUbzfA-mMCN995ByS3-1nEOoXz1lc0bsBM0dMBPBsQ_UVmLuuC_0vMkQeGEKhkUuut3T_ib_wk91bZTNaF_zkJvQm1ic0DhtA4ZpjgvXlzF_0-iKnzV6VNEk4kNSb6JQGlrDKTyPfKW2XdVlHiH69iCSuXsa_oDlHShfpSEVhYXUhoUFIToCIWeYli43bOseHk39zNi7nFOjK_HRv7Yq6_5hiEgbNqZvmXz_F6-E4LT-AwrEgkysK9CTLACb3-fvRY_2xPjUSn6yUsocut1xdC1p8Tx83TsUAD26O9bQTh-MxdtVCV3WNhnWz21JnJbZfIfFC44_MeYrOlJMSahrs2UhhD-DouPVT60H4Q2bPud0Ka0_86qyv0tvF9CXIu5jz6dBsFLEPpdSNO10u_tU6X_KTwrXZC67QX3T6xwS3rzuOuMpBHnhJm8VTyHv629Hu9mzzR0LS4uNRD8y-X0S1qRzBgYR8CDyudraD4hnNYZuHoarJerMsV8qwri-nCp7ibQf14k-7qjKCKWaXWpQ6nTUJUxFEAcHdAjtN2oECof1WpBAguQixGtZr0TQFWxCsiGQAk1QXacrGNr3-tiN36622ixq0YQQm-L31hZZ5ZZTkSXYrSE0gm0U_FNEZ6joHAxcuQuTmIu_irDOYJz9PiCmVlWlFM8SA7Fiw-aoGxLBg1DgzNzB5ZLMAAz5lvi1n7fByt2fhlnZdf2fSVyNfA2Q1V58eAfrqqKM-FRIZ7vQPODuct5oCbANti2xnnFcAHJBanfYVe6pZ75Jb_Mv6dRKG-9fuIvf3AP4g3XZHNkj38HAM4-HezgFsVdu4KWiK8KqcEiI8F9st2Cgaxe-SNEXDuYO0a7HI9v6fCA39i9UoMZ6SxYsXOoaw9tTJuSYvHB0oN_Jwacv3JtLUWm0Zy58nclqWN2nd0UkPfc1jdfYEd_aVGsJUm5P_Dy6EL_0LJoDO9LueMbHGde_p8AWVa5ZiMSxOQLyYnPUHrgK3zoe40mIjA9TbBJZokQ_sYzEVrxRLu0j9es8db5s4dPmPzLaU-S7eEdPJrPmCGKLZiJiuSimkHCFAqMF4x3sFm6McPqo0vt304uYeEIDE1oUl_B7pgUEfjVKkiPQpNn0F6bbL07vimJeavWvCBicvymMVLlRzAivpdfcRFdzZcCO1N-3LKXgYzktyZDed-LRQgzTCB1zcpr4zDk8iZ2GCZRqxDnHJVaePF4_-IR6gR9Z9QpKPkGMeNoixqvppKjrByeI0C0mznTxI1fTRFlik-_IoirqOO8kyIxVeqwo6UHQNNJCzlrgS53ZcZEZGY63kGi0LNaDVcZdqbikVCoAF9TnHNzO0hIwB3HxszEyvyZFeENDVnl6g0rXUpFEt0QgFm987V1A7_vKUB00vfam5SMTJg9GqbBM-x8WuW_Uvg2voxA1BiWOx4l2tx9txdfJg4eDekY6tk-i5v53lW6JeLXIvRA3SJU9atj0kf3HvHCZc5VTct0CfCpXtEqjMnjvgjY97qUfXx0GMfQMmWPvkdAIqkxGLxT-Njy2yarm9pgMoJjm6EnWxorkV7hqifrhWog6U9Ni05vPQ9mBsNU4mIOIFEW-PUb2WBbqWqXHaALwJoeQzI3W5Cwb8CIJGjwvQtH2dg4rGMG-GZA-pa4d7VNmmmQ6MHgeKPcjyviy0-3sKTKqZosvv-aIWXah4yxvCYSyDviSKw9lMF24I9Q9KzE9lk_P2Wxkd9yFCwwuTgnFG3BDAXjrMEWfXCvhZsJf3yfU3iMyXcCje0Vz_UEgqHSNaDdNhLWf2-iz-OG4_0Ivc6foFaEbi7InyObH0TKAkqzNeSknMxnkapCArItwKWLObxvkdTjTaFT-N1TBODUci9TNENmjvBAWXzu1R9NHmJknVHzrQUSxzGoJiCrRMZRe4vjOOYWaVQVHUkVq3bxZA9RL444LG10mu8e_1iEjFy0eE87fQtBvn9y1qtvW_H7WxfmF8DM8BkvSwJKmfoIJ-0sL73gOtH1z4_IBr_bBxVF471Kn_1LkQLmFONKJV9KZjRTBp_vM6UnwiYGBKYDBFDWQ-0ossz0rOAk664XjPbdMRNWnXsRH5baK-t_PyxA2JfPNJ0lmxwIK6r28ldoEt6aZVN1umHF73djNnwWRpIcTjvXzKCyNs0OQmW6olQejORRVHCuXRT4xUQfuK1Q98ix885sVmcPCMNRRAdtspXRWEiOe6SKyfcChvPDObm1ls6H2TP0s16uVztJ0wkmWUTKpWDJ4_ProECs22Mgehl9Q2ehB4v_PPVnR6a-K1PIxzPVJJ-AHKQIbQaoIz6zLNawtCJPbLI4ebp4dRU6DduDnkVB-EO47qfUNiKf_ohzYcQKTqQT63SGI_T-Np39p_lYEgeHxbtOnWrthKhrBvPSvRjIWQBrkbATsMU4unOoj068mP6b3BPBP_2Rip1cK4hU9WH-afKwhAs50EQ9yjZ8TSZweeB9Fwld0VQGY3O1_RDgamKKO0jza9RQnLaSA4wRZj3NZ7ElhP2PwWJa_Luw5j_TiYBkXpI71PsBpjcvAmZi18h0OKN3RCT96k5Hh_WJs37tmP96nXqaL5PUkAO6ZhH6uDccHL3GNnOJy7RFf4N1VHj4WOeOHBOg0kdMs1HVeFwnDFFPVAbJyHTpvnNKFnxrwlYeCJDnFZHZCK8EZ3Tmd_dgYUyco2hNFzLGHLurhDx_3KFIJ0cO5iBMHJ0cN4FKH8xT6ZF4__XvovCjDoWFAtvC-ZWIFYZl-HD0kiAZtQISUU_VKWexqAlip-ixwt_H2cx7CnWm2c9HeVJE-Y8BtwWQBXWAJ_sof9T2tARMRwUKOJ6ZzwoDgfLWoTDEWpHFkozPGrnLGqeI3ERr1l7E8XHEIYaw92ruD2oAErmP325mm6wfIA9FIfeFD5jT48n9G4w5JQrRZMrAtu6sfjnCN6lloosNYnoEz1g6V_Uyuf_Vls83l6VdqyOj2zHyqWwTwkajkP9CH2Ee7I0IlKrNXH2sNlnNSgxFN3sQ0XaYKbAO4hOgSyYHXIvJh-B2rWEnOGyf-IG0PFr-1vjBydhAnGp9zmriun3FO7Uc-8pxvrcdGuGUfgoaUrdxXudGy1CJXTDJUaOzHjczJQb9MnHhj4PvjdaewYGZPpzTdmYz0DHyMr8qriRwqSnMd_TUs69RsxbMjOH3NS4nGqcBjcpRxUIC-NINDTByHMor6A-3QCAnTAXSZNFxxzivNfNfYztQSWvSJCg4XQ9H_ubxBxJL85Da5OJ002bJVik7KVPFFxp97GQdQMzT0-OvjQdP3n4-fwyxBSL4On6iTgPbiSLZaW3KxkLY7tK_ufeMyZjYh1scIvD1tK7rlD7fD-zhTH1ZYtMxWW1z7Z8FzN2u1FX7ynVcf6b-zhVRgpXcUnw7W0Ps1DQn3E7uMMOkcUw-URImaOp7W50eT5GjNjcoe_4fwmcJywt_MKCy-HkaKwwANNg4zk6_JLW3qBueRDasTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDRUbIyowNA", + "signingInput": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtODcifQ", + "encodedProtectedHeader": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0", + "encodedPayload": "eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtODcifQ", + "signatureBase64Url": "I0J2SMyWPKN20TnhmLVV8WfXxlIbZaOly0T7omgCdih_-0gEI4D0N8ZCkZrjoDOw9GPtX-8sgM9KraHyWkZoVF9zkgKsQeSZ7TOzsPYZ7C8tODi6oxwyD8uRm3n6DY91MfSiJ_kEcqH7n8PMwSdeHaTgV7RZu7LVmiVe9Kf3Lwx_caqB1B4AmDO9-otx9uxPVoJjmtU_JlT9QCQb4e4UogBGHS_iU9NdV1E74jGUrVd3jPsfpUCACb0kx5rW_27U4JyXTAoZ0M34bd2QU7z9qdq1gQq9SaaFx7IhVAvCxrWJQSrsprxRzb2MR0epdGnnXdCRn9q8o6TnAE1pVS17jOzVsGRTY62WkTObyHw-PJRAu-oEOAetNfnF2E1lH9Na-eofzoabo8d-VKy7G7i9oDAx-JbSj4wlYhfsByhyVI-LyObririv0c7ObGvhi5kMvUoK8JhuL9YsGUeWA4pR4lE_y-7bBc5Xa6D_ewMtsgtIEJZ-CKc0yb4q9xjRsaQnSWnQj17dXvlnzvmsL2SPWp3lDn4T4wH5IqGnecibLxiomuUU_wkY5jO_SqAIBf2-V3qnM29a8r8psStFRRNNmS-v32kcmmpuRkyAuXoS0w-6j7B9hYu08vDCMbXZXTlRZBCfYpmc3_IDwVK4oOcFyL5-klqc6t_urZCGxeN3XOwN58LnlZPSAIzabZ4-72B526iUuNUpXAR1zx_Wq0OaQTQLN3I6FojGZHG7V1GcQSvYka3SbzWbMomc7Iu_QPnpEliiVFu5qQviAKaKkidUi5_7zAp5pkcoI97pelzZiSoXPSSlxPbLS5LGE2FdCAudeGAoHMMyJX1EpHtxkGJZiT4kBvD6LdXReqvzzgA4Vct3jfKM71qxdlYZvBcwLujrVgqNSWW9R_Fu5r6AS-ZzlS7MlrT1zeh5aNpZ8cw3HJWvG2oGUhKvwQY6NBGz98UP6erLpPDpbGOS8HnkoLvL5HvgHWwDe_6uvLVLM49h06gpoLe30nOETRNfhU-sQuF1MU8B_2LOzJxBxI6IcSQSTabZDZIhYcFdEzJvQrXJSwI6FXs0NbLv_B8q7ZqgYbQDWxPa0fQvHo3Fq8M0MAAF0eLx9nXu2MYIHf-S-JP96Sywe_B3NtjjrOsAna9YlUo-6oy4s8UOq60CV4U9hN_SNMGudi_FPFtM13Il1hhgHpB_8FwMIUoBwWsmCL21AmNRf-cdyHayDW6-ldmoA5UAkVE8U4YH9ETzdw63zO1Ve3t6y9FSLJYBT0k7cZot3OUQOhpBgkSRJMSS9PF-4Wbqa4pyZj7nWY2s8H_iaGbk2FtcOWnBuRd0UB0DTjVnP_90MOvHdvvlqIeHurahT-Izf3Llq6hbOy498lUaLst6E5RB5lJS7NzKrI8zmEOnRbiZw4jfy1ZtP3f5WUENcb5bWRR8Y0DUSYYvAFEl_gsdglFN_YPcZa8uKGq4ASwGJg1x_jCB19I5BxOi2uYHYIwyEJzKOfgYjlQBspscsqMl_OW7iyEuLSO_OiuYcFzl6Oi6TlxS9XcbrrgvNb8rrL8s6cODi9K_8OWnUA4RWxivNJ0J0fnvvDny1tRKCBpvGOvCGEYGEmzDogAfWpDYsBYycLJdgnvgf-QFKZr-ksIbnA9TLOG6o1gvVTgBIvsQYy32BNrav32E4QSkEk08I9sKV53bvKdN1xZFG08nj4OJo2JfBip0bH2rX519-Bitta_eGqp08jY68roF8Uvq85y5A0QB7FzoP_ZOEzOUkNuuU2Ccc1jbMWe6asjkS6OwmXrS5WZqyY3wK5hRWRcnSD02NVjpST93PuI9ywiXSPXEBQwgN7_aYWJP-5c7MEArVCaO8Ro3K4cknGpCQYY3lFp85peRAPWrVrj8-Kb1DugBEE6qc1CvGVKYKx0cEFey2aHaCJ66MB2yqYANmMhdd7RCc4iTTXa0KJW2p48gXeep1Dhtv6x9fsB7jyqQRa13bOFdcpzj9FUe0xrN94e-ajDqaf_FXJAJPtGj29iTDQGBtZnMu0V66h0Q1kpx7i1eNzBCveoYYUVunC137EcbXZh3seu8Dal83eCpaw-Y7BJvGLRTCz2UPEUOisTLsdxuBuXSX96yKoUZ_Ye6LIj1FNXSvrlMM0Invh2t4siUPkI1GvA6Z5QwgQZIFDHURt_7DM-LWxekFtdh9r3CpUwlXb8BMzqcZnVrzFlD1Ti1OZpupTjXcHHm5KJ5GmeaW_9iVb1o5uTjtEwMaaqIioSXGUWKFQIZi7rqJ9iZm6LHpnS3gElG20XIfNu0Z4pEPXKiOPwxXFtdJetDnd7_RVJeppAcQlB9DBFDKJwwqfKEvoyB_iNp0_UrTfNIkDxMxPt-ZOICa_qnEvH5Dnxa1dRqgeBfJKgKP46EbkoBRWiiZp0cGANe5IU4sVZ7NqvvBHdwAltxwNUDjucRWR9-3juqrHPKTrfY0xoiO-rH0ZUf8c4Ackm2bL0dx9JVwikjZzAIbGidsaI6wmo2BywKRAw1B61Qlgp1M86mB6xq56EoTLc9VDRGRQQVzW1H0MQwvaDFgl87YfYgksWiIksQN3dcrE2qrzX_JrwX0J8bM81xzbR1HqSO414llP_d_xIDKQdDNr45DMRdUbzfA-mMCN995ByS3-1nEOoXz1lc0bsBM0dMBPBsQ_UVmLuuC_0vMkQeGEKhkUuut3T_ib_wk91bZTNaF_zkJvQm1ic0DhtA4ZpjgvXlzF_0-iKnzV6VNEk4kNSb6JQGlrDKTyPfKW2XdVlHiH69iCSuXsa_oDlHShfpSEVhYXUhoUFIToCIWeYli43bOseHk39zNi7nFOjK_HRv7Yq6_5hiEgbNqZvmXz_F6-E4LT-AwrEgkysK9CTLACb3-fvRY_2xPjUSn6yUsocut1xdC1p8Tx83TsUAD26O9bQTh-MxdtVCV3WNhnWz21JnJbZfIfFC44_MeYrOlJMSahrs2UhhD-DouPVT60H4Q2bPud0Ka0_86qyv0tvF9CXIu5jz6dBsFLEPpdSNO10u_tU6X_KTwrXZC67QX3T6xwS3rzuOuMpBHnhJm8VTyHv629Hu9mzzR0LS4uNRD8y-X0S1qRzBgYR8CDyudraD4hnNYZuHoarJerMsV8qwri-nCp7ibQf14k-7qjKCKWaXWpQ6nTUJUxFEAcHdAjtN2oECof1WpBAguQixGtZr0TQFWxCsiGQAk1QXacrGNr3-tiN36622ixq0YQQm-L31hZZ5ZZTkSXYrSE0gm0U_FNEZ6joHAxcuQuTmIu_irDOYJz9PiCmVlWlFM8SA7Fiw-aoGxLBg1DgzNzB5ZLMAAz5lvi1n7fByt2fhlnZdf2fSVyNfA2Q1V58eAfrqqKM-FRIZ7vQPODuct5oCbANti2xnnFcAHJBanfYVe6pZ75Jb_Mv6dRKG-9fuIvf3AP4g3XZHNkj38HAM4-HezgFsVdu4KWiK8KqcEiI8F9st2Cgaxe-SNEXDuYO0a7HI9v6fCA39i9UoMZ6SxYsXOoaw9tTJuSYvHB0oN_Jwacv3JtLUWm0Zy58nclqWN2nd0UkPfc1jdfYEd_aVGsJUm5P_Dy6EL_0LJoDO9LueMbHGde_p8AWVa5ZiMSxOQLyYnPUHrgK3zoe40mIjA9TbBJZokQ_sYzEVrxRLu0j9es8db5s4dPmPzLaU-S7eEdPJrPmCGKLZiJiuSimkHCFAqMF4x3sFm6McPqo0vt304uYeEIDE1oUl_B7pgUEfjVKkiPQpNn0F6bbL07vimJeavWvCBicvymMVLlRzAivpdfcRFdzZcCO1N-3LKXgYzktyZDed-LRQgzTCB1zcpr4zDk8iZ2GCZRqxDnHJVaePF4_-IR6gR9Z9QpKPkGMeNoixqvppKjrByeI0C0mznTxI1fTRFlik-_IoirqOO8kyIxVeqwo6UHQNNJCzlrgS53ZcZEZGY63kGi0LNaDVcZdqbikVCoAF9TnHNzO0hIwB3HxszEyvyZFeENDVnl6g0rXUpFEt0QgFm987V1A7_vKUB00vfam5SMTJg9GqbBM-x8WuW_Uvg2voxA1BiWOx4l2tx9txdfJg4eDekY6tk-i5v53lW6JeLXIvRA3SJU9atj0kf3HvHCZc5VTct0CfCpXtEqjMnjvgjY97qUfXx0GMfQMmWPvkdAIqkxGLxT-Njy2yarm9pgMoJjm6EnWxorkV7hqifrhWog6U9Ni05vPQ9mBsNU4mIOIFEW-PUb2WBbqWqXHaALwJoeQzI3W5Cwb8CIJGjwvQtH2dg4rGMG-GZA-pa4d7VNmmmQ6MHgeKPcjyviy0-3sKTKqZosvv-aIWXah4yxvCYSyDviSKw9lMF24I9Q9KzE9lk_P2Wxkd9yFCwwuTgnFG3BDAXjrMEWfXCvhZsJf3yfU3iMyXcCje0Vz_UEgqHSNaDdNhLWf2-iz-OG4_0Ivc6foFaEbi7InyObH0TKAkqzNeSknMxnkapCArItwKWLObxvkdTjTaFT-N1TBODUci9TNENmjvBAWXzu1R9NHmJknVHzrQUSxzGoJiCrRMZRe4vjOOYWaVQVHUkVq3bxZA9RL444LG10mu8e_1iEjFy0eE87fQtBvn9y1qtvW_H7WxfmF8DM8BkvSwJKmfoIJ-0sL73gOtH1z4_IBr_bBxVF471Kn_1LkQLmFONKJV9KZjRTBp_vM6UnwiYGBKYDBFDWQ-0ossz0rOAk664XjPbdMRNWnXsRH5baK-t_PyxA2JfPNJ0lmxwIK6r28ldoEt6aZVN1umHF73djNnwWRpIcTjvXzKCyNs0OQmW6olQejORRVHCuXRT4xUQfuK1Q98ix885sVmcPCMNRRAdtspXRWEiOe6SKyfcChvPDObm1ls6H2TP0s16uVztJ0wkmWUTKpWDJ4_ProECs22Mgehl9Q2ehB4v_PPVnR6a-K1PIxzPVJJ-AHKQIbQaoIz6zLNawtCJPbLI4ebp4dRU6DduDnkVB-EO47qfUNiKf_ohzYcQKTqQT63SGI_T-Np39p_lYEgeHxbtOnWrthKhrBvPSvRjIWQBrkbATsMU4unOoj068mP6b3BPBP_2Rip1cK4hU9WH-afKwhAs50EQ9yjZ8TSZweeB9Fwld0VQGY3O1_RDgamKKO0jza9RQnLaSA4wRZj3NZ7ElhP2PwWJa_Luw5j_TiYBkXpI71PsBpjcvAmZi18h0OKN3RCT96k5Hh_WJs37tmP96nXqaL5PUkAO6ZhH6uDccHL3GNnOJy7RFf4N1VHj4WOeOHBOg0kdMs1HVeFwnDFFPVAbJyHTpvnNKFnxrwlYeCJDnFZHZCK8EZ3Tmd_dgYUyco2hNFzLGHLurhDx_3KFIJ0cO5iBMHJ0cN4FKH8xT6ZF4__XvovCjDoWFAtvC-ZWIFYZl-HD0kiAZtQISUU_VKWexqAlip-ixwt_H2cx7CnWm2c9HeVJE-Y8BtwWQBXWAJ_sof9T2tARMRwUKOJ6ZzwoDgfLWoTDEWpHFkozPGrnLGqeI3ERr1l7E8XHEIYaw92ruD2oAErmP325mm6wfIA9FIfeFD5jT48n9G4w5JQrRZMrAtu6sfjnCN6lloosNYnoEz1g6V_Uyuf_Vls83l6VdqyOj2zHyqWwTwkajkP9CH2Ee7I0IlKrNXH2sNlnNSgxFN3sQ0XaYKbAO4hOgSyYHXIvJh-B2rWEnOGyf-IG0PFr-1vjBydhAnGp9zmriun3FO7Uc-8pxvrcdGuGUfgoaUrdxXudGy1CJXTDJUaOzHjczJQb9MnHhj4PvjdaewYGZPpzTdmYz0DHyMr8qriRwqSnMd_TUs69RsxbMjOH3NS4nGqcBjcpRxUIC-NINDTByHMor6A-3QCAnTAXSZNFxxzivNfNfYztQSWvSJCg4XQ9H_ubxBxJL85Da5OJ002bJVik7KVPFFxp97GQdQMzT0-OvjQdP3n4-fwyxBSL4On6iTgPbiSLZaW3KxkLY7tK_ufeMyZjYh1scIvD1tK7rlD7fD-zhTH1ZYtMxWW1z7Z8FzN2u1FX7ynVcf6b-zhVRgpXcUnw7W0Ps1DQn3E7uMMOkcUw-URImaOp7W50eT5GjNjcoe_4fwmcJywt_MKCy-HkaKwwANNg4zk6_JLW3qBueRDasTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDRUbIyowNA", + "verificationMaterial": { + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\n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\nUgkBJvpEW1r00hnMXfOLqH5ZJPa8pA==\n-----END PUBLIC KEY-----", + "publicKeyDerBase64": "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", + "provider": "default" + }, + "invalidVariants": [ + { + "id": "ml_dsa_87-malformed", + "compact": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJyZWFkOmZpeHR1cmVzIiwiaWF0IjoxNzM1Njg5NjAwLCJhbGciOiJNTC1EU0EtODcifQ", + "expectedFailure": "format_error" + }, + { + "id": "ml_dsa_87-tampered-payload", + "compact": "eyJhbGciOiJNTC1EU0EtODciLCJraWQiOiJtbF9kc2FfODctZml4dHVyZS1rZXkiLCJ0eXAiOiJKT1NFIn0.eyJpc3MiOiJwcS1qd3MtZml4dHVyZS1zdWl0ZSIsInN1YiI6ImFsaWNlIiwic2NvcGUiOiJ3cml0ZTp0YW1wZXJlZCIsImlhdCI6MTczNTY4OTYwMCwiYWxnIjoiTUwtRFNBLTg3In0.I0J2SMyWPKN20TnhmLVV8WfXxlIbZaOly0T7omgCdih_-0gEI4D0N8ZCkZrjoDOw9GPtX-8sgM9KraHyWkZoVF9zkgKsQeSZ7TOzsPYZ7C8tODi6oxwyD8uRm3n6DY91MfSiJ_kEcqH7n8PMwSdeHaTgV7RZu7LVmiVe9Kf3Lwx_caqB1B4AmDO9-otx9uxPVoJjmtU_JlT9QCQb4e4UogBGHS_iU9NdV1E74jGUrVd3jPsfpUCACb0kx5rW_27U4JyXTAoZ0M34bd2QU7z9qdq1gQq9SaaFx7IhVAvCxrWJQSrsprxRzb2MR0epdGnnXdCRn9q8o6TnAE1pVS17jOzVsGRTY62WkTObyHw-PJRAu-oEOAetNfnF2E1lH9Na-eofzoabo8d-VKy7G7i9oDAx-JbSj4wlYhfsByhyVI-LyObririv0c7ObGvhi5kMvUoK8JhuL9YsGUeWA4pR4lE_y-7bBc5Xa6D_ewMtsgtIEJZ-CKc0yb4q9xjRsaQnSWnQj17dXvlnzvmsL2SPWp3lDn4T4wH5IqGnecibLxiomuUU_wkY5jO_SqAIBf2-V3qnM29a8r8psStFRRNNmS-v32kcmmpuRkyAuXoS0w-6j7B9hYu08vDCMbXZXTlRZBCfYpmc3_IDwVK4oOcFyL5-klqc6t_urZCGxeN3XOwN58LnlZPSAIzabZ4-72B526iUuNUpXAR1zx_Wq0OaQTQLN3I6FojGZHG7V1GcQSvYka3SbzWbMomc7Iu_QPnpEliiVFu5qQviAKaKkidUi5_7zAp5pkcoI97pelzZiSoXPSSlxPbLS5LGE2FdCAudeGAoHMMyJX1EpHtxkGJZiT4kBvD6LdXReqvzzgA4Vct3jfKM71qxdlYZvBcwLujrVgqNSWW9R_Fu5r6AS-ZzlS7MlrT1zeh5aNpZ8cw3HJWvG2oGUhKvwQY6NBGz98UP6erLpPDpbGOS8HnkoLvL5HvgHWwDe_6uvLVLM49h06gpoLe30nOETRNfhU-sQuF1MU8B_2LOzJxBxI6IcSQSTabZDZIhYcFdEzJvQrXJSwI6FXs0NbLv_B8q7ZqgYbQDWxPa0fQvHo3Fq8M0MAAF0eLx9nXu2MYIHf-S-JP96Sywe_B3NtjjrOsAna9YlUo-6oy4s8UOq60CV4U9hN_SNMGudi_FPFtM13Il1hhgHpB_8FwMIUoBwWsmCL21AmNRf-cdyHayDW6-ldmoA5UAkVE8U4YH9ETzdw63zO1Ve3t6y9FSLJYBT0k7cZot3OUQOhpBgkSRJMSS9PF-4Wbqa4pyZj7nWY2s8H_iaGbk2FtcOWnBuRd0UB0DTjVnP_90MOvHdvvlqIeHurahT-Izf3Llq6hbOy498lUaLst6E5RB5lJS7NzKrI8zmEOnRbiZw4jfy1ZtP3f5WUENcb5bWRR8Y0DUSYYvAFEl_gsdglFN_YPcZa8uKGq4ASwGJg1x_jCB19I5BxOi2uYHYIwyEJzKOfgYjlQBspscsqMl_OW7iyEuLSO_OiuYcFzl6Oi6TlxS9XcbrrgvNb8rrL8s6cODi9K_8OWnUA4RWxivNJ0J0fnvvDny1tRKCBpvGOvCGEYGEmzDogAfWpDYsBYycLJdgnvgf-QFKZr-ksIbnA9TLOG6o1gvVTgBIvsQYy32BNrav32E4QSkEk08I9sKV53bvKdN1xZFG08nj4OJo2JfBip0bH2rX519-Bitta_eGqp08jY68roF8Uvq85y5A0QB7FzoP_ZOEzOUkNuuU2Ccc1jbMWe6asjkS6OwmXrS5WZqyY3wK5hRWRcnSD02NVjpST93PuI9ywiXSPXEBQwgN7_aYWJP-5c7MEArVCaO8Ro3K4cknGpCQYY3lFp85peRAPWrVrj8-Kb1DugBEE6qc1CvGVKYKx0cEFey2aHaCJ66MB2yqYANmMhdd7RCc4iTTXa0KJW2p48gXeep1Dhtv6x9fsB7jyqQRa13bOFdcpzj9FUe0xrN94e-ajDqaf_FXJAJPtGj29iTDQGBtZnMu0V66h0Q1kpx7i1eNzBCveoYYUVunC137EcbXZh3seu8Dal83eCpaw-Y7BJvGLRTCz2UPEUOisTLsdxuBuXSX96yKoUZ_Ye6LIj1FNXSvrlMM0Invh2t4siUPkI1GvA6Z5QwgQZIFDHURt_7DM-LWxekFtdh9r3CpUwlXb8BMzqcZnVrzFlD1Ti1OZpupTjXcHHm5KJ5GmeaW_9iVb1o5uTjtEwMaaqIioSXGUWKFQIZi7rqJ9iZm6LHpnS3gElG20XIfNu0Z4pEPXKiOPwxXFtdJetDnd7_RVJeppAcQlB9DBFDKJwwqfKEvoyB_iNp0_UrTfNIkDxMxPt-ZOICa_qnEvH5Dnxa1dRqgeBfJKgKP46EbkoBRWiiZp0cGANe5IU4sVZ7NqvvBHdwAltxwNUDjucRWR9-3juqrHPKTrfY0xoiO-rH0ZUf8c4Ackm2bL0dx9JVwikjZzAIbGidsaI6wmo2BywKRAw1B61Qlgp1M86mB6xq56EoTLc9VDRGRQQVzW1H0MQwvaDFgl87YfYgksWiIksQN3dcrE2qrzX_JrwX0J8bM81xzbR1HqSO414llP_d_xIDKQdDNr45DMRdUbzfA-mMCN995ByS3-1nEOoXz1lc0bsBM0dMBPBsQ_UVmLuuC_0vMkQeGEKhkUuut3T_ib_wk91bZTNaF_zkJvQm1ic0DhtA4ZpjgvXlzF_0-iKnzV6VNEk4kNSb6JQGlrDKTyPfKW2XdVlHiH69iCSuXsa_oDlHShfpSEVhYXUhoUFIToCIWeYli43bOseHk39zNi7nFOjK_HRv7Yq6_5hiEgbNqZvmXz_F6-E4LT-AwrEgkysK9CTLACb3-fvRY_2xPjUSn6yUsocut1xdC1p8Tx83TsUAD26O9bQTh-MxdtVCV3WNhnWz21JnJbZfIfFC44_MeYrOlJMSahrs2UhhD-DouPVT60H4Q2bPud0Ka0_86qyv0tvF9CXIu5jz6dBsFLEPpdSNO10u_tU6X_KTwrXZC67QX3T6xwS3rzuOuMpBHnhJm8VTyHv629Hu9mzzR0LS4uNRD8y-X0S1qRzBgYR8CDyudraD4hnNYZuHoarJerMsV8qwri-nCp7ibQf14k-7qjKCKWaXWpQ6nTUJUxFEAcHdAjtN2oECof1WpBAguQixGtZr0TQFWxCsiGQAk1QXacrGNr3-tiN36622ixq0YQQm-L31hZZ5ZZTkSXYrSE0gm0U_FNEZ6joHAxcuQuTmIu_irDOYJz9PiCmVlWlFM8SA7Fiw-aoGxLBg1DgzNzB5ZLMAAz5lvi1n7fByt2fhlnZdf2fSVyNfA2Q1V58eAfrqqKM-FRIZ7vQPODuct5oCbANti2xnnFcAHJBanfYVe6pZ75Jb_Mv6dRKG-9fuIvf3AP4g3XZHNkj38HAM4-HezgFsVdu4KWiK8KqcEiI8F9st2Cgaxe-SNEXDuYO0a7HI9v6fCA39i9UoMZ6SxYsXOoaw9tTJuSYvHB0oN_Jwacv3JtLUWm0Zy58nclqWN2nd0UkPfc1jdfYEd_aVGsJUm5P_Dy6EL_0LJoDO9LueMbHGde_p8AWVa5ZiMSxOQLyYnPUHrgK3zoe40mIjA9TbBJZokQ_sYzEVrxRLu0j9es8db5s4dPmPzLaU-S7eEdPJrPmCGKLZiJiuSimkHCFAqMF4x3sFm6McPqo0vt304uYeEIDE1oUl_B7pgUEfjVKkiPQpNn0F6bbL07vimJeavWvCBicvymMVLlRzAivpdfcRFdzZcCO1N-3LKXgYzktyZDed-LRQgzTCB1zcpr4zDk8iZ2GCZRqxDnHJVaePF4_-IR6gR9Z9QpKPkGMeNoixqvppKjrByeI0C0mznTxI1fTRFlik-_IoirqOO8kyIxVeqwo6UHQNNJCzlrgS53ZcZEZGY63kGi0LNaDVcZdqbikVCoAF9TnHNzO0hIwB3HxszEyvyZFeENDVnl6g0rXUpFEt0QgFm987V1A7_vKUB00vfam5SMTJg9GqbBM-x8WuW_Uvg2voxA1BiWOx4l2tx9txdfJg4eDekY6tk-i5v53lW6JeLXIvRA3SJU9atj0kf3HvHCZc5VTct0CfCpXtEqjMnjvgjY97qUfXx0GMfQMmWPvkdAIqkxGLxT-Njy2yarm9pgMoJjm6EnWxorkV7hqifrhWog6U9Ni05vPQ9mBsNU4mIOIFEW-PUb2WBbqWqXHaALwJoeQzI3W5Cwb8CIJGjwvQtH2dg4rGMG-GZA-pa4d7VNmmmQ6MHgeKPcjyviy0-3sKTKqZosvv-aIWXah4yxvCYSyDviSKw9lMF24I9Q9KzE9lk_P2Wxkd9yFCwwuTgnFG3BDAXjrMEWfXCvhZsJf3yfU3iMyXcCje0Vz_UEgqHSNaDdNhLWf2-iz-OG4_0Ivc6foFaEbi7InyObH0TKAkqzNeSknMxnkapCArItwKWLObxvkdTjTaFT-N1TBODUci9TNENmjvBAWXzu1R9NHmJknVHzrQUSxzGoJiCrRMZRe4vjOOYWaVQVHUkVq3bxZA9RL444LG10mu8e_1iEjFy0eE87fQtBvn9y1qtvW_H7WxfmF8DM8BkvSwJKmfoIJ-0sL73gOtH1z4_IBr_bBxVF471Kn_1LkQLmFONKJV9KZjRTBp_vM6UnwiYGBKYDBFDWQ-0ossz0rOAk664XjPbdMRNWnXsRH5baK-t_PyxA2JfPNJ0lmxwIK6r28ldoEt6aZVN1umHF73djNnwWRpIcTjvXzKCyNs0OQmW6olQejORRVHCuXRT4xUQfuK1Q98ix885sVmcPCMNRRAdtspXRWEiOe6SKyfcChvPDObm1ls6H2TP0s16uVztJ0wkmWUTKpWDJ4_ProECs22Mgehl9Q2ehB4v_PPVnR6a-K1PIxzPVJJ-AHKQIbQaoIz6zLNawtCJPbLI4ebp4dRU6DduDnkVB-EO47qfUNiKf_ohzYcQKTqQT63SGI_T-Np39p_lYEgeHxbtOnWrthKhrBvPSvRjIWQBrkbATsMU4unOoj068mP6b3BPBP_2Rip1cK4hU9WH-afKwhAs50EQ9yjZ8TSZweeB9Fwld0VQGY3O1_RDgamKKO0jza9RQnLaSA4wRZj3NZ7ElhP2PwWJa_Luw5j_TiYBkXpI71PsBpjcvAmZi18h0OKN3RCT96k5Hh_WJs37tmP96nXqaL5PUkAO6ZhH6uDccHL3GNnOJy7RFf4N1VHj4WOeOHBOg0kdMs1HVeFwnDFFPVAbJyHTpvnNKFnxrwlYeCJDnFZHZCK8EZ3Tmd_dgYUyco2hNFzLGHLurhDx_3KFIJ0cO5iBMHJ0cN4FKH8xT6ZF4__XvovCjDoWFAtvC-ZWIFYZl-HD0kiAZtQISUU_VKWexqAlip-ixwt_H2cx7CnWm2c9HeVJE-Y8BtwWQBXWAJ_sof9T2tARMRwUKOJ6ZzwoDgfLWoTDEWpHFkozPGrnLGqeI3ERr1l7E8XHEIYaw92ruD2oAErmP325mm6wfIA9FIfeFD5jT48n9G4w5JQrRZMrAtu6sfjnCN6lloosNYnoEz1g6V_Uyuf_Vls83l6VdqyOj2zHyqWwTwkajkP9CH2Ee7I0IlKrNXH2sNlnNSgxFN3sQ0XaYKbAO4hOgSyYHXIvJh-B2rWEnOGyf-IG0PFr-1vjBydhAnGp9zmriun3FO7Uc-8pxvrcdGuGUfgoaUrdxXudGy1CJXTDJUaOzHjczJQb9MnHhj4PvjdaewYGZPpzTdmYz0DHyMr8qriRwqSnMd_TUs69RsxbMjOH3NS4nGqcBjcpRxUIC-NINDTByHMor6A-3QCAnTAXSZNFxxzivNfNfYztQSWvSJCg4XQ9H_ubxBxJL85Da5OJ002bJVik7KVPFFxp97GQdQMzT0-OvjQdP3n4-fwyxBSL4On6iTgPbiSLZaW3KxkLY7tK_ufeMyZjYh1scIvD1tK7rlD7fD-zhTH1ZYtMxWW1z7Z8FzN2u1FX7ynVcf6b-zhVRgpXcUnw7W0Ps1DQn3E7uMMOkcUw-URImaOp7W50eT5GjNjcoe_4fwmcJywt_MKCy-HkaKwwANNg4zk6_JLW3qBueRDasTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDRUbIyowNA", + "expectedFailure": "signature_mismatch" + } + ] + } + ] +} diff --git a/packages/pq-jws/test-data/test-jws/manifest.json b/packages/pq-jws/test-data/test-jws/manifest.json new file mode 100644 index 0000000..0967684 --- /dev/null +++ b/packages/pq-jws/test-data/test-jws/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "generatedBy": "packages/pq-jws/scripts/generate-test-jws-fixtures.ts", + "fixtureFile": "fixtures.json", + "fixtureSha256": "0f3761592a8fd34b9b53a8d3d4c50feefa6a7fe40dd932376a1f3cafc63e1b8b", + "fixtureCount": 3, + "invalidVariantCount": 6, + "generationModel": "template-replay", + "deterministicControls": { + "canonicalFixtureOrdering": true, + "seedMode": "template-replay", + "note": "ML-DSA keygen/signing in OQS OpenSSL are randomized; committed fixtures are replayed deterministically by generator script." + }, + "source": { + "backend": "openquantumsafe/oqs-ossl3", + "image": "openquantumsafe/oqs-ossl3@sha256:48b586a2734452fcaff76bad81cba63d37bc8410510e05a40674b450c0ded559", + "commandSet": [ + "openssl genpkey -algorithm ", + "openssl pkey -in -pubout", + "openssl pkeyutl -sign -inkey -in " + ], + "capturedAt": "2026-02-26T11:48:55.576Z" + } +} diff --git a/packages/pq-jws/ts/README.md b/packages/pq-jws/ts/README.md index 25eb0ae..5239824 100644 --- a/packages/pq-jws/ts/README.md +++ b/packages/pq-jws/ts/README.md @@ -1,6 +1,22 @@ # pq-jws -Post-quantum JSON Web Signature. +Compact JSON Web Signature (JWS) helpers for post-quantum ML-DSA workflows. + +`pq-jws` is the JWS protocol layer: + +- it builds/parses compact JWS tokens, +- validates JWS structure and headers, +- and delegates cryptographic sign/verify operations to your callbacks. + +It is intentionally not a cryptographic primitive implementation. + +## What Is JWS? + +JWS (JSON Web Signature, RFC 7515) is a way to integrity-protect payloads using a signed compact token format: + +`base64url(protected-header).base64url(payload).base64url(signature)` + +`pq-jws` focuses on this compact serialization format. ## Installation @@ -8,14 +24,119 @@ Post-quantum JSON Web Signature. npm install pq-jws ``` +## What pq-jws Does + +- Encodes and parses compact JWS tokens. +- Validates protected header and compact segment rules. +- Enforces strict unpadded base64url behavior for compact segments. +- Applies defensive size limits for compact/header/payload/signature parsing. +- Enforces ML-DSA algorithm scope from `pq-oid` mappings. +- Provides orchestrators: + - `signJwsCompact(...)` to produce compact JWS from a signer callback. + - `verifyJwsCompact(...)` to verify compact JWS through a verifier callback. +- Provides payload decode helpers: + - `decodePayloadText(...)` + - `decodePayloadJson(...)` + +## What pq-jws Does Not Do + +- It does not generate keys. +- It does not implement ML-DSA primitive math internally. +- It does not store/manage private keys. +- It does not perform JWT claim validation (`exp`, `nbf`, `aud`, etc.). +- It does not implement general/flattened JSON JWS serializations in this phase. + +## Supported Algorithms + +Current scope is **ML-DSA JOSE identifiers only**, derived from `pq-oid` (`Algorithm.listByFamily('ML-DSA')` + JOSE mapping): + +- `ML-DSA-44` +- `ML-DSA-65` +- `ML-DSA-87` + +Any non-ML-DSA `alg` value is rejected. + ## Usage ```typescript -import { } from 'pq-jws'; +import { + decodePayloadJson, + parseJwsCompact, + signJwsCompact, + verifyJwsCompact, +} from 'pq-jws'; -// Coming soon +// Example backend hooks (replace with OQS/KMS/HSM/provider integration) +async function myMlDsaSigner(signingInput: Uint8Array): Promise { + return signWithYourBackend(signingInput); +} + +async function myMlDsaVerifier( + signingInput: Uint8Array, + signature: Uint8Array, + kid?: string, +): Promise { + const publicKey = await lookupPublicKeyByKid(kid); + return verifyWithYourBackend(signingInput, signature, publicKey); +} + +const compact = await signJwsCompact({ + protectedHeader: { + alg: 'ML-DSA-65', + kid: 'my-ml-dsa-key', + typ: 'JWT', + }, + payload: JSON.stringify({ sub: 'alice', role: 'admin' }), + signer: async (signingInput, context) => { + // Integrate your ML-DSA signer here. + // signingInput is UTF-8 bytes of ".". + console.log(context.encodedProtectedHeader, context.encodedPayload); + return await myMlDsaSigner(signingInput); + }, +}); + +const verified = await verifyJwsCompact(compact, async (signingInput, signature, context) => { + return await myMlDsaVerifier(signingInput, signature, context.protectedHeader.kid); +}); + +if (!verified) { + throw new Error('signature mismatch'); +} + +const parsed = parseJwsCompact(compact); +const claims = decodePayloadJson>(parsed); +console.log(claims.sub); ``` +## Key Validation Rules + +- `alg` is required and must be in ML-DSA allowlist. +- Compact format must contain exactly 3 segments. +- Protected header and signature segments must be non-empty. +- `=` padding in compact segments is rejected. +- RFC7797 unencoded payload mode (`b64=false`) is unsupported and rejected. +- `crit` is fail-closed: unknown or unsupported critical parameters fail validation. + +## Error Behavior + +- Malformed compact input / segment format issues throw `JwsFormatError`. +- Semantic validation issues throw `JwsValidationError`. +- Cryptographic signature mismatch returns `false` from `verifyJwsCompact(...)`. + +## API Overview + +- `signJwsCompact(input)`: Creates a compact JWS string using a caller-provided signer callback. +- `verifyJwsCompact(compact, verifier, options?)`: Parses and validates compact JWS input, then delegates signature verification to your verifier callback. +- `parseJwsCompact(compact, options?)`: Parses compact JWS and returns decoded fields (`payload`, `signature`, `protectedHeader`, `signingInput`). +- `decodePayloadText(parsed)` and `decodePayloadJson(parsed)`: Convenience payload decoders. +- `encodeBase64Url(bytes)` and `decodeBase64Url(text)`: Strict unpadded base64url utilities. + +## Integration Note + +If you want a runnable end-to-end local demo with real ML-DSA keys and Dockerized OQS OpenSSL, see: + +- `examples/oqs-openssl-compact-jws.ts` + ## License MIT diff --git a/packages/pq-jws/ts/examples/oqs-openssl-compact-jws.ts b/packages/pq-jws/ts/examples/oqs-openssl-compact-jws.ts new file mode 100644 index 0000000..c439a4c --- /dev/null +++ b/packages/pq-jws/ts/examples/oqs-openssl-compact-jws.ts @@ -0,0 +1,206 @@ +import { spawnSync } from 'node:child_process'; +import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { parseJwsCompact } from '../src/compact'; +import { decodePayloadJson, signJwsCompact, verifyJwsCompact } from '../src/index'; + +const OQS_IMAGE = + process.env.OQS_OPENSSL_IMAGE ?? + 'openquantumsafe/oqs-ossl3@sha256:48b586a2734452fcaff76bad81cba63d37bc8410510e05a40674b450c0ded559'; +const SHOULD_CLEANUP = process.env.CLEANUP_EXAMPLE_ARTIFACTS === '1'; +const ALGORITHM = 'ML-DSA-87'; + +type DockerResult = { + status: number; + stdout: string; + stderr: string; +}; + +function runOqsOpenSsl(artifactDir: string, args: string[]): DockerResult { + const result = spawnSync( + 'docker', + ['run', '--rm', '-v', `${artifactDir}:/work`, '-w', '/work', OQS_IMAGE, 'openssl', ...args], + { + encoding: 'utf8', + }, + ); + + return { + status: result.status ?? 1, + stdout: result.stdout ?? '', + stderr: result.stderr ?? '', + }; +} + +function assertSuccess(operation: string, result: DockerResult): void { + if (result.status === 0) { + return; + } + + throw new Error( + [ + `${operation} failed with exit code ${result.status}.`, + `stdout:\n${result.stdout || ''}`, + `stderr:\n${result.stderr || ''}`, + ].join('\n\n'), + ); +} + +function generateKeypair(artifactDir: string, prefix: string, algorithm: string): void { + assertSuccess( + `key generation (${algorithm})`, + runOqsOpenSsl(artifactDir, [ + 'genpkey', + '-algorithm', + algorithm, + '-out', + `${prefix}-private.pem`, + ]), + ); + + assertSuccess( + `public key derivation (${algorithm})`, + runOqsOpenSsl(artifactDir, [ + 'pkey', + '-in', + `${prefix}-private.pem`, + '-pubout', + '-out', + `${prefix}-public.pem`, + ]), + ); +} + +async function main(): Promise { + const artifactDir = mkdtempSync(join(tmpdir(), 'pq-jws-real-app-')); + + try { + generateKeypair(artifactDir, 'signer', ALGORITHM); + generateKeypair(artifactDir, 'mismatch', ALGORITHM); + + const payload = { + sub: 'user-123', + role: 'admin', + scope: ['read:orders', 'write:orders'], + iat: Math.floor(Date.now() / 1000), + }; + + const compact = await signJwsCompact({ + protectedHeader: { + alg: ALGORITHM, + kid: 'signer-1', + typ: 'JWT', + }, + payload: JSON.stringify(payload), + signer: async (signingInput) => { + const signingInputPath = join(artifactDir, 'signing-input.bin'); + const signaturePath = join(artifactDir, 'signature.bin'); + + writeFileSync(signingInputPath, signingInput); + assertSuccess( + 'signing operation', + runOqsOpenSsl(artifactDir, [ + 'pkeyutl', + '-sign', + '-inkey', + 'signer-private.pem', + '-in', + 'signing-input.bin', + '-out', + 'signature.bin', + ]), + ); + + return new Uint8Array(readFileSync(signaturePath)); + }, + }); + + const parsed = parseJwsCompact(compact); + const claims = decodePayloadJson(parsed); + + const verified = await verifyJwsCompact(compact, async (signingInput, signature) => { + writeFileSync(join(artifactDir, 'verify-input.bin'), signingInput); + writeFileSync(join(artifactDir, 'verify-signature.bin'), signature); + + const result = runOqsOpenSsl(artifactDir, [ + 'pkeyutl', + '-verify', + '-pubin', + '-inkey', + 'signer-public.pem', + '-in', + 'verify-input.bin', + '-sigfile', + 'verify-signature.bin', + ]); + + return result.status === 0; + }); + + const wrongKeyVerification = await verifyJwsCompact( + compact, + async (signingInput, signature) => { + writeFileSync(join(artifactDir, 'wrong-verify-input.bin'), signingInput); + writeFileSync(join(artifactDir, 'wrong-verify-signature.bin'), signature); + + const result = runOqsOpenSsl(artifactDir, [ + 'pkeyutl', + '-verify', + '-pubin', + '-inkey', + 'mismatch-public.pem', + '-in', + 'wrong-verify-input.bin', + '-sigfile', + 'wrong-verify-signature.bin', + ]); + + return result.status === 0; + }, + ); + + const tampered = `${parsed.encodedProtectedHeader}.ZXlKMGJIQWlPaUpLVjFRaWZRLg.${parsed.segments.signature}`; + const tamperedVerified = await verifyJwsCompact(tampered, async (signingInput, signature) => { + writeFileSync(join(artifactDir, 'tampered-input.bin'), signingInput); + writeFileSync(join(artifactDir, 'tampered-signature.bin'), signature); + + const result = runOqsOpenSsl(artifactDir, [ + 'pkeyutl', + '-verify', + '-pubin', + '-inkey', + 'signer-public.pem', + '-in', + 'tampered-input.bin', + '-sigfile', + 'tampered-signature.bin', + ]); + + return result.status === 0; + }); + + console.log('Compact JWS (truncated):', `${compact.slice(0, 96)}...`); + console.log('Decoded claims:', claims); + console.log('Verification (matching public key):', verified); + console.log('Verification (wrong public key):', wrongKeyVerification); + console.log('Verification (tampered payload):', tamperedVerified); + console.log('Artifacts directory:', artifactDir); + console.log('Generated artifacts:'); + console.log('- signer-private.pem / signer-public.pem'); + console.log('- mismatch-private.pem / mismatch-public.pem'); + console.log('- signing-input.bin / signature.bin'); + console.log('- verify-input.bin / verify-signature.bin'); + console.log('- wrong-verify-input.bin / wrong-verify-signature.bin'); + console.log('- tampered-input.bin / tampered-signature.bin'); + } finally { + if (SHOULD_CLEANUP) { + rmSync(artifactDir, { recursive: true, force: true }); + } + } +} + +main().catch((error: unknown) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/pq-jws/ts/package.json b/packages/pq-jws/ts/package.json index 66589d7..cc5338b 100644 --- a/packages/pq-jws/ts/package.json +++ b/packages/pq-jws/ts/package.json @@ -10,6 +10,7 @@ ], "scripts": { "build": "tsc -b", + "test": "bun test", "prepublishOnly": "npm run build" }, "keywords": [ diff --git a/packages/pq-jws/ts/tests/fixtures.test.ts b/packages/pq-jws/ts/tests/fixtures.test.ts new file mode 100644 index 0000000..5bcfbe1 --- /dev/null +++ b/packages/pq-jws/ts/tests/fixtures.test.ts @@ -0,0 +1,111 @@ +import { describe, expect, it } from 'bun:test'; +import { createHash } from 'node:crypto'; +import { readFileSync } from 'node:fs'; +import { decodeBase64Url, encodeBase64Url } from '../src/base64url'; +import { parseJwsCompact, serializeJwsCompact } from '../src/compact'; +import { JwsFormatError } from '../src/errors'; +import { verifyJwsCompact } from '../src/jws'; + +type InvalidVariant = { + id: string; + compact: string; + expectedFailure: 'signature_mismatch' | 'format_error'; +}; + +type Fixture = { + id: string; + algorithm: string; + compact: string; + encodedProtectedHeader: string; + encodedPayload: string; + signingInput: string; + signatureBase64Url: string; + invalidVariants: InvalidVariant[]; +}; + +type FixtureSet = { + fixtures: Fixture[]; +}; + +type FixtureManifest = { + fixtureSha256: string; +}; + +const fixturePath = new URL('../../test-data/test-jws/fixtures.json', import.meta.url); +const manifestPath = new URL('../../test-data/test-jws/manifest.json', import.meta.url); + +const fixtureText = readFileSync(fixturePath, 'utf8'); +const fixtures = JSON.parse(fixtureText) as FixtureSet; +const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as FixtureManifest; + +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); + +function sha256(value: string): string { + return createHash('sha256').update(value, 'utf8').digest('hex'); +} + +describe('fixture manifest integrity', () => { + it('matches fixture content hash', () => { + expect(sha256(fixtureText)).toBe(manifest.fixtureSha256); + }); +}); + +describe('fixture-driven compact JWS conformance', () => { + for (const fixture of fixtures.fixtures) { + it(`parses and verifies fixture ${fixture.id}`, async () => { + const parsed = parseJwsCompact(fixture.compact); + + expect(parsed.protectedHeader.alg).toBe(fixture.algorithm); + expect(parsed.encodedProtectedHeader).toBe(fixture.encodedProtectedHeader); + expect(parsed.encodedPayload).toBe(fixture.encodedPayload); + expect(textDecoder.decode(parsed.signingInput)).toBe(fixture.signingInput); + expect(encodeBase64Url(parsed.signature)).toBe(fixture.signatureBase64Url); + + const roundTripCompact = serializeJwsCompact({ + protectedHeader: parsed.encodedProtectedHeader, + payload: parsed.encodedPayload, + signature: encodeBase64Url(parsed.signature), + }); + expect(roundTripCompact).toBe(fixture.compact); + + const verified = await verifyJwsCompact(fixture.compact, async (signingInput, signature) => { + const expectedSigningInput = textEncoder.encode(fixture.signingInput); + const expectedSignature = decodeBase64Url(fixture.signatureBase64Url); + + return ( + Buffer.compare(Buffer.from(signingInput), Buffer.from(expectedSigningInput)) === 0 && + Buffer.compare(Buffer.from(signature), Buffer.from(expectedSignature)) === 0 + ); + }); + + expect(verified).toBe(true); + }); + + for (const invalidVariant of fixture.invalidVariants) { + it(`handles invalid variant ${invalidVariant.id}`, async () => { + if (invalidVariant.expectedFailure === 'format_error') { + await expect(verifyJwsCompact(invalidVariant.compact, async () => true)).rejects.toThrow( + JwsFormatError, + ); + return; + } + + const verified = await verifyJwsCompact( + invalidVariant.compact, + async (signingInput, signature) => { + const expectedSigningInput = textEncoder.encode(fixture.signingInput); + const expectedSignature = decodeBase64Url(fixture.signatureBase64Url); + + return ( + Buffer.compare(Buffer.from(signingInput), Buffer.from(expectedSigningInput)) === 0 && + Buffer.compare(Buffer.from(signature), Buffer.from(expectedSignature)) === 0 + ); + }, + ); + + expect(verified).toBe(false); + }); + } + } +});