Hi! Yes that works perfectly. I've added the bounds checking. Thanks and cheers!
Sincerely, David On Tuesday, August 23, 2022 at 3:51:39 AM UTC-4 progl...@gmail.com wrote: > Assuming that `p.privateKey = *((*C.private_key)(key))` is making a full > copy, not shallow. I think you could avoid using `C.CBytes`. > > You can get the address of the start of the backing array via &data[0] as > per https://pkg.go.dev/cmd/cgo > > So maybe something like this: > p.privateKey = *((*C.private_key)(unsafe.Pointer(&data[0]))) > > The code doesn't seem that safe though. There should be something that > actually checks that the byte slice is the correct size. > > On Tue, 23 Aug 2022 at 00:41, David Stainton <dstain...@gmail.com> wrote: > >> I recently wrote cgo bindings to the CTIDH C library (a bleeding edge >> post quantum non-interactive key exchange) copies the data twice. First in >> the call to C.CBytes and then again in the assignment to p.privateKey via >> that pointer dereference. >> >> The performance hit for the twice copy is not really a problem. I'm just >> curious, is there's a more proper way to write this that avoids the twice >> copy? >> >> >> // FromBytes loads a PrivateKey from the given byte slice. >> func (p *PrivateKey) FromBytes(data []byte) { >> key := C.CBytes(data) >> defer C.free(key) >> p.privateKey = *((*C.private_key)(key)) >> } >> >> https://git.xx.network/elixxir/ctidh_cgo/-/blob/master/binding.go#L49-54 >> >> >> Sincerely, >> David >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/3b8a9098-aabb-4b53-933e-b4e4b6e21cdcn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/3b8a9098-aabb-4b53-933e-b4e4b6e21cdcn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/a30ff3b9-5e61-42a7-aaee-6f7f04b08168n%40googlegroups.com.