0

我正在寻找gcry_mpi_t类型的定义。我正在研究 GnuPG 的代码,它使用 libgcrypt,而后者又使用后者作为负责存储模数、RSA 密钥的质数等的类型。通常,/libgcrypt-1.8.2/cipher/rsa.c您可以在其中找到:

typedef struct
    {
      gcry_mpi_t n;     /* modulus */
      gcry_mpi_t e;     /* exponent */
    } RSA_public_key;


typedef struct
    {
      gcry_mpi_t n;     /* public modulus */
      gcry_mpi_t e;     /* public exponent */
      gcry_mpi_t d;     /* exponent */
      gcry_mpi_t p;     /* prime  p. */
      gcry_mpi_t q;     /* prime  q. */
      gcry_mpi_t u;     /* inverse of p mod q. */
    } RSA_secret_key;

我发现这个 SO post提到了我试图定义的特定类型,但它没有说明它是如何定义的。

我的目标是在介绍 RSA 及其实现方式的基本 CS 类中使用该定义。因此,我希望展示如何通过专门struct为高效内存管理而设计的来处理特定的 RSA 变量。

但是,直到现在,我都找不到在 libgcrypt 代码中定义它的正确代码。谢谢 !

4

1 回答 1

0

src/gcrypt.h.in(用于生成<gcrypt.h>头文件:

/* The data objects used to hold multi precision integers.  */
struct gcry_mpi;
typedef struct gcry_mpi *gcry_mpi_t;

因此,publicgcry_mpi_t被定义为指向不完整结构的指针,允许实现保持私有。如果您只是查看已安装的标头,您将找不到完整的定义。但是,对于内部使用,src/mpi.h定义struct gcry_mpi为:

struct gcry_mpi
{
   int alloced;         /* Array size (# of allocated limbs). */
   int nlimbs;          /* Number of valid limbs. */
   int sign;            /* Indicates a negative number and is also used
                           for opaque MPIs to store the length.  */
   unsigned int flags; /* Bit 0: Array to be allocated in secure memory space.*/
                       /* Bit 2: The limb is a pointer to some m_alloced data.*/
                       /* Bit 4: Immutable MPI - the MPI may not be modified.  */
                       /* Bit 5: Constant MPI - the MPI will not be freed.  */
   mpi_limb_t *d;      /* Array with the limbs */
};
于 2018-02-01T16:13:47.710 回答