MainClass.java Source code

Java tutorial

Introduction

Here is the source code for MainClass.java

Source

import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;

import javax.crypto.KeyAgreement;
import javax.crypto.interfaces.DHPrivateKey;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;

public class MainClass {
    public static void main(String[] args) throws Exception {
        String s = "F488FD584E49DBCD20B49DE49107366B336C380D451D0F7C88"
                + "11111111111111111111111111111111111111111111111111"
                + "11111111111111111111111111111111111111111111111111"
                + "11111111111111111111111111111111111111111111111111"
                + "11111111111111111111111111111111111111111111111111" + "2F78C7";
        BigInteger base = BigInteger.valueOf(2);
        BigInteger modulus = new BigInteger(s, 16);
        DHParameterSpec skipParameterSpec = new DHParameterSpec(modulus, base);

        KeyPairGenerator kpg1 = KeyPairGenerator.getInstance("DH");
        kpg1.initialize(skipParameterSpec);
        KeyPair kp1 = kpg1.generateKeyPair();

        KeyAgreement ka1 = KeyAgreement.getInstance("DH");
        DHPrivateKey privateKey1 = (DHPrivateKey) kp1.getPrivate();
        DHPublicKey publicKey1 = (DHPublicKey) kp1.getPublic();
        ka1.init(privateKey1);
        System.out.println("1 is using " + publicKey1.getY() + " for its public key");
        KeyPairGenerator kpg2 = KeyPairGenerator.getInstance("DH");
        kpg2.initialize(skipParameterSpec);
        KeyPair kp2 = kpg2.generateKeyPair();

        KeyAgreement ka2 = KeyAgreement.getInstance("DH");
        DHPrivateKey privateKey2 = (DHPrivateKey) kp2.getPrivate();
        DHPublicKey publicKey2 = (DHPublicKey) kp2.getPublic();
        ka2.init(privateKey2);
        System.out.println("2 is using " + publicKey2.getY() + " for its public key");
        ka1.doPhase(publicKey2, true);
        byte[] sharedKey1 = ka1.generateSecret();
        System.out.println("1 is using " + new BigInteger(1, sharedKey1) + " for its shared key");

        ka2.doPhase(publicKey1, true);
        byte[] sharedKey2 = ka2.generateSecret();
        System.out.println("2 is using " + new BigInteger(1, sharedKey2) + " for its shared key");
    }

}