-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsendmenudes.go
99 lines (89 loc) · 2.38 KB
/
sendmenudes.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package main
import (
"flag"
"fmt"
"github.com/caesarsalad/send-me-nudes/ec"
"github.com/caesarsalad/send-me-nudes/pq"
)
var (
algo string
pubKeyFile string
base64Pub string
clientPrivateKeyFile string
inputFileName string
outputFileName string
encryptionMode bool
decryptionMode bool
generationMode bool
encapsulation bool
decapsulation bool
)
type common interface {
GenerateKeys()
}
type kem interface {
Encapsulate()
Decapsulate()
}
type fileEncryption interface {
EncryptFile()
DecryptFile()
}
func main() {
flag.StringVar(&algo, "algo", "ec25519", "Change Cryto Algo")
flag.BoolVar(&generationMode, "g", false, "generate key files")
flag.BoolVar(&encryptionMode, "e", false, "enable encryption mode")
flag.BoolVar(&decryptionMode, "d", false, "enable decryption mode")
flag.StringVar(&pubKeyFile, "pubkey", "client_pub.key", "Public Key File")
flag.StringVar(&base64Pub, "base64Pub", "", "Base64 Public Key")
flag.StringVar(&clientPrivateKeyFile, "privatekey", "client_private.key", "Your Private Key File")
flag.StringVar(&inputFileName, "i", "file", "file to read")
flag.StringVar(&outputFileName, "o", "out", "output file name")
flag.BoolVar(&encapsulation, "ec", false, "encapsulate shared secret")
flag.BoolVar(&decapsulation, "dc", false, "decapsulate shared secret")
flag.Parse()
var calgo common
var kemAlgo kem
var feAlgo fileEncryption
switch algo {
case "ec25519":
ec25519 := ec.NewEC25519(pubKeyFile, base64Pub, clientPrivateKeyFile, inputFileName, outputFileName)
calgo = ec25519
feAlgo = ec25519
case "sike":
sike := pq.NewSike(pubKeyFile, base64Pub, clientPrivateKeyFile, inputFileName)
calgo = sike
kemAlgo = sike
}
switch {
case generationMode:
generateKeys(calgo)
case encryptionMode:
encryptFile(feAlgo)
case decryptionMode:
decryptFile(feAlgo)
case encapsulation:
//_, ok := kemAlgo.(fileEncryption)
encapsulate(kemAlgo)
case decapsulation:
decapsulate(kemAlgo)
}
}
func generateKeys(g common) {
fmt.Println(algo, " Generating key pairs...")
g.GenerateKeys()
}
func encryptFile(e fileEncryption) {
fmt.Println(algo, " Encrypting file...")
e.EncryptFile()
}
func decryptFile(d fileEncryption) {
fmt.Println(algo, " Decrypting file...")
d.DecryptFile()
}
func encapsulate(k kem) {
k.Encapsulate()
}
func decapsulate(k kem) {
k.Decapsulate()
}