package Ġcom . viv y . medical St icker Ċ Ċ import Ġcom . viv y . e 2 e . De cryption Failed Ċ import Ġcom . viv y . e 2 e . Encryption Failed Ċ import Ġcom . viv y . symmetric . Aes C bc Pk cs 7 Ċ import Ġcom . viv y . symmetric . Aes G cm No Padding Ċ Ċ object ĠMed St icker Encryption Ġ{ ĊĠĠĠ Ġvar Ġdebug : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġinternal Ġconst Ġval ĠCPU _ CO ST Ġ= Ġ 1 6 3 8 4 ĊĠĠĠ Ġinternal Ġconst Ġval ĠMEM ORY _ CO ST _ AD AM Ġ= Ġ 8 ĊĠĠĠ Ġinternal Ġconst Ġval ĠMEM ORY _ CO ST _ BR IT NE Y Ġ= Ġ 1 0 ĊĠĠĠ Ġinternal Ġconst Ġval ĠPAR ALLE LI Z ATION _ PARAM Ġ= Ġ 1 ĊĠĠĠ Ġinternal Ġconst Ġval ĠD K LEN F ORS KEY Ġ= Ġ 3 2 Ġ// Int ended Ġlength Ġof Ġthe Ġderived Ġkey . ĊĠĠĠ Ġinternal Ġconst Ġval ĠD K LEN FOR IV Ġ= Ġ 1 6 Ġ// Int ended Ġlength Ġof Ġthe Ġderived Ġkey . ĊĊĠĠĠ Ġprivate Ġval Ġaes C bc Pk cs 7 Ġ= ĠA es C bc Pk cs 7 () ĊĠĠĠ Ġprivate Ġval Ġg cm No Padding Ġ= ĠA es G cm No Padding () ĊĊĠĠĠ Ġprivate Ġval Ġsigner Ġ= ĠMed St icker Signer ĊĠĠĠ Ġfun Ġencrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpin : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByteArray ĊĠĠĠ Ġ): ĠEn crypted Med St icker Ġ= ĠMed St icker Encryption . encrypt ( code , Ġpin , Ġdata , ĠMed St icker Cipher Attr . BR IT NE Y ) ĊĊĠĠĠ Ġinternal Ġfun Ġencrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpin : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion : ĠString ĊĠĠĠ Ġ): ĠEn crypted Med St icker Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmed Key Ġ= Ġderive Key ( code , Ġpin , Ġversion ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Data Ġ= Ġwhen Ġ( version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed St icker Cipher Attr . BR IT NE Y Ġ-> Ġg cm No Padding . encrypt ( data , Ġmed Key . key , Ġmed Key . iv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed St icker Cipher Attr . AD AM ĠĠĠ Ġ-> Ġaes C bc Pk cs 7 . encrypt ( data , Ġmed Key . key , Ġmed Key . iv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġthrow ĠUnsupportedOperationException (" unsupported Ġversion Ġused ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEn crypted Med St icker ( encrypted Data , Ġmed Key ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEncryption Failed ( if Ġ( debug ) Ġe Ġelse Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdecrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr : ĠMed St icker Cipher Attr , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Data : ĠByteArray ĊĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( attr . version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed St icker Cipher Attr . BR IT NE Y Ġ-> Ġg cm No Padding . decrypt ( encrypted Data , Ġattr . key , Ġattr . iv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġaes C bc Pk cs 7 . decrypt ( encrypted Data , Ġattr . key , Ġattr . iv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDec ryption Failed ( if Ġ( debug ) Ġe Ġelse Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġderive Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpin : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion : ĠString ĊĠĠĠ Ġ): ĠMed St icker Cipher Attr Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġgenerate Key ( code , Ġpin , Ġversion ) ĊĊĠĠĠĠĠĠĠ Ġval Ġiv Ġ= Ġgenerate IV ( key , Ġpin , Ġversion ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMed St icker Cipher Attr ( key , Ġiv , Ġversion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġgenerate IV ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpin : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion : ĠString ĊĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMed St icker Key Generator . get Gen SC rypt Key ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpin . toByteArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCPU _ CO ST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Memory Cost ( version ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPAR ALLE LI Z ATION _ PARAM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD K LEN FOR IV ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Memory Cost ( version : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMed St icker Cipher Attr . BR IT NE Y Ġ-> ĠMEM ORY _ CO ST _ BR IT NE Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠMEM ORY _ CO ST _ AD AM ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġgenerate Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpin : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion : ĠString ĊĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMed St icker Key Generator . get Gen SC rypt Key ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpin . toByteArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode . toByteArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCPU _ CO ST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Memory Cost ( version ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPAR ALLE LI Z ATION _ PARAM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD K LEN F ORS KEY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdecrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpin : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Data : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion : ĠString ĊĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmed Key Ġ= Ġderive Key ( code , Ġpin , Ġversion ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMed St icker Encryption . decrypt ( med Key , Ġencrypted Data ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDec ryption Failed ( if Ġ( debug ) Ġe Ġelse Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaccess Signature ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr : ĠMed St icker Cipher Attr , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsalt : ĠByteArray ĊĠĠĠ Ġ) Ġ= Ġsigner . access Signature ( attr , Ġsalt ) ĊĊĠĠĠ Ġin fix Ġfun Ġset Debug To ( debug : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . debug Ġ= Ġdebug ĊĠĠĠ Ġ} Ċ }