summaryrefslogtreecommitdiff
path: root/set5/task40.c
diff options
context:
space:
mode:
authorBenedict <benedict@0xb8000.de>2016-11-29 22:24:26 +0100
committerBenedict <benedict@0xb8000.de>2017-02-21 13:00:26 +0100
commit544153a8ffa6d68385712ab0a7c6315399346909 (patch)
tree9bdb43a05c388ba1fa1410b4757b9c00a3683f0d /set5/task40.c
parent30211642cbdee771ad4e0d8515719985e5c0c36a (diff)
completed challenge 40, set 5
Diffstat (limited to 'set5/task40.c')
-rw-r--r--set5/task40.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/set5/task40.c b/set5/task40.c
new file mode 100644
index 0000000..42ce66e
--- /dev/null
+++ b/set5/task40.c
@@ -0,0 +1,72 @@
+#include "../lib/lib.h"
+#include "../lib/lib2.h"
+#include "../lib/lib3.h"
+#include "../lib/lib4.h"
+#include "../lib/lib5.h"
+
+int main()
+{
+ int i;
+ struct rsa_key_bignum private[3];
+ struct rsa_key_bignum public[3];
+ BIGNUM *res = BN_new();
+ BIGNUM *encrypted[3];
+ BIGNUM *decrypted = BN_new();
+ BIGNUM *ab[3];
+ BIGNUM *nb[3];
+ BIGNUM *solution_no_mod = BN_new();
+
+ out = BIO_new(BIO_s_file());
+ BIO_set_fp(out, stdout, BIO_NOCLOSE);
+
+ ctx = BN_CTX_new();
+
+ printf("encrypt the following message with three different keys:\n");
+ unsigned char *mess = "All you need is love! Love is all you need";
+ printf("%s\n", mess);
+
+ for(i=0;i<2;i++) {
+ rsa_generate_key_bignum(&public[i], &private[i]);
+ do {
+ rsa_generate_key_bignum(&public[i+1], &private[i+1]);
+ } while (!BN_cmp(private[i].exponent, private[i+1].exponent));
+ }
+
+ printf("private keys:\n");
+ for(i=0;i<3;i++) {
+ BN_print(out, private[i].exponent);
+ printf("\n");
+ }
+
+ BIGNUM *message = BN_bin2bn(mess, strlen(mess), NULL);
+ printf("message as BN:\n");
+ BN_print(out, message);
+ printf("\nencrypted rsa messages:\n");
+ for(i=0;i<3;i++) {
+ encrypted[i] = BN_new();
+ if(!rsa_encrypt_bignum(message, encrypted[i], &public[i]))
+ die("could not rsa encrypt message");
+
+ BN_print(out, encrypted[i]);
+ printf("\n");
+ }
+
+ for(i=0;i<3;i++) {
+ ab[i] = BN_new();
+ nb[i] = BN_new();
+ BN_copy(ab[i], encrypted[i]);
+ BN_copy(nb[i], public[i].modulo);
+ }
+
+ BIGNUM *n_3 = BN_new();
+ BN_set_word(n_3, 3);
+
+ rsa_broadcast_cube(res, ab, nb);
+ printf("\nrsa broadcast cube is\n");
+ BN_print(out, res);
+ printf("\noriginal message is:\n");
+ BN_print(out, message);
+ unsigned char *__dec = malloc(1000);
+ BN_bn2bin(res, __dec);
+ printf("\ndecrypted text with rsa broadcast attack: %s\n", __dec);
+}