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 />

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

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

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

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

172 return ;<br />

173 }<br />

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

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

176 }<br />

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

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

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

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

181 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

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

183 rCount = 0 ;<br />

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

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

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

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

188 }<br />

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

190 try {<br />

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

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

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

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

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

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

197 }<br />

198 }<br />

199 byte [ ] c h a l l e n g e = JCSystem . makeTransientByteArray ( ( short ) 128 ,<br />

200 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

201 byte [ ] randomnumber = JCSystem . makeTransientByteArray ( ( short ) 128 ,<br />

202 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

203 U t i l . arrayCopyNonAtomic ( r e c e i v i n g B u f f e r ,<br />

204 ( short ) 0 , c h a l l e n g e , ( short ) 0 , ( short ) 16) ;<br />

205 U t i l . arrayCopyNonAtomic ( r e c e i v i n g B u f f e r ,<br />

206 ( short ) 16 , randomNumber , ( short ) 0 , ( short ) 16) ;<br />

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

208 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

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

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

211 apdu . setOutgoing ( ) ;<br />

212 apdu . setOutgoingLength ( ( short ) r e s p o n s e B u f f e r . l e n g t h ) ;<br />

213 apdu . sendBytesLong ( r e s p o n s e B u f f e r , ( short ) 0 ,<br />

214 ( short ) r e s p o n s e B u f f e r . l e n g t h ) ;<br />

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

216 }<br />

217<br />

218 void s e l f t e s t P r o c e s s ( ) {<br />

271

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

Saved successfully!

Ooh no, something went wrong!