/* * 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 = ElGamalPrivateKey; /** * @class ElGamalPrivateKey * @classdesc Encapsulates an ElGamal private key. To instantiate this object, * use the method {@link ElGamalCryptographyService.newPrivateKey}. * @property {ZpSubgroup} group The Zp subgroup to which the exponents of this * private key are associated. * @property {Exponent[]} exponents The exponents that comprise this private * key. */ function ElGamalPrivateKey(group, exponents) { this.group = group; Object.freeze(this.exponents = exponents); Object.freeze(this); } ElGamalPrivateKey.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 communicate
* with each other via these serializations.
*
* @function toJson
* @memberof ElGamalPrivateKey
* @returns {string} The JSON string representation of this object.
*/
toJson: function() {
var gB64 = codec.base64Encode(this.group.generator.value);
var pB64 = codec.base64Encode(this.group.p);
var qB64 = codec.base64Encode(this.group.q);
var exponentsB64 = [];
for (var i = 0; i < this.exponents.length; i++) {
exponentsB64.push(codec.base64Encode(this.exponents[i].value));
}
return JSON.stringify({
privateKey:
{zpSubgroup: {g: gB64, p: pB64, q: qB64}, exponents: exponentsB64}
});
}
};