Skip to content

Instantly share code, notes, and snippets.

@tolpp
Created July 29, 2019 18:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tolpp/c5f831659b113b1e1f024ca5a8d8d427 to your computer and use it in GitHub Desktop.
Save tolpp/c5f831659b113b1e1f024ca5a8d8d427 to your computer and use it in GitHub Desktop.
ANSI X9.62 elliptic curve prime256v1 (aka secp256r1, NIST P-256), SHA512withECDSA Signature verification using Java.
import java.security.*;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
/*
ANSI X9.62 elliptic curve prime256v1 (aka secp256r1, NIST P-256), SHA512withECDSA Signature verification using Java.
## Some useful OpenSSL commands in order to create keys and sign messages:
Generating new EC key using OpenSSL:
openssl ecparam -name prime256v1 -genkey -noout -out key.pem
Signing message 'tolga' using key 'key.pem' with sha512 digest:
echo -n 'tolga' | openssl dgst -sha512 -sign key.pem | openssl enc -base64
Example keys:
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEILgvfksXdWWNCZJznzSbAW6jSJEcoyw8kFnIpmkCPVmBoAoGCCqGSM49
AwEHoUQDQgAEPP4jo2krvRpe0P/cXUdsTElQWjJrbLc0Wu+7/nyg+iT8JHlk38f4
g8sGD6fJogK7AuFgKp8R+w8eCDr9JgC89w==
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPP4jo2krvRpe0P/cXUdsTElQWjJr
bLc0Wu+7/nyg+iT8JHlk38f4g8sGD6fJogK7AuFgKp8R+w8eCDr9JgC89w==
-----END PUBLIC KEY-----
*/
public class Main {
public static void main(String[] args) throws Exception {
String b64PublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPP4jo2krvRpe0P/cXUdsTElQWjJrbLc0Wu+7/nyg+iT8JHlk38f4g8sGD6fJogK7AuFgKp8R+w8eCDr9JgC89w==";
String b64Signature = "MEUCIHZ7HA6tyCmqxmPAsYwBAQaswxm+2wA8mHFKtp8vW/qEAiEArW2fd9gEfnHCEOb4dTnXSxnKdZQels90/dq71Sw7Pl8=";
String dataStr = "tolga";
// Convert String data to byte array.
byte[] data = dataStr.getBytes();
byte[] publicKeyData = Base64.getDecoder().decode(b64PublicKey);
byte[] signatureData = Base64.getDecoder().decode(b64Signature);
PublicKey publicKey = KeyFactory.getInstance("EC").generatePublic(new X509EncodedKeySpec(publicKeyData));
Signature sig = Signature.getInstance("SHA512withECDSA");
sig.initVerify(publicKey);
sig.update(data);
boolean verify = sig.verify(signatureData);
System.out.println("Verification: " + verify);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment