Skip to content

Instantly share code, notes, and snippets.

@ensingerphilipp
Created September 24, 2019 11:24
Show Gist options
  • Save ensingerphilipp/c99904f8559a07dea63285096ca7d60b to your computer and use it in GitHub Desktop.
Save ensingerphilipp/c99904f8559a07dea63285096ca7d60b to your computer and use it in GitHub Desktop.
ECDSA Signature Implementation in Java
package ecdsaSignature;
import java.security.*;
import java.security.spec.ECGenParameterSpec;
public class ECDSAKeyGenerator {
public static KeyPair generateKeyPair() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
//It is required to use an epileptic Curve with Security Strength <= Security Strength of the used Hashing Function
//e.g. SHA512 Security Strength = 256bit paired with "brainpoolP512r1" Curve = 256bit
ECGenParameterSpec ecCurve = new ECGenParameterSpec("brainpoolP512r1");
KeyPairGenerator generator = KeyPairGenerator.getInstance("EC");
generator.initialize(ecCurve, SecureRandom.getInstanceStrong());
return generator.generateKeyPair();
}
public static void main(String[] args) throws InvalidAlgorithmParameterException, NoSuchAlgorithmException {
KeyPair keyPair = generateKeyPair();
System.out.println(keyPair.getPublic());
System.out.println(keyPair.getPrivate());
}
}
package ecdsaSignature;
import java.security.*;
public class ECDSASign {
public static byte[] sign(byte[] data, PrivateKey privateKey) throws NoSuchAlgorithmException, SignatureException,
InvalidKeyException {
//Initialize ECDSA Signature with SHA512
//It is required to use a Hash Function with Security Strength >= Security Strength of the used ECDSA epileptic Curve
//e.g. SHA512 Security Strength = 256bit paired with "brainpoolP512r1" Curve = 256bit
Signature ecSignature = Signature.getInstance("SHA512withECDSA");
//Load privateKey
ecSignature.initSign(privateKey);
//Load Data to sign
ecSignature.update(data);
//Sign the Data
return ecSignature.sign();
}
public static boolean verify(byte[] data, byte[] signature, PublicKey publicKey) throws NoSuchAlgorithmException, SignatureException,
InvalidKeyException {
//Initialize ECDSA Signature with SHA512
Signature ecSignature = Signature.getInstance("SHA512withECDSA");
//Initialize Verifing of Signature
ecSignature.initVerify(publicKey);
//Load Data to verify
ecSignature.update(data);
//Verify with given Signature
return ecSignature.verify(signature);
}
public static void main(String[] args) throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, SignatureException, InvalidKeyException {
KeyPair keyPair = ECDSAKeyGenerator.generateKeyPair();
byte[] data = "hallo".getBytes();
byte[] signature = sign(data, keyPair.getPrivate());
KeyPair keyPair2 = ECDSAKeyGenerator.generateKeyPair();
byte[] data2 = "hallo2".getBytes();
byte[] signature2 = sign(data2, keyPair2.getPrivate());
System.out.println("Signature \"signature\" was " + verify(data, signature, keyPair.getPublic()) + " for \"data\" ");
System.out.println("Signature \"signature2\" was " + verify(data, signature2, keyPair2.getPublic()) + " for \"data\" ");
System.out.println("Signature \"signature2\" was " + verify(data2, signature2, keyPair2.getPublic()) + " for \"data2\" ");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment