support multi input for hash

This commit is contained in:
Star 2024-10-26 12:08:13 +08:00
parent cc8fce2708
commit 991b21616d
4 changed files with 67 additions and 47 deletions

2
go.mod
View File

@ -3,7 +3,7 @@ module apigo.cc/gojs/util
go 1.18
require (
apigo.cc/gojs v0.0.1
apigo.cc/gojs v0.0.3
github.com/ssgo/u v1.7.9
gopkg.in/yaml.v3 v3.0.1
)

28
util.go
View File

@ -2,6 +2,10 @@ package util
import (
"bytes"
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"crypto/sha512"
_ "embed"
"encoding/hex"
"encoding/json"
@ -185,19 +189,35 @@ func init() {
},
"md5": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(1)
return vm.ToValue(u.MD5(u.Bytes(args.Arguments[0].Export())))
hash := md5.New()
for _, v := range args.Array(0) {
hash.Write(u.Bytes(v))
}
return vm.ToValue(hash.Sum(nil))
},
"sha1": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(1)
return vm.ToValue(u.Sha1(u.Bytes(args.Arguments[0].Export())))
hash := sha1.New()
for _, v := range args.Array(0) {
hash.Write(u.Bytes(v))
}
return vm.ToValue(hash.Sum(nil))
},
"sha256": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(1)
return vm.ToValue(u.Sha256(u.Bytes(args.Arguments[0].Export())))
hash := sha256.New()
for _, v := range args.Array(0) {
hash.Write(u.Bytes(v))
}
return vm.ToValue(hash.Sum(nil))
},
"sha512": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(1)
return vm.ToValue(u.Sha512(u.Bytes(args.Arguments[0].Export())))
hash := sha512.New()
for _, v := range args.Array(0) {
hash.Write(u.Bytes(v))
}
return vm.ToValue(hash.Sum(nil))
},
"tpl": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(2)

View File

@ -63,10 +63,10 @@ function gunzip(data:string): any {return null}
function id(): string { return '' }
function uniqueId(): string { return '' }
function token(size: number): string { return '' }
function md5(data:any): string {return ''}
function sha1(data:any): string {return ''}
function sha256(data:any): string {return ''}
function sha512(data:any): string {return ''}
function md5(...data: any[]): string { return '' }
function sha1(...data: any[]): string { return '' }
function sha256(...data: any[]): string { return '' }
function sha512(...data: any[]): string { return '' }
function tpl(text: string, data: any, functions?: Object): string { return '' }
function sleep(ms: number): void { }
function setTimeout(callback: () => void, ms?: number, ...args: any): void { }

View File

@ -17,7 +17,7 @@ func TestHash(t *testing.T) {
testIsSame(vm, t, "util.md5('hello 123')", u.MD5([]byte("hello 123")))
testIsSame(vm, t, "util.base64(util.md5('hello 123'))", u.MD5Base64("hello 123"))
testIsSame(vm, t, "util.hex(util.md5('hello 123'))", u.MD5String("hello 123"))
testIsSame(vm, t, "util.sha1('hello 123')", u.Sha1([]byte("hello 123")))
testIsSame(vm, t, "util.sha1('hello',' 123')", u.Sha1([]byte("hello 123")))
testIsSame(vm, t, "util.sha256('hello 123')", u.Sha256([]byte("hello 123")))
testIsSame(vm, t, "util.sha512('hello 123')", u.Sha512([]byte("hello 123")))
testIsSame(vm, t, "util.json('hello 123')", u.Json("hello 123"))