package Ġcom . labs 6 4 . net lic ensing . util Ċ Ċ import Ġcom . hel ger . xml ds ig . XML DS ig Validation Result Ċ import Ġcom . labs 6 4 . net lic ensing . domain . vo . Context Ċ import Ġcom . labs 6 4 . net lic ensing . exception . Bad Signature Exception Ċ import Ġcom . labs 6 4 . net lic ensing . schema . context . Net lic ensing Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġjava . security . Key Factory Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjava . security . Signature Exception Ċ import Ġjava . security . spec . Invalid KeySpec Exception Ċ import Ġjava . security . spec . X 5 0 9 Encoded KeySpec Ċ import Ġjava . util . Base 6 4 Ċ import Ġjavax . xml . bind . JAXB Context Ċ import Ġjavax . xml . bind . JAXB Exception Ċ import Ġjavax . xml . bind . Marshaller Ċ import Ġjavax . xml . crypto . ds ig . XML Signature Exception Ċ import Ġjavax . xml . parsers . Document BuilderFactory Ċ import Ġjavax . xml . parsers . Parser ConfigurationException Ċ Ċ object ĠSignature Utils Ġ{ ĊĠĠĠ Ġ@ Throws ( Bad Signature Exception :: class ) ĊĠĠĠ Ġfun Ġcheck ( context : ĠContext , Ġresponse : ĠNet lic ensing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( StringUtils . isEmpty ( context . get PublicKey ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( response , Ġcontext . get PublicKey () !!. toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBad Signature Exception ( e . message !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( JAXB Exception :: class , ĠParser ConfigurationException :: class , ĠSignature Exception :: class ) ĊĠĠĠ Ġfun Ġcheck ( response : ĠNet lic ensing , ĠpublicKey ByteArray : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjc Ġ= ĠJAXB Context . newInstance ( Net lic ensing :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠDocument ĊĠĠĠĠĠĠĠ Ġval Ġdb f Ġ= ĠDocument BuilderFactory . newInstance () ĊĠĠĠĠĠĠĠ Ġdb f . is Namespace Aware Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġdb f . new Document Builder () ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġdb . new Document () ĊĠĠĠĠĠĠĠ Ġdoc . xml Standalone Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠMarshal Ġthe ĠNet Lic ensing Ġto Ġa ĠDocument ĊĠĠĠĠĠĠĠ Ġval Ġmarshaller Ġ= Ġjc . create Marshaller () ĊĠĠĠĠĠĠĠ Ġmarshaller . setProperty ( Marshaller . JAXB _ FORMAT TED _ OUTPUT , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġmarshaller . marshal ( response , Ġdoc ) ĊĊĠĠĠĠĠĠĠ Ġvar ĠisValid Assets File Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠisValid Assets File Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey Byte Ġ= ĠBase 6 4 . get Decoder (). decode ( publicKey ByteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspec Ġ= ĠX 5 0 9 Encoded KeySpec ( publicKey Byte ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk f Ġ= ĠKey Factory . getInstance (" RSA ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= Ġk f . generate Public ( spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation : ĠXML DS ig Validation Result Ġ= ĠXML DS ig Validator Custom . validate Signature ( doc , ĠpublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidation . isValid ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSignature Exception (" Bad Ġor Ġempty Ġresponse Ġsignature ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠXML Signature Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSignature Exception (" Bad Ġor Ġempty Ġresponse Ġsignature ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSignature Exception (" Bad Ġresponse Ġsignature ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid KeySpec Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSignature Exception (" Bad Ġresponse Ġsignature ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! isValid Assets File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSignature Exception (" Response Ġsignature Ġverification Ġfailure ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }