/*
* Copyright 2018 Scytl Secure Electronic Voting SA
*
* All rights reserved
*
* See our extended copyright notice in *file 'Copyright.txt' which is part of this source code package
*/
/* jshint node:true */
'use strict';
var codec = require('scytl-codec');
module.exports = ZeroKnowledgeProof;
/**
* @class ZeroKnowledgeProof
* @classdesc Encapsulates a zero-knowledge proof of knowledge. This object is
* instantiated by the method
* {@link ZeroKnowledgeProofService.newProof} or internally by the
* prove
method of any zero-knowledge proof of
* knowledge prover object.
* @property {Exponent} hash The hash of the zero-knowledge proof of knowledge.
* @property {Exponent[]} values The values of the zero-knowledge proof of
* knowledge.
*/
function ZeroKnowledgeProof(hash, values) {
this.hash = hash;
Object.freeze(this.values = values);
Object.freeze(this);
}
ZeroKnowledgeProof.prototype = {
/**
* Checks if this zero-knowledge proof of knowledge is equal to the
* zero-knowledge proof of knowledge provided as input.
*
* @function equals
* @memberof ZeroKnowledgeProof
* @param {ZeroKnowledgeProof}
* proof The zero-knowledge proof of knowledge that should be
* checked against this zero-knowledge proof of knowledge for
* equality.
* @returns {boolean} true
if the equality holds,
* false
otherwise.
*/
equals: function(proof) {
return proof.hash.equals(this.hash && proof.values.equals(this.values));
},
/**
* Serializes this object into a JSON string representation.
*
* IMPORTANT: This serialization must be exactly the same as the
* corresponding serialization in the library cryptoLib
,
* implemented in Java, since the two libraries are expected to communicates
* with each other via these serializations.
*
* @function toJson
* @memberof ZeroKnowledgeProof
* @returns {string} The JSON string representation of this object.
*/
toJson: function() {
var qB64 = codec.base64Encode(this.hash.q);
var hashB64 = codec.base64Encode(this.hash.value);
var valuesB64 = [];
for (var i = 0; i < this.values.length; i++) {
valuesB64[i] = codec.base64Encode(this.values[i].value);
}
return JSON.stringify(
{zkProof: {q: qB64, hash: hashB64, values: valuesB64}});
}
};