#include extern void curve25519(unsigned char *,const unsigned char *,const unsigned char *); void print(const char *name,const unsigned char *value) { int i; printf("%s=0",name); for (i = 0;i < 32;++i) printf("+%d*256^%d",255 & (int) value[i],i); printf(";\n"); } unsigned char u[32]; unsigned char v[32]; const unsigned char k[32] = { 9 }; unsigned char uk[32]; unsigned char vk[32]; unsigned char uvk[32]; unsigned char vuk[32]; main() { int loops; int i; printf("p=2^255-19;\n"); printf("e=ellinit([0,486662,0,1,0]);\n"); printf("k=[Mod(9,p),sqrt(Mod(9^3+486662*9^2+9,p))];\n"); for (loops = 0;loops < 1000;++loops) { for (i = 0;i < 32;++i) u[i] = random(); u[31] &= 63; u[31] += 64; print("u",u); for (i = 0;i < 32;++i) v[i] = random(); v[31] &= 63; v[31] += 64; print("v",v); curve25519(uk,u,k); print("uk",uk); printf("lift(ellpow(e,k,u)[1] - uk)\n"); curve25519(vk,v,k); print("vk",vk); printf("lift(ellpow(e,k,v)[1] - vk)\n"); curve25519(uvk,u,vk); print("uvk",uvk); printf("lift(ellpow(e,k,u * v)[1] - uvk)\n"); curve25519(vuk,v,uk); print("vuk",vuk); printf("lift(ellpow(e,k,u * v)[1] - vuk)\n"); } return 0; }