/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 - 2 0 2 0 ĠM am oe ĠTechnologies Ġand Ġcontributors . Ċ Ġ* Ċ Ġ* Ġ ĠæŃ¤ æºĲ ä»£çłģ çļĦ ä½¿çĶ¨ åıĹ ĠGNU ĠA FFER O ĠGENER AL ĠPUBLIC ĠLICENSE Ġversion Ġ 3 Ġ è®¸ åı¯ è¯ģ çļĦ çº¦ æĿŁ , Ġåı¯ä»¥ åľ¨ ä»¥ä¸ĭ éĵ¾æİ¥ æī¾åĪ° è¯¥ è®¸ åı¯ è¯ģ . Ċ Ġ* Ġ ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠGNU ĠA GPL v 3 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġthrough Ġthe Ġfollowing Ġlink . Ċ Ġ* Ċ Ġ* Ġ Ġhttps :// github . com / mam oe / mir ai / blob / master / LICENSE Ċ Ġ*/ Ċ Ċ package Ġnet . mam oe . mir ai . internal . utils . crypto Ċ Ċ import Ġnet . mam oe . mir ai . internal . utils . Mir ai Platform Utils Ċ import Ġorg . bouncycastle . j ce . provider . Bo unc y Castle Provider Ċ import Ġjava . security .* Ċ import Ġjava . security . spec . EC Gen Parameter Spec Ċ import Ġjava . security . spec . X 5 0 9 Encoded KeySpec Ċ import Ġjavax . crypto . Key Agreement ĊĊ Ċ @ Suppress (" ACT UAL _ WITHOUT _ EXPECT ") Ċ internal Ġactual Ġtype alias ĠE CD HP rivate Key Ġ= ĠPrivate Key Ċ @ Suppress (" ACT UAL _ WITHOUT _ EXPECT ") Ċ internal Ġactual Ġtype alias ĠE CD HP ublic Key Ġ= ĠPublicKey Ċ Ċ internal Ġactual Ġclass ĠE CD H KeyPair Impl ( ĊĠĠĠ Ġprivate Ġval Ġdelegate : ĠKey Pair Ċ ) Ġ: ĠE CD H KeyPair Ġ{ ĊĠĠĠ Ġoverride Ġval ĠprivateKey : ĠE CD HP rivate Key Ġget () Ġ= Ġdelegate . private ĊĠĠĠ Ġoverride Ġval ĠpublicKey : ĠE CD HP ublic Key Ġget () Ġ= Ġdelegate . public ĊĊĠĠĠ Ġoverride Ġval Ġinitial Share Key : ĠByteArray Ġby Ġlazy Ġ{ ĠE CD H . calculate Share Key ( privateKey , Ġinitial PublicKey ) Ġ} Ċ } Ċ Ċ internal Ġactual Ġfun ĠE CD H () Ġ= ĠE CD H ( ECD H . generate KeyPair ()) Ċ Ċ internal Ġactual Ġclass ĠE CD H Ġactual Ġconstructor ( actual Ġval Ġkey Pair : ĠE CD H KeyPair ) Ġ{ ĊĠĠĠ Ġactual Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġcurve Name Ġ= Ġ" secp 1 9 2 k 1 " Ġ// Ġp - 2 5 6 ĊĊĠĠĠĠĠĠĠ Ġactual Ġval Ġis ECD H Available : ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ECD H Available Ġ= Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest ECD H () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE CD H KeyPair Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Pair Generator . getInstance (" ECD H ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . initialize ( EC Gen Parameter Spec ( curve Name )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. gen KeyPair ()). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Share Key ( it . privateKey , Ġit . publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kotlin . run Catch ing Ġ{ Ġtest ECD H () Ġ}. is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Catch ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Security . get Provider ( Bo unc y Castle Provider . PROVIDER _ NAME ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecurity . remove Provider ( Bo unc y Castle Provider . PROVIDER _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecurity . add Provider ( Bo unc y Castle Provider ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest ECD H () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. is Success ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactual Ġfun Ġgenerate KeyPair (): ĠE CD H KeyPair Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is ECD H Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE CD H KeyPair . Default Stub ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE CD H KeyPair Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Pair Generator . getInstance (" ECD H ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . initialize ( EC Gen Parameter Spec ( curve Name )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. gen KeyPair ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactual Ġfun Ġcalculate Share Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprivateKey : ĠE CD HP rivate Key , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey : ĠE CD HP ublic Key ĊĠĠĠĠĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠKey Agreement . getInstance (" ECD H ", Ġ" BC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . init ( privateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . do Phase ( publicKey , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMir ai Platform Utils . md 5 ( instance . generate Secret ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactual Ġfun Ġconstruct PublicKey ( key : ĠByteArray ): ĠE CD HP ublic Key Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey Factory . getInstance (" EC ", Ġ" BC "). generate Public ( X 5 0 9 Encoded KeySpec ( key )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġcalculate Share Key By Peer PublicKey ( peer PublicKey : ĠE CD HP ublic Key ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculate Share Key ( key Pair . privateKey , Ġpeer PublicKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" ECD H ( key Pair =$ key Pair )" ĊĠĠĠ Ġ} Ċ }