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.8 Application Binding Protocol - Distributed<br />

240 i f ( apduBuffer [ ISO7816 .OFFSET_INS] == I n i t i a t i o n P r o t o c o l ) {<br />

241 this . i n i t i a l i s e P r o t o c o l ( ) ;<br />

242 return ;<br />

243 }<br />

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

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

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

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

248 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

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

250 rCount = 0 ;<br />

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

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

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

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

255 }<br />

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

257 try {<br />

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

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

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

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

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

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

264 }<br />

265 }<br />

266 try {<br />

267 parseMessage ( r e c e i v i n g B u f f e r ) ;<br />

268 } catch ( Exception cE ) {<br />

269 ISOException . throwIt ( ( short ) 0xA112 ) ;<br />

270 }<br />

271 i f ( this . r e c e i v i n g B u f f e r [ 3 ] == this . MessageHandlerTagOne [ 3 ] ) {<br />

272 r e c e i v i n g B u f f e r = JCSystem . makeTransientByteArray ( ( short ) 568 ,<br />

273 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

274 generateResponse ( ( short ) 1) ;<br />

275 } else i f ( this . r e c e i v i n g B u f f e r [ 3 ] ==<br />

276 this . MessageHandlerTagTwo [ 3 ] ) {<br />

277 processSecondMsg ( r e c e i v i n g B u f f e r ) ;<br />

278 r e c e i v i n g B u f f e r = JCSystem . makeTransientByteArray ( ( short ) 568 ,<br />

279 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

280 generateResponse ( ( short ) 2) ;<br />

281 } else {<br />

282 ISOException . throwIt ( ProtocolHandler .SW_ERROR_INS) ;<br />

283 }<br />

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

285 apdu . setOutgoing ( ) ;<br />

286 apdu . setOutgoingLength ( ( short ) copyPointer ) ;<br />

287 apdu . sendBytesLong ( r e c e i v i n g B u f f e r , ( short ) 0 , ( short ) copyPointer ) ;<br />

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

289 }<br />

290 private void generateResponse ( short msgNumber) {<br />

383

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

Saved successfully!

Ooh no, something went wrong!