-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
93 lines (66 loc) · 2.38 KB
/
main.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
package main
import (
"encoding/base64"
"github.com/nidorx/chain"
)
func main() {
println("\nKeyGenerator")
keyGenerator()
println("\nMessageVerifier")
messageVerifier()
println("\nMessageEncryptor")
messageEncryptor()
println("\nKeyring")
keyring()
}
func keyGenerator() {
secretKeyBase := []byte("ZcbD0D29eYsGq89QjirJbPkw7Qxwxboy")
cookieSalt := []byte("encrypted cookie")
signedCookieSalt := []byte("signed encrypted cookie")
secret := chain.Crypto().KeyGenerate(secretKeyBase, cookieSalt, 1000, 32, "sha256")
signSecret := chain.Crypto().KeyGenerate(secretKeyBase, signedCookieSalt, 1000, 32, "sha256")
println(base64.StdEncoding.EncodeToString(secret))
println(base64.StdEncoding.EncodeToString(signSecret))
}
func messageVerifier() {
message := []byte("This is content")
secret := []byte("ZcbD0D29eYsGq89QjirJbPkw7Qxwxboy")
signed := chain.Crypto().MessageSign(secret, message, "sha256")
println(signed)
verified, _ := chain.Crypto().MessageVerify(secret, []byte(signed))
println(string(verified))
}
func messageEncryptor() {
data := []byte("This is content")
secretKeyBase := []byte("ZcbD0D29eYsGq89QjirJbPkw7Qxwxboy")
cookieSalt := []byte("encrypted cookie")
encryptionKey := chain.Crypto().KeyGenerate(secretKeyBase, cookieSalt, 1000, 32, "sha256")
aad := []byte("purpose: database key")
encrypted, _ := chain.Crypto().MessageEncrypt(encryptionKey, data, aad)
println(encrypted)
decrypted, _ := chain.Crypto().MessageDecrypt(encryptionKey, []byte(encrypted), aad)
println(string(decrypted))
}
func keyring() {
aad := []byte("purpose: database key")
var myKeyring = chain.NewKeyring("SALT", 1000, 32, "sha256")
// moment 1, set global key
if err := chain.SetSecretKeyBase("ZcbD0D29eYsGq89QjirJbPkw7Qxwxboy"); err != nil {
panic(err)
}
encryptedA, _ := myKeyring.Encrypt([]byte("Jack"), aad)
println(base64.StdEncoding.EncodeToString(encryptedA))
// moment 2, update global key
if err := chain.SetSecretKeyBase("fe6d1fed11fa60277fb6a2f73efb8be2"); err != nil {
panic(err)
}
// encrypt using new key
encryptedB, _ := myKeyring.Encrypt([]byte("Jack"), aad)
println(base64.StdEncoding.EncodeToString(encryptedB))
// decrypt value encrypted by old key
decryptedA, _ := myKeyring.Decrypt(encryptedA, aad)
println(string(decryptedA))
// decrypt value encrypted by new key
decryptedB, _ := myKeyring.Decrypt(encryptedB, aad)
println(string(decryptedB))
}