81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
// functions/crypto.go
|
|
package functions
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"crypto/sha256"
|
|
"encoding/base64"
|
|
"encoding/hex"
|
|
|
|
luajit "git.sharkk.net/Sky/LuaJIT-to-Go"
|
|
)
|
|
|
|
// GetCryptoFunctions returns all cryptographic Go functions
|
|
func GetCryptoFunctions() map[string]luajit.GoFunction {
|
|
return map[string]luajit.GoFunction{
|
|
"base64_encode": func(s *luajit.State) int {
|
|
if err := s.CheckMinArgs(1); err != nil {
|
|
return s.PushError("base64_encode: %v", err)
|
|
}
|
|
|
|
str, err := s.SafeToString(1)
|
|
if err != nil {
|
|
return s.PushError("base64_encode: argument must be a string")
|
|
}
|
|
|
|
encoded := base64.StdEncoding.EncodeToString([]byte(str))
|
|
s.PushString(encoded)
|
|
return 1
|
|
},
|
|
|
|
"base64_decode": func(s *luajit.State) int {
|
|
if err := s.CheckMinArgs(1); err != nil {
|
|
return s.PushError("base64_decode: %v", err)
|
|
}
|
|
|
|
str, err := s.SafeToString(1)
|
|
if err != nil {
|
|
return s.PushError("base64_decode: argument must be a string")
|
|
}
|
|
|
|
decoded, err := base64.StdEncoding.DecodeString(str)
|
|
if err != nil {
|
|
return s.PushError("base64_decode: %v", err)
|
|
}
|
|
|
|
s.PushString(string(decoded))
|
|
return 1
|
|
},
|
|
|
|
"md5_hash": func(s *luajit.State) int {
|
|
if err := s.CheckMinArgs(1); err != nil {
|
|
return s.PushError("md5_hash: %v", err)
|
|
}
|
|
|
|
str, err := s.SafeToString(1)
|
|
if err != nil {
|
|
return s.PushError("md5_hash: argument must be a string")
|
|
}
|
|
|
|
hash := md5.Sum([]byte(str))
|
|
s.PushString(hex.EncodeToString(hash[:]))
|
|
return 1
|
|
},
|
|
|
|
"sha256_hash": func(s *luajit.State) int {
|
|
if err := s.CheckMinArgs(1); err != nil {
|
|
return s.PushError("sha256_hash: %v", err)
|
|
}
|
|
|
|
str, err := s.SafeToString(1)
|
|
if err != nil {
|
|
return s.PushError("sha256_hash: argument must be a string")
|
|
}
|
|
|
|
hash := sha256.Sum256([]byte(str))
|
|
s.PushString(hex.EncodeToString(hash[:]))
|
|
return 1
|
|
},
|
|
}
|
|
}
|