package Ġcom . bab o . ecc Ċ Ċ import Ġjava . math . BigInteger Ċ import Ġcom . bab o . utils . times Ċ import Ġjava . security . Secure Random Ċ Ċ // Ġhttp :// www . oid - info . com / get / 1 . 3 . 1 3 2 . 0 . 1 0 Ċ class ĠSec p 2 5 6 k 1 ( private Ġval Ġpri Key : ĠBigInteger Ġ= Ġrng ()) Ġ{ ĊĊĠĠĠ Ġval Ġpub Key : ĠPoint ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( pri Key Ġ< Ġp ) Ġ{ Ġ" wrong Ġprivate Ġkey " Ġ} ĊĠĠĠĠĠĠĠ Ġpub Key Ġ= Ġpri Key Ġ* ĠG ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsign ( msg : ĠByteArray ): ĠSignature Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= ĠBigInteger ( msg ) ĊĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġrng () ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ( k Ġ* ĠG ). x !!. num ĊĠĠĠĠĠĠĠ Ġval Ġk Inv Ġ= ĠField Element ( k , Ġn ). multip lic ative Inverse () ĊĠĠĠĠĠĠĠ Ġvar Ġs Ġ= Ġ( z Ġ+ Ġr Ġ* Ġpri Key ) Ġ* Ġk Inv Ġ% Ġn ĊĠĠĠĠĠĠĠ Ġif Ġ( s Ġ> Ġn Ġ/ ĠBigInteger . valueOf ( 2 )) Ġs Ġ= Ġn Ġ- Ġs ĊĠĠĠĠĠĠĠ Ġreturn ĠSignature ( r , Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠBigInteger (" FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFF FE FFFF FC 2 F ", Ġ 1 6 ) Ġ// Ġ 2 ^ 2 5 6 Ġ- Ġ 2 ^ 3 2 Ġ- Ġ 9 7 7 ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= ĠBigInteger (" FFFFFFFF FFFFFFFF FFFFFFFF FFFFFF FE B AA ED CE 6 AF 4 8 A 0 3 BB FD 2 5 E 8 CD 0 3 6 4 1 4 1 ", Ġ 1 6 ) Ġ// Ġorder ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠBigInteger (" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ", Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠBigInteger (" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 ", Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠG x Ġ= ĠBigInteger (" 7 9 BE 6 6 7 EF 9 DC BB AC 5 5 A 0 6 2 9 5 CE 8 7 0 B 0 7 0 2 9 B FC DB 2 D CE 2 8 D 9 5 9 F 2 8 1 5 B 1 6 F 8 1 7 9 8 ", Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠG y Ġ= ĠBigInteger (" 4 8 3 ADA 7 7 2 6 A 3 C 4 6 5 5 DA 4 FB FC 0 E 1 1 0 8 A 8 FD 1 7 B 4 4 8 A 6 8 5 5 4 1 9 9 C 4 7 D 0 8 FF B 1 0 D 4 B 8 ", Ġ 1 6 ) ĊĊĠĠĠĠĠĠĠ Ġval ĠG Ġ= ĠPoint ( Gx , ĠG y , Ġp , Ġ 0 , Ġ 7 ) Ġ// Ġinitial Ġpoint ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġrng ( byte Size : ĠInt Ġ= Ġ 3 2 ): ĠBigInteger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray ( byte Size ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecure Random (). next Bytes ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigInteger ( 1 , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ