Skip to content

Commit eb03207

Browse files
reset of tpm flag, handling of duplicate expiered cert in store, non-case sensitive name match
1 parent 7dc6ac4 commit eb03207

18 files changed

Lines changed: 300 additions & 131 deletions

File tree

.github/workflows/windows-cert-store-test.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,10 @@ jobs:
260260
$subject = $serverCert.Subject
261261
if ($subject -match "^CN=(.+)$") { $subject = $matches[1] }
262262
Add-Content -Path $env:GITHUB_ENV -Value "SERVER_CERT_SUBJECT=$subject"
263+
264+
# Export the (self-signed) server cert as DER so the client can use
265+
# it as the trust anchor when negotiating an x509v3-* host key.
266+
Export-Certificate -Cert $serverCert -FilePath "server-store-cert.der" | Out-Null
263267
}
264268
265269
# Client user key: import the CA-signed testuser cert+key into
@@ -569,6 +573,59 @@ jobs:
569573
}
570574
Write-Host "SFTP against echoserver succeeded"
571575
576+
- name: Test SFTP against echoserver with x509v3 host key
577+
if: matrix.server_key_source == 'store' && matrix.key_algorithm == 'ecdsa'
578+
working-directory: ${{ github.workspace }}\wolfssh
579+
shell: pwsh
580+
run: |
581+
# Force the x509v3 host key algorithm so the cert store certificate
582+
# itself is sent as K_S and verified by the client, exercising the
583+
# X.509 host-key slot instead of the plain-key slot. The server cert
584+
# is self-signed, so it is its own trust anchor (-A).
585+
$testPort = ${{env.TEST_PORT}}
586+
$sftpPath = $env:SFTP_PATH
587+
588+
@"
589+
pwd
590+
ls
591+
quit
592+
"@ | Out-File -FilePath sftp_x509_commands.txt -Encoding ASCII
593+
594+
$sftpArgs = @("-u", "testuser", "-h", "localhost", "-p", "$testPort")
595+
if ("${{ matrix.client_key_source }}" -eq "store") {
596+
$sftpArgs += "-W", "My:$($env:CLIENT_CERT_SUBJECT):CURRENT_USER"
597+
} else {
598+
$sftpArgs += "-J", (Resolve-Path $env:CLIENT_CERT_FILE).Path
599+
$sftpArgs += "-i", (Resolve-Path $env:CLIENT_KEY_FILE).Path
600+
}
601+
$sftpArgs += "-A", (Resolve-Path "server-store-cert.der").Path, "-X"
602+
$sftpArgs += "-k", "x509v3-ecdsa-sha2-nistp256"
603+
604+
Write-Host "Running: $sftpPath $($sftpArgs -join ' ')"
605+
$process = Start-Process -FilePath $sftpPath `
606+
-ArgumentList $sftpArgs `
607+
-RedirectStandardInput "sftp_x509_commands.txt" `
608+
-RedirectStandardOutput "sftp_x509_output.txt" `
609+
-RedirectStandardError "sftp_x509_error.txt" `
610+
-Wait -NoNewWindow -PassThru
611+
612+
Write-Host "SFTP (x509v3 host key) exit code: $($process.ExitCode)"
613+
Write-Host "=== SFTP Output ==="
614+
if (Test-Path sftp_x509_output.txt) { Get-Content sftp_x509_output.txt }
615+
Write-Host "=== SFTP Error ==="
616+
if (Test-Path sftp_x509_error.txt) { Get-Content sftp_x509_error.txt }
617+
618+
if ($process.ExitCode -ne 0) {
619+
$echoLog = $env:ECHOSERVER_LOG
620+
if (-not [string]::IsNullOrEmpty($echoLog) -and (Test-Path $echoLog)) {
621+
Write-Host "=== Echoserver Log ==="
622+
Get-Content $echoLog
623+
}
624+
Write-Host "ERROR: SFTP with x509v3 host key failed"
625+
exit 1
626+
}
627+
Write-Host "SFTP with x509v3 host key succeeded"
628+
572629
- name: Stop echoserver before wolfsshd test
573630
if: matrix.server_key_source == 'store'
574631
shell: pwsh

apps/wolfsshd/auth.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,11 +1789,19 @@ static int RequestAuthentication(WS_UserAuthData* authData,
17891789
"not set; certificate UPN domain is not checked");
17901790
}
17911791
#else
1792-
/* Without FPKI compare subject CN with user name */
1792+
/* Without FPKI compare subject CN with user name.
1793+
* Windows account names are case-insensitive, so match
1794+
* the CN the same way there. */
17931795
if (dCert->subjectCN != NULL &&
17941796
(int)XSTRLEN(usr) == dCert->subjectCNLen &&
1797+
#ifdef _WIN32
1798+
WSTRNCASECMP(usr, dCert->subjectCN,
1799+
(size_t)dCert->subjectCNLen) == 0
1800+
#else
17951801
XSTRNCMP(usr, dCert->subjectCN,
1796-
(size_t)dCert->subjectCNLen) == 0) {
1802+
(size_t)dCert->subjectCNLen) == 0
1803+
#endif
1804+
) {
17971805
usrMatch = 1;
17981806
}
17991807
#endif

apps/wolfsshd/configuration.c

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,6 +1255,20 @@ static int SetListString(char** dst, const char* value, int valueSz,
12551255
return ret;
12561256
}
12571257

1258+
/* CA trust sources are loaded once at startup from the global config; a
1259+
* Match-scoped setting would be silently ignored at authentication time.
1260+
* Reject such options at parse time instead of failing open. Returns
1261+
* WS_SUCCESS when conf is the global config. */
1262+
static int CheckNotInMatch(const WOLFSSHD_CONFIG* conf, const char* option)
1263+
{
1264+
if (conf->usrAppliesTo != NULL || conf->groupAppliesTo != NULL) {
1265+
wolfSSH_Log(WS_LOG_ERROR,
1266+
"[SSHD] Option %s is not supported inside a Match block", option);
1267+
return WS_BAD_ARGUMENT;
1268+
}
1269+
return WS_SUCCESS;
1270+
}
1271+
12581272
/* returns WS_SUCCESS on success */
12591273
/* NOLINTNEXTLINE(misc-no-recursion): bounded by WOLFSSHD_MAX_INCLUDE_DEPTH */
12601274
static int HandleConfigOption(WOLFSSHD_CONFIG** conf, int opt,
@@ -1346,7 +1360,9 @@ static int HandleConfigOption(WOLFSSHD_CONFIG** conf, int opt,
13461360
ret = wolfSSHD_ConfigSetUserCAKeysFile(*conf, value);
13471361
break;
13481362
case OPT_TRUSTED_SYSTEM_CA_KEYS:
1349-
ret = wolfSSHD_ConfigSetSystemCA(*conf, value);
1363+
ret = CheckNotInMatch(*conf, "wolfSSH_TrustedSystemCAKeys");
1364+
if (ret == WS_SUCCESS)
1365+
ret = wolfSSHD_ConfigSetSystemCA(*conf, value);
13501366
break;
13511367
case OPT_PIDFILE:
13521368
ret = SetFileString(&(*conf)->pidFile, value, (*conf)->heap);
@@ -1358,17 +1374,25 @@ static int HandleConfigOption(WOLFSSHD_CONFIG** conf, int opt,
13581374
ret = HandleStrictModes(*conf, value);
13591375
break;
13601376
case OPT_TRUSTED_USER_CA_STORE:
1361-
ret = wolfSSHD_ConfigSetUserCAStore(*conf, value);
1377+
ret = CheckNotInMatch(*conf, "wolfSSH_TrustedUserCAStore");
1378+
if (ret == WS_SUCCESS)
1379+
ret = wolfSSHD_ConfigSetUserCAStore(*conf, value);
13621380
break;
13631381
#ifdef USE_WINDOWS_API
13641382
case OPT_WIN_USER_STORES:
1365-
ret = wolfSSHD_ConfigSetWinUserStores(*conf, value);
1383+
ret = CheckNotInMatch(*conf, "wolfSSH_WinUserStores");
1384+
if (ret == WS_SUCCESS)
1385+
ret = wolfSSHD_ConfigSetWinUserStores(*conf, value);
13661386
break;
13671387
case OPT_WIN_USER_DW_FLAGS:
1368-
ret = wolfSSHD_ConfigSetWinUserDwFlags(*conf, value);
1388+
ret = CheckNotInMatch(*conf, "wolfSSH_WinUserDwFlags");
1389+
if (ret == WS_SUCCESS)
1390+
ret = wolfSSHD_ConfigSetWinUserDwFlags(*conf, value);
13691391
break;
13701392
case OPT_WIN_USER_PV_PARA:
1371-
ret = wolfSSHD_ConfigSetWinUserPvPara(*conf, value);
1393+
ret = CheckNotInMatch(*conf, "wolfSSH_WinUserPvPara");
1394+
if (ret == WS_SUCCESS)
1395+
ret = wolfSSHD_ConfigSetWinUserPvPara(*conf, value);
13721396
break;
13731397
#endif /* USE_WINDOWS_API */
13741398
case OPT_AUTHORIZED_UPN_DOMAINS:
@@ -1384,7 +1408,9 @@ static int HandleConfigOption(WOLFSSHD_CONFIG** conf, int opt,
13841408
case OPT_HOST_KEY_STORE_SUBJECT:
13851409
wolfSSH_Log(WS_LOG_INFO,
13861410
"[SSHD] Parsed HostKeyStoreSubject = '%s'", value);
1387-
ret = SetFileString(&(*conf)->hostKeyStoreSubject, value,
1411+
/* use the full line remainder so a CN containing spaces is
1412+
* kept instead of being cut at the first token */
1413+
ret = SetListString(&(*conf)->hostKeyStoreSubject, full, fullSz,
13881414
(*conf)->heap);
13891415
break;
13901416
case OPT_HOST_KEY_STORE_FLAGS:

apps/wolfsshd/wolfsshd.c

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -380,12 +380,15 @@ static int LoadUserCACertsFromStore(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX* ctx,
380380
return WS_BAD_ARGUMENT;
381381
}
382382

383-
/* Only the system-store provider is supported here. */
383+
/* Only the system-store provider is supported here. Fail rather than
384+
* silently load trust anchors from a different provider than the one
385+
* configured. */
384386
if (providerStr != NULL &&
385387
WSTRCMP(providerStr, "CERT_STORE_PROV_SYSTEM") != 0) {
386-
wolfSSH_Log(WS_LOG_INFO,
387-
"[SSHD] wolfSSH_WinUserStores='%s' ignored; only "
388+
wolfSSH_Log(WS_LOG_ERROR,
389+
"[SSHD] wolfSSH_WinUserStores='%s' is not supported; only "
388390
"CERT_STORE_PROV_SYSTEM is supported", providerStr);
391+
return WS_BAD_ARGUMENT;
389392
}
390393

391394
if (dwFlagsStr != NULL) {
@@ -398,11 +401,13 @@ static int LoadUserCACertsFromStore(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX* ctx,
398401
dwFlags = CERT_SYSTEM_STORE_LOCAL_MACHINE;
399402
}
400403
else {
401-
/* fall back to a raw numeric value; a result of 0 means the string
402-
* was not a recognized name or valid number, which is never a
403-
* usable store-location flag */
404+
/* Fall back to a raw numeric value, but only accept system-store
405+
* location bits. Anything else is either not a location or a
406+
* control flag (e.g. CERT_STORE_DELETE_FLAG) that would make
407+
* CertOpenStore destructive. */
404408
dwFlags = (word32)atoi(dwFlagsStr);
405-
if (dwFlags == 0) {
409+
if ((dwFlags & (word32)CERT_SYSTEM_STORE_LOCATION_MASK) == 0 ||
410+
(dwFlags & ~(word32)CERT_SYSTEM_STORE_LOCATION_MASK) != 0) {
406411
wolfSSH_Log(WS_LOG_ERROR,
407412
"[SSHD] Unrecognized user CA store flags '%s'", dwFlagsStr);
408413
return WS_BAD_ARGUMENT;
@@ -552,11 +557,16 @@ static int SetupCTX(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX** ctx,
552557
} else if (WSTRCMP(hostKeyStoreFlags, "LOCAL_MACHINE") == 0) {
553558
dwFlags = CERT_SYSTEM_STORE_LOCAL_MACHINE;
554559
} else {
555-
/* fall back to a raw numeric value; a result of 0 means the
556-
* string was not a recognized name or valid number, which
557-
* is never a usable store-location flag */
560+
/* Fall back to a raw numeric value, but only accept
561+
* system-store location bits. Anything else is either not
562+
* a location or a control flag (e.g.
563+
* CERT_STORE_DELETE_FLAG) that would make CertOpenStore
564+
* destructive. */
558565
dwFlags = (word32)atoi(hostKeyStoreFlags);
559-
if (dwFlags == 0) {
566+
if ((dwFlags &
567+
(word32)CERT_SYSTEM_STORE_LOCATION_MASK) == 0 ||
568+
(dwFlags &
569+
~(word32)CERT_SYSTEM_STORE_LOCATION_MASK) != 0) {
560570
wolfSSH_Log(WS_LOG_ERROR,
561571
"[SSHD] Unrecognized host key store flags '%s'",
562572
hostKeyStoreFlags);

configure.ac

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,8 @@ AS_IF([test "x$ENABLED_WINDOWS_CERT_STORE" = "xyes"],
292292
[AC_MSG_ERROR([--enable-windows-cert-store requires X.509 cert support (--enable-certs)])])
293293
AM_CPPFLAGS="$AM_CPPFLAGS -DWOLFSSH_WINDOWS_CERT_STORE"
294294
AS_CASE([$host],
295-
[*mingw*|*msys*|*cygwin*],[LIBS="$LIBS -lcrypt32 -lncrypt"],
296-
[AC_MSG_ERROR([--enable-windows-cert-store is only supported on Windows hosts (mingw/msys/cygwin)])])])
295+
[*mingw*|*msys*],[LIBS="$LIBS -lcrypt32 -lncrypt"],
296+
[AC_MSG_ERROR([--enable-windows-cert-store is only supported on _WIN32 Windows hosts (mingw/msys)])])])
297297
AS_IF([test "x$ENABLED_SMALLSTACK" = "xyes"],
298298
[AM_CPPFLAGS="$AM_CPPFLAGS -DWOLFSSH_SMALL_STACK"])
299299
AS_IF([test "x$ENABLED_NONE_CIPHER" = "xyes"],

examples/client/common.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,8 +1258,13 @@ int ClientSetupCertStoreAuth(WOLFSSH_CTX* ctx)
12581258
}
12591259
userPublicKeyTypeSz = (word32)WSTRLEN((const char*)userPublicKeyType);
12601260

1261-
/* No in-memory private key — signing goes through the cert store. */
1262-
userPrivateKey = NULL;
1261+
/* No in-memory private key — signing goes through the cert store.
1262+
* Keep the static-buffer invariant (only replace the pointer when it
1263+
* is not a heap allocation) so a later key load or
1264+
* ClientFreeBuffers call remains valid. */
1265+
if (!userPrivateKeyAlloc) {
1266+
userPrivateKey = userPrivateKeyBuf;
1267+
}
12631268
userPrivateKeySz = 0;
12641269

12651270
pubKeyLoaded = 1;

examples/sftpclient/sftpclient.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,8 @@ static void ShowUsage(void)
410410
printf(" -g put local filename as remote filename\n");
411411
printf(" -G get remote filename as local filename\n");
412412
printf(" -i <filename> filename for the user's private key\n");
413+
printf(" -k <list> set the comma separated list of public key "
414+
"algos to offer\n");
413415
#ifdef WOLFSSH_WINDOWS_CERT_STORE
414416
printf(" -W <spec> Windows cert store: \"store:subject:flags\"\n");
415417
printf(" Example: -W \"My:CN=MyCert:CURRENT_USER\"\n");
@@ -1573,6 +1575,7 @@ THREAD_RETURN WOLFSSH_THREAD sftpclient_test(void* args)
15731575
char* pubKeyName = NULL;
15741576
char* certName = NULL;
15751577
char* caCert = NULL;
1578+
const char* keyList = NULL;
15761579
#ifdef WOLFSSH_WINDOWS_CERT_STORE
15771580
const char* certStoreSpec = NULL; /* Format: "store:subject:flags" */
15781581
#endif /* WOLFSSH_WINDOWS_CERT_STORE */
@@ -1582,7 +1585,7 @@ THREAD_RETURN WOLFSSH_THREAD sftpclient_test(void* args)
15821585
char** argv = ((func_args*)args)->argv;
15831586
((func_args*)args)->return_code = 0;
15841587

1585-
while ((ch = mygetopt(argc, argv, "?d:gh:i:j:l:p:r:u:EGNP:J:A:X"
1588+
while ((ch = mygetopt(argc, argv, "?d:gh:i:j:k:l:p:r:u:EGNP:J:A:X"
15861589
#ifdef WOLFSSH_WINDOWS_CERT_STORE
15871590
"W:"
15881591
#endif /* WOLFSSH_WINDOWS_CERT_STORE */
@@ -1648,6 +1651,10 @@ THREAD_RETURN WOLFSSH_THREAD sftpclient_test(void* args)
16481651
pubKeyName = myoptarg;
16491652
break;
16501653

1654+
case 'k':
1655+
keyList = myoptarg;
1656+
break;
1657+
16511658
#ifdef WOLFSSH_CERTS
16521659
case 'J':
16531660
certName = myoptarg;
@@ -1785,6 +1792,12 @@ THREAD_RETURN WOLFSSH_THREAD sftpclient_test(void* args)
17851792
if (ctx == NULL)
17861793
err_sys("Couldn't create wolfSSH client context.");
17871794

1795+
if (keyList) {
1796+
if (wolfSSH_CTX_SetAlgoListKey(ctx, keyList) != WS_SUCCESS) {
1797+
err_sys("Error setting key list.");
1798+
}
1799+
}
1800+
17881801
if (((func_args*)args)->user_auth == NULL)
17891802
wolfSSH_SetUserAuth(ctx, ClientUserAuth);
17901803
else

ide/winvs/api-test/api-test.vcxproj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@
364364
<Link>
365365
<SubSystem>Console</SubSystem>
366366
<GenerateDebugInformation>true</GenerateDebugInformation>
367-
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
367+
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;crypt32.lib;ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
368368
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
369369
<AdditionalLibraryDirectories>$(wolfCryptDebug32FIPS)</AdditionalLibraryDirectories>
370370
</Link>
@@ -400,7 +400,7 @@
400400
<Link>
401401
<SubSystem>Console</SubSystem>
402402
<GenerateDebugInformation>true</GenerateDebugInformation>
403-
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
403+
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;crypt32.lib;ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
404404
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
405405
<AdditionalLibraryDirectories>$(wolfCryptDllDebug32FIPS)</AdditionalLibraryDirectories>
406406
</Link>
@@ -436,7 +436,7 @@
436436
<Link>
437437
<SubSystem>Console</SubSystem>
438438
<GenerateDebugInformation>true</GenerateDebugInformation>
439-
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
439+
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;crypt32.lib;ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
440440
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
441441
<AdditionalLibraryDirectories>$(wolfCryptDebug64FIPS)</AdditionalLibraryDirectories>
442442
</Link>
@@ -472,7 +472,7 @@
472472
<Link>
473473
<SubSystem>Console</SubSystem>
474474
<GenerateDebugInformation>true</GenerateDebugInformation>
475-
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
475+
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;crypt32.lib;ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
476476
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
477477
<AdditionalLibraryDirectories>$(wolfCryptDllDebug64FIPS)</AdditionalLibraryDirectories>
478478
</Link>
@@ -511,7 +511,7 @@
511511
<Link>
512512
<SubSystem>Console</SubSystem>
513513
<GenerateDebugInformation>true</GenerateDebugInformation>
514-
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
514+
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;crypt32.lib;ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
515515
<EnableCOMDATFolding>true</EnableCOMDATFolding>
516516
<OptimizeReferences>true</OptimizeReferences>
517517
<AdditionalLibraryDirectories>$(wolfCryptRelease32FIPS)</AdditionalLibraryDirectories>
@@ -551,7 +551,7 @@
551551
<Link>
552552
<SubSystem>Console</SubSystem>
553553
<GenerateDebugInformation>true</GenerateDebugInformation>
554-
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
554+
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;crypt32.lib;ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
555555
<EnableCOMDATFolding>true</EnableCOMDATFolding>
556556
<OptimizeReferences>true</OptimizeReferences>
557557
<AdditionalLibraryDirectories>$(wolfCryptDllRelease32FIPS)</AdditionalLibraryDirectories>
@@ -591,7 +591,7 @@
591591
<Link>
592592
<SubSystem>Console</SubSystem>
593593
<GenerateDebugInformation>true</GenerateDebugInformation>
594-
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
594+
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;crypt32.lib;ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
595595
<EnableCOMDATFolding>true</EnableCOMDATFolding>
596596
<OptimizeReferences>true</OptimizeReferences>
597597
<AdditionalLibraryDirectories>$(wolfCryptRelease64FIPS)</AdditionalLibraryDirectories>
@@ -631,7 +631,7 @@
631631
<Link>
632632
<SubSystem>Console</SubSystem>
633633
<GenerateDebugInformation>true</GenerateDebugInformation>
634-
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
634+
<AdditionalDependencies>wolfssl-fips.lib;ws2_32.lib;crypt32.lib;ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
635635
<EnableCOMDATFolding>true</EnableCOMDATFolding>
636636
<OptimizeReferences>true</OptimizeReferences>
637637
<AdditionalLibraryDirectories>$(wolfCryptDllRelease64FIPS)</AdditionalLibraryDirectories>

0 commit comments

Comments
 (0)