我正在使用libgcrypt函数gcry_prime_check
来测试数字3
是否为素数。原来根据我的功能3不是素数。我究竟做错了什么?C Libgcrypt:无法使用libgcrypt检查数字是否为素数
这里是我的代码
#include <gcrypt.h>
#include <stdio.h>
int main(void)
{
gcry_mpi_t cript_prime;
gcry_error_t err;
char buffer[8] = {0};
char number[8] = {0};
printf("%s\n", gcry_check_version (NULL));
gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0);
cript_prime = gcry_mpi_new(16);
strcpy(number,"3");
gcry_mpi_scan(&cript_prime,GCRYMPI_FMT_USG,number,sizeof(number),NULL);
gcry_mpi_print(GCRYMPI_FMT_USG,buffer,sizeof(buffer),NULL,cript_prime);
printf("The number tested is: %s\n",buffer);
err = gcry_prime_check(cript_prime,4);
if(err)
{
printf("%s\n",gcry_strerror(err));
}
gcry_mpi_release(cript_prime);
return 0;
}
这里是输出
1.4.4
The number tested is: 3
Number is not prime
此外,链接,使用libgcrypt将是一个巨大的奖赏一个很好的教程。由于
编辑:
好吧,我设法生成使用gcry_prime_generate
一个素数和复制的价值为number
。原来的检查失败了。但是,当你直接将mpi输出从prime prime传递给prime check函数时......它通过了!
嗯那么gcry_prime_check(...,**无符号整型标志**)有没有关于这方面的文档。我尝试过从0到4的整数。所有结果都一样。 – 2012-07-13 05:27:47
mpi.h包含结构体定义 struct gcry_mpi int alloced;/*数组大小(分配的肢体数量)。 */ int nlimbs;/*有效肢体的数量。 */ int sign; \t/*表示负数,并且也用于存储长度的不透明MPIs,用于 \t \t。 */ 无符号整型标志;/*位0:要在安全存储空间中分配的数组*/ /*位2:肢体是指向某些m_alloced数据的指针*/ mpi_limb_t * d;/*四肢阵列*/ };' 它似乎只使用位0和位2,并且仅用于内存管理。 – Luke 2012-07-13 05:51:58
嗯,看看那个 – 2012-07-13 07:22:24