// ĠSPDX - File Copyright Text : Ġ 2 0 1 9 , ĠAnd ras ĠVer es - Sz ent kir aly i Ġ< vs za @ vs za . hu > Ċ // ĠSPDX - License - Identifier : ĠMIT Ċ Ċ package Ġorg . hs bp . andro sphinx Ċ Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . nio . Char Buffer Ċ Ċ const Ġval ĠS PH IN X _ 2 5 5 _ SCAL AR _ BYTES : ĠInt Ġ= Ġ 3 2 Ċ const Ġval ĠS PH IN X _ 2 5 5 _ SER _ BYTES : ĠInt Ġ= Ġ 3 2 Ċ const Ġval ĠDE CA F _ 2 5 5 _ SER _ BYTES : ĠInt Ġ= Ġ 3 2 Ċ const Ġval ĠCR YPTO _ GENERIC HASH _ BYTES : ĠInt Ġ= Ġ 3 2 Ċ const Ġval ĠCR YPTO _ SIGN _ SECRET KEY BYTES : ĠInt Ġ= Ġ 6 4 Ċ const Ġval ĠCR YPTO _ SIGN _ PUBLIC KEY BYTES : ĠInt Ġ= Ġ 3 2 Ċ const Ġval ĠCR YPTO _ SIGN _ SEED BYTES : ĠInt Ġ= Ġ 3 2 Ċ const Ġval ĠCR YPTO _ SECRET BOX _ NON CE BYTES : ĠInt Ġ= Ġ 2 4 Ċ const Ġval ĠCR YPTO _ SECRET BOX _ X SAL SA 2 0 POLY 1 3 0 5 _ KEY BYTES : ĠInt Ġ= Ġ 3 2 Ċ const Ġval ĠCR YPTO _ SECRET BOX _ X SAL SA 2 0 POLY 1 3 0 5 _ NON CE BYTES : ĠInt Ġ= Ġ 2 4 Ċ const Ġval ĠCR YPTO _ SECRET BOX _ X SAL SA 2 0 POLY 1 3 0 5 _ MAC BYTES : ĠInt Ġ= Ġ 1 6 Ċ Ċ class ĠS odium Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġexternal Ġfun Ġgeneric Hash ( message : ĠByteArray , Ġsalt : ĠByteArray ): ĠByteArray ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġexternal Ġfun Ġrandom Bytes ( amount : ĠInt ): ĠByteArray ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġexternal Ġfun Ġcrypto Sign Seed Key pair ( seed : ĠByteArray ): ĠByteArray ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġexternal Ġfun Ġcrypto Sign Ed 2 5 5 1 9 Sk To Pk ( sk : ĠByteArray ): ĠByteArray ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġexternal Ġfun Ġcrypto Sign Detached ( sk : ĠByteArray , Ġmsg : ĠByteArray ): ĠByteArray ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġexternal Ġfun Ġcrypto Secret box Easy ( key : ĠByteArray , Ġmsg : ĠByteArray ): ĠByteArray ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġexternal Ġfun Ġcrypto Secret box Open Easy ( key : ĠByteArray , Ġmsg : ĠByteArray ): ĠByteArray ? ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠS phinx Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġprivate Ġexternal Ġfun Ġchallenge ( password : ĠByteArray , Ġsalt : ĠByteArray , Ġblind ing Factor : ĠByteArray , Ġchallenge : ĠByteArray ) ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġexternal Ġfun Ġrespond ( challenge : ĠByteArray , Ġsecret : ĠByteArray ): ĠByteArray ? ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġprivate Ġexternal Ġfun Ġfinish ( password : ĠByteArray , Ġblind ing Factor : ĠByteArray , Ġsalt : ĠByteArray , Ġresp : ĠByteArray ): ĠByteArray ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠChallenge ( pwd : ĠChar Array , Ġsalt : ĠByteArray Ġ= ĠByteArray ( 0 )) Ġ: ĠAuto Closeable Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġblind ing Factor : ĠByteArray Ġ= ĠByteArray ( SP H IN X _ 2 5 5 _ SCAL AR _ BYTES ) ĊĠĠĠĠĠĠĠ Ġval Ġchallenge : ĠByteArray Ġ= ĠByteArray ( SP H IN X _ 2 5 5 _ SER _ BYTES ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpassword Bytes Ġ= Ġto Bytes ( pwd ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchallenge ( password Bytes , Ġsalt , Ġblind ing Factor , Ġchallenge ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfinish ( salt : ĠByteArray , Ġresponse : ĠByteArray ): ĠByteArray ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish ( password Bytes , Ġblind ing Factor , Ġsalt , Ġresponse ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchallenge . fill ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠSRC : Ġhttps :// stackoverflow . com / a / 9 6 7 0 2 7 9 Ċ Ċ private Ġfun Ġto Bytes ( chars : ĠChar Array ): ĠByteArray Ġ{ ĊĠĠĠ Ġval Ġchar Buffer Ġ= ĠChar Buffer . wrap ( chars ) ĊĠĠĠ Ġval Ġbyte Buffer Ġ= ĠCharset . forName (" UTF - 8 "). encode ( char Buffer ) ĊĠĠĠ Ġval Ġbytes Ġ= Ġbyte Buffer . array (). slice Array ( byte Buffer . position () Ġuntil Ġbyte Buffer . limit ()) ĊĠĠĠ Ġchar Buffer . array (). fill ('\ u 0 0 0 0 ') Ġ// Ġclear Ġsensitive Ġdata ĊĠĠĠ Ġbyte Buffer . array (). fill ( 0 ) Ġ// Ġclear Ġsensitive Ġdata ĊĠĠĠ Ġreturn Ġbytes Ċ } Ċ