Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / security / system / security / cryptography / AsnEncodedData.cs / 2 / AsnEncodedData.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// AsnEncodedData.cs
//
namespace System.Security.Cryptography {
using System.Collections;
using System.Globalization;
using System.Runtime.InteropServices;
public class AsnEncodedData {
internal Oid m_oid = null;
internal byte[] m_rawData = null;
internal AsnEncodedData (Oid oid) {
m_oid = oid;
}
internal AsnEncodedData (string oid, CAPI.CRYPTOAPI_BLOB encodedBlob) : this(oid, CAPI.BlobToByteArray(encodedBlob)) {}
internal AsnEncodedData (Oid oid, CAPI.CRYPTOAPI_BLOB encodedBlob) : this(oid, CAPI.BlobToByteArray(encodedBlob)) {}
protected AsnEncodedData () {}
public AsnEncodedData (byte[] rawData) {
Reset(null, rawData);
}
public AsnEncodedData (string oid, byte[] rawData) {
Reset(new Oid(oid), rawData);
}
public AsnEncodedData (Oid oid, byte[] rawData) {
Reset(oid, rawData);
}
public AsnEncodedData (AsnEncodedData asnEncodedData) {
if (asnEncodedData == null)
throw new ArgumentNullException("asnEncodedData");
Reset(asnEncodedData.m_oid, asnEncodedData.m_rawData);
}
public Oid Oid {
get {
return m_oid;
}
set {
if (value == null)
m_oid = null;
else
m_oid = new Oid(value);
}
}
public byte[] RawData {
get {
return m_rawData;
}
set {
if (value == null)
throw new ArgumentNullException("value");
m_rawData = (byte[]) value.Clone();
}
}
public virtual void CopyFrom (AsnEncodedData asnEncodedData) {
if (asnEncodedData == null)
throw new ArgumentNullException("asnEncodedData");
Reset(asnEncodedData.m_oid, asnEncodedData.m_rawData);
}
public virtual string Format (bool multiLine) {
// Return empty string if no data to format.
if (m_rawData == null || m_rawData.Length == 0)
return String.Empty;
// If OID is not present, then we can force CryptFormatObject
// to use hex formatting by providing an empty OID string.
string oidValue = String.Empty;
if (m_oid != null && m_oid.Value != null)
oidValue = m_oid.Value;
return CAPI.CryptFormatObject(CAPI.X509_ASN_ENCODING,
multiLine ? CAPI.CRYPT_FORMAT_STR_MULTI_LINE : 0,
oidValue,
m_rawData);
}
private void Reset (Oid oid, byte[] rawData) {
this.Oid = oid;
this.RawData = rawData;
}
}
public sealed class AsnEncodedDataCollection : ICollection {
private ArrayList m_list = null;
private Oid m_oid = null;
public AsnEncodedDataCollection () {
m_list = new ArrayList();
m_oid = null;
}
public AsnEncodedDataCollection(AsnEncodedData asnEncodedData) : this() {
m_list.Add(asnEncodedData);
}
public int Add (AsnEncodedData asnEncodedData) {
if (asnEncodedData == null)
throw new ArgumentNullException("asnEncodedData");
//
// If m_oid is not null, then OIDs must match.
//
if (m_oid != null) {
string szOid1 = m_oid.Value;
string szOid2 = asnEncodedData.Oid.Value;
if (szOid1 != null && szOid2 != null) {
// Both are not null, so make sure OIDs match.
if (String.Compare(szOid1, szOid2, StringComparison.OrdinalIgnoreCase) != 0)
throw new CryptographicException(SR.GetString(SR.Cryptography_Asn_MismatchedOidInCollection));
}
else if (szOid1 != null || szOid2 != null) {
// Can't be matching, since only one of them is null.
throw new CryptographicException(SR.GetString(SR.Cryptography_Asn_MismatchedOidInCollection));
}
}
return m_list.Add(asnEncodedData);
}
public void Remove (AsnEncodedData asnEncodedData) {
if (asnEncodedData == null)
throw new ArgumentNullException("asnEncodedData");
m_list.Remove(asnEncodedData);
}
public AsnEncodedData this[int index] {
get {
return (AsnEncodedData) m_list[index];
}
}
public int Count {
get {
return m_list.Count;
}
}
public AsnEncodedDataEnumerator GetEnumerator() {
return new AsnEncodedDataEnumerator(this);
}
///
IEnumerator IEnumerable.GetEnumerator() {
return new AsnEncodedDataEnumerator(this);
}
///
void ICollection.CopyTo(Array array, int index) {
if (array == null)
throw new ArgumentNullException("array");
if (array.Rank != 1)
throw new ArgumentException(SR.GetString(SR.Arg_RankMultiDimNotSupported));
if (index < 0 || index >= array.Length)
throw new ArgumentOutOfRangeException("index", SR.GetString(SR.ArgumentOutOfRange_Index));
if (index + this.Count > array.Length)
throw new ArgumentException(SR.GetString(SR.Argument_InvalidOffLen));
for (int i=0; i < this.Count; i++) {
array.SetValue(this[i], index);
index++;
}
}
public void CopyTo(AsnEncodedData[] array, int index) {
((ICollection)this).CopyTo(array, index);
}
public bool IsSynchronized {
get {
return false;
}
}
public Object SyncRoot {
get {
return this;
}
}
}
public sealed class AsnEncodedDataEnumerator : IEnumerator {
private AsnEncodedDataCollection m_asnEncodedDatas;
private int m_current;
private AsnEncodedDataEnumerator() {}
internal AsnEncodedDataEnumerator(AsnEncodedDataCollection asnEncodedDatas) {
m_asnEncodedDatas = asnEncodedDatas;
m_current = -1;
}
public AsnEncodedData Current {
get {
return m_asnEncodedDatas[m_current];
}
}
///
Object IEnumerator.Current {
get {
return (Object) m_asnEncodedDatas[m_current];
}
}
public bool MoveNext() {
if (m_current == ((int) m_asnEncodedDatas.Count - 1))
return false;
m_current++;
return true;
}
public void Reset() {
m_current = -1;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NativeWindow.cs
- AmbientValueAttribute.cs
- ResponseBodyWriter.cs
- HttpException.cs
- ToolConsole.cs
- XMLDiffLoader.cs
- Random.cs
- Int64Converter.cs
- TargetConverter.cs
- UdpDiscoveryEndpoint.cs
- UnsafeNativeMethods.cs
- ColorConverter.cs
- TemplateBamlRecordReader.cs
- DynamicRouteExpression.cs
- PolicyStatement.cs
- WizardStepBase.cs
- XPathNodeList.cs
- SystemWebCachingSectionGroup.cs
- FixedTextPointer.cs
- DataGridViewCellParsingEventArgs.cs
- CompilationUtil.cs
- DataKeyArray.cs
- ClientUrlResolverWrapper.cs
- OdbcDataAdapter.cs
- InvariantComparer.cs
- LabelEditEvent.cs
- PointCollectionConverter.cs
- EntityEntry.cs
- LinearQuaternionKeyFrame.cs
- QueryMath.cs
- EditorZoneAutoFormat.cs
- Int64AnimationBase.cs
- NetworkInformationException.cs
- AnimationClockResource.cs
- XPathPatternParser.cs
- SrgsElementFactory.cs
- EndpointDiscoveryBehavior.cs
- cookiecollection.cs
- UnknownBitmapEncoder.cs
- documentsequencetextview.cs
- ListenerElementsCollection.cs
- FragmentQueryProcessor.cs
- SymbolEqualComparer.cs
- XmlResolver.cs
- XPathDocumentNavigator.cs
- CqlErrorHelper.cs
- RelatedCurrencyManager.cs
- SchemaCollectionPreprocessor.cs
- PropertyChangeTracker.cs
- XmlIgnoreAttribute.cs
- IfAction.cs
- InputManager.cs
- ServiceHostFactory.cs
- ReversePositionQuery.cs
- CounterSet.cs
- PageParser.cs
- ExpressionCopier.cs
- EntityConnectionStringBuilder.cs
- UriParserTemplates.cs
- Page.cs
- IPHostEntry.cs
- WindowsBrush.cs
- DataGridViewBand.cs
- XmlSerializerSection.cs
- IgnoreSectionHandler.cs
- ScriptingSectionGroup.cs
- EventProxy.cs
- TraceHelpers.cs
- SqlDataAdapter.cs
- MouseGesture.cs
- __TransparentProxy.cs
- HtmlMeta.cs
- ListArgumentProvider.cs
- PointConverter.cs
- MetadataElement.cs
- FieldTemplateFactory.cs
- MediaTimeline.cs
- RequestSecurityTokenForGetBrowserToken.cs
- XamlParser.cs
- InvalidDataContractException.cs
- ListSourceHelper.cs
- StrokeCollectionDefaultValueFactory.cs
- SerializableAuthorizationContext.cs
- EditingMode.cs
- TraceFilter.cs
- sortedlist.cs
- XPathAxisIterator.cs
- TypeForwardedFromAttribute.cs
- XXXInfos.cs
- WebPartMenu.cs
- WebPart.cs
- login.cs
- HttpRuntime.cs
- CookieProtection.cs
- MdImport.cs
- sqlstateclientmanager.cs
- Int16Storage.cs
- InfocardInteractiveChannelInitializer.cs
- TreeView.cs
- TextBox.cs