36 lines
788 B
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()
|
||
|
}
|