package Ġcom . ben ash er 4 4 . uuid Ċ Ċ import Ġkotlinx . c interop . address Of Ċ import Ġkotlinx . c interop . reinterpret Ċ import Ġkotlinx . c interop . use Pin ned Ċ import Ġplatform . Core Crypto . CC _ MD 5 Ċ import Ġplatform . Core Crypto . CC _ MD 5 _ DIG EST _ LENGTH Ċ import Ġplatform . Core Crypto . CC _ SHA 1 Ċ import Ġplatform . Core Crypto . CC _ SHA 1 _ DIG EST _ LENGTH Ċ Ċ /** Ċ Ġ* ĠConstructs Ġa Ġ" Name - Based " Ġversion Ġ 3 Ġ[ UUID ][ Uuid ]. Ċ Ġ* Ċ Ġ* ĠVersion Ġ 3 ĠUUID s Ġare Ġcreated Ġby Ġcombining Ġa Ġname Ġand Ċ Ġ* Ġa Ġnamespace Ġusing Ġthe ĠMD 5 Ġhash Ġfunction . Ċ Ġ* Ċ Ġ* Ġ@ param Ġnamespace Ġfor Ġthe Ġ" Name - Based " ĠUUID Ċ Ġ* Ġ@ param Ġname Ġwith ing Ġthe Ġnamespace Ġfor Ġthe Ġ" Name - Based " ĠUUID Ċ Ġ* Ġ@ return ĠNew Ġversion Ġ 3 Ġ[ UUID ][ Uuid ]. Ċ Ġ* Ġ@ see Ġ< a Ġhref =" https :// tools . ietf . org / html / rfc 4 1 2 2 # section - 4 . 3 "> RFC Ġ 4 1 2 2 : ĠSection Ġ 4 . 3 </ a > Ċ Ġ*/ Ċ public Ġfun Ġuuid 3 Of ( namespace : ĠU uid , Ġname : ĠString ): ĠU uid Ġ= ĊĠĠĠ Ġname Based Uuid Of ( namespace , Ġname , ĠApple Hash er ( Apple Hash er . Companion :: md 5 Digest , Ġ 3 )) Ċ Ċ /** Ċ Ġ* ĠConstructs Ġa Ġ" Name - Based " Ġversion Ġ 5 Ġ[ UUID ][ Uuid ]. Ċ Ġ* Ċ Ġ* ĠVersion Ġ 5 ĠUUID s Ġare Ġcreated Ġby Ġcombining Ġa Ġname Ġand Ċ Ġ* Ġa Ġnamespace Ġusing Ġthe ĠSHA - 1 Ġhash Ġfunction . Ċ Ġ* Ċ Ġ* Ġ@ param Ġnamespace Ġfor Ġthe Ġ" Name - Based " ĠUUID Ċ Ġ* Ġ@ param Ġname Ġwith ing Ġthe Ġnamespace Ġfor Ġthe Ġ" Name - Based " ĠUUID Ċ Ġ* Ġ@ return ĠNew Ġversion Ġ 5 Ġ[ UUID ][ Uuid ]. Ċ Ġ* Ġ@ see Ġ< a Ġhref =" https :// tools . ietf . org / html / rfc 4 1 2 2 # section - 4 . 3 "> RFC Ġ 4 1 2 2 : ĠSection Ġ 4 . 3 </ a > Ċ Ġ*/ Ċ public Ġfun Ġuuid 5 Of ( namespace : ĠU uid , Ġname : ĠString ): ĠU uid Ġ= ĊĠĠĠ Ġname Based Uuid Of ( namespace , Ġname , ĠApple Hash er ( Apple Hash er . Companion :: sha 1 Digest , Ġ 5 )) Ċ Ċ private Ġclass ĠApple Hash er ( ĊĠĠĠ Ġprivate Ġval Ġdigest Func : Ġ( ByteArray ) Ġ-> ĠByteArray , ĊĠĠĠ Ġoverride Ġval Ġversion : ĠInt Ċ ) Ġ: ĠU uid Hash er Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdata Ġ= ĠByteArray ( 0 ) ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( input : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprev Length Ġ= Ġdata . size ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġdata . copyOf ( data . size Ġ+ Ġinput . size ) ĊĠĠĠĠĠĠĠ Ġinput . copy Into ( data , Ġprev Length ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdigest (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdigest Func ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġsha 1 Digest ( data : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray ( CC _ SHA 1 _ DIG EST _ LENGTH ). also Ġ{ Ġbytes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes . use Pin ned Ġ{ Ġdigest Pin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . use Pin ned Ġ{ Ġdata Pin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCC _ SHA 1 ( data Pin . address Of ( 0 ), Ġdata . size . to UInt (), Ġdigest Pin . address Of ( 0 ). reinterpret ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmd 5 Digest ( data : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray ( CC _ MD 5 _ DIG EST _ LENGTH ). also Ġ{ Ġbytes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes . use Pin ned Ġ{ Ġdigest Pin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . use Pin ned Ġ{ Ġdata Pin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCC _ MD 5 ( data Pin . address Of ( 0 ), Ġdata . size . to UInt (), Ġdigest Pin . address Of ( 0 ). reinterpret ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ