import { SignatureValidator } from '../../../../src/validators/credential/signatureValidator.js'; describe('signatureValidator should', () => { it('validate a valid signature', async () => { const signatureValidator = new SignatureValidator(); const jws = 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDplYnNpOnpycm1QdXRKTTVjZ2RqR1FGNGNEeTViI3RCNi1Ub2kxWlJOS3VfREdiZGVrbUxDN2E3TzJ0akRDQ3ZjUFdycklLM2MifQ.eyJqdGkiOiJ1cm46ZGlkOjEyMzQ1NiIsInN1YiI6ImRpZDprZXk6ejJkbXpEODFjZ1B4OFZraTdKYnV1TW1GWXJXUGdZb3l0eWtVWjNleXFodDFqOUticDdjTFpMUnhzWnVFVGs5Qk5nM29WYVJURFFDTjh1WGF5eHlldDVaY2pnWnh2d251TVhZV0d6czdMeFgxczRHUmJMVUp3RkpIRnpFZU56QnM2VndLOFNKeWpyaUtqRTg2eEtGVEVBd1ZzN3F5U0hrcjhaM3lpbWhzU0w3YmtjTTdOdCIsImlzcyI6ImRpZDplYnNpOnpycm1QdXRKTTVjZ2RqR1FGNGNEeTViIiwibmJmIjoxNjM1NzI0ODAwLCJleHAiOjUxMDk0MzY4MDAsImlhdCI6MTYzNTU1MjAwMCwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwiaWQiOiJ1cm46ZGlkOjEyMzQ1NiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJWZXJpZmlhYmxlQXR0ZXN0YXRpb24iXSwiaXNzdWVyIjoiZGlkOmVic2k6enJybVB1dEpNNWNnZGpHUUY0Y0R5NWIiLCJpc3N1YW5jZURhdGUiOiIyMDIxLTExLTAxVDAwOjAwOjAwWiIsInZhbGlkRnJvbSI6IjIwMjEtMTEtMDFUMDA6MDA6MDBaIiwiaXNzdWVkIjoiMjAyMS0xMC0zMFQwMDowMDowMFoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6ejJkbXpEODFjZ1B4OFZraTdKYnV1TW1GWXJXUGdZb3l0eWtVWjNleXFodDFqOUticDdjTFpMUnhzWnVFVGs5Qk5nM29WYVJURFFDTjh1WGF5eHlldDVaY2pnWnh2d251TVhZV0d6czdMeFgxczRHUmJMVUp3RkpIRnpFZU56QnM2VndLOFNKeWpyaUtqRTg2eEtGVEVBd1ZzN3F5U0hrcjhaM3lpbWhzU0w3YmtjTTdOdCIsInBlcnNvbmFsSWRlbnRpZmllciI6IklUL0RFLzEyMzQiLCJmYW1pbHlOYW1lIjoiQ2FzdGFmaW9yaSIsImZpcnN0TmFtZSI6IkJpYW5jYSIsImRhdGVPZkJpcnRoIjoiMTkzMC0xMC0wMSJ9LCJjcmVkZW50aWFsU2NoZW1hIjp7ImlkIjoiaHR0cHM6Ly9hcGktcGlsb3QuZWJzaS5ldS90cnVzdGVkLXNjaGVtYXMtcmVnaXN0cnkvdjIvc2NoZW1hcy8weDBmNDFhMWY0OTM0ZTExZjhmOThlNDQ0ZWQzNGZiMDQwNjQ1ZGNjMDRjZWFkMmFlMjhmY2EwNjJlYWJmYWMxODEiLCJ0eXBlIjoiRnVsbEpzb25TY2hlbWFWYWxpZGF0b3IyMDIxIn0sImV4cGlyYXRpb25EYXRlIjoiMjEzMS0xMS0zMFQwMDowMDowMFoifX0.yAZ72yi1DC5eEqJ9_O1dQ3VgFB-iT85mUY3SNvEt-Vul_jPKcRsR8ceS1ce08lJUTaM8X3HRMpHPU7qmPkLRvQ'; const alg = 'ES256'; const publicKeyJwt = { kty: 'EC', x: 'e0Tz6BL7EAG-ACYzyky7yFKkN3z5CxEpRqKl8lEuFsc', y: 'cK7nCPiKi0rJsKeNurqMVTSy4humcjo9AVbNdJ87zwg', crv: 'P-256', }; const validationResult = await signatureValidator.validate( jws, publicKeyJwt, alg, ); expect(validationResult).toEqual({ valid: true, }); }); it('not validate an invalid signature', async () => { const signatureValidator = new SignatureValidator(); const jws = 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDplYnNpOnpycm1QdXRKTTVjZ2RqR1FGNGNEeTViI3RCNi1Ub2kxWlJOS3VfREdiZGVrbUxDN2E3TzJ0akRDQ3ZjUFdycklLM2MifQ.eyJqdGkiOiJ1cm46ZGlkOjEyMzQ1NiIsInN1YiI6ImRpZDprZXk6cjJkbXpEODFjZ1B4OFZraTdKYnV1TW1GWXJXUGdZb3l0eWtVWjNleXFodDFqOUticDdjTFpMUnhzWnVFVGs5Qk5nM29WYVJURFFDTjh1WGF5eHlldDVaY2pnWnh2d251TVhZV0d6czdMeFgxczRHUmJMVUp3RkpIRnpFZU56QnM2VndLOFNKeWpyaUtqRTg2eEtGVEVBd1ZzN3F5U0hrcjhaM3lpbWhzU0w3YmtjTTdOdCIsImlzcyI6ImRpZDplYnNpOnpycm1QdXRKTTVjZ2RqR1FGNGNEeTViIiwibmJmIjoxNjM1NzI0ODAwLCJleHAiOjUxMDk0MzY4MDAsImlhdCI6MTYzNTU1MjAwMCwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwiaWQiOiJ1cm46ZGlkOjEyMzQ1NiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJWZXJpZmlhYmxlQXR0ZXN0YXRpb24iXSwiaXNzdWVyIjoiZGlkOmVic2k6enJybVB1dEpNNWNnZGpHUUY0Y0R5NWIiLCJpc3N1YW5jZURhdGUiOiIyMDIxLTExLTAxVDAwOjAwOjAwWiIsInZhbGlkRnJvbSI6IjIwMjEtMTEtMDFUMDA6MDA6MDBaIiwiaXNzdWVkIjoiMjAyMS0xMC0zMFQwMDowMDowMFoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6ejJkbXpEODFjZ1B4OFZraTdKYnV1TW1GWXJXUGdZb3l0eWtVWjNleXFodDFqOUticDdjTFpMUnhzWnVFVGs5Qk5nM29WYVJURFFDTjh1WGF5eHlldDVaY2pnWnh2d251TVhZV0d6czdMeFgxczRHUmJMVUp3RkpIRnpFZU56QnM2VndLOFNKeWpyaUtqRTg2eEtGVEVBd1ZzN3F5U0hrcjhaM3lpbWhzU0w3YmtjTTdOdCIsInBlcnNvbmFsSWRlbnRpZmllciI6IklUL0RFLzEyMzQiLCJmYW1pbHlOYW1lIjoiQ2FzdGFmaW9yaSIsImZpcnN0TmFtZSI6IkJpYW5jYSIsImRhdGVPZkJpcnRoIjoiMTkzMC0xMC0wMSJ9LCJjcmVkZW50aWFsU2NoZW1hIjp7ImlkIjoiaHR0cHM6Ly9hcGktcGlsb3QuZWJzaS5ldS90cnVzdGVkLXNjaGVtYXMtcmVnaXN0cnkvdjIvc2NoZW1hcy8weDBmNDFhMWY0OTM0ZTExZjhmOThlNDQ0ZWQzNGZiMDQwNjQ1ZGNjMDRjZWFkMmFlMjhmY2EwNjJlYWJmYWMxODEiLCJ0eXBlIjoiRnVsbEpzb25TY2hlbWFWYWxpZGF0b3IyMDIxIn0sImV4cGlyYXRpb25EYXRlIjoiMjEzMS0xMS0zMFQwMDowMDowMFoifX0.yAZ72yi1DC5eEqJ9_O1dQ3VgFB-iT85mUY3SNvEt-Vul_jPKcRsR8ceS1ce08lJUTaM8X3HRMpHPU7qmPkLRvQ'; const credentialId = 'urn:did:123456'; const alg = 'ES256'; const publicKeyJwt = { kty: 'EC', x: 'e0Tz6BL7EAG-ACYzyky7yFKkN3z5CxEpRqKl8lEuFsc', y: 'cK7nCPiKi0rJsKeNurqMVTSy4humcjo9AVbNdJ87zwg', crv: 'P-256', }; const validationResult = await signatureValidator.validate( jws, publicKeyJwt, alg, credentialId, ); expect(validationResult).toEqual({ valid: false, messages: [`${credentialId} signature is not correct`], }); }); });