m2pool_core/internal/server/enx/hash_enx.go

36 lines
788 B
Go

package enx
/*
#cgo CFLAGS: -I../include/heavyHash
#cgo LDFLAGS: -L../lib/heavyHash -lheavyhash
#include "heavyhash.h"
*/
import "C"
import (
"fmt"
"strings"
"unsafe"
)
func EnxHash(data []byte) string {
// 初始化 CSHA3_256 结构体
var sha3 C.CSHA3_256
// 调用 C 语言的 Write 方法
C.CSHA3_256_Write(&sha3, (*C.uchar)(unsafe.Pointer(&data[0])), C.size_t(len(data)))
// 调用 C 语言的 Finalize 方法来生成哈希
var hash [C.OUTPUT_SIZE]C.uchar
C.CSHA3_256_Finalize(&sha3, &hash[0])
// 使用 strings.Builder 来拼接字符串
var builder strings.Builder
for i := 0; i < C.OUTPUT_SIZE; i++ {
// 以十六进制方式格式化每个字节
builder.WriteString(fmt.Sprintf("%02x", hash[i]))
}
// 返回最终的哈希值
return builder.String()
}