cert-verifier-js
A library to parse and verify Blockcerts certificates.
Usage
Install
$ npm i cert-verifier-js
Import
Commonjs
Exposed by default:
var Certificate = require('cert-verifier-js');
var certificate = new Certificate(certificateDefinition);
ES module
import Certificate from 'cert-verifier-js';
let certificate = new Certificate(certificateDefinition);
Script tag (iife)
Check an example here
<script src='node_modules/cert-verifier-js/dist/verifier-iife.js'></script>
<script>
var certificate = new Verifier.Certificate(certificateDefinition);
</script>
Examples
You can find more examples in the test folder.
Parse a Blockcert certificate
var fs = require('fs');
fs.readFile('./certificate.json', 'utf8', function (err, data) {
if (err) {
console.log(err);
}
let certificate = new Certificate(data);
console.log(cert.name);
});
Verify a Blockcert certificate
var fs = require('fs');
fs.readFile('./certificate.json', 'utf8', function (err, data) {
if (err) {
console.log(err);
}
let certificate = new Certificate(data);
const verificationResult = await certificate.verify(({code, label, status, errorMessage}) => {
console.log('Code:', code, label, ' - Status:', status);
if (errorMessage) {
console.log(`The step ${code} fails with the error: ${errorMessage}`);
}
});
if (verificationResult.status === 'failure') {
console.log(`The certificate is not valid. Error: ${verificationResult.errorMessage}`);
}
});
API
Certificate
new Certificate(certificateDefinition)
const certificate = new Certificate(certificateDefinition);
The constructor automatically parses a certificate.
Parameter
certificateDefinition
(String|Object
): the certificate definition. Can either be a string or a JSON object.
Returns
The certificate instance has the following properties:
certificateImage
: String
. Raw data of the certificate imagecertificateJson
: Object
. Certificate JSON objectchain
: Object
. Chain the certificate was issued ondescription
: String
. Description of the certificateexpires
: String
. Expiration dateid
: String
. Certificate's IDisFormatValid
: Boolean
. Indicates whether or not the certificate has a valid formatissuedOn
: String
. Datetime of issuance (ISO-8601)issuer
: Object
. Certificate issuermetadataJson
: Object
. Certificate metadata objectname
: String
. Name of the certificatepublicKey
: String
. Certificate's public keyreceipt
: String
. Certificate's receiptrecipientFullName
: String
. Full name of recipientrecordLink
: String
. Link to the certificate recordrevocationKey
: String|null
. Revocation key (if any)sealImage
: String
. Raw data of the seal's image;signature
: String
. Certificate's signaturesignatureImage
: String
. Raw data of the certificate's signature image;subtitle
: String
. Subtitle of the certificatetransactionId
: String
. Transaction IDrawTransactionLink
: String
. Raw transaction IDtransactionLink
: String
. Transaction linkverificationSteps
: VerificationStep[]
. The array of steps the certificate will have to go through during verificationversion
: CertificateVersion
. Version of the certificate
Note: verificationSteps
is generated according to the nature of the certificate. The full steps array is provided ahead of verification in order to give more flexibility to the consumer. For example, you might want to pre-render the verification steps for animation, or render a count of steps and/or sub-steps.
VerificationStep
has the following shape:
{
code: 'formatValidation',
label: 'Format validation',
labelPending: 'Validating format',
subSteps: [
{
code: 'getTransactionId',
label: 'Get transaction ID',
labelPending: 'Getting transaction ID',
parentStep: 'formatValidation'
},
...
]
}
verify(stepCallback)
This will run the verification of a certificate. The function is asynchronous.
const certificateVerification = await certificate.verify(({code, label, status, errorMessage}) => {
console.log('Sub step update:', code, label, status);
}));
console.log(`Verification was a ${certificateVerification.status}:`, certificateVerification.errorMessage);
Parameters
({code, label, status, errorMessage}) => {}
(Function
): callback function called whenever a substep status has changed. The callback parameter has 4 properties:
code
: substep codelabel
: readable label of the substepstatus
: substep status (success
, failure
, starting
)errorMessage
: error message (optional)
Returns
The final verification status:
{ code, status, errorMessage }
code
: code of the final step (final
)status
: final verification status (success
, failure
)errorMessage
: error message (optional)
Constants
Several constants are being exposed:
import { BLOCKCHAINS, STEPS, SUB_STEPS, CERTIFICATE_VERSIONS, VERIFICATION_STATUSES } from 'cert-verifier-js';
Contribute
Run the tests
$ npm run test
Build
$ npm run build
The build files are in the dist
folder.
Verification process
If you want more details about the verification process, please check out the documentation.
Contact
Contact us at the Blockcerts community forum.