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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C.5 Secure and Trusted Channel Protocol Smart Card<br />

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

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

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

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

190 return ;<br />

191 }<br />

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

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

194 }<br />

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

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

197 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

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

199 apdu . setOutgoing ( ) ;<br />

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

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

202 return ;<br />

203 }<br />

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

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

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

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

208 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

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

210 rCount = 0 ;<br />

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

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

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

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

215 }<br />

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

217 try {<br />

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

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

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

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

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

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

224 }<br />

225 }<br />

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

227 try {<br />

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

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

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

231 }<br />

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

233 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

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

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

236 apdu . setOutgoing ( ) ;<br />

317

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

Saved successfully!

Ooh no, something went wrong!