@synet/credential
Version:
VC Credentials - Simple, Robust, Unit-based Verifiable Credentials service
108 lines (83 loc) • 3.27 kB
text/typescript
/**
* Quick verification script to check that signatures are now base64url encoded
*/
import { Signer } from '@synet/keys';
import { Credential } from '../src/credential';
async function main() {
// Create a signer
const signer = Signer.generate('ed25519', { name: 'test-signer' });
if (!signer) {
throw new Error('Failed to create signer');
}
console.log('✓ Created signer');
// Create key from signer
const key = signer.createKey();
if (!key) {
throw new Error('Failed to create key');
}
console.log('✓ Created key');
// Test direct signing
const testData = 'Hello, World!';
const signature = await signer.sign(testData);
console.log('✓ Generated signature:', signature);
console.log('✓ Signature length:', signature.length);
// Check for base64url characteristics
const hasBase64Chars = /[+/=]/.test(signature);
const hasBase64UrlChars = /[-_]/.test(signature);
console.log('✓ Has base64 chars (+/=):', hasBase64Chars);
console.log('✓ Has base64url chars (-_):', hasBase64UrlChars);
if (!hasBase64Chars && hasBase64UrlChars) {
console.log('✅ Signature is properly base64url encoded');
} else if (hasBase64Chars && !hasBase64UrlChars) {
console.log('❌ Signature is still base64 encoded');
} else {
console.log('❓ Signature format is unclear');
}
// Test verification
const isValid = await signer.verify(testData, signature);
console.log('✓ Signature verification:', isValid);
// Test with credential unit
const credential = Credential.create();
credential.learn([key.teach()]);
const subject = {
holder: {
id: 'did:example:123',
name: 'Test User'
}
};
const vc = await credential.issueCredential(subject, 'TestCredential', 'did:example:123');
if (vc?.isSuccess) {
const credential_data = vc.value;
console.log('✓ Issued credential');
console.log('✓ JWT:', credential_data.proof.jwt);
// Check JWT signature part
const jwt = credential_data.proof.jwt;
if (!jwt) {
console.log('❌ No JWT in credential');
return;
}
const jwtParts = jwt.split('.');
const jwtSignature = jwtParts[2];
const jwtHasBase64Chars = /[+/=]/.test(jwtSignature);
const jwtHasBase64UrlChars = /[-_]/.test(jwtSignature);
console.log('✓ JWT signature has base64 chars (+/=):', jwtHasBase64Chars);
console.log('✓ JWT signature has base64url chars (-_):', jwtHasBase64UrlChars);
if (!jwtHasBase64Chars && jwtHasBase64UrlChars) {
console.log('✅ JWT signature is properly base64url encoded');
} else if (jwtHasBase64Chars && !jwtHasBase64UrlChars) {
console.log('❌ JWT signature is still base64 encoded');
} else {
console.log('❓ JWT signature format is unclear');
}
// Test verification
const verifyResult = await credential.verifyCredential(credential_data);
if (verifyResult.isSuccess) {
console.log('✓ Credential verification:', verifyResult.value.verified);
} else {
console.log('❌ Verification failed:', verifyResult?.errorMessage);
}
} else {
console.log('❌ Failed to issue credential:', vc?.errorMessage);
}
}
main().catch(console.error);