Skip to content

Quick Start

This guide gets you signing and verifying credentials in minutes.

1. Generate a Keypair

Python:

from harbour.keys import generate_p256_keypair, p256_public_key_to_did_key

private_key, public_key = generate_p256_keypair()
did = p256_public_key_to_did_key(public_key)
print(f"DID: {did}")

TypeScript:

import { generateP256Keypair, p256PublicKeyToDid } from '@reachhaven/harbour-credentials';

const { privateKey, publicKey } = await generateP256Keypair();
const did = await p256PublicKeyToDid(publicKey);
console.log(`DID: ${did}`);

CLI:

python -m harbour.keys generate --curve p256 --output keypair.json

2. Sign a Credential

Python:

from harbour.signer import sign_vc_jose

credential = {
    "@context": ["https://www.w3.org/ns/credentials/v2"],
    "type": ["VerifiableCredential"],
    "issuer": did,
    "credentialSubject": {
        "id": "did:example:subject",
        "name": "Alice"
    }
}

jwt = sign_vc_jose(credential, private_key, kid=f"{did}#{did.split(':')[-1]}")
print(jwt)

TypeScript:

import { signJwt } from '@reachhaven/harbour-credentials';

const credential = {
    '@context': ['https://www.w3.org/ns/credentials/v2'],
    type: ['VerifiableCredential'],
    issuer: did,
    credentialSubject: {
        id: 'did:example:subject',
        name: 'Alice'
    }
};

const jwt = await signJwt(credential, privateKey);
console.log(jwt);

3. Verify a Credential

Python:

from harbour.verifier import verify_vc_jose

result = verify_vc_jose(jwt, public_key)
print(f"Verified: {result['credentialSubject']['name']}")

TypeScript:

import { verifyJwt } from '@reachhaven/harbour-credentials';

const result = await verifyJwt(jwt, publicKey);
console.log(`Verified: ${result.credentialSubject.name}`);

4. Selective Disclosure (SD-JWT)

Python:

from harbour.sd_jwt import issue_sd_jwt_vc, verify_sd_jwt_vc

# Issue with selective disclosure
sd_jwt = issue_sd_jwt_vc(
    credential,
    private_key,
    vct="https://example.com/credential/v1",
    disclosable=["name", "email"],
)

# Verify
result = verify_sd_jwt_vc(sd_jwt, public_key)

TypeScript:

import { issueSdJwtVc, verifySdJwtVc } from '@reachhaven/harbour-credentials';

const sdJwt = await issueSdJwtVc(credential, privateKey, {
    vct: 'https://example.com/credential/v1',
    disclosable: ['name', 'email'],
});

const result = await verifySdJwtVc(sdJwt, publicKey);

Next Steps