// hash_nexa.go package nexa /* #cgo CFLAGS : -I../include #cgo LDFLAGS: -L../lib -lnexa #include #include #include "nexaapi.h" */ import "C" import ( //"encoding/hex" //"log" "unsafe" ) func BuildPowHash(h NexaBlockHeader) []byte { outputs := make([]byte, 32) inb := NexaBlockHeaderToBytes(h) //log.Println("[nexa]in", hex.EncodeToString(inb)) in := (*C.uchar)(C.CBytes(inb)) output := (*C.uchar)(C.malloc(32)) C.nexa_hash(output, in) p := uintptr(unsafe.Pointer(output)) for i := 0; i < 32; i++ { j := *(*byte)(unsafe.Pointer(p)) outputs[i] = j p += unsafe.Sizeof(j) } C.free(unsafe.Pointer(output)) C.free(unsafe.Pointer(in)) outputs32 := make([]byte, 32) for i := 0; i < 32; i++ { outputs32[i] = outputs[i] } return outputs32 } func BuildPowHash12(h NexaBlockHeader12) []byte { outputs := make([]byte, 32) inb := NexaBlockHeaderToBytes12(h) //log.Println("[nexa]in", hex.EncodeToString(inb)) in := (*C.uchar)(C.CBytes(inb)) output := (*C.uchar)(C.malloc(32)) C.nexa_hash12(output, in) p := uintptr(unsafe.Pointer(output)) for i := 0; i < 32; i++ { j := *(*byte)(unsafe.Pointer(p)) outputs[i] = j p += unsafe.Sizeof(j) } C.free(unsafe.Pointer(output)) C.free(unsafe.Pointer(in)) outputs32 := make([]byte, 32) for i := 0; i < 32; i++ { outputs32[i] = outputs[i] } return outputs32 }