Untitled
unknown
plain_text
2 years ago
1.5 kB
8
Indexable
#include <openssl/bn.h>
#include <stdio.h>
void printBN_hex(const char *msg, BIGNUM *a) {
char *number_str = BN_bn2hex(a);
printf("%s%s\n", msg, number_str);
OPENSSL_free(number_str);
}
void diffie_hellman_hex(long pval, long gval, long xaval, long xbval) {
BN_CTX *ctx = BN_CTX_new();
BIGNUM *p = BN_new();
BIGNUM *g = BN_new();
BIGNUM *xa = BN_new();
BIGNUM *xb = BN_new();
BIGNUM *ya = BN_new();
BIGNUM *yb = BN_new();
BIGNUM *Kab_a = BN_new();
BIGNUM *Kab_b = BN_new();
BN_set_word(p, pval);
BN_set_word(g, gval);
BN_set_word(xa, xaval);
BN_set_word(xb, xbval);
BN_mod_exp(ya, g, xa, p, ctx);
BN_mod_exp(yb, g, xb, p, ctx);
BN_mod_exp(Kab_a, yb, xa, p, ctx);
BN_mod_exp(Kab_b, ya, xb, p, ctx);
printBN_hex("Alice's Public Key (ya) in Hex: ", ya);
printBN_hex("Bob's Public Key (yb) in Hex: ", yb);
printBN_hex("Shared Secret (Kab) as calculated by Alice in Hex: ", Kab_a);
printBN_hex("Shared Secret (Kab) as calculated by Bob in Hex: ", Kab_b);
BN_free(p);
BN_free(g);
BN_free(xa);
BN_free(xb);
BN_free(ya);
BN_free(yb);
BN_free(Kab_a);
BN_free(Kab_b);
BN_CTX_free(ctx);
}
int main() {
printf("Task 1 with Hex Output:\n");
diffie_hellman_hex(773, 2, 333, 603);
printf("\nTask 2 with Hex Output:\n");
diffie_hellman_hex(1553, 307, 1333, 807);
return 0;
}Editor is loading...
Leave a Comment