Search code examples
cryptographyrsajavacardapdu

Javacard send RSA Public Key in APDU


What would be a good solution to send a JavaCard RSAPublicKey via APDU? Get exponent and modules and pack them into a byte array?


Solution

  • Yes, you need to send both exponent and modulus serialized together as a byte array. These two methods solve your issue:

    //reads the key object and stores it into the buffer
    private final short serializeKey(RSAPublicKey key, byte[] buffer, short offset) {
        short expLen = key.getExponent(buffer, (short) (offset + 2));
        Util.setShort(buffer, offset, expLen);
        short modLen = key.getModulus(buffer, (short) (offset + 4 + expLen));
        Util.setShort(buffer, offset + 2 + expLen, modLen);
        return (short) (4 + expLen + modLen);
    }
    
    //reads the key from the buffer and stores it inside the key object
    private final short deserializeKey(RSAPublicKey key, byte[] buffer, short offset) {
        short expLen = Util.getShort(buffer, offset);
        key.setExponent(buffer, (short) (offset + 2), expLen);
        short modLen = Util.getShort(buffer, (short) (offset + 2 + expLen));
        key.setModulus(buffer, (short) (offset + 4 + expLen), modLen);
        return (short) (4 + expLen + modLen);
    }