Created
November 1, 2024 13:29
-
-
Save marchof/4e62893b636837411994f6fcf6fc371c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import static org.junit.jupiter.api.Assertions.assertFalse; | |
import static org.junit.jupiter.api.Assertions.assertTrue; | |
import java.security.KeyPair; | |
import java.security.KeyPairGenerator; | |
import java.security.NoSuchAlgorithmException; | |
import java.security.PrivateKey; | |
import java.security.PublicKey; | |
import java.security.Signature; | |
import java.util.Map; | |
import org.junit.jupiter.api.Test; | |
public class KeyPairChecker { | |
private static Map<String, String> SIGNATURE_ALGOS = Map.of( // | |
"DSA", "SHA256WithDSA", // | |
"RSA", "SHA256WithRSA", // | |
"EC", "SHA256WithECDSA"); | |
boolean isKeyPair(PrivateKey privateKey, PublicKey publicKey) throws Exception { | |
if (!privateKey.getAlgorithm().equals(publicKey.getAlgorithm())) { | |
return false; | |
} | |
var signature = Signature.getInstance(SIGNATURE_ALGOS.get(privateKey.getAlgorithm())); | |
signature.initSign(privateKey); | |
var signed = signature.sign(); | |
signature.initVerify(publicKey); | |
return signature.verify(signed); | |
} | |
// Testing | |
private KeyPair createKeyPair(String algo, int size) throws NoSuchAlgorithmException { | |
var kpg = KeyPairGenerator.getInstance(algo); | |
kpg.initialize(size); | |
return kpg.generateKeyPair(); | |
} | |
@Test | |
void dsa_match() throws Exception { | |
var pair = createKeyPair("DSA", 1024); | |
assertTrue(isKeyPair(pair.getPrivate(), pair.getPublic())); | |
} | |
@Test | |
void dsa_no_match() throws Exception { | |
var pair1 = createKeyPair("DSA", 1024); | |
var pair2 = createKeyPair("DSA", 1024); | |
assertFalse(isKeyPair(pair1.getPrivate(), pair2.getPublic())); | |
} | |
@Test | |
void rsa_match() throws Exception { | |
var pair = createKeyPair("RSA", 1024); | |
assertTrue(isKeyPair(pair.getPrivate(), pair.getPublic())); | |
} | |
@Test | |
void rsa_no_match() throws Exception { | |
var pair1 = createKeyPair("RSA", 1024); | |
var pair2 = createKeyPair("RSA", 1024); | |
assertFalse(isKeyPair(pair1.getPrivate(), pair2.getPublic())); | |
} | |
@Test | |
void ec_match() throws Exception { | |
var pair = createKeyPair("EC", 256); | |
assertTrue(isKeyPair(pair.getPrivate(), pair.getPublic())); | |
} | |
@Test | |
void ec_no_match() throws Exception { | |
var pair1 = createKeyPair("EC", 256); | |
var pair2 = createKeyPair("EC", 256); | |
assertFalse(isKeyPair(pair1.getPrivate(), pair2.getPublic())); | |
} | |
@Test | |
void algo_no_match() throws Exception { | |
var pair1 = createKeyPair("RSA", 1024); | |
var pair2 = createKeyPair("EC", 256); | |
assertFalse(isKeyPair(pair1.getPrivate(), pair2.getPublic())); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment