1
0

finished all features

This commit is contained in:
Lexzach 2024-08-09 17:38:44 -04:00
parent f8c18022ae
commit 092f877fe1
Signed by: Lexzach
GPG Key ID: B574880929E6F1F0
5 changed files with 76 additions and 15 deletions

View File

@ -3,29 +3,45 @@ package main
import ( import (
"fmt" "fmt"
"flag" "flag"
"one-time-pad-utils/otp_gen" "math"
"strings"
"one-time-pad-utils/otp_generate"
"one-time-pad-utils/otp_encrypt" "one-time-pad-utils/otp_encrypt"
"one-time-pad-utils/otp_decrypt"
) )
func main(){ func main(){
var genpad = flag.Bool("generate", false, "Generate a new One-Time Pad using CSPRNG") var genpad = flag.Bool("generate", false, "Generate a new One-Time Pad using CSPRNG")
var genpadchunks = flag.Int("chunks", 200, "Specify the amount of chunks to generate") var genpadchunks = flag.Int("chunks", 200, "Specify the amount of chunks to generate")
var encryptmessage = flag.String("encrypt", "", "Specify a message you wish to encrypt") var encryptmessage = flag.String("encrypt", "", "Specify a message you wish to encrypt (use quotes if you have spaces)")
var decryptmessage = flag.String("decrypt", "", "Specify a message you wish to decrypt") var decryptmessage = flag.String("decrypt", "", "Specify a message you wish to decrypt (use quotes if you have spaces)")
var otpkey = flag.String("key", "", "The specify required key for encryption and decryption") var otpkey = flag.String("key", "", "The specify a key for encryption (optional) and decryption (required) (use quotes if you have spaces)")
var _ = encryptmessage
var _ = decryptmessage
var _ = otpkey
flag.Parse() flag.Parse()
if *genpad { if *genpad {
fmt.Printf("%v\n", otpgen.GenerateOTP(*genpadchunks)) fmt.Printf("%v\n", otpgenerate.GenerateOTP(*genpadchunks))
return return
} }
if *encryptmessage != "" { if *encryptmessage != "" {
fmt.Printf("%v\n", otpencrypt.OTPEncrypt(*encryptmessage,*otpkey)) if *otpkey != ""{
fmt.Printf("%v\n", otpencrypt.OTPEncrypt(*encryptmessage,*otpkey))
} else {
encryptmessagestring := strings.Replace(*encryptmessage, " ", "", -1)
lenofmessage := math.Ceil(float64(len(encryptmessagestring))/float64(5))
generated_key := otpgenerate.GenerateOTP(int(lenofmessage))
fmt.Printf("GENERATED NEW KEY SINCE NONE WAS SPECIFIED:\n%v\n\n%v\n", generated_key, otpencrypt.OTPEncrypt(*encryptmessage, generated_key))
}
return
}
if *decryptmessage != "" {
if *otpkey != ""{
fmt.Printf("%v\n", otpdecrypt.OTPDecrypt(*decryptmessage,*otpkey))
} else {
fmt.Println("PLEASE SUPPLY A KEY")
}
return return
} }

Binary file not shown.

View File

@ -0,0 +1,47 @@
package otpdecrypt
import (
"strings"
"one-time-pad-utils/pad_definitions"
)
func OTPDecrypt(message string, key string) string {
message = strings.Replace(message, " ", "", -1)
messagesplit := strings.Split(message,"")
var messagesplitint []int
key = strings.Replace(key, " ", "", -1)
keysplit := strings.Split(key,"")
var keysplitint []int
for _, char := range messagesplit {
for n, c := range paddefinitions.NumToCharMap{
if c == strings.ToUpper(char) {
messagesplitint = append(messagesplitint, n)
}
}
}
for _, char := range keysplit {
for n, c := range paddefinitions.NumToCharMap{
if c == strings.ToUpper(char) {
keysplitint = append(keysplitint, n)
}
}
}
if len(keysplitint) < len(messagesplitint) {
return ("KEY TOO SHORT TO DECRYPT MESSAGE")
}
var decryptedmessage []string
for pos, messagenum := range messagesplitint{
decryptedmessage = append(decryptedmessage, paddefinitions.NumToCharMap[(((messagenum - keysplitint[pos]) % 35) + 35) % 35]) // crazy modulo for decryption
}
return (strings.Join(decryptedmessage, ""))
}

View File

@ -39,13 +39,11 @@ func OTPEncrypt(message string, key string) string {
var encryptedmessage []string var encryptedmessage []string
for pos, messagenum := range messagesplitint{ for pos, messagenum := range messagesplitint{
if pos != 0 && pos % 5 == 0 {
encryptedmessage = append(encryptedmessage, " ")
}
encryptedmessage = append(encryptedmessage, paddefinitions.NumToCharMap[(messagenum + keysplitint[pos]) % 35]) encryptedmessage = append(encryptedmessage, paddefinitions.NumToCharMap[(messagenum + keysplitint[pos]) % 35])
} }
return (strings.Join(encryptedmessage, "")) return (strings.Join(encryptedmessage, ""))
} }

View File

@ -1,6 +1,6 @@
//One-Time Pad generator //One-Time Pad generator
package otpgen package otpgenerate
import ( import (
"crypto/rand" "crypto/rand"