Skip to content

Release .NET SDK v18.0.0 - #1128

Draft
stas-schaller wants to merge 8 commits into
masterfrom
release/sdk/dotnet/core/v18.0.0
Draft

Release .NET SDK v18.0.0#1128
stas-schaller wants to merge 8 commits into
masterfrom
release/sdk/dotnet/core/v18.0.0

Conversation

@stas-schaller

Copy link
Copy Markdown
Contributor

Summary

Release branch for v18.0.0 of the .NET SDK. Bundles bug fixes for folder key handling, GetFolders crash safety, per-item delete error surfacing, and throttle retry behavior.

Changes

Bug Fixes

  • GetFolders binding fix (KSM-1044): GetFolders() failed with "App key is missing from the storage" when called as the first method on a freshly bound application. It now processes encryptedAppKey from the server binding response the same way GetSecrets() does.
  • GetFolders crash safety (KSM-1082): GetFolders() threw when any folder in the response had a corrupted or missing key. The SDK now skips undecryptable folders and returns the rest normally.
  • Per-item delete errors (KSM-1087): DeleteSecret() and DeleteFolder() silently reported success when the server rejected some UIDs. The SDK now surfaces per-item error messages from the server.
  • Throttle jitter (KSM-879): Throttle retry jitter was two-sided, which could reduce a retry delay below the computed floor. Jitter is now one-sided (0 to +25%). The SDK also caps a server-supplied retry_after at 176s.

New Features

  • Throttle retry (KSM-879): On HTTP 403 {"error":"throttled"}, PostQuery now retries up to 5 times with exponentially increasing delays (11s, 22s, 44s, 88s, 176s) plus one-sided jitter, honoring retry_after from the response. A typed KeeperThrottleException is thrown once retries are exhausted.
  • dbConnectionMethod (KSM-1075): Added dbConnectionMethod to PamSettingsConnection.

Breaking Changes

None.

Security Impact

KSM-1044 touches the initial key derivation path: FetchAndDecryptFolders now decrypts encryptedAppKey using the client key and stores the result as the app master key, matching the behavior already in FetchAndDecryptSecrets. No new cryptographic operations introduced.

Related Issues

  • Jira: KSM-1044, KSM-1082, KSM-1087, KSM-879, KSM-1075

stas-schaller and others added 7 commits July 24, 2026 13:27
On HTTP 403 {"error":"throttled"}, PostQuery now retries up to 5 times
with exponential backoff (11s, 22s, 44s, 88s, 176s) plus +/-25% jitter,
honoring retry_after from the response when present, and throws the new
KeeperThrottleException once retries are exhausted. KeeperHttpResponse now
carries the HTTP StatusCode (populated by PostFunction) so the retry is
gated on 403 and runs before the key-rotation handler, leaving it unchanged.

Adds an optional throttleSleep seam on SecretsManagerOptions for tests.
)

Symmetric ±25% jitter could fire a retry before the backend's 10s
memcached window expires (floor - 25% = 8.25s). Switch to 0 to +25%
so the delay is always >= the floor. Also add MaxThrottleDelaySec = 176
constant and apply it as a cap in ThrottleDelayMs so a server-supplied
retry_after above 176s is clamped rather than honored blindly.
@stas-schaller
stas-schaller marked this pull request as draft August 31, 2026 19:11
…ds by key size (KSM-1060)

Drive (NSF) folders require AES-GCM for the folder key wrap and folder
data in CreateFolder/UpdateFolder; the previous CBC encryption caused
"invalid sharedFolderKey" errors against NSF-enabled endpoints.

FetchAndDecryptFolders now dispatches decrypt mode by subfolder key
byte length (60 = GCM, 64 = CBC legacy) - mirrors the read-path fix
already on the other KSM SDKs. KeeperFolder gains a UseGcm property so
UpdateFolder encrypts with the same cipher the folder was created with.

Also bumps AssemblyVersion/FileVersion/PackageVersion to 18.0.0 to
match the release branch.

Verified end-to-end on dev CA: all folders decrypt via GetFolders
(previously GCM-created folders failed with padding errors);
CreateFolder, read-back, UpdateFolder, and DeleteFolder all round-trip
correctly for a fresh GCM subfolder.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants