package Ġio . quart ic . common . secrets Ċ Ċ import Ġcom . google . common . base . Preconditions . check Argument Ċ import Ġorg . apache . commons . codec . Decoder Exception Ċ import Ġorg . apache . commons . codec . binary . Hex . decode Hex Ċ import Ġorg . apache . commons . codec . binary . Hex . encode HexString Ċ import Ġjava . util . Arrays . equals Ċ Ċ data Ġclass ĠEn crypted Secret ( ĊĠĠĠ Ġval Ġiv : ĠByteArray , ĊĠĠĠ Ġval Ġpayload : ĠByteArray , ĊĠĠĠ Ġval Ġtag : ĠByteArray Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġconstructor ( other : ĠEn crypted Secret ) Ġ: Ġthis ( other . iv , Ġother . payload , Ġother . tag ) ĊĠĠĠ Ġconstructor ( str : ĠString ) Ġ: Ġthis ( parse ( str )) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Argument ( iv . size Ġ== ĠSec rets Codec . IV _ LENGTH _ BITS Ġ/ Ġ 8 , Ġ" IV Ġis Ġincorrect Ġlength ") ĊĠĠĠĠĠĠĠ Ġcheck Argument ( tag . size Ġ== ĠSec rets Codec . TAG _ LENGTH _ BITS Ġ/ Ġ 8 , Ġ" Tag Ġis Ġincorrect Ġlength ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"{ Encrypted Secret }" ĠĠ Ġ// ĠTo Ġprevent Ġaccident al Ġlogging Ġand Ġstuff ĊĊĠĠĠ Ġval Ġsomewhat Unsafe Ġ= Ġ"${ Secrets Codec . VERSION }$ ${ encode HexString ( iv )} $ ${ encode HexString ( payload )} $ ${ encode HexString ( tag )}" ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other ?. java Class Ġ!= Ġjava Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġother Ġas ĠEn crypted Secret ĊĠĠĠĠĠĠĠ Ġreturn Ġequals ( iv , Ġother . iv ) Ġ&& Ġequals ( payload , Ġother . payload ) Ġ&& Ġequals ( tag , Ġother . tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse ( str : ĠString ): ĠEn crypted Secret Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġstr . split ("$ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Argument ( parts . size Ġ== Ġ 4 , Ġ" Representation Ġdoesn 't Ġcontain Ġexactly Ġ 4 Ġparts ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Argument ( parts [ 0 ] Ġ== ĠSec rets Codec . VERSION . toString (), Ġ" Version Ġmismatch ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEn crypted Secret ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecode ( parts [ 1 ], Ġ" IV "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecode ( parts [ 2 ], Ġ" Payload "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecode ( parts [ 3 ], Ġ" Tag ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdecode ( part : ĠString , Ġname : ĠString ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecode Hex ( part . toCharArray ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠDecoder Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("$ name Ġcomponent Ġcan 't Ġbe Ġdecoded ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ