Advertisement
Guest User

Untitled

a guest
Mar 20th, 2017
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.85 KB | None | 0 0
  1. package RSATest;
  2.  
  3. import javacard.security.*;
  4. import javacardx.crypto.*;
  5. import javacard.framework.*;
  6.  
  7. public class RSATest extends Applet
  8. {
  9.     RSAPrivateCrtKey priv;
  10.     RSAPublicKey pub;
  11.     KeyPair kp;
  12.     RandomData rng;
  13.    
  14.     Cipher rsa;
  15.  
  16.     byte[] inBuffer = new byte[256];
  17.     byte[] outBuffer = new byte[256];
  18.  
  19.     public RSATest() {  
  20.        
  21.         // Generate our CSP's
  22.         rng = RandomData.getInstance(RandomData.ALG_SECURE_RANDOM);
  23.         rsa = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);
  24.  
  25.         // Generate the KeyPair
  26.         priv = (RSAPrivateCrtKey)KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_CRT_PRIVATE, KeyBuilder.LENGTH_RSA_2048, false);
  27.         pub = (RSAPublicKey)KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_PUBLIC, KeyBuilder.LENGTH_RSA_2048, false);
  28.         kp = new KeyPair(pub, priv);
  29.         kp.genKeyPair();
  30.        
  31.     }
  32.  
  33.     public static void install(byte[] bArray, short bOffset, byte bLength)
  34.     {
  35.         new RSATest().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
  36.     }
  37.  
  38.     public void process(APDU apdu)
  39.     {
  40.         if (selectingApplet()) return;
  41.  
  42.         byte[] buf = apdu.getBuffer();
  43.  
  44.         switch (buf[ISO7816.OFFSET_INS])
  45.         {
  46.  
  47.         case (byte)0x01:
  48.            
  49.             // Clear the buffers
  50.             Util.arrayFillNonAtomic(inBuffer, (short)0, (short)256, (byte)0);          
  51.             Util.arrayFillNonAtomic(outBuffer, (short)0, (short)256, (byte)0);         
  52.                
  53.             // Generate some random data
  54.             rng.generateData(inBuffer, (short)0, (short)128);
  55.            
  56.             // RSA Encrypt from inBuffer to outBuffer (length 128)
  57.             rsa.init(pub, Cipher.MODE_ENCRYPT);
  58.             rsa.doFinal(inBuffer, (short)0, (short)128, outBuffer, (short)0);          
  59.             break;
  60.            
  61.         case (byte)0x02:
  62.            
  63.             // RSA Decrypt from outBuffer to inBuffer (length 256)
  64.             rsa.init(priv, Cipher.MODE_DECRYPT);
  65.             rsa.doFinal(outBuffer, (short)0, (short)256, inBuffer, (short)0);
  66.             break;
  67.            
  68.         default:
  69.             ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
  70.         }
  71.     }
  72.  
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement