diff --git a/sheet02/a2/SignECDSA.java b/sheet02/a2/SignECDSA.java index 3e53b75..a9b2dbb 100644 --- a/sheet02/a2/SignECDSA.java +++ b/sheet02/a2/SignECDSA.java @@ -1,5 +1,25 @@ package sheet02.a2; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.KeyPairGenerator; +import java.security.Signature; +import java.util.Base64; + public class SignECDSA { - + public static void main(String[] args) throws Exception { + final var gen = KeyPairGenerator.getInstance("EC"); + final var kp = gen.genKeyPair(); + + final var bytes = Files.readAllBytes(Path.of("plaintext.txt")); + final var sig = Signature.getInstance("SHA256withECDSA"); + sig.initVerify(kp.getPublic()); + sig.initSign(kp.getPrivate()); + sig.update(bytes); + final var signature = sig.sign(); + + Files.write(Path.of("signature.txt"), Base64.getEncoder().encode(signature)); + Files.write(Path.of("sign-key.pub"), Base64.getEncoder().encode(kp.getPublic().getEncoded())); + Files.write(Path.of("sign-key"), Base64.getEncoder().encode(kp.getPrivate().getEncoded())); + } } diff --git a/sheet02/a2/VerifyECDSA.java b/sheet02/a2/VerifyECDSA.java index c772ace..e093407 100644 --- a/sheet02/a2/VerifyECDSA.java +++ b/sheet02/a2/VerifyECDSA.java @@ -1,5 +1,28 @@ package sheet02.a2; +import java.security.KeyFactory; +import java.security.Signature; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + public class VerifyECDSA { - + public static void main(String[] args) throws Exception { + if (args.length < 3) { + System.out.println( + "Please specify in the following order: Public Key (X509), Signature (Base64), Message (plain text)"); + return; + } + + final String PUBLIC_KEY = args[0]; + final String SIGNATURE = args[1]; + final String MESSAGE = args[2]; + + final var kf = KeyFactory.getInstance("EC"); + final var pub = kf.generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(PUBLIC_KEY))); + + final var sig = Signature.getInstance("SHA256withECDSA"); + sig.initVerify(pub); + sig.update(MESSAGE.getBytes()); + System.out.println("Correct: " + sig.verify(Base64.getDecoder().decode(SIGNATURE))); + } } diff --git a/sheet02/a2/plaintext.txt b/sheet02/a2/plaintext.txt new file mode 100644 index 0000000..1cd3ee9 --- /dev/null +++ b/sheet02/a2/plaintext.txt @@ -0,0 +1,3 @@ +Julian +Leonard +Viktoria \ No newline at end of file diff --git a/sheet02/a2/verify-example.sh b/sheet02/a2/verify-example.sh new file mode 100755 index 0000000..257fd7c --- /dev/null +++ b/sheet02/a2/verify-example.sh @@ -0,0 +1 @@ +java VerifyECDSA.java "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnSgO/uuSq9QHH/rrnSgXeQTKPMI8tjLhyJzevl9fLQZW/zXuHk9iThiKY/c2k52quUby3czAwL2l2HaRqcBXEg==" "MEUCIAzRvK3CNFqMTZxIgMd1uQ/XybtRKXFht9S4q8qUy/IbAiEA7EcFYuRbViVC/zzIRW78HekjRHZVn3DjHVUcKyJ5sXw=" "hello world" \ No newline at end of file