func RandomBytesInPlace(randomArray []byte, bytesToRead int) {
	if bytesToRead > len(randomArray) {
		bytesToRead = len(randomArray)
	}
	C.OQS_randombytes((*C.uint8_t)(unsafe.Pointer(&randomArray[0])),
		C.size_t(bytesToRead))
}
RandomBytesInPlace generates bytesToRead random bytes. This implementation
uses either the default RNG algorithm ("system"), or whichever algorithm has
been selected by RandomBytesSwitchAlgorithm. If bytesToRead exceeds the size
of randomArray, only len(randomArray) bytes are read.
package rand  
import "C"
import (
	"errors"
	"unsafe"
)
var algorithmPtrCallback func([]byte, int)
func algorithmPtr(randomArray *C.uint8_t, bytesToRead C.size_t) {
	result := make([]byte, int(bytesToRead))
	algorithmPtrCallback(result, int(bytesToRead))
	p := unsafe.Pointer(randomArray)
	for _, v := range result {
		*(*C.uint8_t)(p) = C.uint8_t(v)
		p = unsafe.Pointer(uintptr(p) + 1)
	}
}
func RandomBytes(bytesToRead int) []byte {
	result := make([]byte, bytesToRead)
	C.OQS_randombytes((*C.uint8_t)(unsafe.Pointer(&result[0])),
		C.size_t(bytesToRead))
	return result
}