62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
|
// hash_nexa.go
|
||
|
package nexa
|
||
|
|
||
|
/*
|
||
|
#cgo CFLAGS : -I../include
|
||
|
#cgo LDFLAGS: -L../lib -lnexa
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#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
|
||
|
}
|