package Ġpw . for st . wire . backups . ios . de cryption Ċ Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . charset . Charset Ċ Ċ /** Ċ Ġ* ĠNote Ġthat Ġthis Ġfunction Ġmod ifies Ġthe Ġpassed Ġ[ buffer ]. Ċ Ġ* Ċ Ġ* ĠThe Ġfile Ġheader Ġis Ġfollowing : Ċ Ġ* Ġ 4 Ġbytes Ġ Ġ- Ġstring ĠĠĠ Ġ- ĠPLATFORM Ġ- Ġindicates Ġwhether Ġthis Ġis ĠiOS Ġor ĠAndroid , Ġexpected Ġvalue Ġis ĠW BU I Ċ Ġ* Ġ 1 Ġbyte ĠĠ Ġ- Ġbyte ĠĠĠĠĠ Ġ- Ġempty Ġspace Ċ Ġ* Ġ 2 Ġbytes Ġ Ġ- Ġinteger ĠĠ Ġ- ĠVERSION Ġ- Ġindicates Ġversion Ġof Ġbackup Ċ Ġ* Ġ 1 6 Ġbytes Ġ- Ġbytes ĠĠĠĠ Ġ- ĠS ALT Ġ- Ġused Ġfor Ġcorrect Ġde cryption Ġinitialization Ċ Ġ* Ġ 3 2 Ġbytes Ġ- Ġbytes ĠĠĠĠ Ġ- ĠUUID Ġhash Ġ- Ġused Ġto Ġverify Ġwhether Ġthe Ġbackup Ġbelongs Ġto Ġuser Ġwith Ġgiven ĠUUID Ċ Ġ*/ Ċ internal Ġfun Ġread Header ( buffer : ĠByteBuffer ): ĠEn crypted Backup Header Ġ{ ĊĠĠĠ Ġ// Ġread Ġplatform Ġheader ĊĠĠĠ ĠByteArray ( Header Parameters . PLATFORM . size In Header ) ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġbuffer . get ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġverify Platform Bytes ( it ) Ġ} ĊĠĠĠ Ġ// Ġskip Ġnull Ġbyte Ġ- ĠHeader Parameters . EMPTY _ SPACE ĊĠĠĠ Ġbuffer . get () ĊĠĠĠ Ġ// Ġcheck Ġversion ĊĠĠĠ Ġverify Version Short ( buffer . short ) ĊĠĠĠ Ġ// Ġparse Ġheader ĊĠĠĠ Ġreturn ĠEn crypted Backup Header ( ĊĠĠĠĠĠĠĠ Ġsalt Ġ= ĠByteArray ( Header Parameters . SAL T . size In Header ). also Ġ{ Ġbuffer . get ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġuuid Hash Ġ= ĠByteArray ( Header Parameters . UUID _ HASH . size In Header ). also Ġ{ Ġbuffer . get ( it ) Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġfun Ġverify Platform Bytes ( platform Bytes : ĠByteArray ) Ġ{ ĊĠĠĠ Ġplatform Bytes . toString ( Charset . forName (" UTF - 8 ")). also Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( Header Parameters . PLATFORM . value Check ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Platform Ġincorrect ! ĠGot Ġ$ it " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġverify Version Short ( version : ĠShort ) Ġ{ ĊĠĠĠ Ġrequire ( Header Parameters . VERSION . value Check ( version )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Version Ġof Ġbackup Ġis Ġnot Ġcorrect ! ĠGot Ġ$ version " ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /* ĊĠĠĠ ĠT aken Ġfrom Ġoriginal ĠiOS Ġrepo : ĊĠĠĠ Ġhttps :// github . com / wire app / wire - ios - crypto box / blob / 0 0 ec 8 c 7 2 6 2 d 4 9 8 1 4 7 4 4 c 7 3 3 c 6 eaa 9 2 e 9 9 bcd 6 b 4 2 / Wire Crypto box / Ch a Ch a 2 0 Encryption . swift # L 8 8 Ċ Ġ*/ Ċ private Ġenum Ġclass ĠHeader Parameters ( ĊĠĠĠ Ġval Ġsize In Header : ĠInt , ĊĠĠĠ Ġval Ġvalue Check : Ġ( Any ) Ġ-> ĠBoolean Ċ ) Ġ{ ĊĠĠĠ ĠPLATFORM ( 4 , Ġ{ Ġit Ġ== Ġ" W BU I " Ġ}), ĊĠĠĠ ĠEMPTY _ SPACE ( 1 , Ġ{ Ġtrue Ġ}), ĊĠĠĠ ĠVERSION ( 2 , Ġ{ Ġit Ġ== Ġ 1 . to Short () Ġ}), ĊĠĠĠ ĠS ALT ( 1 6 , Ġ{ Ġtrue Ġ}), ĊĠĠĠ ĠUUID _ HASH ( 3 2 , Ġ{ Ġtrue Ġ}) Ċ } Ċ Ċ internal Ġdata Ġclass ĠEn crypted Backup Header ( ĊĠĠĠ Ġval Ġsalt : ĠByteArray , ĊĠĠĠ Ġval Ġuuid Hash : ĠByteArray Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠEn crypted Backup Header ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! salt . content Equals ( other . salt )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! uuid Hash . content Equals ( other . uuid Hash )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsalt . content HashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġuuid Hash . content HashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ