func lattigo_newParameters()

in src/gowrapper/ckks/params.go [68:97]


func lattigo_newParameters(logN uint64, qi *C.constULong, numQi uint8, pi *C.constULong, numPi uint8, logScale uint8) Handle6 {
	size := unsafe.Sizeof(uint64(0))

	Qi := make([]uint64, numQi)
	qiPtr := uintptr(unsafe.Pointer(qi))
	for i := range Qi {
		Qi[i] = *(*uint64)(unsafe.Pointer(qiPtr + size*uintptr(i)))
	}

	Pi := make([]uint64, numPi)
	piPtr := uintptr(unsafe.Pointer(pi))
	for i := range Pi {
		// https://stackoverflow.com/a/32701024/925978
		Pi[i] = *(*uint64)(unsafe.Pointer(piPtr + size*uintptr(i)))
	}

	var rlweParams rlwe.Parameters
	var err error
	rlweParams, err = rlwe.NewParameters(int(logN), Qi, Pi, rlwe.DefaultSigma)
	if err != nil {
		panic(err)
	}

	var params ckks.Parameters
	params, err = ckks.NewParameters(rlweParams, int(logN-1), float64(uint64(1)<<uint64(logScale)))
	if err != nil {
		panic(err)
	}
	return marshal.CrossLangObjMap.Add(unsafe.Pointer(&params))
}