06.11.2014 Views

A User Centric Security Model for Tamper-Resistant Devices

A User Centric Security Model for Tamper-Resistant Devices

A User Centric Security Model for Tamper-Resistant Devices

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C.2 Online Attestation Mechanism<br />

150 ( KeyBuilder .TYPE_AES_TRANSIENT_DESELECT,<br />

151 KeyBuilder .LENGTH_AES_128, f a l s e ) ;<br />

152 syCipher = Cipher . g e t I n s t a n c e ( Cipher .ALG_AES_BLOCK_128_CBC_NOPAD,<br />

153 f a l s e ) ;<br />

154 myPrngHmac = new PrngSHA256 ( ) ;<br />

155 pkCipher = Cipher . g e t I n s t a n c e ( Cipher .ALG_RSA_NOPAD, f a l s e ) ;<br />

156 phSCKeyPair . genKeyPair ( ) ;<br />

157 SHA128 = MessageDigest . g e t I n s t a n c e ( MessageDigest .ALG_SHA_128,<br />

158 f a l s e ) ;<br />

159 byte [ ] r e s p o n s e B u f f e r = null ;<br />

160 }<br />

161 public s t a t i c void i n s t a l l ( byte bArray [ ] , short bOffset , byte bLength )<br />

162 throws ISOException {<br />

163 new S e l f t e s t O f f l i n e ( ) . r e g i s t e r ( ) ;<br />

164 }<br />

165<br />

166 public void p r o c e s s (APDU apdu )throws ISOException {<br />

167 byte [ ] apduBuffer = apdu . g e t B u f f e r ( ) ;<br />

168 i f ( s e l e c t i n g A p p l e t ( ) ) {<br />

169 this . i n i t i a l i s e ( ) ;<br />

170 return ;<br />

171 }<br />

172 i f ( apduBuffer [ ISO7816 .OFFSET_CLA] != CLA) {<br />

173 ISOException . throwIt (SW_CLASSNOTSUPPORTED) ;<br />

174 }<br />

175 r e c e i v i n g B u f f e r = null ;<br />

176 b y t e s L e f t = 0 ;<br />

177 b y t e s L e f t = apdu . getIncomingLength ( ) ;<br />

178 r e c e i v i n g B u f f e r = JCSystem . makeTransientByteArray ( bytesLeft ,<br />

179 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

180 readCount = ( short ) ( ( short ) apdu . setIncomingAndReceive ( ) ) ;<br />

181 rCount = 0 ;<br />

182 i f ( b y t e s L e f t > 0) {<br />

183 rCount = U t i l . arrayCopyNonAtomic ( apduBuffer ,<br />

184 ISO7816 .OFFSET_EXT_CDATA, r e c e i v i n g B u f f e r , rCount , readCount ) ;<br />

185 b y t e s L e f t −= readCount ;<br />

186 }<br />

187 while ( b y t e s L e f t > 0) {<br />

188 try {<br />

189 readCount = apdu . r e c e i v e B y t e s ( ( short ) 0) ;<br />

190 rCount = U t i l . arrayCopyNonAtomic ( apduBuffer , ( short ) 0 ,<br />

191 r e c e i v i n g B u f f e r , rCount , readCount ) ;<br />

192 b y t e s L e f t −= readCount ;<br />

193 } catch ( Exception aE) {<br />

194 ISOException . throwIt ( ( short ) 0x7AAA) ;<br />

195 }<br />

196 }<br />

197 r e s p o n s e B u f f e r = JCSystem . makeTransientByteArray ( ( short ) 256 ,<br />

198 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

199 s e l f t e s t P r o c e s s ( ) ;<br />

200 JCSystem . r e q u e s t O b j e c t D e l e t i o n ( ) ;<br />

266

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!