From 904c084711530159256ee3a9576a08ee0154ccdb Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Sat, 7 Feb 2026 23:29:11 -0500 Subject: [PATCH] Use platform-specific implementations of securePtrOverwriteAndFree --- 0.go | 6 ------ 0_generic.go | 14 ++++++++++++++ 0_ios.go | 14 ++++++++++++++ privkey.go | 4 ++-- 4 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 0_generic.go create mode 100644 0_ios.go diff --git a/0.go b/0.go index 97e2d72..df2acdd 100644 --- a/0.go +++ b/0.go @@ -97,10 +97,4 @@ func safeBoolDeref(b *bool) bool { return *b } -// securePtrOverwrite securely overwrites the memory at the input pointer and then frees it. -func securePtrOverwriteAndFree(input unsafe.Pointer, length C.int) { - C.explicit_bzero(input, C.size_t(length)) - C.free(input) -} - func main() {} diff --git a/0_generic.go b/0_generic.go new file mode 100644 index 0000000..7465816 --- /dev/null +++ b/0_generic.go @@ -0,0 +1,14 @@ +//go:build !ios + +package main + +// #include +// #include +import "C" +import "unsafe" + +// securePtrOverwriteAndFree securely overwrites the memory at the input pointer and then frees it. +func securePtrOverwriteAndFree(input unsafe.Pointer, length C.size_t) { + C.explicit_bzero(input, C.size_t(length)) + C.free(input) +} diff --git a/0_ios.go b/0_ios.go new file mode 100644 index 0000000..d555100 --- /dev/null +++ b/0_ios.go @@ -0,0 +1,14 @@ +//go:build ios + +package main + +// #include +// #include +import "C" +import "unsafe" + +// securePtrOverwriteAndFree securely overwrites the memory at the input pointer and then frees it. +func securePtrOverwriteAndFree(input unsafe.Pointer, length C.size_t) { + C.memset_s(input, length, 0, length) + C.free(input) +} diff --git a/privkey.go b/privkey.go index b7e591b..fa981fb 100644 --- a/privkey.go +++ b/privkey.go @@ -20,7 +20,7 @@ import ( func SetPrivKeyDataAndEraseFreeInput(privKeyData C.PascalString) { privKeyDataPtr := unsafe.Pointer(privKeyData.data) privkey.SetBytes(C.GoBytes(privKeyDataPtr, privKeyData.len)) - securePtrOverwriteAndFree(privKeyDataPtr, privKeyData.len) + securePtrOverwriteAndFree(privKeyDataPtr, C.size_t(privKeyData.len)) FreePascalString(privKeyData) } @@ -46,6 +46,6 @@ func GetPrivKeyDataAndEraseGoCopy() C.PascalString { // //export EraseFreePrivKeyPascal func EraseFreePrivKeyPascal(privKeyPascal C.PascalString) { - securePtrOverwriteAndFree(unsafe.Pointer(privKeyPascal.data), privKeyPascal.len) + securePtrOverwriteAndFree(unsafe.Pointer(privKeyPascal.data), C.size_t(privKeyPascal.len)) FreePascalString(privKeyPascal) }