123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- /*
- * 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 CommonTestData = require('./common-data');
- var elGamal = require('scytl-elgamal');
- module.exports = SimplePlaintextEqualityProofTestData;
- /**
- * Provides the data needed by the simple plaintext equality zero-knowledge
- * proof of knowledge unit tests.
- */
- function SimplePlaintextEqualityProofTestData() {
- var NUM_SIMPLE_PLAINTEXT_ELEMENTS = 4;
- var SIMPLE_PLAINTEXT_EQUALITY_PROOF_STRING_DATA =
- 'Test Simple Plaintext Equality Proof Auxilary Data';
- var OTHER_SIMPLE_PLAINTEXT_EQUALITY_PROOF_STRING_DATA =
- SIMPLE_PLAINTEXT_EQUALITY_PROOF_STRING_DATA + '0';
- var NUM_SIMPLE_PLAINTEXT_EQUALITY_PROOF_PROGRESS_CHECKS =
- NUM_SIMPLE_PLAINTEXT_ELEMENTS + 1;
- var elGamalEncrypter = elGamal.newService().newEncrypter();
- var commonTestData = new CommonTestData();
- var group_ = commonTestData.getGroup();
- var anotherGroup_ = commonTestData.getAnotherGroup();
- var publicKey =
- commonTestData.generateKeyPair(group_, NUM_SIMPLE_PLAINTEXT_ELEMENTS)
- .publicKey;
- var primaryPublicKey_ = commonTestData.getSubPublicKey(
- group_, publicKey, 0, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- var secondaryPublicKey_ = commonTestData.getSubPublicKey(
- group_, publicKey, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2),
- NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- var anotherPrimaryPublicKey_;
- do {
- anotherPrimaryPublicKey_ =
- commonTestData
- .generateKeyPair(group_, NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2)
- .publicKey;
- } while (
- anotherPrimaryPublicKey_.elements.equals(primaryPublicKey_.elements));
- var anotherSecondaryPublicKey_;
- do {
- anotherSecondaryPublicKey_ =
- commonTestData
- .generateKeyPair(group_, NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2)
- .publicKey;
- } while (
- anotherSecondaryPublicKey_.elements.equals(secondaryPublicKey_.elements));
- var primaryPublicKeyWithLessElements_ = commonTestData.getSubPublicKey(
- group_, publicKey, 1, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- var secondaryPublicKeyWithLessElements_ = commonTestData.getSubPublicKey(
- group_, publicKey, ((NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2) + 1),
- NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- var publicKeyFromAnotherGroup =
- commonTestData
- .generateKeyPair(anotherGroup_, NUM_SIMPLE_PLAINTEXT_ELEMENTS)
- .publicKey;
- var primaryPublicKeyFromAnotherGroup_ = commonTestData.getSubPublicKey(
- anotherGroup_, publicKeyFromAnotherGroup, 0,
- (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- var secondaryPublicKeyFromAnotherGroup_ = commonTestData.getSubPublicKey(
- anotherGroup_, publicKeyFromAnotherGroup,
- (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2), NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- var simplePlaintext_ = commonTestData.generateSimplePlaintext(
- group_, NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- var simplePlaintextFromAnotherGroup = commonTestData.generateSimplePlaintext(
- anotherGroup_, NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- var encryptedElements = elGamalEncrypter.init(publicKey).encrypt(
- simplePlaintext_, {saveSecret: true});
- var primaryEncryptedElements_ = commonTestData.getSubEncryptedElements(
- encryptedElements, 0, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- var secondaryEncryptedElements_ = commonTestData.getSubEncryptedElements(
- encryptedElements, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2),
- NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- var subPlaintext;
- var otherPrimaryEncryptedElements_;
- do {
- subPlaintext = commonTestData.generateSimplePlaintext(
- group_, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- otherPrimaryEncryptedElements_ =
- elGamalEncrypter.init(primaryPublicKey_).encrypt(subPlaintext, {
- saveSecret: true
- });
- } while (subPlaintext.equals(
- simplePlaintext_.slice(0, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2))));
- var otherSecondaryEncryptedElements_;
- do {
- subPlaintext = commonTestData.generateSimplePlaintext(
- group_, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- otherSecondaryEncryptedElements_ =
- elGamalEncrypter.init(secondaryPublicKey_).encrypt(subPlaintext, {
- saveSecret: true
- });
- } while (subPlaintext.equals(simplePlaintext_.slice(
- (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2), NUM_SIMPLE_PLAINTEXT_ELEMENTS)));
- var primaryEncryptedElementsWithLessElements_ =
- commonTestData.getSubEncryptedElements(
- encryptedElements, 1, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- var secondaryEncryptedElementsWithLessElements_ =
- commonTestData.getSubEncryptedElements(
- encryptedElements, ((NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2) + 1),
- NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- encryptedElements =
- elGamalEncrypter.init(publicKeyFromAnotherGroup)
- .encrypt(simplePlaintextFromAnotherGroup, {saveSecret: true});
- var primaryEncryptedElementsFromAnotherGroup_ =
- commonTestData.getSubEncryptedElements(
- encryptedElements, 0, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- var secondaryEncryptedElementsFromAnotherGroup_ =
- commonTestData.getSubEncryptedElements(
- encryptedElements, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2),
- NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- var nonSimplePlaintext_ = commonTestData.generateNonSimplePlaintext(
- group_, NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- encryptedElements = elGamalEncrypter.init(publicKey).encrypt(
- nonSimplePlaintext_, {saveSecret: true});
- var primaryEncryptedElementsForNonSimplePlaintext_ =
- commonTestData.getSubEncryptedElements(
- encryptedElements, 0, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2));
- var secondaryEncryptedElementsForNonSimplePlaintext_ =
- commonTestData.getSubEncryptedElements(
- encryptedElements, (NUM_SIMPLE_PLAINTEXT_ELEMENTS / 2),
- NUM_SIMPLE_PLAINTEXT_ELEMENTS);
- this.getGroup = function() {
- return group_;
- };
- this.getAnotherGroup = function() {
- return anotherGroup_;
- };
- this.getPrimaryPublicKey = function() {
- return primaryPublicKey_;
- };
- this.getSecondaryPublicKey = function() {
- return secondaryPublicKey_;
- };
- this.getAnotherPrimaryPublicKey = function() {
- return anotherPrimaryPublicKey_;
- };
- this.getAnotherSecondaryPublicKey = function() {
- return anotherSecondaryPublicKey_;
- };
- this.getPrimaryPublicKeyWithLessElements = function() {
- return primaryPublicKeyWithLessElements_;
- };
- this.getSecondaryPublicKeyWithLessElements = function() {
- return secondaryPublicKeyWithLessElements_;
- };
- this.getPrimaryPublicKeyFromAnotherGroup = function() {
- return primaryPublicKeyFromAnotherGroup_;
- };
- this.getSecondaryPublicKeyFromAnotherGroup = function() {
- return secondaryPublicKeyFromAnotherGroup_;
- };
- this.getPrimaryEncryptedElements = function() {
- return primaryEncryptedElements_;
- };
- this.getSecondaryEncryptedElements = function() {
- return secondaryEncryptedElements_;
- };
- this.getOtherPrimaryEncryptedElements = function() {
- return otherPrimaryEncryptedElements_;
- };
- this.getOtherSecondaryEncryptedElements = function() {
- return otherSecondaryEncryptedElements_;
- };
- this.getPrimaryEncryptedElementsWithLessElements = function() {
- return primaryEncryptedElementsWithLessElements_;
- };
- this.getSecondaryEncryptedElementsWithLessElements = function() {
- return secondaryEncryptedElementsWithLessElements_;
- };
- this.getPrimaryEncryptedElementsFromAnotherGroup = function() {
- return primaryEncryptedElementsFromAnotherGroup_;
- };
- this.getSecondaryEncryptedElementsFromAnotherGroup = function() {
- return secondaryEncryptedElementsFromAnotherGroup_;
- };
- this.getStringData = function() {
- return SIMPLE_PLAINTEXT_EQUALITY_PROOF_STRING_DATA;
- };
- this.getOtherStringData = function() {
- return OTHER_SIMPLE_PLAINTEXT_EQUALITY_PROOF_STRING_DATA;
- };
- this.getNonSimplePlaintext = function() {
- return nonSimplePlaintext_;
- };
- this.getPrimaryEncryptedElementsForNonSimplePlaintext = function() {
- return primaryEncryptedElementsForNonSimplePlaintext_;
- };
- this.getSecondaryEncryptedElementsForNonSimplePlaintext = function() {
- return secondaryEncryptedElementsForNonSimplePlaintext_;
- };
- this.getNumProgressChecks = function() {
- return NUM_SIMPLE_PLAINTEXT_EQUALITY_PROOF_PROGRESS_CHECKS;
- };
- }
|