Skip to content

Commit

Permalink
Instruction for computing the size of some data after encryption.
Browse files Browse the repository at this point in the history
  • Loading branch information
Victor Costan committed Nov 17, 2009
1 parent 19d7ef9 commit 8e4690c
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 8 deletions.
2 changes: 1 addition & 1 deletion .jcop
@@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><jcop.project debug_comp="1" version="2"><package debug_comp="0" exportmap="false" jcop.id=""><aid jcop.id="package"/><version jcop.id="package">1.0</version></package><package debug_comp="0" exportmap="false" jcop.id="edu.mit.csail"><aid jcop.id="package"/><version jcop.id="package">1.0</version></package><package debug_comp="0" exportmap="false" jcop.id="edu"><aid jcop.id="package"/><version jcop.id="package">1.0</version></package><package debug_comp="0" exportmap="false" jcop.id="edu.mit"><aid jcop.id="package"/><version jcop.id="package">1.0</version></package><package debug_comp="0" exportmap="false" jcop.id="edu.mit.csail.tc"><aid jcop.id="package">1983122910face</aid><cunit jcop.id="TEMStore.java"/><cunit jcop.id="TEMApplet.java"><applet jcop.id="TEMApplet"><aid jcop.id="applet">1983122910BABE</aid></applet></cunit><cunit jcop.id="TEMTag.java"/><cunit jcop.id="TEMBuffers.java"/><cunit jcop.id="TEMCrypto.java"/><cunit jcop.id="TEMExecution.java"/><version jcop.id="package">1.14</version></package></jcop.project>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><jcop.project debug_comp="1" version="2"><package debug_comp="0" exportmap="false" jcop.id=""><aid jcop.id="package"/><version jcop.id="package">1.0</version></package><package debug_comp="0" exportmap="false" jcop.id="edu.mit.csail"><aid jcop.id="package"/><version jcop.id="package">1.0</version></package><package debug_comp="0" exportmap="false" jcop.id="edu"><aid jcop.id="package"/><version jcop.id="package">1.0</version></package><package debug_comp="0" exportmap="false" jcop.id="edu.mit"><aid jcop.id="package"/><version jcop.id="package">1.0</version></package><package debug_comp="0" exportmap="false" jcop.id="edu.mit.csail.tc"><aid jcop.id="package">1983122910face</aid><cunit jcop.id="TEMStore.java"/><cunit jcop.id="TEMApplet.java"><applet jcop.id="TEMApplet"><aid jcop.id="applet">1983122910BABE</aid></applet></cunit><cunit jcop.id="TEMTag.java"/><cunit jcop.id="TEMBuffers.java"/><cunit jcop.id="TEMCrypto.java"/><cunit jcop.id="TEMExecution.java"/><version jcop.id="package">1.15</version></package></jcop.project>
2 changes: 1 addition & 1 deletion src/edu/mit/csail/tc/TEMApplet.java
Expand Up @@ -24,7 +24,7 @@
*/
public class TEMApplet extends Applet {
/** The firmware version. */
public static final short FIRMWARE_VER = 0x010E;
public static final short FIRMWARE_VER = 0x010F;

public static void install(byte[] bArray, short bOffset, byte bLength) {
// GP-compliant JavaCard applet registration
Expand Down
19 changes: 13 additions & 6 deletions src/edu/mit/csail/tc/TEMExecution.java
Expand Up @@ -456,25 +456,32 @@ else if ((opcode & 2) != 0) {
operand3, ((opcode & 2) == 0));
}
Util.setShort(pBuffer, sp, result); sp += 2;
break;
break;
case 0x5A: // rdk (read key)
sp -= 2; operand1 = Util.getShort(pBuffer, sp);
result = TEMCrypto.loadKey(pBuffer, operand1);
if(result != TEMCrypto.INVALID_KEY)
authorizedKeys[result] = true;
Util.setShort(pBuffer, sp, result); sp += 2;
break;
case 0x58: // ldkel (load key encryption length)
case 0x5B: // stk (store key)
sp -= 2; operand2 = Util.getShort(pBuffer, sp);
sp -= 2; operand1 = Util.getShort(pBuffer, sp);
if(authorizedKeys[operand1] == false)
ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
if(operand2 == (short)-1) {
result = TEMCrypto.saveKey((byte)operand1, outBuffer, outOffset);
outOffset += result;

if (opcode == 0x58) { // ldkel
result = TEMCrypto.getEncryptedDataSize((byte)operand1, operand2);
}
else {
if(operand2 == (short)-1) { // stk
result = TEMCrypto.saveKey((byte)operand1, outBuffer, outOffset);
outOffset += result;
}
else
result = TEMCrypto.saveKey((byte)operand1, pBuffer, operand2);
}
else
result = TEMCrypto.saveKey((byte)operand1, pBuffer, operand2);
Util.setShort(pBuffer, sp, result); sp += 2;
break;
case 0x5C: // relk (release key)
Expand Down

0 comments on commit 8e4690c

Please sign in to comment.