From 295d782194e7495b4d577c16debbf62506674916 Mon Sep 17 00:00:00 2001
From: siddharth ravikumar <s@ricketyspace.net>
Date: Sun, 14 Aug 2022 14:22:57 -0400
Subject: challenge: do challenge 39

---
 challenge/c39.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 cryptopals.go    |  2 ++
 2 files changed, 55 insertions(+)
 create mode 100644 challenge/c39.go

diff --git a/challenge/c39.go b/challenge/c39.go
new file mode 100644
index 0000000..e4c0bf7
--- /dev/null
+++ b/challenge/c39.go
@@ -0,0 +1,53 @@
+// Copyright © 2022 siddharth ravikumar <s@ricketyspace.net>
+// SPDX-License-Identifier: ISC
+
+package challenge
+
+import (
+	"fmt"
+
+	"ricketyspace.net/cryptopals/lib"
+)
+
+func C39() {
+	rsa, err := lib.RSAGenKey()
+	if err != nil {
+		fmt.Printf("gen key failed: %v", err)
+	}
+
+	msg := []byte("42")
+	enc := rsa.Public.Encrypt(msg)
+	if len(enc) < 1 {
+		fmt.Printf("encrypt failed: %v", enc)
+		return
+	}
+	dec := rsa.Private.Decrypt(enc)
+	if !lib.BytesEqual(msg, dec) {
+		fmt.Printf("decrypt failed: %v", dec)
+		return
+	}
+
+	msg = []byte("0x42")
+	enc = rsa.Public.Encrypt(msg)
+	if len(enc) < 1 {
+		fmt.Printf("encrypt failed: %v", enc)
+		return
+	}
+	dec = rsa.Private.Decrypt(enc)
+	if !lib.BytesEqual(msg, dec) {
+		fmt.Printf("decrypt failed: %v", dec)
+		return
+	}
+
+	msg = []byte("68f13a29c10617c2c87cccb8db2d40ba05191f75f5a08978e84d829a543fa933")
+	enc = rsa.Public.Encrypt(msg)
+	if len(enc) < 1 {
+		fmt.Printf("encrypt failed: %v", enc)
+		return
+	}
+	dec = rsa.Private.Decrypt(enc)
+	if !lib.BytesEqual(msg, dec) {
+		fmt.Printf("decrypt failed: %v", dec)
+		return
+	}
+}
diff --git a/cryptopals.go b/cryptopals.go
index 82627e0..8ff0d6c 100644
--- a/cryptopals.go
+++ b/cryptopals.go
@@ -96,5 +96,7 @@ func main() {
 		challenge.C37(flag.Args())
 	case 38:
 		challenge.C38(flag.Args())
+	case 39:
+		challenge.C39()
 	}
 }
-- 
cgit v1.2.3