Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Security / System / Security / Cryptography / CryptographicAttribute.cs / 1305376 / CryptographicAttribute.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // // // CryptographicAttributeObject.cs // // 07/10/2003 // namespace System.Security.Cryptography { using System.Collections; using System.Globalization; using System.Runtime.InteropServices; using System.Security.Cryptography.Pkcs; [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObject { private Oid m_oid = null; private AsnEncodedDataCollection m_values = null; // // Constructors. // private CryptographicAttributeObject () {} [SecurityCritical] internal CryptographicAttributeObject (IntPtr pAttribute) : this((CAPI.CRYPT_ATTRIBUTE) Marshal.PtrToStructure(pAttribute, typeof(CAPI.CRYPT_ATTRIBUTE))) {} [SecurityCritical] internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} [SecurityCritical] internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE_TYPE_VALUE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} internal CryptographicAttributeObject (AsnEncodedData asnEncodedData) : this(asnEncodedData.Oid, new AsnEncodedDataCollection(asnEncodedData)) {} public CryptographicAttributeObject (Oid oid) : this(oid, new AsnEncodedDataCollection()) {} public CryptographicAttributeObject (Oid oid, AsnEncodedDataCollection values) { m_oid = new Oid(oid); if (values == null) m_values = new AsnEncodedDataCollection(); else { foreach (AsnEncodedData asn in values) { if (0 != String.Compare(asn.Oid.Value, oid.Value, StringComparison.Ordinal)) throw new InvalidOperationException(SecurityResources.GetResourceString("InvalidOperation_DuplicateItemNotAllowed")); } m_values = values; } } // // Public properties. // public Oid Oid { get { return new Oid(m_oid); } } public AsnEncodedDataCollection Values { get { return m_values; } } } [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObjectCollection : ICollection { private ArrayList m_list; public CryptographicAttributeObjectCollection() { m_list = new ArrayList(); } [SecurityCritical] private CryptographicAttributeObjectCollection (IntPtr pCryptAttributes) : this((CAPI.CRYPT_ATTRIBUTES) Marshal.PtrToStructure(pCryptAttributes, typeof(CAPI.CRYPT_ATTRIBUTES))) {} [SecurityCritical] internal CryptographicAttributeObjectCollection (SafeLocalAllocHandle pCryptAttributes) : this(pCryptAttributes.DangerousGetHandle()) {} [SecurityCritical] internal CryptographicAttributeObjectCollection (CAPI.CRYPT_ATTRIBUTES cryptAttributes) { m_list = new ArrayList(); for (uint index = 0; index < cryptAttributes.cAttr; index++) { IntPtr pCryptAttribute = new IntPtr((long)cryptAttributes.rgAttr + (index * Marshal.SizeOf(typeof(CAPI.CRYPT_ATTRIBUTE)))); m_list.Add(new CryptographicAttributeObject(pCryptAttribute)); } } public CryptographicAttributeObjectCollection (CryptographicAttributeObject attribute) { m_list = new ArrayList(); m_list.Add(attribute); } public int Add (AsnEncodedData asnEncodedData) { if (asnEncodedData == null) throw new ArgumentNullException("asnEncodedData"); return Add(new CryptographicAttributeObject(asnEncodedData)); } public int Add (CryptographicAttributeObject attribute) { if (attribute == null) throw new ArgumentNullException("attribute"); // // Merge with exisitng attribute, if already existed, else add as new. // string szOid1 = null; if (attribute.Oid != null) szOid1 = attribute.Oid.Value; for (int index = 0; index < m_list.Count; index++) { CryptographicAttributeObject existing = (CryptographicAttributeObject) m_list[index]; // To prevent caller to add the existing item into the collection again // Otherwise the merge will be an infinite loop if ((Object) existing.Values == (Object) attribute.Values) throw new InvalidOperationException(SecurityResources.GetResourceString("InvalidOperation_DuplicateItemNotAllowed")); // Merge either: // 1. both OIDs are null, or // 2. both not null and OIDs match. string szOid2 = null; if (existing.Oid != null) szOid2 = existing.Oid.Value; if (szOid1 == null && szOid2 == null) { foreach (AsnEncodedData asnEncodedData in attribute.Values) { existing.Values.Add(asnEncodedData); } return index; } if ((szOid1 != null && szOid2 != null) && (String.Compare(szOid1, szOid2, StringComparison.OrdinalIgnoreCase) == 0)) { // // Only allow one signing time, per RFC. // if (String.Compare(szOid1, CAPI.szOID_RSA_signingTime, StringComparison.OrdinalIgnoreCase) == 0) throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Pkcs9_MultipleSigningTimeNotAllowed")); foreach (AsnEncodedData asnEncodedData in attribute.Values) { existing.Values.Add(asnEncodedData); } return index; } } return m_list.Add(attribute); } public void Remove (CryptographicAttributeObject attribute) { if (attribute == null) throw new ArgumentNullException("attribute"); m_list.Remove(attribute); } public CryptographicAttributeObject this[int index] { get { return (CryptographicAttributeObject) m_list[index]; } } public int Count { get { return m_list.Count; } } public CryptographicAttributeObjectEnumerator GetEnumerator() { return new CryptographicAttributeObjectEnumerator(this); } ///IEnumerator IEnumerable.GetEnumerator() { return new CryptographicAttributeObjectEnumerator(this); } /// void ICollection.CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); if (array.Rank != 1) throw new ArgumentException(SecurityResources.GetResourceString("Arg_RankMultiDimNotSupported")); if (index < 0 || index >= array.Length) throw new ArgumentOutOfRangeException("index", SecurityResources.GetResourceString("ArgumentOutOfRange_Index")); if (index + this.Count > array.Length) throw new ArgumentException(SecurityResources.GetResourceString("Argument_InvalidOffLen")); for (int i=0; i < this.Count; i++) { array.SetValue(this[i], index); index++; } } public void CopyTo(CryptographicAttributeObject[] array, int index) { ((ICollection)this).CopyTo(array, index); } public bool IsSynchronized { get { return false; } } public Object SyncRoot { get { return this; } } } [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObjectEnumerator : IEnumerator { private CryptographicAttributeObjectCollection m_attributes; private int m_current; private CryptographicAttributeObjectEnumerator() {} internal CryptographicAttributeObjectEnumerator(CryptographicAttributeObjectCollection attributes) { m_attributes = attributes; m_current = -1; } public CryptographicAttributeObject Current { get { return m_attributes[m_current]; } } /// Object IEnumerator.Current { get { return (Object) m_attributes[m_current]; } } public bool MoveNext() { if (m_current == ((int) m_attributes.Count - 1)) return false; m_current++; return true; } public void Reset() { m_current = -1; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // [....] // // // CryptographicAttributeObject.cs // // 07/10/2003 // namespace System.Security.Cryptography { using System.Collections; using System.Globalization; using System.Runtime.InteropServices; using System.Security.Cryptography.Pkcs; [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObject { private Oid m_oid = null; private AsnEncodedDataCollection m_values = null; // // Constructors. // private CryptographicAttributeObject () {} [SecurityCritical] internal CryptographicAttributeObject (IntPtr pAttribute) : this((CAPI.CRYPT_ATTRIBUTE) Marshal.PtrToStructure(pAttribute, typeof(CAPI.CRYPT_ATTRIBUTE))) {} [SecurityCritical] internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} [SecurityCritical] internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE_TYPE_VALUE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} internal CryptographicAttributeObject (AsnEncodedData asnEncodedData) : this(asnEncodedData.Oid, new AsnEncodedDataCollection(asnEncodedData)) {} public CryptographicAttributeObject (Oid oid) : this(oid, new AsnEncodedDataCollection()) {} public CryptographicAttributeObject (Oid oid, AsnEncodedDataCollection values) { m_oid = new Oid(oid); if (values == null) m_values = new AsnEncodedDataCollection(); else { foreach (AsnEncodedData asn in values) { if (0 != String.Compare(asn.Oid.Value, oid.Value, StringComparison.Ordinal)) throw new InvalidOperationException(SecurityResources.GetResourceString("InvalidOperation_DuplicateItemNotAllowed")); } m_values = values; } } // // Public properties. // public Oid Oid { get { return new Oid(m_oid); } } public AsnEncodedDataCollection Values { get { return m_values; } } } [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObjectCollection : ICollection { private ArrayList m_list; public CryptographicAttributeObjectCollection() { m_list = new ArrayList(); } [SecurityCritical] private CryptographicAttributeObjectCollection (IntPtr pCryptAttributes) : this((CAPI.CRYPT_ATTRIBUTES) Marshal.PtrToStructure(pCryptAttributes, typeof(CAPI.CRYPT_ATTRIBUTES))) {} [SecurityCritical] internal CryptographicAttributeObjectCollection (SafeLocalAllocHandle pCryptAttributes) : this(pCryptAttributes.DangerousGetHandle()) {} [SecurityCritical] internal CryptographicAttributeObjectCollection (CAPI.CRYPT_ATTRIBUTES cryptAttributes) { m_list = new ArrayList(); for (uint index = 0; index < cryptAttributes.cAttr; index++) { IntPtr pCryptAttribute = new IntPtr((long)cryptAttributes.rgAttr + (index * Marshal.SizeOf(typeof(CAPI.CRYPT_ATTRIBUTE)))); m_list.Add(new CryptographicAttributeObject(pCryptAttribute)); } } public CryptographicAttributeObjectCollection (CryptographicAttributeObject attribute) { m_list = new ArrayList(); m_list.Add(attribute); } public int Add (AsnEncodedData asnEncodedData) { if (asnEncodedData == null) throw new ArgumentNullException("asnEncodedData"); return Add(new CryptographicAttributeObject(asnEncodedData)); } public int Add (CryptographicAttributeObject attribute) { if (attribute == null) throw new ArgumentNullException("attribute"); // // Merge with exisitng attribute, if already existed, else add as new. // string szOid1 = null; if (attribute.Oid != null) szOid1 = attribute.Oid.Value; for (int index = 0; index < m_list.Count; index++) { CryptographicAttributeObject existing = (CryptographicAttributeObject) m_list[index]; // To prevent caller to add the existing item into the collection again // Otherwise the merge will be an infinite loop if ((Object) existing.Values == (Object) attribute.Values) throw new InvalidOperationException(SecurityResources.GetResourceString("InvalidOperation_DuplicateItemNotAllowed")); // Merge either: // 1. both OIDs are null, or // 2. both not null and OIDs match. string szOid2 = null; if (existing.Oid != null) szOid2 = existing.Oid.Value; if (szOid1 == null && szOid2 == null) { foreach (AsnEncodedData asnEncodedData in attribute.Values) { existing.Values.Add(asnEncodedData); } return index; } if ((szOid1 != null && szOid2 != null) && (String.Compare(szOid1, szOid2, StringComparison.OrdinalIgnoreCase) == 0)) { // // Only allow one signing time, per RFC. // if (String.Compare(szOid1, CAPI.szOID_RSA_signingTime, StringComparison.OrdinalIgnoreCase) == 0) throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Pkcs9_MultipleSigningTimeNotAllowed")); foreach (AsnEncodedData asnEncodedData in attribute.Values) { existing.Values.Add(asnEncodedData); } return index; } } return m_list.Add(attribute); } public void Remove (CryptographicAttributeObject attribute) { if (attribute == null) throw new ArgumentNullException("attribute"); m_list.Remove(attribute); } public CryptographicAttributeObject this[int index] { get { return (CryptographicAttributeObject) m_list[index]; } } public int Count { get { return m_list.Count; } } public CryptographicAttributeObjectEnumerator GetEnumerator() { return new CryptographicAttributeObjectEnumerator(this); } ///IEnumerator IEnumerable.GetEnumerator() { return new CryptographicAttributeObjectEnumerator(this); } /// void ICollection.CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); if (array.Rank != 1) throw new ArgumentException(SecurityResources.GetResourceString("Arg_RankMultiDimNotSupported")); if (index < 0 || index >= array.Length) throw new ArgumentOutOfRangeException("index", SecurityResources.GetResourceString("ArgumentOutOfRange_Index")); if (index + this.Count > array.Length) throw new ArgumentException(SecurityResources.GetResourceString("Argument_InvalidOffLen")); for (int i=0; i < this.Count; i++) { array.SetValue(this[i], index); index++; } } public void CopyTo(CryptographicAttributeObject[] array, int index) { ((ICollection)this).CopyTo(array, index); } public bool IsSynchronized { get { return false; } } public Object SyncRoot { get { return this; } } } [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObjectEnumerator : IEnumerator { private CryptographicAttributeObjectCollection m_attributes; private int m_current; private CryptographicAttributeObjectEnumerator() {} internal CryptographicAttributeObjectEnumerator(CryptographicAttributeObjectCollection attributes) { m_attributes = attributes; m_current = -1; } public CryptographicAttributeObject Current { get { return m_attributes[m_current]; } } /// Object IEnumerator.Current { get { return (Object) m_attributes[m_current]; } } public bool MoveNext() { if (m_current == ((int) m_attributes.Count - 1)) return false; m_current++; return true; } public void Reset() { m_current = -1; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BoundField.cs
- DataGridTextBox.cs
- ProxyGenerationError.cs
- SettingsBindableAttribute.cs
- RawStylusInputCustomDataList.cs
- TraceData.cs
- ParameterReplacerVisitor.cs
- OdbcUtils.cs
- DependencyPropertyHelper.cs
- DeclaredTypeValidatorAttribute.cs
- HttpApplicationStateWrapper.cs
- wgx_commands.cs
- StylusShape.cs
- Enum.cs
- FontFamilyIdentifier.cs
- ClaimTypeElement.cs
- MailAddressCollection.cs
- ListViewHitTestInfo.cs
- ButtonRenderer.cs
- DataColumnChangeEvent.cs
- handlecollector.cs
- DataAccessor.cs
- StartUpEventArgs.cs
- Rotation3D.cs
- ReflectPropertyDescriptor.cs
- XmlNamespaceMapping.cs
- SqlCacheDependency.cs
- EventHandlerList.cs
- StreamAsIStream.cs
- Separator.cs
- Choices.cs
- ClonableStack.cs
- CodeCatchClauseCollection.cs
- Attribute.cs
- EdmConstants.cs
- CodeEventReferenceExpression.cs
- UIHelper.cs
- ResourceDictionary.cs
- SiteOfOriginContainer.cs
- Soap.cs
- UserControlCodeDomTreeGenerator.cs
- ReadOnlyActivityGlyph.cs
- AcceleratedTokenProvider.cs
- XmlSchemaValidationException.cs
- Scalars.cs
- NumberSubstitution.cs
- ApplyImportsAction.cs
- DataGridHelper.cs
- AsyncSerializedWorker.cs
- WCFBuildProvider.cs
- ValidationSummary.cs
- RowsCopiedEventArgs.cs
- dtdvalidator.cs
- ExpressionHelper.cs
- ExceptionUtil.cs
- AnnouncementDispatcherAsyncResult.cs
- DbParameterCollectionHelper.cs
- PagedDataSource.cs
- XmlCharCheckingReader.cs
- Dump.cs
- TextEffectResolver.cs
- DescendantQuery.cs
- MimeReturn.cs
- SecurityState.cs
- EdmType.cs
- PlacementWorkspace.cs
- Cursor.cs
- ProxyWebPartConnectionCollection.cs
- VoiceInfo.cs
- LicenseManager.cs
- AbsoluteQuery.cs
- BinaryWriter.cs
- HtmlControlPersistable.cs
- UserNameSecurityTokenParameters.cs
- HashRepartitionStream.cs
- GraphicsState.cs
- FilePrompt.cs
- BooleanConverter.cs
- CryptoStream.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- Byte.cs
- CacheChildrenQuery.cs
- MaskedTextProvider.cs
- BoundColumn.cs
- util.cs
- ListSurrogate.cs
- SelectionRangeConverter.cs
- GrammarBuilderDictation.cs
- Variable.cs
- ToolStripContainerActionList.cs
- HttpCapabilitiesSectionHandler.cs
- ToolStripRenderer.cs
- SiteMapDataSourceView.cs
- RepeatButton.cs
- BindingBase.cs
- ProfilePropertyMetadata.cs
- ArgumentNullException.cs
- counter.cs
- CursorInteropHelper.cs
- ControlAdapter.cs