8.3 算法
8.3.1 表示在研究高效的公钥密码所需要的算法之前,我们必须讨论用来表示这些整数的结构。针对我们的目的,我们将借助于TomsFastMath包,它使用了一种类似于下面的结构:

其中fp_digit是一个表示单独数字的类型,一般等价于unsigned long,但可以根据平台来改变。和它一起的是我们还没有看到的fp_word类型。它是fp_digit的两倍大小并且能够存储两个最大的fp_digit值的乘积。FP_SIZE宏是默认的最大整数大小。它基于数字的大小以及所需的位数。
例如,fp_digit是一个32位的类型,并且你希望表示384位的整数,那么FP_SIZE必须至少为12。
used标志表示数组dp中有多少个数字是非零的。这使得我们可以更高效地操作更短的整数。
例如,虽然你的整数可以多达12个数字,但并不意味着它们都将会是那么大。对仅有6个数字的数执行12数字的操作将浪费时间和资源。
sign标志表示整数的符号。如果它为0,表示非负数;如果它是非零值,就表示负数。这意味着我们的整数总是无符号的而且只有这个标志控制这种状态。
fp_int类型的数字以little-endian的形式来使用。例如,fp_digit是32位的,数组dp包含{1, 2,3, 4, 0, 0, 0, ..., 0},那么这就表示整数1+2×232 + 3×264 + 4×296。
【责任编辑:
杨硕 TEL:(010)68476636-8001】