121 lines
3.3 KiB
Go
121 lines
3.3 KiB
Go
package goja_bindings
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"crypto/sha1"
|
|
"crypto/sha256"
|
|
"crypto/sha512"
|
|
"github.com/dop251/goja"
|
|
"golang.org/x/crypto/ripemd160"
|
|
"golang.org/x/crypto/sha3"
|
|
)
|
|
|
|
// MD5 Hash
|
|
func cryptoMD5Func(vm *goja.Runtime) func(call goja.FunctionCall) goja.Value {
|
|
return func(call goja.FunctionCall) goja.Value {
|
|
if len(call.Arguments) < 1 {
|
|
panic(vm.ToValue("TypeError: CryptoJS.MD5 requires at least 1 argument"))
|
|
}
|
|
if !gojaValueIsDefined(call.Arguments[0]) {
|
|
return vm.ToValue("")
|
|
}
|
|
val, ok := call.Argument(0).Export().(string)
|
|
if !ok {
|
|
panic(vm.ToValue("TypeError: argument is not a string"))
|
|
}
|
|
hash := md5.Sum([]byte(val))
|
|
return vm.ToValue(hash[:])
|
|
}
|
|
}
|
|
|
|
// SHA1 Hash
|
|
func cryptoSHA1Func(vm *goja.Runtime) func(call goja.FunctionCall) goja.Value {
|
|
return func(call goja.FunctionCall) goja.Value {
|
|
if len(call.Arguments) < 1 {
|
|
panic(vm.ToValue("TypeError: CryptoJS.SHA1 requires at least 1 argument"))
|
|
}
|
|
if !gojaValueIsDefined(call.Arguments[0]) {
|
|
return vm.ToValue("")
|
|
}
|
|
val, ok := call.Argument(0).Export().(string)
|
|
if !ok {
|
|
panic(vm.ToValue("TypeError: argument is not a string"))
|
|
}
|
|
hash := sha1.Sum([]byte(val))
|
|
return vm.ToValue(hash[:])
|
|
}
|
|
}
|
|
|
|
// SHA256 Hash
|
|
func cryptoSHA256Func(vm *goja.Runtime) func(call goja.FunctionCall) goja.Value {
|
|
return func(call goja.FunctionCall) goja.Value {
|
|
if len(call.Arguments) < 1 {
|
|
panic(vm.ToValue("TypeError: CryptoJS.SHA256 requires at least 1 argument"))
|
|
}
|
|
if !gojaValueIsDefined(call.Arguments[0]) {
|
|
return vm.ToValue("")
|
|
}
|
|
val, ok := call.Argument(0).Export().(string)
|
|
if !ok {
|
|
panic(vm.ToValue("TypeError: argument is not a string"))
|
|
}
|
|
hash := sha256.Sum256([]byte(val))
|
|
return vm.ToValue(hash[:])
|
|
}
|
|
}
|
|
|
|
// SHA512 Hash
|
|
func cryptoSHA512Func(vm *goja.Runtime) func(call goja.FunctionCall) goja.Value {
|
|
return func(call goja.FunctionCall) goja.Value {
|
|
if len(call.Arguments) < 1 {
|
|
panic(vm.ToValue("TypeError: CryptoJS.SHA512 requires at least 1 argument"))
|
|
}
|
|
if !gojaValueIsDefined(call.Arguments[0]) {
|
|
return vm.ToValue("")
|
|
}
|
|
val, ok := call.Argument(0).Export().(string)
|
|
if !ok {
|
|
panic(vm.ToValue("TypeError: argument is not a string"))
|
|
}
|
|
hash := sha512.Sum512([]byte(val))
|
|
return vm.ToValue(hash[:])
|
|
}
|
|
}
|
|
|
|
// SHA3 Hash
|
|
func cryptoSHA3Func(vm *goja.Runtime) func(call goja.FunctionCall) goja.Value {
|
|
return func(call goja.FunctionCall) goja.Value {
|
|
if len(call.Arguments) < 1 {
|
|
panic(vm.ToValue("TypeError: CryptoJS.SHA3 requires at least 1 argument"))
|
|
}
|
|
if !gojaValueIsDefined(call.Arguments[0]) {
|
|
return vm.ToValue("")
|
|
}
|
|
val, ok := call.Argument(0).Export().(string)
|
|
if !ok {
|
|
panic(vm.ToValue("TypeError: argument is not a string"))
|
|
}
|
|
hash := sha3.Sum256([]byte(val))
|
|
return vm.ToValue(hash[:])
|
|
}
|
|
}
|
|
|
|
// RIPEMD-160 Hash
|
|
func cryptoRIPEMD160Func(vm *goja.Runtime) func(call goja.FunctionCall) goja.Value {
|
|
return func(call goja.FunctionCall) goja.Value {
|
|
if len(call.Arguments) < 1 {
|
|
panic(vm.ToValue("TypeError: CryptoJS.RIPEMD160 requires at least 1 argument"))
|
|
}
|
|
if !gojaValueIsDefined(call.Arguments[0]) {
|
|
return vm.ToValue("")
|
|
}
|
|
val, ok := call.Argument(0).Export().(string)
|
|
if !ok {
|
|
panic(vm.ToValue("TypeError: argument is not a string"))
|
|
}
|
|
hasher := ripemd160.New()
|
|
hasher.Write([]byte(val))
|
|
return vm.ToValue(hasher.Sum(nil))
|
|
}
|
|
}
|