src/service/generators/verifiable-credential-generator.ts
/*
* 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
}
}