Untitled
unknown
plain_text
a year ago
1.5 kB
6
Indexable
#include <stdio.h> #include <stdlib.h> // for srand, rand, and other standard library functions #include <time.h> // for time // Function prototypes void el_gamal_encrypt(int p, int g, int xa, int M, int *C1, int *C2); int modular_exponentiation(int base, int exponent, int modulus); // El-Gamal encryption function (defined after main) void el_gamal_encrypt(int p, int g, int xa, int M, int *C1, int *C2) { // Seed the random number generator (improves randomness) srand(time(NULL)); // Generate random value k int k = rand(); // Generate a random positive integer // Calculate C1 = g^k mod p *C1 = modular_exponentiation(g, k, p); // Calculate C2 = (M * ya^k) mod p *C2 = (M * modular_exponentiation(xa, k, p)) % p; } // Function to compute modular exponentiation (defined after main) int modular_exponentiation(int base, int exponent, int modulus) { int result = 1; base = base % modulus; while (exponent > 0) { if (exponent % 2 == 1) result = (result * base) % modulus; exponent = exponent >> 1; base = (base * base) % modulus; } return result; } int main() { // Parameters int p = 773; // Prime number int g = 2; // Primitive root int xa = 333; // Alice's secret key int M = 321; // Plaintext message // Variables to store ciphertext int C1, C2; // Perform El-Gamal encryption el_gamal_encrypt(p, g, xa, M, &C1, &C2); // Output ciphertext printf("Ciphertext (C1, C2): (%d, %d)\n", C1, C2); return 0; }
Editor is loading...
Leave a Comment