internal ClientSession( ContentUser user, UserActivationMode userActivationMode) { Invariant.Assert(user != null); Invariant.Assert((userActivationMode == UserActivationMode.Permanent) || (userActivationMode == UserActivationMode.Temporary)); _user = user; _userActivationMode = userActivationMode; // prepare callback handler _callbackHandler = new CallbackHandler(); int hr = SafeNativeMethods.DRMCreateClientSession( _callbackHandler.CallbackDelegate, NativeConstants.DrmCallbackVersion, _user.AuthenticationProviderType, _user.Name, out _hSession); Errors.ThrowOnErrorCode(hr); Invariant.Assert((_hSession != null) && (!_hSession.IsInvalid)); }
internal PublishLicense SignIssuanceLicense(IssuanceLicense issuanceLicense, out UseLicense authorUseLicense) { CheckDisposed(); Invariant.Assert(issuanceLicense != null); Invariant.Assert(!_envHandle.IsInvalid); using (CallbackHandler signIssuanceLicenseCallbackHandler = new CallbackHandler()) { string clientLicensorCertificate = GetClientLicensorCert(); if (clientLicensorCertificate == null) throw new RightsManagementException(SR.Get(SRID.UserHasNoClientLicensorCert)); // Trim all the leading and trailing white space characters // of the clientLicensorCertificate. clientLicensorCertificate = clientLicensorCertificate.Trim(); // Make sure the clientLicensorCertificate is valid. By trimming white spaces // above, if the certificate string is empty or contains only white spaces, it // is empty now. if (clientLicensorCertificate.Length == 0) throw new RightsManagementException(SR.Get(SRID.UserHasNoClientLicensorCert)); // Offline publishing supported no Online publishing support int hr = SafeNativeMethods.DRMGetSignedIssuanceLicense( _envHandle, issuanceLicense.Handle, (uint)(SignIssuanceLicenseFlags.Offline | SignIssuanceLicenseFlags.AutoGenerateKey | SignIssuanceLicenseFlags.OwnerLicenseNoPersist), null, 0, NativeConstants.ALGORITHMID_AES, // currently AES is the only supported key type clientLicensorCertificate, signIssuanceLicenseCallbackHandler.CallbackDelegate, null, // we are only supporting offline publishing no url needed 0); // no context required Errors.ThrowOnErrorCode(hr); signIssuanceLicenseCallbackHandler.WaitForCompletion(); // it will throw a proper exception in a failure case // build publish License from th result PublishLicense publishLicense = new PublishLicense( signIssuanceLicenseCallbackHandler.CallbackData); // After Issuance license is signed we should build the Author's Use License authorUseLicense = new UseLicense(GetOwnerLicense(issuanceLicense.Handle)); return publishLicense; } }