在C中使用openSSL API进行密钥计算

在C中使用openSSL API进行密钥计算,openssl,Openssl,请建议我如何使用C中的openssl实现以下等式 Out = A^x mod y; 其中指数x是随机的,y是Diffie-Hellman素数模 A=SHA256(缓冲区1与缓冲区2连接)。您的问题不太清楚,所以我只指出您可能感兴趣的部分 SHA256文摘 要制作SHA256摘要,请查看EVP_摘要。还可以查看cypto/sha1test.c的用法。将此行中的EVP_sha1()替换为EVP_sha256() EVP_Digest(*P,strlen((char *)*P),md,NULL,E

请建议我如何使用C中的openssl实现以下等式

Out = A^x mod y; 
其中指数
x
是随机的,
y
是Diffie-Hellman素数模


A
=SHA256(缓冲区1与缓冲区2连接)。

您的问题不太清楚,所以我只指出您可能感兴趣的部分

SHA256文摘 要制作SHA256摘要,请查看EVP_摘要。还可以查看cypto/sha1test.c的用法。将此行中的
EVP_sha1()
替换为
EVP_sha256()

EVP_Digest(*P,strlen((char *)*P),md,NULL,EVP_sha1(), NULL);
大人物 对于x和y,它们作为bignum存储在OpenSSL中。这是一个清晰而简单的大人物指南。另请参阅crypto/bn/bntest.c以了解用法示例

SHA256摘要到BIGNUM 现在您需要将消息摘要A转换为BIGNUM,查看并选择适合您需要的适当函数
BN_bin2bn()
可能就是您要找的。如果生成的BIGNUM bn_A大于模数
y
,此函数将为您执行
bn_A=bn_A mod y

int BN_mod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
,或者如果您希望
bn_A
y
均为非负

int BN_nnmod(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
随机重数x
假设您已经分配了模
y
,并且您想要得到一个随机数x,这样
0=如果您试图执行Diffie Hellman(生成私钥)的第一部分,则有一个函数
DH_generate_key()
。但是为生成器(SHA256)使用随机(非受控)值可能不是一个好主意。
int BN_rand_range(BIGNUM *rnd, BIGNUM *range);
int BN_mod_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);