/* * 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 = ElGamalPublicKey; /** * @class ElGamalPublicKey * @classdesc Encapsulates an ElGamal public key. To instantiate this object, * use the method {@link ElGamalCryptographyService.newPublicKey}. * @property {ZpSubgroup} group The Zp subgroup to which the Zp group elements * of this public key belong. * @property {ZpGroupElement[]} elements The Zp group elements that comprise * this public key. */ function ElGamalPublicKey(group, elements) { this.group = group; Object.freeze(this.elements = elements); Object.freeze(this); } ElGamalPublicKey.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 ElGamalPublicKey * @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 elementsB64 = []; for (var i = 0; i < this.elements.length; i++) { elementsB64.push(codec.base64Encode(this.elements[i].value)); } return JSON.stringify({ publicKey: {zpSubgroup: {g: gB64, p: pB64, q: qB64}, elements: elementsB64} }); } };