<feed xmlns='http://www.w3.org/2005/Atom'>
<title>wireguard-windows, branch master</title>
<subtitle>WireGuard client for Windows</subtitle>
<id>https://git.zx2c4.com/wireguard-windows/atom/?h=master</id>
<link rel='self' href='https://git.zx2c4.com/wireguard-windows/atom/?h=master'/>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/'/>
<updated>2026-09-22T21:05:45Z</updated>
<entry>
<title>overlay: stub out crypto/rand FIPS140 garbage</title>
<updated>2026-09-22T21:05:45Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-22T12:15:18Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=6ece77bc487c8aa697e3c092197621c4f3e5ccb8'/>
<id>urn:sha1:6ece77bc487c8aa697e3c092197621c4f3e5ccb8</id>
<content type='text'>
The Go crypto library used to be simple and nice and an example of how
to do things well. Unfortunately, the addition of FIPS140 to it has
brought disgusting enterprise patterns and gummed up the code. One place
this really comes out is in the insane infrastructure behind the RNG. It
really only should be calling the system random functions and nothing
more. But in contemporary Go, simply calling into the RNG brings along
with it in the binary:

- A bizarre voodoo magic userspace entropy collector
- A specialized SHA384 implementation for said entropy collector
- An AES implementation
- An AES-NI accelerated AES implementation
- A CTR implementation for AES
- A GCM implementation for AES
- Some CPU detection code
- An implementation of some FIPS-specified DRBG algorithm
- An HMAC implementation
- A SHA256 implementation
- An AVX2-accelerated SHA256 implementation
- A SHA3 implementation (including cSHAKE)
- An AVX2-accelerated SHA3 implementation
- A SHA512 implementation
- Some generic XOR-bytes routines
- The actual syscall wrappers for getting random numbers

Obviously this is completely insane. There's a tangled mess of
components including eachother, a disorganized patchwork of FIPS code
and BoringCrypto code and enterprisey API hooks and self checks and
auto-included initializers. It seems like a mess of a library these
days.

So, here we beat down this madness by using a Go build overlay to
replace various parts of the crypto library with stub functions. This is
pretty nasty. But at least it compiles out some of this junk.

I'm trying to fix this upstream in the meanwhile [1], and so we'll see
what comes of that.

Link: https://github.com/golang/go/issues/81639
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>updater: compare hashes directly with crypto/subtle</title>
<updated>2026-09-22T19:48:03Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-22T19:13:30Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=9d7c8d86ac0ffdb0acdaa952764dbd623cf5daa7'/>
<id>urn:sha1:9d7c8d86ac0ffdb0acdaa952764dbd623cf5daa7</id>
<content type='text'>
hmac.Equal is a wrapper around subtle.ConstantTimeCompare. Use the
comparison directly to preserve the same timing behavior without
importing crypto/hmac, so that we don't accidently drag in fips140
garbage.

Link: https://github.com/golang/go/issues/81639
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>build: restore separate Go directory on Windows</title>
<updated>2026-09-22T19:48:03Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-22T18:57:24Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=5a7faacb09f086c6abccdf72f918428c4c821fe5'/>
<id>urn:sha1:5a7faacb09f086c6abccdf72f918428c4c821fe5</id>
<content type='text'>
Keep the Go toolchain under .deps\go to match the Linux build layout.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>global: use crypto/ecdh for X25519</title>
<updated>2026-09-22T19:48:03Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-22T19:36:51Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=7b2f7adcaa4346d10d340f93c840bda82fbc204b'/>
<id>urn:sha1:7b2f7adcaa4346d10d340f93c840bda82fbc204b</id>
<content type='text'>
Use crypto/ecdh directly, because the old x/crypto 25519 library was
wrapping it.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>global: rand.Read never errors</title>
<updated>2026-09-22T10:48:23Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-22T10:48:21Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=4a47e2142ffd031b44055f1a2b683cf7ebd3446d'/>
<id>urn:sha1:4a47e2142ffd031b44055f1a2b683cf7ebd3446d</id>
<content type='text'>
Part of the API contract, apparently.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>version: bump to 1.1.1</title>
<updated>2026-09-20T12:03:52Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-20T11:56:15Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=f0605c3e3dcc5ff801e19158fd6255378b99e17c'/>
<id>urn:sha1:f0605c3e3dcc5ff801e19158fd6255378b99e17c</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>build: bump to go 1.27.1</title>
<updated>2026-09-20T12:03:52Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-20T12:03:21Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=c0150262944268898718cd20e56fe2305f1726f2'/>
<id>urn:sha1:c0150262944268898718cd20e56fe2305f1726f2</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>locales: update translations from crowdin</title>
<updated>2026-09-20T11:54:54Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-05-19T16:38:45Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=11aebcb012b87a1065b3bc4ddd75b5ebb3dcfb61'/>
<id>urn:sha1:11aebcb012b87a1065b3bc4ddd75b5ebb3dcfb61</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>embeddable-dll-service: csharp: fix allowed IP layout</title>
<updated>2026-09-20T11:54:54Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-19T14:34:13Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=447360b078d82ebbd8a63fd9da68a400a5df42bf'/>
<id>urn:sha1:447360b078d82ebbd8a63fd9da68a400a5df42bf</id>
<content type='text'>
The CIDR byte follows the 16-byte address and two-byte address family,
placing it at offset 18. Add the missing flags field at offset 20 and
its Remove flag to match the native structure.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>ui: update the blocking state when Table is off</title>
<updated>2026-09-20T11:54:54Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2026-09-19T14:33:26Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-windows/commit/?id=30027bd85323dd0b18ab27163d515733e906969c'/>
<id>urn:sha1:30027bd85323dd0b18ab27163d515733e906969c</id>
<content type='text'>
Publish the inevaluable state instead of returning early. Otherwise the
kill-switch checkbox keeps its previous state when Table = off is added.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
</feed>
