finclip-app-manager/infrastructure/utils/encrypt.go

119 lines
3.2 KiB
Go
Raw Permalink Normal View History

2023-10-31 14:07:26 +08:00
// +build linux
package utils
/*
#cgo CFLAGS: -I.
#cgo LDFLAGS: -L./lib/linux -lsdkcore
#include "sdkcore.h"
#include <stdlib.h>
*/
import "C"
import (
"fmt"
"unsafe"
"finclip-app-manager/infrastructure/config"
)
const (
BundleIDFinChatIOS = "com.finogeeks.finchat.oa"
BundleIDFinChatAndroid = "com.finogeeks.finochatapp"
BundleFTHelp = "com.finogeeks.mop.finosprite"
BundleIDFinElves = "com.finogeeks.finosprite"
BundleIDDemo = "com.finogeeks.finchat.finappletdemo"
BundleIDSample = "com.finogeeks.lib.applet.sample"
BundleIdVerifyAssistant = "com.finogeeks.mop.finoverify"
SecretFinChatIOS = "919248e19a6c7fd3"
SecretFinChatAndroid = "154a4a31a57e75cb"
SecretFinElves = "703b9026be3d6bc5"
SecretDemo = "705b46f78820c7a8"
SecretSample = "42ac8b95d32b95e7"
SecretVerifyAssistant = "b2f3d5bd38b0bfa5"
)
const (
BUFF_LEN = 1024 * 4
)
var SDKKeyFinChatIOS string
var SDKKeyFinChatAndroid string
var SDKKeyFTHelp string
var SDKKeyFinElves string
var SDKKeyDemo string
var SDKKeySample string
var SDKKeyVerifyAssistant string
var SDKArry []string
func init() {
ver := config.Cfg.SDKVersion
SDKKeyFinChatIOS = Encrypt(ver + "&" + BundleIDFinChatIOS)
SDKKeyFinChatAndroid = Encrypt(ver + "&" + BundleIDFinChatAndroid)
SDKKeyFTHelp = Encrypt(ver + "&" + BundleFTHelp)
SDKKeyFinElves = Encrypt(ver + "&" + BundleIDFinElves)
SDKKeyDemo = Encrypt(ver + "&" + BundleIDDemo)
SDKKeySample = Encrypt(ver + "&" + BundleIDSample)
SDKKeyVerifyAssistant = Encrypt(ver + "&" + BundleIdVerifyAssistant)
SDKArry = []string{SDKKeyFinChatIOS, SDKKeyFinChatAndroid, SDKKeyFTHelp, SDKKeyFinElves, SDKKeyDemo, SDKKeySample, SDKKeyVerifyAssistant}
fmt.Println("SDK Keys:", SDKKeyFinChatIOS, SDKKeyFTHelp, SDKKeyFinChatAndroid, SDKKeyFinElves, SDKKeyDemo, SDKKeySample, SDKKeyVerifyAssistant)
//fmt.Println("test secret:", GenAppSecret(SDKKeyFTHelp))
fmt.Println("SDK Arry", SDKArry)
}
// 国密算法加密
func EncryptSM4(str string) string {
//cmd := C.CBytes([]byte(str))
cmd := C.CString(str)
rlen := C.uint(BUFF_LEN)
s := make([]byte, BUFF_LEN)
C.encodeBySM4((*C.uchar)((unsafe.Pointer)(cmd)), C.uint(len(str)), (*C.uchar)(unsafe.Pointer(&s[0])), &rlen)
for i := 0; i < len(s); i++ {
if s[i] == 0 {
s = s[:i]
break
}
}
str2 := string(s[:])
C.free((unsafe.Pointer)(cmd))
return str2
}
// Encrypt 对称加密调用cgo静态库
func Encrypt(str string) string {
//cmd := C.CBytes([]byte(str))
cmd := C.CString(str)
rlen := C.uint(BUFF_LEN)
s := make([]byte, BUFF_LEN)
C.encode((*C.uchar)((unsafe.Pointer)(cmd)), C.uint(len(str)), (*C.uchar)(unsafe.Pointer(&s[0])), &rlen)
for i := 0; i < len(s); i++ {
if s[i] == 0 {
s = s[:i]
break
}
}
str2 := string(s[:])
C.free((unsafe.Pointer)(cmd))
return str2
}
// Encrypt 对称加密调用cgo静态库
func EncodeAESContent(str string) string {
cmd := C.CString(str)
rlen := C.uint(BUFF_LEN)
s := make([]byte, BUFF_LEN)
C.encodeAESContent((*C.uchar)((unsafe.Pointer)(cmd)), C.uint(len(str)), (*C.uchar)(unsafe.Pointer(&s[0])), &rlen)
for i := 0; i < len(s); i++ {
if s[i] == 0 {
s = s[:i]
break
}
}
str2 := string(s[:])
C.free((unsafe.Pointer)(cmd))
return str2
}