App.java

package org.ondc;

import java.security.Security;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.ondc.KeyUtil.DHKeyPair;

/**
 * Class depicting the usage of the utility.
 */
public class App {
    private static Logger logger = Logger.getLogger("InfoLogger");

    /**
     * Main Function.
     * @param args Main Function Args.
     */
    public static void main(String[] args) {
    	
    	// Adding the BouncyCastleProvider to java.security.Security.
        Security.addProvider(new BouncyCastleProvider());
        
        // Generate Key Pair for User 1.
        DHKeyPair keyPair1 = KeyUtil.generateKeyPair();
        logger.log(Level.INFO, "Key Pair 1 ==> {0}", keyPair1);
        
        // Generate Key Pair for User 2.
        DHKeyPair keyPair2 = KeyUtil.generateKeyPair();
        logger.log(Level.INFO, "Key Pair 2 ==> {0}", keyPair2);

        // Generate Shared Key with User 1's Private Key and User 2's Public Key.
        String sharedKey1 = KeyUtil.generateSharedKey(keyPair1.getPrivateKey(), keyPair2.getPublicKey());
        logger.log(Level.INFO, "SharedKey1 ==> {0}", sharedKey1);
        
        // Generate Shared Key with User 2's Private Key and User 1's Public Key.
        String sharedKey2 = KeyUtil.generateSharedKey(keyPair2.getPrivateKey(), keyPair1.getPublicKey());
        logger.log(Level.INFO, "SharedKey2 ==> {0}", sharedKey2);

        // Comparing the two Shared keys generated above.
        logger.log(Level.INFO, "sharedKey1 == sharedKey2 ==> {0}", sharedKey1.equals(sharedKey2));

        // Initializing the raw text to be encrypted.
        String rawData = "Hello This is ONDC Test Data";
        
        // Encrypting the raw data.
        String encryptedData = EncryptionUtil.encryptData(sharedKey1, rawData);
        logger.log(Level.INFO, "Encrypted Data ===> {0}", encryptedData);

        // Decrypting the Encrypted data.
        String decryptedData =  EncryptionUtil.decryptData(sharedKey2, encryptedData);
        logger.log(Level.INFO, "Decrypted Data ===> {0}", decryptedData);

    }
}