-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathapi.go
More file actions
106 lines (95 loc) · 2.45 KB
/
api.go
File metadata and controls
106 lines (95 loc) · 2.45 KB
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
100
101
102
103
104
105
106
// Package crypto implements golang package crypto functionality for lua.
package crypto
import (
"crypto/md5"
"crypto/sha256"
"encoding/hex"
"fmt"
lua "github.com/yuin/gopher-lua"
)
// MD5 lua crypto.md5(string) return string
func MD5(L *lua.LState) int {
str := L.CheckString(1)
hash := md5.Sum([]byte(str))
L.Push(lua.LString(fmt.Sprintf("%x", hash)))
return 1
}
// SHA256 lua crypto.sha256(string) return string
func SHA256(L *lua.LState) int {
str := L.CheckString(1)
hash := sha256.Sum256([]byte(str))
L.Push(lua.LString(fmt.Sprintf("%x", hash)))
return 1
}
// AESEncrypt implements AES encryption in Lua.
func AESEncrypt(l *lua.LState) int {
modeStr := l.CheckString(1)
m, err := parseString(modeStr)
if err != nil {
l.ArgError(1, err.Error())
}
key := []byte(l.CheckString(2))
iv := []byte(l.CheckString(3))
data := []byte(l.CheckString(4))
enc, err := encryptAES(m, key, iv, data)
if err != nil {
l.Push(lua.LNil)
l.Push(lua.LString(fmt.Sprintf("failed to encrypt: %v", err)))
return 2
}
l.Push(lua.LString(enc))
return 1
}
// AESEncryptHex implements AES encryption in Lua.
func AESEncryptHex(l *lua.LState) int {
m, key, iv, data, err := decodeParams(l)
if err != nil {
l.Push(lua.LNil)
l.Push(lua.LString(fmt.Sprintf("failed to decode params: %v", err)))
return 2
}
enc, err := encryptAES(m, key, iv, data)
if err != nil {
l.Push(lua.LNil)
l.Push(lua.LString(fmt.Sprintf("failed to encrypt: %v", err)))
return 2
}
l.Push(lua.LString(hex.EncodeToString(enc)))
return 1
}
// AESDecrypt implement AES decryption in Lua.
func AESDecrypt(l *lua.LState) int {
modeStr := l.CheckString(1)
m, err := parseString(modeStr)
if err != nil {
l.ArgError(1, err.Error())
}
key := []byte(l.CheckString(2))
iv := []byte(l.CheckString(3))
data := []byte(l.CheckString(4))
dec, err := decryptAES(m, key, iv, data)
if err != nil {
l.Push(lua.LNil)
l.Push(lua.LString(fmt.Sprintf("failed to decrypt: %v", err)))
return 2
}
l.Push(lua.LString(dec))
return 1
}
// AESDecryptHex implement AES decryption in Lua.
func AESDecryptHex(l *lua.LState) int {
m, key, iv, data, err := decodeParams(l)
if err != nil {
l.Push(lua.LNil)
l.Push(lua.LString(fmt.Sprintf("failed to decode params: %v", err)))
return 2
}
dec, err := decryptAES(mode(m), key, iv, data)
if err != nil {
l.Push(lua.LNil)
l.Push(lua.LString(fmt.Sprintf("failed to decrypt: %v", err)))
return 2
}
l.Push(lua.LString(hex.EncodeToString(dec)))
return 1
}