Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package RSATest;
- import javacard.security.*;
- import javacardx.crypto.*;
- import javacard.framework.*;
- public class RSATest extends Applet
- {
- RSAPrivateCrtKey priv;
- RSAPublicKey pub;
- KeyPair kp;
- RandomData rng;
- Cipher rsa;
- byte[] inBuffer = new byte[256];
- byte[] outBuffer = new byte[256];
- public RSATest() {
- // Generate our CSP's
- rng = RandomData.getInstance(RandomData.ALG_SECURE_RANDOM);
- rsa = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);
- // Generate the KeyPair
- priv = (RSAPrivateCrtKey)KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_CRT_PRIVATE, KeyBuilder.LENGTH_RSA_2048, false);
- pub = (RSAPublicKey)KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_PUBLIC, KeyBuilder.LENGTH_RSA_2048, false);
- kp = new KeyPair(pub, priv);
- kp.genKeyPair();
- }
- public static void install(byte[] bArray, short bOffset, byte bLength)
- {
- new RSATest().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
- }
- public void process(APDU apdu)
- {
- if (selectingApplet()) return;
- byte[] buf = apdu.getBuffer();
- switch (buf[ISO7816.OFFSET_INS])
- {
- case (byte)0x01:
- // Clear the buffers
- Util.arrayFillNonAtomic(inBuffer, (short)0, (short)256, (byte)0);
- Util.arrayFillNonAtomic(outBuffer, (short)0, (short)256, (byte)0);
- // Generate some random data
- rng.generateData(inBuffer, (short)0, (short)128);
- // RSA Encrypt from inBuffer to outBuffer (length 128)
- rsa.init(pub, Cipher.MODE_ENCRYPT);
- rsa.doFinal(inBuffer, (short)0, (short)128, outBuffer, (short)0);
- break;
- case (byte)0x02:
- // RSA Decrypt from outBuffer to inBuffer (length 256)
- rsa.init(priv, Cipher.MODE_DECRYPT);
- rsa.doFinal(outBuffer, (short)0, (short)256, inBuffer, (short)0);
- break;
- default:
- ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement