aboutsummaryrefslogtreecommitdiffstats
path: root/api/namespace.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-10-31 13:03:14 +0100
committerSimon Rozman <simon@rozman.si>2020-10-31 19:11:51 +0100
commit26c5478042e595212fcee9fe9f6ab47bacb0ab5d (patch)
tree3a26fad71eebd42a4933c7820150d2bd721aaff3 /api/namespace.c
parentapi: link to nci.dll at compile time (diff)
downloadwintun-26c5478042e595212fcee9fe9f6ab47bacb0ab5d.tar.xz
wintun-26c5478042e595212fcee9fe9f6ab47bacb0ab5d.zip
api: opencode bin2hex in same manner as random directory creation
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'api/namespace.c')
-rw-r--r--api/namespace.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/api/namespace.c b/api/namespace.c
index baee8a2..9258b53 100644
--- a/api/namespace.c
+++ b/api/namespace.c
@@ -9,6 +9,7 @@
#include <Windows.h>
#include <bcrypt.h>
+#include <wchar.h>
static BOOL HasInitialized = FALSE;
static CRITICAL_SECTION Initializing;
@@ -34,17 +35,6 @@ NormalizeStringAlloc(_In_ NORM_FORM NormForm, _In_z_ const WCHAR *Source)
}
}
-static void
-Bin2Hex(_In_bytecount_(Size) const void *Source, size_t Size, _Out_capcount_(Size * 2) WCHAR *Destination)
-{
- for (size_t i = 0; i < Size; ++i)
- {
- static const WCHAR nibble[] = L"0123456789ABCDEF";
- *(Destination++) = nibble[(((unsigned char *)Source)[i] & 0xf0) >> 4];
- *(Destination++) = nibble[(((unsigned char *)Source)[i] & 0x0f)];
- }
-}
-
static WINTUN_STATUS
NamespaceRuntimeInit(void)
{
@@ -134,10 +124,10 @@ NamespaceTakeMutex(_In_z_ const WCHAR *Pool)
if (!BCRYPT_SUCCESS(BCryptFinishHash(Sha256, Hash, sizeof(Hash), 0)))
goto cleanupPoolNorm;
static const WCHAR MutexNamePrefix[] = L"Wintun\\Wintun-Name-Mutex-";
- WCHAR MutexName[_countof(MutexNamePrefix) /*<= incl. terminator*/ + sizeof(Hash) * 2];
- memcpy(MutexName, MutexNamePrefix, sizeof(MutexNamePrefix) - sizeof(WCHAR));
- Bin2Hex(Hash, sizeof(Hash), MutexName + _countof(MutexNamePrefix) - 1);
- MutexName[_countof(MutexName) - 1] = 0;
+ WCHAR MutexName[_countof(MutexNamePrefix) + sizeof(Hash) * 2];
+ memcpy(MutexName, MutexNamePrefix, sizeof(MutexNamePrefix));
+ for (size_t i = 0; i < sizeof(Hash); ++i)
+ swprintf_s(&MutexName[_countof(MutexNamePrefix) - 1 + i * 2], 3, L"%02x", Hash[i]);
Mutex = CreateMutexW(&SecurityAttributes, FALSE, MutexName);
if (!Mutex)
goto cleanupPoolNorm;