rabobank-blockchain/vp-toolkit

View on GitHub
src/service/generators/verifiable-credential-generator.ts

Summary

Maintainability
A
0 mins
Test Coverage
/*
 * Copyright 2020 Coöperatieve Rabobank U.A.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import { ChallengeRequest, IVerifiableCredentialParams, VerifiableCredential } from 'vp-toolkit-models'
import { VerifiableCredentialSigner } from '../..'

export class VerifiableCredentialGenerator {

  public constructor (private _signer: VerifiableCredentialSigner) {
  }

  /**
   * Generate a signed Verifiable Credential (VC) object.
   *
   * Because CryptUtil is being used by the VerifiableCredentialSigner,
   * we need to provide an accountId and keyId so the
   * VC is signed with the correct derivated key.
   * If you use only one key for every sign action,
   * use 0 for accountId and keyId.
   *
   * @param {IVerifiableCredentialParams} params without proof!
   * @param {number} accountId
   * @param {number} keyId
   * @return ChallengeRequest
   */
  public generateVerifiableCredential (params: IVerifiableCredentialParams, accountId: number, keyId: number): VerifiableCredential {
    const verificationMethod = this._signer.cryptUtil.derivePublicKey(accountId, keyId)
    params.proof = {
      type: this._signer.signatureType,
      created: new Date(),
      verificationMethod: verificationMethod
    }
    const vc = new VerifiableCredential(params)
    vc.proof.signatureValue = this._signer.signVerifiableCredential(vc, accountId, keyId)

    return vc
  }
}