{"record":{"id":"85f2e43b3d128571","repo":"dotnet/wpf","slug":"sr-cryptoproviderisnotready","errorCode":null,"errorMessage":"SR.CryptoProviderIsNotReady","messagePattern":"SR\\.CryptoProviderIsNotReady","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/WindowsBase/MS/Internal/IO/Packaging/CompoundFile/RightsManagementEncryptionTransform.cs","lineNumber":498,"sourceCode":"        /// </value>\n        internal CryptoProvider CryptoProvider\n        {\n            get\n            {\n                return _cryptoProvider;\n            }\n            set\n            {\n                if (_fixedSettings)\n                {\n                    throw new InvalidOperationException(SR.CannotChangeCryptoProvider);\n                }\n\n                ArgumentNullException.ThrowIfNull(value);\n\n                if (!value.CanEncrypt && !value.CanDecrypt)\n                {\n                    throw new ArgumentException(SR.CryptoProviderIsNotReady, nameof(value));\n                }\n\n                _cryptoProvider = value;\n            }\n        }\n\n        /// <value>\n        /// Expose the transform identifier for the use of the DataSpaceManager.\n        /// </value>\n        internal static string ClassTransformIdentifier\n        {\n            get\n            {\n                return \"{C73DFACD-061F-43B0-8B64-0C620D2A8B50}\";\n            }\n        }\n\n        #endregion RightsManagementEncryptionTransform Properties","sourceCodeStart":480,"sourceCodeEnd":516,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/WindowsBase/MS/Internal/IO/Packaging/CompoundFile/RightsManagementEncryptionTransform.cs#L480-L516","documentation":"The CryptoProvider property setter validates that the provided provider can actually do work: it must support encryption, decryption, or both. A provider with CanEncrypt == false && CanDecrypt == false is rejected with ArgumentException naming 'value' (SR.CryptoProviderIsNotReady).","triggerScenarios":"Assigning transform.CryptoProvider a CryptoProvider instance returned by an RM environment that granted no use rights (cannot encrypt or decrypt), e.g. the user lacks rights to the protected content.","commonSituations":"User opened a document without sufficient rights grants; RM server returned a limited grant set; testing with a stub/empty CryptoProvider that reports no capabilities.","solutions":["Verify the user has encryption or decryption grants before obtaining the CryptoProvider","Check provider.CanEncrypt / provider.CanDecrypt before assigning it to the transform","Obtain the provider from a SecureEnvironment where the user was granted appropriate rights","Use a different user account or publish license that includes the needed rights"],"exampleFix":"// before\ntransform.CryptoProvider = env.CryptoProvider; // may be unusable\n// after\nvar provider = env.CryptoProvider;\nif (!provider.CanEncrypt && !provider.CanDecrypt)\n    throw new InvalidOperationException(\"User has no encrypt/decrypt rights\");\ntransform.CryptoProvider = provider;","handlingStrategy":"validation","validationCode":"if (provider == null || (!provider.CanEncrypt && !provider.CanDecrypt)) throw new ArgumentException(\"CryptoProvider cannot encrypt or decrypt\", nameof(provider));","typeGuard":null,"tryCatchPattern":"try { transform.CryptoProvider = provider; } catch (ArgumentException ex) when (ex.ParamName == \"value\") { /* request rights or re-acquire provider */ }","preventionTips":["Check CanEncrypt/CanDecrypt on the provider before assignment","Ensure the user was granted rights in the publish license","Never assign stub providers in production code paths"],"tags":["wpf","rights-management","argument-exception","crypto"],"backgroundTag":"invalid-argument-value","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-22T01:17:13.364Z"}