Question: #include #include #include #include #include #define BENCH _ LOOPS 1 0 0 0 0 typedef uint 6 4 _ t bigint 2 5 6 [

#include
#include
#include
#include
#include
#define BENCH_LOOPS 10000
typedef uint64_t bigint256[16]; //for operands
typedef uint64_t bigint512[32]; //for multiplication result
const bigint256 a_exp =
{0x13ab,0xfdb2,0xd231,0xc1b3,0xb1d0,0x0867,0x14d8,0x0102,0x5c99,0x380b,0x658a,0xc27
9,0x9b97,0x02d1,0xda40,0x52fa};
const bigint256 b_exp =
{0x79f5,0x5500,0xda19,0xed75,0xe4a0,0x48b6,0x695f,0x0ee7,0x6bee,0x52ca,0xdfa5,0xaea
c,0x9d49,0x03f1,0xeb9b,0xc4a4};
/* SageMath Code 1(a)
*/
// Update the sum here
const bigint256 add_exp ={0};
/* SageMath Code 2(a)
*/
// Update the difference here
const bigint256 sub_exp ={0};
const bigint512 mul_exp =
{0x0095ea5a7,0x07f63b45a,0x0c91ff598,0x18c71e6d8,0x244fa7f13,0x28f2eba45,0x263bdd7
78,0x205bef01a,
0x18963b6a1,0x154ed05bf,0x1b81ca315,0x299508e38,0x36ba623b7,0x398b26e1e,0x3f4c64d71
,0x3e45ae57b,
0x3fb328c12,0x336181563,0x32fec692a,0x206882c5c,0x1c38aa08c,0x186558271,0x2039d413f
,0x1c9efc02d,
0x1c681de82,0x1e281238d,0x1e3534cea,0x0b07209d1,0x0cc4dc1fe,0x0f4028c5e,0x03fbc9028
,0x000000000};
// Print 256 bit number (Helper)
void bigint256_print(const bigint256 a){
int i;
printf("{");
for(i =0; i <15; i++)
printf("0x%04"PRIx64",",a[i]);
printf("0x%04"PRIx64"}",a[i]);
}
//print 512 bit number (Helper)
void bigint512_print(const bigint512 a){
int i;
printf("{");
for(i =0; i <8; i++)
printf("0x%09"PRIx64",",a[i]);
printf("
");
for(i =8; i <16; i++)
printf("0x%09"PRIx64",",a[i]);
printf("
");
for(i =16; i <24; i++)
printf("0x%09"PRIx64",",a[i]);
printf("
");
for(i =24; i <31; i++)
printf("0x%09"PRIx64",",a[i]);
printf("0x%09"PRIx64"}",a[i]);
}
// r = a + b
void add256(bigint256 r, const bigint256 a, const bigint256 b){
int i;
uint8_t carry =0;
// Write 1b here
}
// r = a - b
void sub256(bigint256 r, const bigint256 a, const bigint256 b){
int i;
uint8_t borrow =0;
// Write 2b here
}
// r = a * b using schoolbook method
void schoolbook_mul256(bigint512 r, const bigint256 a, const bigint256 b){
int i, j;
// Initialize r with 0s
memset(r,0,256);
// Write 3b here
}
// r = a * b using comba method
void comba_mul256(bigint512 r, const bigint256 a, const bigint256 b){
int i, j;
// Write 3c here
}
// r = a * b using Karatsuba method
void karatsuba_mul256(bigint512 r, const bigint256 a, const bigint256 b){
int i, j;
//initialize arrays
uint64_t ma[8];
uint64_t mb[8];
uint64_t z0[16]={0};
uint64_t z1[16]={0};
uint64_t z2[16]={0};

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!