Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- P = 36413321723440003717;
- g = 18206660861720002080;
- A = 12246542873545750113;
- B = 5671660889183554788;
- (*Silver-Pohlig-Hellman Discrete Log Algortihm*)
- rvec[q_, p_, z_] := Table[PowerMod[z, (i (q - 1))/p, q], {i, 0, p - 1}]
- bpos[wbs_, zgs_] := Flatten[Position[wbs, zgs] - 1][[1]]
- sph[q_, z_, g_, p_, alpha_] :=
- Module[{c}, qmo = q - 1; ainv = PowerMod[g, -1, q];
- Clear[c]; c = 0; rvals = rvec[q, p, g]; r = 0;
- While[(r += 1) <
- alpha + 1, {t = PowerMod[(z*(ainv)^c), (qmo/(p^(r))), q],
- c = c + bpos[rvals, t]*p^(r - 1)}];
- Return[{c, p^alpha}]]
- {q, z, h} = {P, A, g};
- pp = FactorInteger[q - 1]
- values = Table[
- sph[q, z, h, pp[[i, 1]], pp[[i, 2]]], {i, 1, Length[pp]}]
- (*Previous expression to be solved by CRT means x\[Equal]3 mod 4,x\
- \[Equal]8 mod 9 and x\[Equal]2 mod 5*)
- ChineseRemainder[
- Flatten[Table[{values[[i, 1]]}, {i, 1, Length[values]}]],
- Flatten[Table[{values[[i, 2]]}, {i, 1, Length[values]}]]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement