Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <openssl/bn.h>
- #include <string.h>
- #define NBITS 256
- void printBN(char* msg, BIGNUM * a)
- {
- char * number_str = BN_bn2hex(a);
- printf("%s 0x%s\n", msg, number_str);
- OPENSSL_free(number_str);
- }
- int main(){
- /*Task 1: Deriving the private key*/
- BN_CTX *ctx = BN_CTX_new();
- BIGNUM *p = BN_new();
- BIGNUM *q = BN_new();
- BIGNUM *e = BN_new();
- BIGNUM *d = BN_new();
- BIGNUM *one = BN_new();
- BIGNUM *p1 = BN_new();
- BIGNUM *q1 = BN_new();
- BIGNUM *fi = BN_new();
- BN_hex2bn(&p, "F7E75FDC469067FFDC4E847C51F452DF");
- BN_hex2bn(&q, "E85CED54AF57E53E092113E62F436F4F");
- BN_hex2bn(&e, "0D88C3");
- BN_dec2bn(&one, "1");
- BN_sub(p1, p, one);
- BN_sub(q1, q, one);
- BN_mul(fi, p1, q1, ctx);
- BN_mod_inverse(d, e, fi, ctx);
- printBN("Task1: Private key: ", d);
- printf("\n");
- /*Task2: Encrypting a message*/
- BIGNUM *n = BN_new();
- BIGNUM *msg = BN_new();
- BIGNUM *enc = BN_new();
- BN_hex2bn(&n, "DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4D0CB81629242FB1A5");
- BN_hex2bn(&msg, "4120746f702073656372657421");
- BN_hex2bn(&d, "74D806F9F3A62BAE331FFE3F0A68AFE35B3D2E4794148AACBC26AA381CD7D30D");
- BN_hex2bn(&e, "010001");
- BN_mod_exp(enc, msg, e, n, ctx);
- printBN("Task2: Encrypted msg: ",enc);
- printf("\n");
- /*Task3: Decrypting a message*/
- BIGNUM *dec = BN_new();
- BN_hex2bn(&enc, "8C0F971DF2F3672B28811407E2DABBE1DA0FEBBBDFC7DCB67396567EA1E2493F");
- BN_mod_exp(dec, enc, d, n, ctx);
- printBN("Task 3: Decrypted msg: ",dec);
- printf("\n");
- /*Task4: Signing a message*/
- BN_hex2bn(&msg, "49206f776520796f752024323030302e");
- BN_mod_exp(enc, msg, e, n, ctx);
- printBN("Task4: Signature1: ",enc);
- BN_mod_exp(dec, enc, d, n, ctx);
- printBN("Task4: Message1: ",dec);
- BN_hex2bn(&msg, "49206f776520796f752024333030302e");
- BN_mod_exp(enc, msg, e, n, ctx);
- printBN("Task4: Signature2: ",enc);
- BN_mod_exp(dec, enc, d, n, ctx);
- printBN("Task4: Message2: ",dec);
- printf("\n");
- /*Task5: Verifying a signature*/
- BIGNUM *s = BN_new();
- BN_hex2bn(&s, "643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6802F");
- BN_hex2bn(&n, "AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115");
- BN_hex2bn(&msg, "4c61756e63682061206d6973736c652e0a");
- BN_hex2bn(&e, "010001");
- BN_mod_exp(dec, s, e, n, ctx);
- printBN("Task5: Msg1: ",dec);
- BN_hex2bn(&s, "643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6803F");
- BN_mod_exp(dec, s, e, n, ctx);
- printBN("Task5: Msg2: ",dec);
- /*Task6: Manually verifying an x.509 certificate*/
- BN_hex2bn(&e, "10001");
- BN_hex2bn(&n, "DFAFE99750088357B4CC6265F69082ECC7D32C6B30CA5BECD9C37DC740C118148BE0E83376492AE33F214993AC4E0EAF3E48CB65EEFCD3210F65D22AD9328F8CE5F777B0127BB595C089A3A9BAED732E7A0C063283A27E8A1430CD11A0E12A38B9790A31FD50BD8065DFB7516383C8E28861EA4B6181EC526BB9A2E24B1A289F48A39E0CDA098E3E172E1EDD20DF5BC62A8AAB2EBD70ADC50B1A25907472C57B6AAB34D63089FFE568137B540BC8D6AEEC5A9C921E3D64B38CC6DFBFC94170EC1672D526EC38553943D0FCFD185C40F197EBD59A9B8D1DBADA25B9C6D8DFC115023AABDA6EF13E2EF55C089C3CD68369E4109B192AB62957E3E53D9B9FF0025D");
- BN_hex2bn(&s, "dd33d711f3635838dd1815fb0955be7656b97048a56947277bc2240892f15a1f4a1229372474511c6268b8cd957067e5f7a4bc4e2851cd9be8ae879dead8ba5aa1019adcf0dd6a1d6ad83e57239ea61e04629affd705cab71f3fc00a48bc94b0b66562e0c154e5a32aad20c4e9e6bbdcc8f6b5c332a398cc77a8e67965072bcb28fe3a165281ce520c2e5f83e8d50633fb776cce40ea329e1f925c41c1746c5b5d0a5f33cc4d9fac38f02f7b2c629dd9a3916f251b2f90b119463df67e1ba67a87b9a37a6d18fa25a5918715e0f2162f58b0062f2c6826c64b98cdda9f0cf97f90ed434a12444e6f737a28eaa4aa6e7b4c7d87dde0c90244a787afc3345bb442");
- BN_mod_exp(dec, s, e, n, ctx);
- printBN("Task6: ",dec);
- BN_CTX_free(ctx);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement