I've been in this space now for some years, running a similar product (http://www.feem.io).
Just one observation.
The windows version of your code uses the HostedNetwork API to create an ad-hoc wireless network. Microsoft deprecated the Hosted Network API in Windows 10, in favor of the new Wi-Fi Direct APIs. This means that Wi-Fi vendors don't need to support the old HostedNetwork API, and Dell, Intel and Realtek have all already ripped out support. Your code won't work on many modern Wi-Fi cards for Windows. To fix this, you'll need to support the new Windows Wi-Fi Direct APIs in future versions of your open source project.
Hope this helps.
I wanted to use Wi-Fi Direct but Mac doesn't support it so that wasn't an option unfortunately. I have a line about the deprecation in the Restrictions section of the readme, with instructions on how to see if your card supports hosted networks.
Do you know of any way to use Wi-Fi Direct on Mac? I've been trying to learn more about how Airdrop works as I think they use a stripped-down version of it but I haven't gotten very far yet. Thanks for the feedback.
Edit: Feem looks awesome! Will definitely give it a try when I'm around two laptops again. So it requires a normal WiFi network if neither device supports WiFi Direct then? And does it require a WiFi network for the devices to discover each other, prior to setting up the WiFi Direct connection?
Feem doesn't use Bluetooth. It only needs a LAN (wireless or cable). Discovery is initiated as soon as both devices are in the same Wi-Fi (LAN) network. Doesn't matter how you obtain your LAN (router, mobile hotspot, Wi-Fi Direct for devices that support it, ...). This approach helped us support as many devices as possible.
For questions regarding Feem, you can find my email in my profile.
The encryption is a nice side-benefit, but the real value is in the zero-config transmission of files. Something like this ought to be built into every modern OS, especially considering that most computers have wifi cards these days.
encrypted = secretbox.Seal(nonce[:], chunk, &nonce, &key)
As for mobile, I'd love to do that as well, but I'm not sure how possible it is. I believe it would have to use Wi-Fi Direct on Android, and I'm not sure how much control you have over the network stack on iOS. I don't think either supports ad hoc networking so it would be a pretty different program at that point. But I don't have much experience with mobile development yet.