Hello @cyber-insomniac, we're using one issue report per unofficially supported game title, so I've gone ahead and transferred this issue report to https://github.com/ValveSoftware/Proton/issues/9427#issuecomment-5701985428.
Root cause found; bug filed upstream: https://bugs.winehq.org/show_bug.cgi?id=60345
The crash is not in CryptDeriveKey. FPXSteam.dll calls CryptSetHashParam(HP_HMAC_INFO) with CALG_SHA_256 on a PROV_RSA_FULL container. Windows accepts that, but Wine's init_hash() fails because SHA-256 isn't in the RSA full provider's algorithm table, CPSetHashParam() ignores the failure and returns TRUE, and the next CryptHashData() dereferences the NULL hash descriptor (callq *0x60(%rax), rsaenh+0x24b2e).
Minimal reproducer (crashes in current Wine, works on Windows): CryptAcquireContext(PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) → CryptCreateHash(CALG_HMAC, key) → CryptSetHashParam(HP_HMAC_INFO, {CALG_SHA_256}) → CryptHashData().
Reference fix + RFC 4231 test vectors (written with AI assistance, so not submitted to WineHQ per their LLM policy): https://github.com/gustavo-karsten/wine/commit/2f41bdbf8dd3dd0fc0ffad7fb48d3a9e14dbefd0. With it Aniimo gets past server selection; verified on CrossOver 26.2 (Wine 11.0 base) on macOS. Should apply to Proton's wine tree as well.
proton 10.0-4bx1 2026-09proton experimentalx1 2026-09PROTON_LOG=1x1 2026-09fpxsteam.dllx2 2026-09advapi32.dllx1 2026-09kernel32.dllx1 2026-09ntdll.dllx1 2026-09rsaenh.dllx1 2026-090xc0000005x1 2026-09
Compatibility Report
System Information
I confirm
Symptoms
Game launches, gets to the Steam login step, then reliably crashes ~20 seconds in, every launch, on every Proton build tested.
Crash details
Backtrace (from Proton Experimental official build, offsets from matching cachyos build in parentheses where they differ):
Faulting instruction at the crash site:
callq *0x60(%rax)— an indirect call through what appears to be a null or uninitialized function pointer at offset 0x60 of some internal structure.Analysis
FPXSteam.dll (the game's Steam-auth integration library) computes an HMAC using the legacy CryptoAPI (
CryptCreateHashwithCALG_HMAC, thenCryptSetHashParam(HP_HMAC_INFO, ...)withHashAlgid = CALG_SHA_256). The crash happens insidersaenh.dll's HMAC hash-init/update path.I initially suspected this was the known issue where
RSAENH_CPSetHashParam'sCALG_HMACcase fails to find SHA-256 in a CSP's algorithm table and mis-reports success — but checking current Wine master (dlls/rsaenh/rsaenh.c), that specific path already guards against it:Since the crash backtrace is past this point (inside the actual hash init/update calls that only run after
pAlgInfois found), the algorithm lookup is succeeding, and the null-pointer deref is happening somewhere inside the hash context setup/update itself — a distinct, apparently still-open bug.I also tested a registry-based workaround (adding a duplicate
PROV_RSA_FULL-type provider entry aliased to the AES-capable personality, to rule out CSP-selection as the cause). The crash was byte-for-byte identical with and without that change, which further supports this being a bug insidersaenh.dll's HMAC code path itself rather than a CSP/personality selection issue.Reproduction
Attachments
crashinfo.txtfrom<library>/steamapps/compatdata/4126040/pfx/drive_c/users/steamuser/AppData/Local/Temp/Aniimo/Aniimo/Crashes/PROTON_LOG=1Wine debug log (steam-4126040.log)Happy to provide additional logs or test patches if anyone wants to dig further — this looks like a genuine crypto-provider bug in
rsaenh.dll, not a GPU/driver/anticheat issue.steam-4126040.log
crashinfo.txt