2012-07-13 133 views
1

我正在使用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函数时......它通过了!

回答

0

这是函数原型,它需要一个gcry_mpi_t结构和一个整数。

gcry_error_t gcry_prime_check (gcry_mpi_t p, unsigned int flags) 

gcry_mpi_t:该类型表示一个保存MPI的对象。

gcry_mpi_t结构可以使用gcry_mpi_new功能

进行分配,并可以使用gcry_mpi_set功能进行设置。

+0

嗯那么gcry_prime_check(...,**无符号整型标志**)有没有关于这方面的文档。我尝试过从0到4的整数。所有结果都一样。 – 2012-07-13 05:27:47

+1

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

+0

嗯,看看那个 – 2012-07-13 07:22:24

1

这是一个错误。像大多数素数测试一样,它在测试更昂贵的测试之前,通过小的素数值来测试可分性。不幸的是,如果你的素数是其中的一个数值,那么它被报告为可分割的(本身) - 因此是合成的。

因为libgcrypt的重点是加密应用程序,所以这样一个小素数没有用处。虽然这很sl and,但不会花费太多的时间来纠正。

+0

中根本没有考虑。但是手册http://www.gnupg.org/documentation/manuals/gcrypt/Prime_002dNumber_002dGenerator-Subsystem-Architecture。素数生成体系结构的html声明如下:使用质量最高为4999的标准筛选算法用作快速首次检查。' – 2012-07-13 07:20:46

+0

相当。所以,我打赌'4999'被宣布为合成,'5003'被宣布为主。 – 2012-07-13 07:32:40

+0

我试过5003,结果还是一样。将继续尝试,直到可能9973 – 2012-07-13 07:35:36