Marcel Logen in de.test:
Zunächst den Kehrwert von U(P)=9, also 1/U(P):
| user15@o15:/tmp$ bc -q bc-eea | tr '\012' '~' | sed -e 's/\\~//g' | tr '~' '\012'
|
| ggT(9,57896044618658097711785492504343953926634992332820282019728792003956564819949)=1
| i=5
| a[i]=1
| b[i]=0
|
| a[0]=9
| b[0]=57896044618658097711785492504343953926634992332820282019728792003956564819949
| s[0]=-25731575386070265649682441113041757300726663259031236453212796446202917697755
| t[0]=4
| a[0]*s[0]+b[0]*t[0]=1
s[0] ist wieder der benötigte Wert. Noch 2^255-19 dazu
addieren:
| user15@o15:/tmp$ bc -lq
| scale=0
|
| -25731575386070265649682441113041757300726663259031236453212796446202917697755 + 2^255-19
| 32164469232587832062103051391302196625908329073789045566515995557753\
| 647122194
Dann gemäß RFC7748, 4.1.: sqrt(-486664) = X(P)*V(P)/U(P):
| ( 15112221349535400772501151409588531511454012693041857206046113283949847762202 * 43114425171068552920764898935933967039370386198203806730763910166200978582548 * 32164469232587832062103051391302196625908329073789045566515995557753647122194 ) % ( 2^255-19 )
| 68534752194975615815793572711976246424827900797856501970469582152896\
| 87604742
|
| wurzel = .
|
| ( wurzel^2 ) % ( 2^255-19 )
| 57896044618658097711785492504343953926634992332820282019728792003956\
| 564333285
|
| ( 2^255-19 - 57896044618658097711785492504343953926634992332820282019728792003956564333285) % ( 2^255-19)
| 486664
| user15@o15:/tmp$
Paßt also.
Es geht auch mit dem 'falschen' (unkorrigierten) V(P)
aus RFC7748:
| user15@o15:/tmp$ bc -lq
| scale=0
| ( 15112221349535400772501151409588531511454012693041857206046113283949847762202 * 14781619447589544791020593568409986887264606134616475288964881837755586237401 * 32164469232587832062103051391302196625908329073789045566515995557753647122194 ) % (2^255-19)
| 51042569399160536130206135233146329284152202253034631822681833788666\
| 877215207
| wurz=.
| wurz
| 51042569399160536130206135233146329284152202253034631822681833788666\
| 877215207
| (wurz^2)%(2^255-19)
| 57896044618658097711785492504343953926634992332820282019728792003956\
| 564333285
| 2^255-19 - .
| 486664
| user15@o15:/tmp$
"wurz" ist dann wohl - neben der obigen "wurzel" - die
zweite Quadratwurzel aus -486664 (mod 2^255 - 19).
Aber wie man die beiden jetzt direkt ausrechnen kann ...?
(Ohne das Beispiel aus dem RFC zu bemühen.)
Grübel, grübel, grübel.
Wie gesagt: Mit dem Legendre-Symbol geht das wegen der
übergroßen Exponenten leider wohl nicht.
Marcel
--
╭───╮ ╭────╮ ╭────────────╮ ╭──────────────╮ ╭──╮ ..67..
╰─╮ ╰─╯ ╭─╯ ╰─────────╮ ╰────╮ ..38..╰───────╮ ╭───╯ │ ╰───────
───╯ ╭───╯ ╭─╮ ╭─╮ │ ╭────╯ ╭─╮ ╭───╮ ╭──╯ ╰──────╯ ..67..
╰──────╯ ╰───╯ ╰───╯ ╰───────╯ ╰─╯ ╰───╯ ..67..