Search code examples
javaencodingjavacardecdsapkcs#8

Encode publicKey on Java Card


How to encode an ECDSA PublicKey on Java Card so that after I can decode it on another platform (e.g. sending the encoded key in a response APDU and processing it in a standard Java application)? keyPair.getPublic().getEncoded() on Java would do the trick with PKCS#8 encoding, but as far as I know getEncoded() is not available on the Java Card platform.


Solution

  • You can implement this function like this:

    Card side:

    • 1 KeyPair.getPublicKey() --> publicKey;
    • 2 publicKey.getW() --> W;
    • 3 Send W to outside;

    Standard java application side:

    • 1 get W data bytes;
    • 2 W data bytes --> ECPoint;
    • 3 Build PublicKey with the ECPoint generated in step 2 use the class ECPublicKeySpec;
    • 4 Use the public key in your application;