? p=nextprime(93450983094850938450983409583) %17 = 93450983094850938450983409611 ? isprime((p-1)\2) %18 = 0 ? nextgoodprime(p) = while(!isprime((p-1)\2), p=nextprime(p+1)); p ? nextgoodprime(p) %19 = 93450983094850938450983409623 ? g=2 %21 = 2 ? znorder(Mod(g,p)) %22 = 93450983094850938450983409610 ? ?random random({N=2^31}): random integer between 0 and N-1. ? nikita = random(p) %23 = 18319922375531859171613379181 ? michael = random(p) %24 = 82335836243866695680141440300 ? nikita_say = Mod(g,p)^nikita %26 = Mod(17037287637415625385373411504, 93450983094850938450983409611) ? michael_say=Mod(g,p)^michael %27 = Mod(2201425894324369970772940547, 93450983094850938450983409611) ? secret = nikita_say^michael %28 = Mod(25591938014843312529239952955, 93450983094850938450983409611) ? secret = michael_say^nikita %29 = Mod(25591938014843312529239952955, 93450983094850938450983409611)