func RandomBytesNistKatInit256bit(entropyInput [48]byte,
	personalizationString []byte) error {
	lenStr := len(personalizationString)
	if lenStr > 0 {
		if lenStr < 48 {
			return errors.New("the personalization string must be either " +
				"empty or at least 48 bytes long")
		}
		C.OQS_randombytes_nist_kat_init_256bit(
			(*C.uint8_t)(unsafe.Pointer(&entropyInput[0])),
			(*C.uint8_t)(unsafe.Pointer(&personalizationString[0])))
		return nil
	}
	C.OQS_randombytes_nist_kat_init_256bit(
		(*C.uint8_t)(unsafe.Pointer(&entropyInput[0])),
		(*C.uint8_t)(unsafe.Pointer(nil)))
	return nil
}
RandomBytesNistKatInit256bit initializes the NIST DRBG with the entropyInput
seed, which must be 48 exactly bytes long. The personalizationString is an
optional personalization string, which, if non-empty, must be at least 48
bytes long. The security parameter is 256 bits.
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
}
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))
}
func RandomBytesSwitchAlgorithm(algName string) error {
	if C.OQS_randombytes_switch_algorithm(C.CString(algName)) != C.OQS_SUCCESS {
		return errors.New("can not switch to \"" + algName + "\" algorithm")
	}
	return nil
}