C中的自定义数据类型

pro*_*ion 7 c types bignum

我正在使用加密技术,需要使用一些非常大的数字.我还使用新的Intel指令进行无进位乘法,这需要m128i数据类型,这是通过加载一个以浮点数据作为参数的函数来完成的.

我需要存储2 ^ 1223整数,然后将其平方并存储该值.

我知道我可以使用GMP库,但我认为创建两个存储2 ^ 1224和2 ^ 2448等值的数据类型会更快.它将有更少的开销.我将使用karatsuba乘以数字,所以我需要对数据类型执行的唯一操作是添加,因为我将打破数字以适应m128i.

有人可以指导我的方向,可以帮助我创建我需要的整数的大小.

Wes*_*ker 6

如果您需要自己的数据类型(无论是否用于数学等),您将需要回退到结构和函数.例如:

struct bignum_s {
    char bignum_data[1024];
}
Run Code Online (Sandbox Code Playgroud)

(显然你想要正确的尺寸,这只是一个例子)

大多数人最终也会对它进行打字:

typedef struct bignum_s bignum;
Run Code Online (Sandbox Code Playgroud)

然后创建函数,使用两个(或任何)指向数字的指针来执行您想要的操作:

/* takes two bignums and ORs them together, putting the result back into a */
void
bignum_or(bignum *a, bignum *b) {
    int i;
    for(i = 0; i < sizeof(a->bignum_data); i++) {
        a->bignum_data[i] |= b->bignum_data[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

你真的想最终定义你可能需要的几乎所有函数,这通常包括内存分配函数(bignum_new),内存释放函数(bignum_free)和init例程(bignum_init).即使您现在不需要它们,提前执行此操作也会为代码需要在以后增长和开发时提供帮助.