/// <summary> /// Set an arbitrary property on the key /// </summary> public void SetProperty(CngProperty property) { unsafe { byte[] propertyValue = property.GetValueWithoutCopying(); // .NET Framework compat. It would have nicer to throw an ArgumentNull exception or something... if (propertyValue == null) throw ErrorCode.NTE_INVALID_PARAMETER.ToCryptographicException(); fixed(byte *pinnedPropertyValue = propertyValue.MapZeroLengthArrayToNonNullPointer()) { ErrorCode errorCode = Interop.NCrypt.NCryptSetProperty(_keyHandle, property.Name, pinnedPropertyValue, propertyValue.Length, property.Options); if (errorCode != ErrorCode.ERROR_SUCCESS) { throw errorCode.ToCryptographicException(); } } } }