升级异常机制
This commit is contained in:
parent
905f6348eb
commit
06298d9fe4
12
go.mod
12
go.mod
@ -3,8 +3,8 @@ module apigo.cc/gojs/util
|
|||||||
go 1.24.0
|
go 1.24.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
apigo.cc/gojs v0.0.30
|
apigo.cc/gojs v0.0.32
|
||||||
apigo.cc/gojs/console v0.0.3
|
apigo.cc/gojs/console v0.0.4
|
||||||
github.com/ZZMarquis/gm v1.3.2
|
github.com/ZZMarquis/gm v1.3.2
|
||||||
github.com/emmansun/gmsm v0.40.0
|
github.com/emmansun/gmsm v0.40.0
|
||||||
github.com/obscuren/ecies v0.0.0-20150213224233-7c0f4a9b18d9
|
github.com/obscuren/ecies v0.0.0-20150213224233-7c0f4a9b18d9
|
||||||
@ -18,10 +18,10 @@ require (
|
|||||||
github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect
|
github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect
|
||||||
github.com/google/pprof v0.0.0-20250903194437-c28834ac2320 // indirect
|
github.com/google/pprof v0.0.0-20250903194437-c28834ac2320 // indirect
|
||||||
github.com/ssgo/config v1.7.10 // indirect
|
github.com/ssgo/config v1.7.10 // indirect
|
||||||
github.com/ssgo/log v1.7.9 // indirect
|
github.com/ssgo/log v1.7.10 // indirect
|
||||||
github.com/ssgo/standard v1.7.7 // indirect
|
github.com/ssgo/standard v1.7.7 // indirect
|
||||||
github.com/ssgo/tool v0.4.29 // indirect
|
github.com/ssgo/tool v0.4.29 // indirect
|
||||||
golang.org/x/crypto v0.43.0 // indirect
|
golang.org/x/crypto v0.46.0 // indirect
|
||||||
golang.org/x/sys v0.38.0 // indirect
|
golang.org/x/sys v0.39.0 // indirect
|
||||||
golang.org/x/text v0.31.0 // indirect
|
golang.org/x/text v0.32.0 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
240
util.go
240
util.go
@ -48,7 +48,10 @@ func init() {
|
|||||||
if r, err := json.Marshal(gojs.FixObject(args.Arguments[0].Export())); err == nil {
|
if r, err := json.Marshal(gojs.FixObject(args.Arguments[0].Export())); err == nil {
|
||||||
return vm.ToValue(string(r))
|
return vm.ToValue(string(r))
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jsonP": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"jsonP": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -61,7 +64,10 @@ func init() {
|
|||||||
return vm.ToValue(string(r))
|
return vm.ToValue(string(r))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"unJson": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"unJson": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -70,7 +76,10 @@ func init() {
|
|||||||
if err := json.Unmarshal(u.Bytes(args.Arguments[0].Export()), &r); err == nil {
|
if err := json.Unmarshal(u.Bytes(args.Arguments[0].Export()), &r); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yaml": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"yaml": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -78,7 +87,10 @@ func init() {
|
|||||||
if r, err := yaml.Marshal(gojs.FixObject(args.Arguments[0].Export())); err == nil {
|
if r, err := yaml.Marshal(gojs.FixObject(args.Arguments[0].Export())); err == nil {
|
||||||
return vm.ToValue(string(r))
|
return vm.ToValue(string(r))
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"unYaml": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"unYaml": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -87,7 +99,10 @@ func init() {
|
|||||||
if err := yaml.Unmarshal(u.Bytes(args.Arguments[0].Export()), &r); err == nil {
|
if err := yaml.Unmarshal(u.Bytes(args.Arguments[0].Export()), &r); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"base64": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"base64": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -115,7 +130,10 @@ func init() {
|
|||||||
if r, err := hex.DecodeString(args.Str(0)); err == nil {
|
if r, err := hex.DecodeString(args.Str(0)); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"aes": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"aes": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -123,7 +141,10 @@ func init() {
|
|||||||
if r, err := u.EncryptAesBytes(u.Bytes(args.Arguments[0].Export()), u.Bytes(args.Arguments[1].Export()), u.Bytes(args.Arguments[2].Export())); err == nil {
|
if r, err := u.EncryptAesBytes(u.Bytes(args.Arguments[0].Export()), u.Bytes(args.Arguments[1].Export()), u.Bytes(args.Arguments[2].Export())); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"unAes": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"unAes": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -131,7 +152,10 @@ func init() {
|
|||||||
if r, err := u.DecryptAesBytes(u.Bytes(args.Arguments[0].Export()), u.Bytes(args.Arguments[1].Export()), u.Bytes(args.Arguments[2].Export())); err == nil {
|
if r, err := u.DecryptAesBytes(u.Bytes(args.Arguments[0].Export()), u.Bytes(args.Arguments[1].Export()), u.Bytes(args.Arguments[2].Export())); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sm4": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"sm4": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -139,7 +163,10 @@ func init() {
|
|||||||
if r, err := sm4.CBCEncrypt(u.Bytes(args.Arguments[1].Export())[0:16], u.Bytes(args.Arguments[2].Export())[0:16], util.PKCS5Padding(u.Bytes(args.Arguments[0].Export()), 16)); err == nil {
|
if r, err := sm4.CBCEncrypt(u.Bytes(args.Arguments[1].Export())[0:16], u.Bytes(args.Arguments[2].Export())[0:16], util.PKCS5Padding(u.Bytes(args.Arguments[0].Export()), 16)); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"unSM4": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"unSM4": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -152,7 +179,10 @@ func init() {
|
|||||||
}
|
}
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"genECDSA": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"genECDSA": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -168,7 +198,10 @@ func init() {
|
|||||||
}
|
}
|
||||||
pri, err := ecdsa.GenerateKey(curve, u.GlobalRand2)
|
pri, err := ecdsa.GenerateKey(curve, u.GlobalRand2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
buf.WriteByte(byte(len(pri.X.Bytes())))
|
buf.WriteByte(byte(len(pri.X.Bytes())))
|
||||||
@ -181,7 +214,10 @@ func init() {
|
|||||||
priKey := makeECDSAPriKey(args.Bytes(0))
|
priKey := makeECDSAPriKey(args.Bytes(0))
|
||||||
priBytes, err := x509.MarshalPKCS8PrivateKey(priKey)
|
priBytes, err := x509.MarshalPKCS8PrivateKey(priKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
pemBytes := pem.EncodeToMemory(&pem.Block{
|
pemBytes := pem.EncodeToMemory(&pem.Block{
|
||||||
Type: "PRIVATE KEY",
|
Type: "PRIVATE KEY",
|
||||||
@ -194,7 +230,10 @@ func init() {
|
|||||||
pubKey := makeECDSAPubKey(args.Bytes(0))
|
pubKey := makeECDSAPubKey(args.Bytes(0))
|
||||||
pubBytes, err := x509.MarshalPKIXPublicKey(pubKey)
|
pubBytes, err := x509.MarshalPKIXPublicKey(pubKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
pemBytes := pem.EncodeToMemory(&pem.Block{
|
pemBytes := pem.EncodeToMemory(&pem.Block{
|
||||||
Type: "PUBLIC KEY",
|
Type: "PUBLIC KEY",
|
||||||
@ -210,40 +249,61 @@ func init() {
|
|||||||
if strings.Contains(keyText, "-----BEGIN PRIVATE KEY-----") {
|
if strings.Contains(keyText, "-----BEGIN PRIVATE KEY-----") {
|
||||||
keyType = "private"
|
keyType = "private"
|
||||||
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
||||||
panic(vm.NewGoError(gojs.Err("bad private pem key")))
|
// panic(vm.NewGoError(gojs.Err("bad private pem key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad private pem key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad private pem key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
keyBytes = block.Bytes
|
keyBytes = block.Bytes
|
||||||
}
|
}
|
||||||
} else if strings.Contains(keyText, "-----BEGIN PUBLIC KEY-----") {
|
} else if strings.Contains(keyText, "-----BEGIN PUBLIC KEY-----") {
|
||||||
keyType = "public"
|
keyType = "public"
|
||||||
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
||||||
panic(vm.NewGoError(gojs.Err("bad public pem key")))
|
// panic(vm.NewGoError(gojs.Err("bad public pem key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad public pem key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad public pem key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
keyBytes = block.Bytes
|
keyBytes = block.Bytes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var err error
|
var err error
|
||||||
if keyBytes, err = base64.StdEncoding.DecodeString(keyText); err != nil {
|
if keyBytes, err = base64.StdEncoding.DecodeString(keyText); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if keyType == "private" {
|
if keyType == "private" {
|
||||||
if priKey, err := x509.ParsePKCS8PrivateKey(keyBytes); err != nil {
|
if priKey, err := x509.ParsePKCS8PrivateKey(keyBytes); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
if ecdsaPriKey, ok := priKey.(*ecdsa.PrivateKey); !ok {
|
if ecdsaPriKey, ok := priKey.(*ecdsa.PrivateKey); !ok {
|
||||||
panic(vm.NewGoError(gojs.Err("bad private key")))
|
// panic(vm.NewGoError(gojs.Err("bad private key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad private key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad private key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
return vm.ToValue(ecdsaPriKey.D.Bytes())
|
return vm.ToValue(ecdsaPriKey.D.Bytes())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if pubKey, err := x509.ParsePKIXPublicKey(keyBytes); err != nil {
|
if pubKey, err := x509.ParsePKIXPublicKey(keyBytes); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
if ecdsaPubKey, ok := pubKey.(*ecdsa.PublicKey); !ok {
|
if ecdsaPubKey, ok := pubKey.(*ecdsa.PublicKey); !ok {
|
||||||
panic(vm.NewGoError(gojs.Err("bad public key")))
|
// panic(vm.NewGoError(gojs.Err("bad public key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad public key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad public key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
buf.WriteByte(byte(len(ecdsaPubKey.X.Bytes())))
|
buf.WriteByte(byte(len(ecdsaPubKey.X.Bytes())))
|
||||||
@ -260,7 +320,10 @@ func init() {
|
|||||||
priKey := makeECDSAPriKey(args.Bytes(1))
|
priKey := makeECDSAPriKey(args.Bytes(1))
|
||||||
r, s, err := ecdsa.Sign(u.GlobalRand1, priKey, u.Sha256(data))
|
r, s, err := ecdsa.Sign(u.GlobalRand1, priKey, u.Sha256(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
buf.WriteByte(byte(len(r.Bytes())))
|
buf.WriteByte(byte(len(r.Bytes())))
|
||||||
@ -286,7 +349,10 @@ func init() {
|
|||||||
pubKey := makeECDSAPubKey(args.Bytes(1))
|
pubKey := makeECDSAPubKey(args.Bytes(1))
|
||||||
eciesPubKey := ecies.ImportECDSAPublic(pubKey)
|
eciesPubKey := ecies.ImportECDSAPublic(pubKey)
|
||||||
if r, err := ecies.Encrypt(u.GlobalRand1, eciesPubKey, data, nil, nil); err != nil {
|
if r, err := ecies.Encrypt(u.GlobalRand1, eciesPubKey, data, nil, nil); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
}
|
}
|
||||||
@ -297,7 +363,10 @@ func init() {
|
|||||||
priKey := makeECDSAPriKey(args.Bytes(1))
|
priKey := makeECDSAPriKey(args.Bytes(1))
|
||||||
eciesPriKey := ecies.ImportECDSA(priKey)
|
eciesPriKey := ecies.ImportECDSA(priKey)
|
||||||
if r, err := eciesPriKey.Decrypt(u.GlobalRand1, data, nil, nil); err != nil {
|
if r, err := eciesPriKey.Decrypt(u.GlobalRand1, data, nil, nil); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
}
|
}
|
||||||
@ -310,7 +379,10 @@ func init() {
|
|||||||
buf.Write(pri.Y.Bytes())
|
buf.Write(pri.Y.Bytes())
|
||||||
return vm.ToValue([][]byte{pri.D.Bytes(), buf.Bytes()})
|
return vm.ToValue([][]byte{pri.D.Bytes(), buf.Bytes()})
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"exportSM2PrivateKey": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"exportSM2PrivateKey": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -318,7 +390,10 @@ func init() {
|
|||||||
priKey := makePriKey(args.Bytes(0), sm2.P256())
|
priKey := makePriKey(args.Bytes(0), sm2.P256())
|
||||||
priBytes, err := smx509.MarshalECPrivateKey(priKey)
|
priBytes, err := smx509.MarshalECPrivateKey(priKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
pemBytes := pem.EncodeToMemory(&pem.Block{
|
pemBytes := pem.EncodeToMemory(&pem.Block{
|
||||||
Type: "PRIVATE KEY",
|
Type: "PRIVATE KEY",
|
||||||
@ -331,7 +406,10 @@ func init() {
|
|||||||
pubKey := makePubKey(args.Bytes(0), sm2.P256())
|
pubKey := makePubKey(args.Bytes(0), sm2.P256())
|
||||||
pubBytes, err := smx509.MarshalPKIXPublicKey(pubKey)
|
pubBytes, err := smx509.MarshalPKIXPublicKey(pubKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
pemBytes := pem.EncodeToMemory(&pem.Block{
|
pemBytes := pem.EncodeToMemory(&pem.Block{
|
||||||
Type: "PUBLIC KEY",
|
Type: "PUBLIC KEY",
|
||||||
@ -347,36 +425,54 @@ func init() {
|
|||||||
if strings.Contains(keyText, "-----BEGIN PRIVATE KEY-----") {
|
if strings.Contains(keyText, "-----BEGIN PRIVATE KEY-----") {
|
||||||
keyType = "private"
|
keyType = "private"
|
||||||
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
||||||
panic(vm.NewGoError(gojs.Err("bad private pem key")))
|
// panic(vm.NewGoError(gojs.Err("bad private pem key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad private pem key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad private pem key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
keyBytes = block.Bytes
|
keyBytes = block.Bytes
|
||||||
}
|
}
|
||||||
} else if strings.Contains(keyText, "-----BEGIN PUBLIC KEY-----") {
|
} else if strings.Contains(keyText, "-----BEGIN PUBLIC KEY-----") {
|
||||||
keyType = "public"
|
keyType = "public"
|
||||||
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
||||||
panic(vm.NewGoError(gojs.Err("bad public pem key")))
|
// panic(vm.NewGoError(gojs.Err("bad public pem key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad public pem key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad public pem key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
keyBytes = block.Bytes
|
keyBytes = block.Bytes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var err error
|
var err error
|
||||||
if keyBytes, err = base64.StdEncoding.DecodeString(keyText); err != nil {
|
if keyBytes, err = base64.StdEncoding.DecodeString(keyText); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if keyType == "private" {
|
if keyType == "private" {
|
||||||
if priKey, err := smx509.ParseECPrivateKey(keyBytes); err != nil {
|
if priKey, err := smx509.ParseECPrivateKey(keyBytes); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
return vm.ToValue(priKey.D.Bytes())
|
return vm.ToValue(priKey.D.Bytes())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if pubKey, err := smx509.ParsePKIXPublicKey(keyBytes); err != nil {
|
if pubKey, err := smx509.ParsePKIXPublicKey(keyBytes); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
if sm2PubKey, ok := pubKey.(*ecdsa.PublicKey); !ok {
|
if sm2PubKey, ok := pubKey.(*ecdsa.PublicKey); !ok {
|
||||||
panic(vm.NewGoError(gojs.Err("bad public key")))
|
// panic(vm.NewGoError(gojs.Err("bad public key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad public key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad public key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
buf.WriteByte(byte(len(sm2PubKey.X.Bytes())))
|
buf.WriteByte(byte(len(sm2PubKey.X.Bytes())))
|
||||||
@ -398,7 +494,10 @@ func init() {
|
|||||||
buf.Write(s.Bytes())
|
buf.Write(s.Bytes())
|
||||||
return vm.ToValue(buf.Bytes())
|
return vm.ToValue(buf.Bytes())
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"verifySM2": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"verifySM2": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -420,7 +519,10 @@ func init() {
|
|||||||
if r, err := sm2.Encrypt(u.GlobalRand1, pubKey, data, nil); err == nil {
|
if r, err := sm2.Encrypt(u.GlobalRand1, pubKey, data, nil); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"decryptSM2": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"decryptSM2": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -430,7 +532,10 @@ func init() {
|
|||||||
if r, err := sm2.Decrypt(&sm2.PrivateKey{PrivateKey: *priKey}, data); err == nil {
|
if r, err := sm2.Decrypt(&sm2.PrivateKey{PrivateKey: *priKey}, data); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -442,7 +547,10 @@ func init() {
|
|||||||
}
|
}
|
||||||
key, err := rsa.GenerateKey(rand.Reader, size)
|
key, err := rsa.GenerateKey(rand.Reader, size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
priBytes := x509.MarshalPKCS1PrivateKey(key)
|
priBytes := x509.MarshalPKCS1PrivateKey(key)
|
||||||
pubBytes := x509.MarshalPKCS1PublicKey(&key.PublicKey)
|
pubBytes := x509.MarshalPKCS1PublicKey(&key.PublicKey)
|
||||||
@ -476,33 +584,48 @@ func init() {
|
|||||||
if strings.Contains(keyText, "-----BEGIN RSA PRIVATE KEY-----") {
|
if strings.Contains(keyText, "-----BEGIN RSA PRIVATE KEY-----") {
|
||||||
keyType = "private"
|
keyType = "private"
|
||||||
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
||||||
panic(vm.NewGoError(gojs.Err("bad private pem key")))
|
// panic(vm.NewGoError(gojs.Err("bad private pem key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad private pem key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad private pem key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
keyBytes = block.Bytes
|
keyBytes = block.Bytes
|
||||||
}
|
}
|
||||||
} else if strings.Contains(keyText, "-----BEGIN RSA PUBLIC KEY-----") {
|
} else if strings.Contains(keyText, "-----BEGIN RSA PUBLIC KEY-----") {
|
||||||
keyType = "public"
|
keyType = "public"
|
||||||
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
if block, _ := pem.Decode([]byte(keyText)); block == nil {
|
||||||
panic(vm.NewGoError(gojs.Err("bad public pem key")))
|
// panic(vm.NewGoError(gojs.Err("bad public pem key")))
|
||||||
|
vm.SetData("_lastError", gojs.Err("bad public pem key"))
|
||||||
|
gojs.GetLogger(vm).Error("bad public pem key")
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
keyBytes = block.Bytes
|
keyBytes = block.Bytes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var err error
|
var err error
|
||||||
if keyBytes, err = base64.StdEncoding.DecodeString(keyText); err != nil {
|
if keyBytes, err = base64.StdEncoding.DecodeString(keyText); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if keyType == "private" {
|
if keyType == "private" {
|
||||||
if priKey, err := x509.ParsePKCS1PrivateKey(keyBytes); err != nil {
|
if priKey, err := x509.ParsePKCS1PrivateKey(keyBytes); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
return vm.ToValue(x509.MarshalPKCS1PrivateKey(priKey))
|
return vm.ToValue(x509.MarshalPKCS1PrivateKey(priKey))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if pubKey, err := x509.ParsePKCS1PublicKey(keyBytes); err != nil {
|
if pubKey, err := x509.ParsePKCS1PublicKey(keyBytes); err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
} else {
|
} else {
|
||||||
return vm.ToValue(x509.MarshalPKCS1PublicKey(pubKey))
|
return vm.ToValue(x509.MarshalPKCS1PublicKey(pubKey))
|
||||||
}
|
}
|
||||||
@ -514,7 +637,10 @@ func init() {
|
|||||||
priKey := makeRSAPriKey(args.Bytes(1))
|
priKey := makeRSAPriKey(args.Bytes(1))
|
||||||
signature, err := rsa.SignPKCS1v15(rand.Reader, priKey, crypto.SHA256, u.Sha256(data))
|
signature, err := rsa.SignPKCS1v15(rand.Reader, priKey, crypto.SHA256, u.Sha256(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return vm.ToValue(signature)
|
return vm.ToValue(signature)
|
||||||
},
|
},
|
||||||
@ -532,7 +658,10 @@ func init() {
|
|||||||
pubKey := makeRSAPubKey(args.Bytes(1))
|
pubKey := makeRSAPubKey(args.Bytes(1))
|
||||||
encryptedData, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, pubKey, data, nil)
|
encryptedData, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, pubKey, data, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return vm.ToValue(encryptedData)
|
return vm.ToValue(encryptedData)
|
||||||
},
|
},
|
||||||
@ -542,7 +671,10 @@ func init() {
|
|||||||
priKey := makeRSAPriKey(args.Bytes(1))
|
priKey := makeRSAPriKey(args.Bytes(1))
|
||||||
decryptedData, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, priKey, data, nil)
|
decryptedData, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, priKey, data, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return vm.ToValue(decryptedData)
|
return vm.ToValue(decryptedData)
|
||||||
},
|
},
|
||||||
@ -552,7 +684,10 @@ func init() {
|
|||||||
if r, err := u.Gzip(u.Bytes(args.Arguments[0].Export())); err == nil {
|
if r, err := u.Gzip(u.Bytes(args.Arguments[0].Export())); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"gunzip": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"gunzip": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -560,7 +695,10 @@ func init() {
|
|||||||
if r, err := u.Gunzip(u.Bytes(args.Arguments[0].Export())); err == nil {
|
if r, err := u.Gunzip(u.Bytes(args.Arguments[0].Export())); err == nil {
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
} else {
|
} else {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"uniqueId": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
"uniqueId": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||||
@ -743,7 +881,10 @@ func init() {
|
|||||||
err = tpl.Execute(buf, args.Arguments[1].Export())
|
err = tpl.Execute(buf, args.Arguments[1].Export())
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return vm.ToValue(buf.String())
|
return vm.ToValue(buf.String())
|
||||||
},
|
},
|
||||||
@ -799,7 +940,10 @@ func init() {
|
|||||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||||
r, err := filepath.Abs(args.Str(0))
|
r, err := filepath.Abs(args.Str(0))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(vm.NewGoError(err))
|
// panic(vm.NewGoError(err))
|
||||||
|
vm.SetData("_lastError", err)
|
||||||
|
gojs.GetLogger(vm).Error(err.Error())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return vm.ToValue(r)
|
return vm.ToValue(r)
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user