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.3 Attestation Protocol<br />

163 apdu . setOutgoing ( ) ;<br />

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

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

166 return ;<br />

167 }<br />

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

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

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

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

172 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

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

174 rCount = 0 ;<br />

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

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

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

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

179 }<br />

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

181 try {<br />

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

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

184 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 } catch ( Exception aE) {<br />

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

188 }<br />

189 }<br />

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

191 try {<br />

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

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

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

195 }<br />

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

197 JCSystem .MEMORY_TYPE_TRANSIENT_DESELECT) ;<br />

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

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

200 apdu . setOutgoing ( ) ;<br />

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

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

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

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

205 return ;<br />

206 } else {<br />

207 ISOException . throwIt ( ( short ) 0xFA17) ;<br />

208 }<br />

209 return ;<br />

210 } else {<br />

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

212 }<br />

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

276

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

Saved successfully!

Ooh no, something went wrong!