package Ġch . frequ enz di eb . security čĊč Ċ import Ġorg . springframework . beans . factory . annotation . Value č Ċ import Ġorg . springframework . stereotype . Component č Ċ import Ġjavax . crypto . Mac č Ċ import Ġjavax . crypto . spec . SecretKey Spec č Ċ import Ġjavax . xml . bind . Datatype Converter čĊč Ċ @ Component č Ċ class ĠSignature Factory ( čĊĠĠĠ Ġ@ Value ("\ ${ payment . datat rans . secret }") Ġprivate Ġval Ġpayment Secret : ĠString , čĊĠĠĠ Ġ@ Value ("\ ${ secret }") Ġprivate Ġval Ġsecret : ĠString č Ċ ) Ġ{ čĊĠĠĠ Ġprivate Ġval Ġalgorithm Ġ= Ġ" H mac SHA 2 5 6 " čĊčĊĠĠĠ Ġprivate Ġval Ġpayment Mac Ġ= Ġcreate Mac ( payment Secret ) čĊĠĠĠ Ġprivate Ġval Ġmac Ġ= Ġcreate Mac ( secret ) čĊčĊĠĠĠ Ġfun Ġcreate Payment Signature ( var arg Ġvalues To Sign : ĠString ): ĠString Ġ= čĊĠĠĠĠĠĠĠ Ġpayment Mac . create Signature ( values To Sign ) čĊčĊĠĠĠ Ġfun Ġcreate Signature ( var arg Ġvalues ToS ing : ĠString ): ĠString Ġ= čĊĠĠĠĠĠĠĠ Ġmac . create Signature ( values ToS ing ) čĊčĊĠĠĠ Ġprivate Ġfun Ġcreate Mac ( secret : ĠString ) Ġ= čĊĠĠĠĠĠĠĠ ĠMac . getInstance ( algorithm ). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( SecretKey Spec ( Datatype Converter . parse Hex Binary ( secret ), Ġalgorithm )) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun ĠByteArray . to Hex (): ĠString Ġ= ĠDat atype Converter . print Hex Binary ( this ). toLowerCase () čĊčĊĠĠĠ Ġprivate Ġfun ĠMac . create Signature ( values To Sign : ĠArray < out ĠString >): ĠString Ġ= čĊĠĠĠĠĠĠĠ Ġdo Final ( values To Sign . join ToString ( separator Ġ= Ġ""). toByteArray ()). to Hex () č Ċ } čĊ