/*
* 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 = ZeroKnowledgeProofPreComputation;
/**
* @class ZeroKnowledgeProofPreComputation
* @classdesc Encapsulates a zero-knowledge proof of knowledge pre-computation.
* This object is instantiated by the method {@link
* ZeroKnowledgeProofService.newPreComputation} or internally by the
* preCompute
method of any zero-knowledge proof of
* knowledge prover object.
* @property {Exponent[]} exponents The array of randomly generated exponents
* that comprise the pre-computation.
* @property {ZpGroupElement[]} phiOutputs The array of PHI function output
* elements that comprise the pre-computation.
*/
function ZeroKnowledgeProofPreComputation(exponents, phiOutputs) {
Object.freeze(this.exponents = exponents);
Object.freeze(this.phiOutputs = phiOutputs);
Object.freeze(this);
}
ZeroKnowledgeProofPreComputation.prototype = {
/**
* 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 ZeroKnowledgeProofPreComputation
* @returns {string} The JSON string representation of this object.
*/
toJson: function() {
var pB64 = codec.base64Encode(this.phiOutputs[0].p);
var qB64 = codec.base64Encode(this.phiOutputs[0].q);
var exponentValuesB64 = [];
for (var i = 0; i < this.exponents.length; i++) {
exponentValuesB64[i] = codec.base64Encode(this.exponents[i].value);
}
var phiOutputValuesB64 = [];
for (var j = 0; j < this.phiOutputs.length; j++) {
phiOutputValuesB64[j] = codec.base64Encode(this.phiOutputs[j].value);
}
return JSON.stringify({
preComputed: {
p: pB64,
q: qB64,
exponents: exponentValuesB64,
phiOutputs: phiOutputValuesB64
}
});
}
};