Skip to content

Commit 6c4f37b

Browse files
authored
Create ECC.java
1 parent a163816 commit 6c4f37b

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

ECC.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import org.bouncycastle.jce.provider.BouncyCastleProvider;
2+
import org.bouncycastle.jce.spec.ECParameterSpec;
3+
import org.bouncycastle.jce.spec.ECPrivateKeySpec;
4+
import org.bouncycastle.jce.spec.ECPublicKeySpec;
5+
import org.bouncycastle.math.ec.ECPoint;
6+
import org.bouncycastle.pqc.jcajce.provider.asymmetric.util.EC5Util;
7+
import javax.crypto.KeyAgreement;
8+
import javax.crypto.KeyGenerator;
9+
import javax.crypto.SecretKey;
10+
import javax.crypto.spec.SecretKeySpec;
11+
import java.security.*;
12+
import java.security.spec.ECGenParameterSpec;
13+
import java.util.Base64;
14+
import java.util.Scanner;
15+
public class ECC {
16+
17+
static {
18+
Security.addProvider(new BouncyCastleProvider());
19+
}
20+
public static KeyPair generateKeyPair() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
21+
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
22+
ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1");
23+
keyPairGenerator.initialize(ecSpec, new SecureRandom());
24+
return keyPairGenerator.generateKeyPair();
25+
}
26+
public static byte[] performKeyAgreement(PrivateKey privateKey, PublicKey publicKey) throws Exception {
27+
KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH");
28+
keyAgreement.init(privateKey);
29+
keyAgreement.doPhase(publicKey, true);
30+
return keyAgreement.generateSecret();
31+
}
32+
public static String bytesToBase64(byte[] bytes) {
33+
return Base64.getEncoder().encodeToString(bytes);
34+
}
35+
36+
public static void main(String[] args) {
37+
try {
38+
Scanner scanner = new Scanner(System.in);
39+
40+
KeyPair aliceKeyPair = generateKeyPair();
41+
PublicKey alicePublicKey = aliceKeyPair.getPublic();
42+
PrivateKey alicePrivateKey = aliceKeyPair.getPrivate();
43+
44+
KeyPair bobKeyPair = generateKeyPair();
45+
PublicKey bobPublicKey = bobKeyPair.getPublic();
46+
PrivateKey bobPrivateKey = bobKeyPair.getPrivate();
47+
48+
byte[] aliceSharedSecret = performKeyAgreement(alicePrivateKey, bobPublicKey);
49+
byte[] bobSharedSecret = performKeyAgreement(bobPrivateKey, alicePublicKey);
50+
51+
System.out.println("Alice's Public Key: " + bytesToBase64(alicePublicKey.getEncoded()));
52+
System.out.println("Bob's Public Key: " + bytesToBase64(bobPublicKey.getEncoded()));
53+
System.out.println("Alice's Shared Secret: " + bytesToBase64(aliceSharedSecret));
54+
System.out.println("Bob's Shared Secret: " + bytesToBase64(bobSharedSecret));
55+
} catch (Exception e) {
56+
e.printStackTrace();
57+
}
58+
}
59+
}

0 commit comments

Comments
 (0)