我正在尝试使用加法重新创建 Diffie-Hellman 密钥交换,但出现错误

I'm trying to recreate the Diffie-Hellman Key Exchange using addition but i get errors

#include<stdio.h>
#include<math.h>

long long int add(long long int a, long long int b,
        long long int G)
{
    if (b == 1)
        return a;

    else
        return (((long long int)(a + b)) % G);
}
int main()
{
    long long int G, x, a, y, b, ka, kb;



    G = 43; //the agreed number
    printf("The value of G : %lld\n\n", G);


    a = 23; //private key for a
    printf("The private key a for A : %lld\n", a);
    x = add(G, a); //gets the generated key


    b = 19; //private key for b
    printf("The private key b for B : %lld\n\n", b);
    y = add(G, b); // gets the generated key

    ka = add(y, a, G); // Secret key for a
    kb = add(x, b, G); // Secret key for b

    printf("Secret key for the A is : %lld\n", ka);
    printf("Secret Key for the B is : %lld\n", kb);

    return 0;
}

this is the flow of the code

这是预期的 OUTPUT/FLOW 程序,但我的代码有问题我附上了一张图片来显示问题。

A 和 B 将商定一个数字

G = 43为约定数

A会生成一个私密号a = 23

B会生成一个私人号码b = 19

A 将计算 G=43 + a=23 mod G=43 OR 43 + 23 mod 43 = 66(我们称它为 x)x = 66

B 将计算 G=43 + b=19 mod G=43 OR 43+19mod43 = 62(我们称它为 y)y = 62

对于 A 我们得到 x = 66

对于 B,我们得到 y = 62

然后他们将交换 x 和 y

x = 66 会去 B

y = 62 将转到 A

A 现在将计算 y + a mod G OR 62+23 mod 43 = 85 (秘密数字是 ka) ka = 85

B 现在将计算 x + b mod G OR 66+19 mod 43 = 85 (秘密数字是 kb) kb = 85

This is the error that I get

您的 'add' 函数被声明为接受 3 个参数

long long int add(long long int a, long long int b, long long int G)

但是你两次尝试调用它只传递 2,这里

x = add(G, a); //gets the generated key

这里

y = add(G, b); // gets the generated key 

阅读你发布的逻辑应该是

x = add(G, a, G); //gets the generated key

y = add(G, b, G); // gets the generated key