@geens_npo/defined-id
TypeScript icon, indicating that this package has built-in type declarations

0.1.6 • Public • Published

Defined.id

An open-source library with the core components for the defined.id identity solution built on the NEM Blockchain.

Requirements

Node.js

  • Node.js 11.X.X

Installation

npm install @geens_npo/defined-id

Documentation

Getting started

Import Defined.id package.

Example:

import "@geens_npo/defined-id";

//to import specific module
import {SecurityService} from "@geens_npo/defined-id";

Initialize Keys

Initializes derived keys based on a password.

Example:

const password = "password";

const derivedKey = SecurityService.scrypt(password);

Generate Seed

Generate random seed.

Example:

const seed = SeedService.generateSeed();

Generate Key

Generate key.

Example:

const keyId = 1;
const seed = "b8e4c8c72e5ac28d01d2712729cd381548e8a4982df82b97f4778179165aa4b1eaae41dc54a6328721b05fd1025736d80cc19e9bc4abe6423a85c1114a4b6188";
const personaId = 1;
const connectionId  = 2;

const key = new Key(
                // @ts-ignore
                Purposes.find(keyId),
                seed,
                personaId,
                connectionId
            );

Generate a proof of ownership for a public key

Example:

const didProver = "did:defined:166evUDhpSSq23xP26oeQ4uNZNZce1KFFP";
const didVerifier = "did:defined:1ATaPiJdX2u4NHeYVux1iYcdDCTrXpdoxC";

  const poo = new ProofOfOwnership(didProver, didVerifier, key.publicKey);
  const errors = ProofOfOwnershipService.proveOwnership(poo, key.privateKey64);

Verify a proof of ownership for a public key

Verify a proof of ownership for a public key.

Example:

const didProver = "did:defined:166evUDhpSSq23xP26oeQ4uNZNZce1KFFP";
const didVerifier = "did:defined:1ATaPiJdX2u4NHeYVux1iYcdDCTrXpdoxC";
const signature = "YFipwAdFVonV4/9zQjPdzPLArX181RAaK3UvXixQ7Rg0lX/sz8FLEK4sJU+2zJhAPHIFlNyD87+9wsBWTRf1Aw==";
const publicKeyBytes = Buffer.from("ccc98085b11e5b96c614036294be077d0b66a272b6476d3ba7eb440a3c2df00d", "hex");
const timestampDate: Date = new Date(1548947150636);


const poo: ProofOfOwnership = new ProofOfOwnership(didProver, didVerifier, publicKeyBytes, timestampDate, signature);
const errors = ProofOfOwnershipService.verify(poo);

Generate DID

Generate DID.

Example:

const method = "defined";
const nemPublicKey = "D98C8B7478E0255127E24B7C0752B78B5D4A90F1454FA9D8CD262ABF665B2B1B";

const did: Did = new Did(method, nemPublicKey);

Generate DID Document

DID document generation.

Example:

const services : IService[] = [
  {  "did" : did.format(),
     "serviceName": "openid",
     "type": "OpenIdConnectVersion1.0Service",
     "serviceEndpoint": "https://openid.example.com/"
  }, 
  { "did" : did.format(),
     "serviceName": "vcr",
     "type": "CredentialRepositoryService",
     "serviceEndpoint": "https://repository.example.com/service/8377464"
  },
  {   "did" : did.format(),
     "serviceName": "xdi",
     "type": "XdiService",
     "serviceEndpoint": "https://xdi.example.com/8377464"
  }
 ];

const publicKey : IPublicKey =
{
  "id": did.format() + "#authentication-key-1",
  "owner": did.format(),
  "type": "Ed25519VerificationKey2018",
  "publicKeyHex": key.publicKey.toString('hex').toUpperCase(),

}

const didDocument: IDidDocument = {
            context: ['https://w3id.org/did/v1', 'https://w3id.org/security/v1'],
            id: did.format(),
            salt: did.salt,
            publicKey: [publicKey],
            service: services,
            created: (new Date()).toISOString()
        };

Generate Verifiable Claim

Verifiable claim document generation.

Example:

const context =  ['https://www.w3.org/2018/credentials/v1', 'https://w3id.org/security/v2'];
const type = ['VerifiableCredential'];
const issuer = "Defined.id";
const claim = {
  "id": "http://defined.id/vc/1",
  "firstName": "Defined",
  "lastName": "Id"
};
const issuanceDate = "2018-10-10";
const expirationDate = "2020-10-10";

 const document: IVerifiableClaimDocument = {
            context: context,
            id: did.format(),
            type: type,
            issuer: issuer,
            claim: claim,
            issuanceDate: issuanceDate,
            expirationDate: expirationDate
        };

Generate Proof of Document

Add proof to a document.

Example:

const document = {
                     "context": [
                         "https://w3id.org/did/v1",
                         "https://w3id.org/security/v1"
                     ],
                     "id": "did:defined:166evUDhpSSq23xP26oeQ4uNZNZce1KFFP",
                     "salt": "52e1aea9-c6ac-4af2-bec0-aaf9cd30a182",
                     "publicKey": [
                         {
                             "id": "did:defined:166evUDhpSSq23xP26oeQ4uNZNZce1KFFP#authentication-key-1",
                             "owner": "did:defined:166evUDhpSSq23xP26oeQ4uNZNZce1KFFP",
                             "type": "Ed25519VerificationKey2018",
                             "publicKeyHex": "0023757068c19dd7b51531ed327c0e000e7f737a3611a7374015618988aa733bb8"
                         },
                         {
                             "id": "did:defined:166evUDhpSSq23xP26oeQ4uNZNZce1KFFP#granting-key-2",
                             "owner": "did:defined:166evUDhpSSq23xP26oeQ4uNZNZce1KFFP",
                             "type": "Ed25519VerificationKey2018",
                             "publicKeyHex": "00e8b5ce1df5c8984511591967b17ae0913581e2daca7b403507536b0294c6eacd"
                         }
                     ],
                     "service": [
                         {
                             "serviceName": "openid",
                             "type": "OpenIdConnectVersion1.0Service",
                             "serviceEndpoint": "https://openid.example.com/"
                         },
                         {
                             "serviceName": "vcr",
                             "type": "CredentialRepositoryService",
                             "serviceEndpoint": "https://repository.example.com/service/8377464"
                         },
                         {
                             "serviceName": "xdi",
                             "type": "XdiService",
                             "serviceEndpoint": "https://xdi.example.com/8377464"
                         }
                     ],
                     "created": "2019-03-01T09:53:34.698Z"
                 };

const proofDocument = ProofOfDocumentService.generateProof(document, key.key, "http://www.defined.id");

Generate Document Hash

Generate document sha256 hash.

Example:

const documentHash = SecurityService.sha256StringHash(JSON.stringify(didDocument))

Register Document Hash on NEM Catapult

Example:

const nemCatapultBlockchain = "PublicTestnet";
const documentHash = "caf6c9e744640159cc972fc83bbb44e09141cfc2c205274cb9cb08a583bbeec5";
const nemAccount = new NemAccount(key.key, nemCatapultBlockchain);
const nodeUri = "http://localhost:3000";
NemTransactionService.timestampTransaction(nemAccount, documentHash, nodeUri).then((transaction) => {
    console.log(transaction);
    }).catch((error) => {
      console.log(error);
    })

Verify Document Hash Registration

Example:

const nemPublicKey = "D98C8B7478E0255127E24B7C0752B78B5D4A90F1454FA9D8CD262ABF665B2B1B";
const nemCatapultBlockchain = "PublicTestnet";
const documentHash = "caf6c9e744640159cc972fc83bbb44e09141cfc2c205274cb9cb08a583bbeec5";
const nodeUri = "http://localhost:3000";
 return NemTransactionService.getTransactionIndexForHash(nemPublicKey, documentHash, nodeUri, nemCatapultBlockchain).then((result) => {
        let info;
        switch (result) {
            case -1:
                info = "Hash was not registered";
                break;
            case 0:
                info = "Hash was registered";
                break;
            default:
                info = "Hash was registered but is outdated";
                break;
        }
 }).catch((error) => {
         console.log(error);
 })

Tests

Clone Github repository to run tests:

git clone https://github.com/GeensNPO/Defined.id.git

Install npm packages:

npm install

Run tests:

npm test

Contributing

This project is developed and maintained by Geens NPO. Contributions are welcome and appreciated. Feel free to start an issue or create a pull request.

Changelog

  • 0.1.0 version: DID, DID document, verifiable claim generation, document hash creation and registering on NEM Catapult Blockchain.

License

Copyright (c) 2019 Geens NPO. Licensed under the LGPL v3.

Readme

Keywords

none

Package Sidebar

Install

npm i @geens_npo/defined-id

Weekly Downloads

1

Version

0.1.6

License

ISC

Unpacked Size

85.7 kB

Total Files

128

Last publish

Collaborators

  • rolandasstrg
  • darius_geens
  • jonas_geens
  • lins
  • dexterslaboratory