コード例 #1
0
ファイル: genkey.c プロジェクト: Geurney/cs174project
int main() {
    paillier_pubkey_t *pubkey;
    paillier_prvkey_t *privkey;
    FILE *f = fopen("key", "r");
    if (f != NULL) {
        char yn;
        while(1) {
            printf("Key file exists, do you want overrite?[y/n]");
            scanf("%s", &yn);
            if (yn == 'n') {
                exit(1);
 	    }           
            if (yn == 'y') {
                fclose(f);
                break;
            }
        } 
    }
    FILE *p = fopen("key", "w");
    if (p == NULL) {
         printf("Please run with sudo!\n");
         exit(1);
     }
    printf("Generate new key...\n");
    generate_key(128, &pubkey, &privkey);
    fprintf(p, "%s\n", paillier_pubkey_to_hex(pubkey));
    fprintf(p, "%s\n", paillier_prvkey_to_hex(privkey));
    fclose(p);

    paillier_freepubkey(pubkey);
    paillier_freeprvkey(privkey);
    return 0;
}
コード例 #2
0
void test_comparison()
{
    Log::i("(Test) # Test: Comparison");

    // questions
    Log::i("(Test) - Questions");
    std::set<Question> questions;
    for (int i = 0; i < Helper::GenerateRandom(10) + 2; i++)
    {
        Question q("Question #" + std::to_string(i));
        questions.insert(q);
    }

    test_generic(questions);

    // keys
    Log::i("(Test) - Keys");
    std::set<CKeyID> keys;
    for (int i = 0; i < Helper::GenerateRandom(10) + 2; i++)
    {
        SignKeyPair skp;
        SignKeyStore::genNewSignKeyPair(static_cast<Role>(Helper::GenerateRandom(4)), skp);
        keys.insert(skp.second.GetID());
        SignKeyStore::removeSignKeyPair(skp.second.GetID());
    }

    test_generic(keys);

    // encrypted ballots
    Log::i("(Test) - Encrypted Ballots");
    std::set<EncryptedBallot> eballots;
    std::set<TalliedBallots> tballots;
    int nTrustees = 4;
    paillier_pubkey_t* publicKey = NULL;
    paillier_partialkey_t** privateKeys = NULL;
    paillier_keygen(256, nTrustees, nTrustees, &publicKey, &privateKeys, paillier_get_rand_devurandom);

    for (int i = 0; i < Helper::GenerateRandom(2) + 2; i++)
    {
        PLAINTEXT_SELECTION choice = PLAINTEXT_SELECTION::FIRST;
        if (Helper::GenerateRandom() > 0.5)
            choice = PLAINTEXT_SELECTION::SECOND;
        paillier_ciphertext_proof_t* cipher = paillier_enc_proof(publicKey, choice, paillier_get_rand_devurandom, NULL);

        EncryptedBallot ballot;
        ballot.questionID = Helper::GenerateRandom160();
        ballot.answer = cipher;

        eballots.insert(ballot);

        int j = Helper::GenerateRandom(nTrustees - 1);
        paillier_partialdecryption_proof_t* proof = paillier_dec_proof(publicKey, privateKeys[j], cipher, paillier_get_rand_devurandom, NULL);

        TalliedBallots ballots;
        ballots.questionID = Helper::GenerateRandom160();
        ballots.answers = proof;

        tballots.insert(ballots);
    }

    test_generic(eballots);

    Log::i("(Test) - Tallied Ballots");

    test_generic(tballots);

    paillier_freepubkey(publicKey);
    paillier_freepartkeysarray(privateKeys, nTrustees);
    BOOST_FOREACH(EncryptedBallot b, eballots)
            paillier_freeciphertextproof(b.answer);
    BOOST_FOREACH(TalliedBallots b, tballots)
            paillier_freepartdecryptionproof(b.answers);
}