# PyVckit PyVckit es una librería para: - firmar credenciales verificables - verificar credenciales verificables - generar presentaciones verificables - verificar presentaciones verificables Esta libreria esta fuertemente inspirada en [didkit de SpruceId](https://github.com/spruceid/didkit) y pretende mantener compatibilidad con ella. Por ahora la criptografía soportada es solo EdDSA con una firma Ed25519Signature2018. # Instalación Por ahora la instalación es desde el repositorio: ```sh python -m venv env source env/bin/activate git clone https://gitea.pangea.org/ereuse/pyvckit.git cd pyvckit pip install -r requirements.txt pip install -e . ``` # Cli El modo de uso bajo la linea de comandos seria el siguiente: ## generar un par de claves: ```sh python pyvckit/did.py -n keys > keypair.json ``` ## generar un identificador did: ### did key ```sh python pyvckit/did.py -n did -k keypair.json ``` ### did web ```sh python pyvckit/did.py -n did -k keypair.json -u https://localhost/user1/dids/ ``` ## generar una credencial firmada de ejemplo: Se genera un ejemplo de credencial que es el que aparece en la plantilla credential_tmpl del fichero [templates.py](templates.py) ```sh python pyvckit/sign_vc.py -k keypair.json > credential_signed.json ``` ## verificar una credencial firmada: ```sh python pyvckit/verify_vc.py credential_signed.json ``` ## generar una presentación verificable: ```sh python pyvckit/sign_vp.py -k keypair.json -c credential_signed.json > presentation_signed.json ``` ## verificar una presentación verificable: ```sh python pyvckit/verify_vp.py presentation_signed.json ``` ## creación del documento did: Este comando creara un documento json y una ruta url donde colocar este documento. El did tiene que ser un did web. Este documento es un ejemplo y en producción hay que adaptarlo para contener las credenciales verificables revocadas. ```sh python pyvckit/did.py -k keypair.json -g did:web:localhost:did-registry:z6MkiNc8xqJLcG7QR1wzD9HPs5oPQEaWNcVf92QsbppNiB7C ``` # Uso como librería En los test podras encontrar ejemplos de uso. Ahora explicare los casos habituales ## generar un par de claves: ```python from pyvckit.did import generate_keys key = generate_keys() ``` ## generar un identificador did: ### did key ```python from pyvckit.did import generate_keys, generate_did key = generate_keys() did = generate_did(key) ``` ### did web ```python from pyvckit.did import generate_keys, generate_did key = generate_keys() url = "https://localhost/user1/dids/" did = generate_did(key, url) ``` ## generar una credencial firmada: Suponiendo que **credential** es una credencial válida. **credential** es una variable de tipo string ```python from pyvckit.did import generate_keys, generate_did, get_signing_key from pyvckit.sign_vc import sign key = generate_keys() did = generate_did(key) signing_key = get_signing_key(key) vc = sign(credential, signing_key, did) ``` ## verificar una credencial firmada: Suponiendo que **vc** es una credencial verificable correctamente firmada ```python import json from pyvckit.verify import verify_vc verified = verify_vc(json.dumps(vc)) ``` ## generar una presentación verificable: ```python from pyvckit.did import generate_keys, generate_did, get_signing_key from pyvckit.sign_vp import sign_vp holder_key = generate_keys() holder_did = generate_did(holder_key) holder_signing_key = get_signing_key(holder_key) vp = sign_vp(holder_signing_key, holder_did, vc_string) ``` ## verificat una presentación verificable: ```python from pyvckit.verify_vp import verify_vp verified = verify_vp(json.dumps(vp)) ``` ## creación del documento did: Este comando creara un documento json y una ruta url donde colocar este documento. El did tiene que ser un did web. Este documento es un ejemplo y en producción hay que adaptarlo para contener las credenciales verificables revocadas. ```python from pyvckit.did import generate_keys, generate_did, gen_did_document key = generate_keys() url = "https://localhost/did-registry" did = generate_did(key, url) definitive_url, document = gen_did_document(did, key) ``` # Diferencias con didkit de spruceId: Aunque hay compatibilidad con didkit, hay algunas pequeñas diferencias en el comportamiento. ## Espacios de nombres: En didkit es necesario definir en el contexto todo nombre, (clave) usada en la credencial o si no fallará tanto la firma como la verificación. En pyvckit si un nombre, (clave) se usa pero no esta definido en el contexto, entonces esa firma o verificación filtrará esa parte de la credencial y la omitirá como si no existiera. La firma se hará borrando esa parte no definida.