// decoders void decodeOtherName() { try { Asn1Reader asn = new Asn1Reader(rawData); if (!asn.MoveNext()) { throw new ArgumentException("Input data is not valid OtherName."); } Oid oid = new Oid(Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData())); asn.MoveNextAndExpectTags(0xa0); asn.MoveNext(); OID = oid; switch (oid.Value) { // UPN case "1.3.6.1.4.1.311.20.2.3": Type = X509AlternativeNamesEnum.UserPrincipalName; if (asn.PayloadLength == 0) { return; } Value = Encoding.UTF8.GetString(asn.GetPayload()); break; // GUID case "1.3.6.1.4.1.311.25.1": if (asn.PayloadLength == 0) { return; } Guid guid = new Guid(asn.GetPayload()); Type = X509AlternativeNamesEnum.Guid; Value = guid.ToString(); break; default: Value = String.Empty; Type = X509AlternativeNamesEnum.OtherName; foreach (Byte B in asn.GetPayload()) { Value += $"{B:x2}" + " "; } Value = Value.Trim(); break; } } catch { throw new ArgumentException("Input data is not valid OtherName."); } }
/// <summary> /// Encodes current object to a ASN.1-encoded byte array. /// </summary> /// <returns>ASN.1-encoded byte array.</returns> /// <remarks> /// Explicit notice text is always encoded as a <strong>BMPString</strong>. /// <para>Notice reference is encoded in the following sequence: attempts to encode a string as a /// <strong>VisibleString</strong> and then as a <strong>BMPString</strong> if <strong>VisibleString</strong> fails.</para> /// </remarks> public Byte[] Encode() { switch (Type) { case X509PolicyQualifierType.CpsUrl: if (String.IsNullOrEmpty(PolicyUrl.AbsoluteUri)) { throw new UninitializedObjectException(); } List <Byte> rawData = new List <Byte>(); rawData.AddRange(Asn1Utils.EncodeObjectIdentifier(new Oid("1.3.6.1.5.5.7.2.1"))); rawData.AddRange(Asn1Utils.EncodeIA5String(PolicyUrl.AbsoluteUri)); return(Asn1Utils.Encode(rawData.ToArray(), 48)); case X509PolicyQualifierType.UserNotice: List <Byte> refpart = new List <Byte>(); if (!String.IsNullOrEmpty(NoticeReference)) { refpart.AddRange(EncodeString(NoticeReference)); refpart.AddRange(Asn1Utils.Encode(new Asn1Integer(NoticeNumber).RawData, 48)); refpart = new List <Byte>(Asn1Utils.Encode(refpart.ToArray(), 48)); } if (!String.IsNullOrEmpty(NoticeText)) { refpart.AddRange(Asn1Utils.EncodeBMPString(NoticeText)); } List <Byte> oid = new List <Byte>(); oid.AddRange(Asn1Utils.EncodeObjectIdentifier(new Oid("1.3.6.1.5.5.7.2.2"))); oid.AddRange(Asn1Utils.Encode(refpart.ToArray(), 48)); return(Asn1Utils.Encode(oid.ToArray(), 48)); default: throw new UninitializedObjectException(); } }
X509Certificate2 build(X509Certificate2 signer) { MessageSigner signerInfo = signer == null ? new MessageSigner(PrivateKeyInfo, HashingAlgorithm) : new MessageSigner(signer, HashingAlgorithm); signerInfo.PaddingScheme = AlternateSignatureFormat ? SignaturePadding.PSS : SignaturePadding.PKCS1; // initialize from v3 version var rawData = new List <Byte>(_versionBytes); // serial number rawData.AddRange(Asn1Utils.Encode(serialNumber, (Byte)Asn1Type.INTEGER)); // algorithm identifier rawData.AddRange(signerInfo.GetAlgorithmIdentifier(AlternateSignatureFormat).RawData); // issuer rawData.AddRange(signer == null ? SubjectName.RawData : signer.SubjectName.RawData); // NotBefore and NotAfter List <Byte> date = Asn1Utils.EncodeDateTime(NotBefore).ToList(); date.AddRange(Asn1Utils.EncodeDateTime(NotAfter)); rawData.AddRange(Asn1Utils.Encode(date.ToArray(), 48)); // subject rawData.AddRange(SubjectName.RawData); rawData.AddRange(PrivateKeyInfo.GetPublicKey().Encode()); rawData.AddRange(Asn1Utils.Encode(finalExtensions.Encode(), 0xa3)); var blob = new SignedContentBlob(Asn1Utils.Encode(rawData.ToArray(), 48), ContentBlobType.ToBeSignedBlob); blob.Sign(signerInfo); return(new X509Certificate2(blob.Encode())); }
public static X500RdnAttribute[] GetRdnAttributes(this X500DistinguishedName name) { if (name == null) { throw new ArgumentNullException("name"); } if (name.RawData == null || name.RawData.Length == 0) { return(null); } Asn1Reader asn = new Asn1Reader(name.RawData); if (!asn.MoveNext()) { return(null); } if (asn.NextCurrentLevelOffset == 0) { return(null); } var retValue = new List <X500RdnAttribute>(); do { Asn1Reader asn2 = new Asn1Reader(asn.GetPayload()); asn2.MoveNext(); Oid oid = Asn1Utils.DecodeObjectIdentifier(asn2.GetTagRawData()); asn2.MoveNext(); String value = Asn1Utils.DecodeAnyString(asn2.GetTagRawData(), null); retValue.Add(new X500RdnAttribute(oid, value)); } while (asn.MoveNextCurrentLevel()); return(retValue.ToArray()); }
void decode(Byte[] rawData) { var asn = new Asn1Reader(rawData); asn.MoveNext(); Version = (Int32)Asn1Utils.DecodeInteger(asn.GetTagRawData()); asn.MoveNextCurrentLevel(); Issuer = new PkcsSubjectIdentifier(asn.GetTagRawData()); asn.MoveNextCurrentLevel(); HashAlgorithm = new AlgorithmIdentifier(asn.GetTagRawData()); asn.MoveNextCurrentLevel(); if (asn.Tag == 0xa0) { _authAttributes.Decode(asn.GetTagRawData()); asn.MoveNextCurrentLevel(); } EncryptedHashAlgorithm = new AlgorithmIdentifier(asn.GetTagRawData()); asn.MoveNextCurrentLevel(); EncryptedHash = asn.GetPayload(); if (asn.MoveNextCurrentLevel() && asn.Tag == 0xa1) { _unauthAttributes.Decode(asn.GetTagRawData()); } _rawData.AddRange(rawData); }
void initializeFromAsn(Byte[] rawData) { Asn1Reader asn1 = new Asn1Reader(rawData); if (asn1.Tag != 48) { throw new Exception("Unable to decode. Input data is not valid ASN.1 encoded data."); } asn1.MoveNext(); HashingAlgorithm = new AlgorithmIdentifier(Asn1Utils.Encode(asn1.GetPayload(), 48)).AlgorithmId; asn1.MoveNextCurrentLevel(); // issuerNameHash if (asn1.Tag != 4) { throw new Exception("Unable to decode. The data is invalid"); } IssuerNameId = AsnFormatter.BinaryToString(asn1.GetPayload()).Trim(); asn1.MoveNextCurrentLevel(); // issuerKeyId if (asn1.Tag != 4) { throw new Exception("Unable to decode. The data is invalid"); } IssuerKeyId = AsnFormatter.BinaryToString(asn1.GetPayload()).Trim(); asn1.MoveNextCurrentLevel(); // serialnumber if (asn1.Tag != 2) { throw new Exception("Unable to decode. The data is invalid"); } serialNumber = asn1.GetPayload(); IsReadOnly = true; }
void m_decode(Byte[] rawData) { Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } if (!asn.MoveNext()) { throw new Asn1InvalidTagException(asn.Offset); } if (asn.Tag != (Byte)Asn1Type.OBJECT_IDENTIFIER) { throw new Asn1InvalidTagException(asn.Offset); } AlgorithmId = Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()); //Oid2 oid2 = new Oid2(oid.Value, OidGroupEnum.SignatureAlgorithm, false); //AlgorithmId = String.IsNullOrEmpty(oid2.Value) // ? oid // : new Oid(oid2.Value, oid2.FriendlyName); Parameters = asn.MoveNext() ? asn.GetTagRawData() : Asn1Utils.EncodeNull(); RawData = rawData; }
public static void Main() { byte[] dataBytes = new byte[] { 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x32, 0x30, 0x34, 0x32, 0x37, 0x31, 0x30, 0x33, 0x31, 0x31, 0x38, 0x5A, 0x17, 0x0D, 0x32, 0x32, 0x30, 0x34, 0x32, 0x35, 0x31, 0x30, 0x33, 0x31, 0x31, 0x38, 0x5A }; Asn1Logger.LogByteArray("Input Byte Array: ", dataBytes); Asn1Data asn1Data = Asn1Parser.ParseFromRawData(dataBytes); bool isMovedNext = Asn1Parser.MoveNext(asn1Data); if (isMovedNext) { byte[] notBeforeByte = Asn1Utils.DecodeDateTime(asn1Data); Asn1Logger.LogByteArray("Validity-NotBefore: ", notBeforeByte); isMovedNext = Asn1Parser.MoveNext(asn1Data); if (isMovedNext) { byte[] notAfterByte = Asn1Utils.DecodeDateTime(asn1Data); Asn1Logger.LogByteArray("Validity-NotAfter: ", notAfterByte); } else { Logger.writeLog("ERROR-Can not move to EndDate"); } } else { Logger.writeLog("ERROR-Can not move to StartDate"); } }
void m_decode(Byte[] rawData) { Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNextAndExpectTags((Byte)Asn1Type.OBJECT_IDENTIFIER); Oid = Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()); asn.MoveNext(); Asn1Type[] types = { Asn1Type.IA5String, Asn1Type.PrintableString, Asn1Type.VisibleString, Asn1Type.UTF8String, Asn1Type.UniversalString, Asn1Type.BMPString, Asn1Type.TeletexString }; encodingTag = (Asn1Type)asn.Tag; Value = Asn1Utils.DecodeAnyString(asn.GetTagRawData(), types); RawData = rawData; }
void encode() { var rawData = new List <Byte>(IssuerName.RawData); rawData.AddRange(Asn1Utils.Encode(AsnFormatter.StringToBinary(SerialNumber, EncodingType.HexRaw), (Byte)Asn1Type.INTEGER)); _rawData.AddRange(Asn1Utils.Encode(rawData.ToArray(), 48)); }
/// <summary> /// Initializes a new instance of the Oid2 class using the specified Oid friendly name or value, OID registration group and search conditions. /// </summary> /// <param name="oid">Specifies the object identifier friendly name or value to search.</param> /// <param name="group">Specifies the OID registration group to search.</param> /// <param name="searchInDirectory">Specifies whether to search for an object identifier in Active Directory. If the machine is not /// domain-joined, an OID is searched by using local registration information.</param> public Oid2(String oid, OidGroupEnum group, Boolean searchInDirectory) { var flatOid = new Oid(oid); try { // try to validate if input OID contains OID value instead of friendly name Asn1Utils.EncodeObjectIdentifier(flatOid); oid = flatOid.Value; _searchBy = "ByValue"; } catch { _searchBy = "ByName"; } if (Environment.OSVersion.Version.Major >= 6) { _cng = true; } if (searchInDirectory) { if (DsUtils.Ping()) { initializeDS(oid, group); } else { initializeLocal(oid, group); } } else { initializeLocal(oid, group); } }
void m_decode(Byte[] rawData) { List <String> aiaUrls = new List <String>(); List <String> ocspUrls = new List <String>(); Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new ArgumentException("The data is invalid"); } asn.MoveNext(); do { Asn1Reader asnurl = new Asn1Reader(asn.GetTagRawData()); if (asnurl.Tag != 48) { throw new ArgumentException("The data is invalid"); } asnurl.MoveNext(); String oidString = Asn1Utils.DecodeObjectIdentifier(asnurl.GetTagRawData()).Value; asnurl.MoveNext(); if (asnurl.Tag != 134) { throw new ArgumentException("The data is invalid"); } switch (oidString) { case "1.3.6.1.5.5.7.48.2": aiaUrls.Add(Encoding.ASCII.GetString(asnurl.GetPayload())); break; case "1.3.6.1.5.5.7.48.1": ocspUrls.Add(Encoding.ASCII.GetString(asnurl.GetPayload())); break; } } while (asn.MoveNextCurrentLevel()); CertificationAuthorityIssuer = aiaUrls.ToArray(); OnlineCertificateStatusProtocol = ocspUrls.ToArray(); }
void m_decode(Byte[] rawData) { Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); IncludedComponents = AuthorityKeyIdentifierFlags.None; do { switch (asn.Tag) { case 0x80: KeyIdentifier = AsnFormatter.BinaryToString(asn.GetPayload(), EncodingType.HexRaw, EncodingFormat.NOCRLF); IncludedComponents |= AuthorityKeyIdentifierFlags.KeyIdentifier; break; case 0xa1: IssuerNames = new X509AlternativeNameCollection(); var bytes = Asn1Utils.Encode(asn.GetPayload(), 48); IssuerNames.Decode(bytes); IssuerNames.Close(); IncludedComponents |= AuthorityKeyIdentifierFlags.AlternativeNames; break; case 0x82: SerialNumber = AsnFormatter.BinaryToString(asn.GetPayload()); IncludedComponents |= AuthorityKeyIdentifierFlags.SerialNumber; break; } } while (asn.MoveNextCurrentLevel()); }
public static void Main() { byte[] dataBytes = new byte[] { 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x32, 0x30, 0x34, 0x32, 0x37, 0x31, 0x30, 0x33, 0x31, 0x31, 0x38, 0x5A, 0x17, 0x0D, 0x32, 0x32, 0x30, 0x34, 0x32, 0x35, 0x31, 0x30, 0x33, 0x31, 0x31, 0x38, 0x5A }; Asn1Data asn1Data = Asn1Parser.ParseFromRawData(dataBytes); Asn1Logger.LogCurrentNodeValues(asn1Data, "Validity"); bool isMovedNext = Asn1Parser.MoveNext(asn1Data); if (isMovedNext) { byte[] notBeforeByte = Asn1Utils.DecodeDateTime(asn1Data); Asn1Logger.LogCurrentNodeValues(asn1Data, "StartDate"); isMovedNext = Asn1Parser.MoveNext(asn1Data); if (isMovedNext) { Asn1Logger.LogCurrentNodeValues(asn1Data, "EndDate"); } else { Logger.writeLog("ERROR-Can not move to EndDate"); } } else { Logger.writeLog("ERROR-Can not move to StartDate"); } }
void encodeRegisteredId(Object value) { if (value == null) { RawData = new Byte[] { 136, 0 }; } else { Asn1Reader asn; switch (value.GetType().FullName) { case "System.String": Value = (String)value; Oid oid = new Oid((String)value); asn = new Asn1Reader(Asn1Utils.EncodeObjectIdentifier(oid)); Value = oid.Value; break; case "System.Security.Oid": asn = new Asn1Reader(Asn1Utils.EncodeObjectIdentifier((Oid)value)); Value = ((Oid)value).Value; break; case "System.Security.Oid2": asn = new Asn1Reader(Asn1Utils.EncodeObjectIdentifier(new Oid(((Oid2)value).Value))); Value = ((Oid2)value).Value; break; default: throw new ArgumentException("The input data is not valid registered ID."); } RawData = Asn1Utils.Encode(asn.GetPayload(), 136); } }
void encode() { List <Byte> rawData = new List <Byte>(IssuerName.RawData); rawData.AddRange(Asn1Utils.Encode(AsnFormatter.StringToBinary(SerialNumber, EncodingType.HexRaw), 4)); RawData = rawData.ToArray(); }
static ECDsaCng bindPublicKey(PublicKey pubKey) { List <Byte> header = new List <Byte>(); // headers from bcrypt.h switch (Asn1Utils.DecodeObjectIdentifier(pubKey.EncodedParameters.RawData).Value) { // ECDH_P256/ECDSA_P256 case "1.2.840.10045.3.1.7": header.AddRange(new Byte[] { 69, 67, 83, 49, 32, 0, 0, 0 }); break; // ECDH_P384/ECDSA_P384 case "1.3.132.0.34": header.AddRange(new Byte[] { 69, 67, 83, 51, 48, 0, 0, 0 }); break; // ECDH_P521/ECDSA_P251 case "1.3.132.0.35": header.AddRange(new Byte[] { 69, 67, 83, 53, 66, 0, 0, 0 }); break; default: throw new CryptographicException("Specified ellyptic curve is not supported."); } header.AddRange(pubKey.EncodedKeyValue.RawData.Skip(1)); CngKey cngKey = CngKey.Import(header.ToArray(), CngKeyBlobFormat.GenericPublicBlob); return(new ECDsaCng(cngKey)); }
void encodeDnsName(String value) { try { Value = value; RawData = Asn1Utils.Encode(Encoding.UTF8.GetBytes(Value), 130); } catch { throw new ArgumentException("The string is not valid DNS name"); } }
void m_encode(Boolean fValue) { Value = fValue; Byte value = (Byte)(fValue ? 255 : 0); Initialize(new Asn1Reader(Asn1Utils.Encode(new[] { value }, TAG))); }
static void readEcdsaHeader(List <Byte> blob, PublicKey publicKey) { /* * typedef struct _BCRYPT_ECCKEY_BLOB { * ULONG Magic; * ULONG cbKey; * } BBCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB; -- public key only */ // headers from bcrypt.h switch (Asn1Utils.DecodeObjectIdentifier(publicKey.EncodedParameters.RawData).Value) { // P256 case "1.2.840.10045.3.1.7": blob.AddRange(BitConverter.GetBytes(ECDSA_P256_MAGIC)); blob.AddRange(BitConverter.GetBytes(256 / 8)); break; // P384 case "1.3.132.0.34": blob.AddRange(BitConverter.GetBytes(ECDSA_P384_MAGIC)); blob.AddRange(BitConverter.GetBytes(384 / 8)); break; // P521 case "1.3.132.0.35": blob.AddRange(BitConverter.GetBytes(ECDSA_P521_MAGIC)); blob.AddRange(BitConverter.GetBytes(528 / 8)); break; default: throw new CryptographicException("Specified elliptic curve is not supported."); } // skip first byte, it is always 0X04 for ECDSA public key blob.AddRange(publicKey.EncodedKeyValue.RawData.Skip(1)); }
/// <summary> /// Encodes current object to ASN.1-encoded byte array. /// </summary> /// <returns>ASN.1-encoded byte array.</returns> public Byte[] Encode() { List <Byte> list = new List <Byte>(Asn1Utils.Encode(RawData, 49)); list.InsertRange(0, Asn1Utils.EncodeObjectIdentifier(Oid)); return(Asn1Utils.Encode(list.ToArray(), 48)); }
void m_decode(Byte[] rawData) { var aiaUrls = new List <String>(); var ocspUrls = new List <String>(); var asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); do { Int32 offset = asn.Offset; if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); String oidString = Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()).Value; asn.MoveNextAndExpectTags(0x86); switch (oidString) { case "1.3.6.1.5.5.7.48.2": aiaUrls.Add(Encoding.ASCII.GetString(asn.GetPayload())); break; case "1.3.6.1.5.5.7.48.1": ocspUrls.Add(Encoding.ASCII.GetString(asn.GetPayload())); break; } asn.MoveToPosition(offset); } while (asn.MoveNextCurrentLevel()); CertificationAuthorityIssuer = aiaUrls.ToArray(); OnlineCertificateStatusProtocol = ocspUrls.ToArray(); }
public static void Main() { byte[] validityDataBytes = new byte[] { 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x32, 0x30, 0x34, 0x32, 0x37, 0x31, 0x30, 0x33, 0x31, 0x31, 0x38, 0x5A, 0x17, 0x0D, 0x32, 0x32, 0x30, 0x34, 0x32, 0x35, 0x31, 0x30, 0x33, 0x31, 0x31, 0x38, 0x5A }; Storage.Put(Storage.CurrentContext, "Validity Data Encoded", validityDataBytes); Asn1Data asn1Data = Asn1Parser.ParseFromRawData(validityDataBytes); bool isMovedNext = Asn1Parser.MoveNext(asn1Data); if (isMovedNext) { byte[] notBeforeByte = Asn1Utils.DecodeDateTime(asn1Data); Storage.Put(Storage.CurrentContext, "notBefore", notBeforeByte); isMovedNext = Asn1Parser.MoveNext(asn1Data); if (isMovedNext) { byte [] notAfterByte = Asn1Utils.DecodeDateTime(asn1Data); Storage.Put(Storage.CurrentContext, "notAfter", notAfterByte); } else { Logger.writeLog("ERROR-Can not move to EndDate"); } } else { Logger.writeLog("ERROR-Can not move to StartDate"); } }
void m_initialize(Byte[] rawData) { Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); SerialNumber = Asn1Utils.DecodeInteger(asn.GetTagRawData(), true); asn.MoveNext(); if (asn.Tag != (Byte)Asn1Type.UTCTime && asn.Tag != (Byte)Asn1Type.GeneralizedTime) { throw new Asn1InvalidTagException(asn.Offset); } if (asn.Tag == (Byte)Asn1Type.UTCTime) { RevocationDate = new Asn1UtcTime(asn.GetTagRawData()).Value; } if (asn.Tag == (Byte)Asn1Type.GeneralizedTime) { RevocationDate = Asn1Utils.DecodeGeneralizedTime(asn.GetTagRawData()); } if (asn.MoveNext()) { var extensions = new X509ExtensionCollection(); extensions.Decode(asn.GetTagRawData()); X509Extension crlReason = extensions[X509CertExtensions.X509CRLReasonCode]; if (crlReason != null) { ReasonCode = crlReason.RawData[2]; } } RawData = rawData; }
void m_encode(Boolean fValue) { Value = fValue; var value = fValue ? 255 : 0; Initialize(new Asn1Reader(Asn1Utils.Encode(new Byte[value], TAG))); }
void encodeDirectoryName(Object value) { if (value == null) { RawData = new Byte[] { 164, 2, 48, 0 }; } else { X500DistinguishedName name; if (value as String != null) { try { name = new X500DistinguishedName((String)value); } catch { throw new ArgumentException("The string is not valid X.500 name."); } } else { try { name = new X500DistinguishedName((X500DistinguishedName)value); } catch { throw new ArgumentException("The string is not valid X500DistinguishedName object."); } } Value = name.Name; RawData = Asn1Utils.Encode(name.RawData, 164); } }
void m_initialize(Oid oid, Int32 majorVersion, Int32 minorVersion) { Oid = _eoid; Asn1Utils.EncodeObjectIdentifier(oid); Wincrypt.CERT_TEMPLATE_EXT pvStructInfo = new Wincrypt.CERT_TEMPLATE_EXT { pszObjId = oid.Value, dwMajorVersion = (UInt32)majorVersion, dwMinorVersion = (UInt32)minorVersion, fMinorVersion = true }; UInt32 pcbEncoded = 0; if (Crypt32.CryptEncodeObject(1, "1.3.6.1.4.1.311.21.7", ref pvStructInfo, null, ref pcbEncoded)) { RawData = new Byte[pcbEncoded]; Crypt32.CryptEncodeObject(1, "1.3.6.1.4.1.311.21.7", ref pvStructInfo, RawData, ref pcbEncoded); TemplateOid = new Oid(pvStructInfo.pszObjId); MajorVersion = majorVersion; MinorVersion = minorVersion; } else { throw new Win32Exception(Marshal.GetLastWin32Error()); } }
void encodeUrl(Object value) { if (value == null) { RawData = new Byte[] { 134, 0 }; } else { Uri url; if (value as String != null) { try { url = new Uri((String)value); } catch { throw new ArgumentException("The string is not valid URL."); } } else { try { url = (Uri)value; } catch { throw new ArgumentException("The string is not valid Uri object."); } } Value = url.AbsoluteUri; RawData = Asn1Utils.Encode(Encoding.UTF8.GetBytes(Value), 134); } }
public static X509Extension DecodeX509Extension(Byte[] rawData) { if (rawData == null) { throw new ArgumentNullException(nameof(rawData)); } Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(asn.Offset); } asn.MoveNext(); if (asn.Tag != (Byte)Asn1Type.OBJECT_IDENTIFIER) { throw new Asn1InvalidTagException(asn.Offset); } Oid oid = new Asn1ObjectIdentifier(asn).Value; Boolean critical = false; asn.MoveNext(); if (asn.Tag == (Byte)Asn1Type.BOOLEAN) { critical = Asn1Utils.DecodeBoolean(asn.GetTagRawData()); asn.MoveNext(); } if (asn.Tag != (Byte)Asn1Type.OCTET_STRING) { throw new Asn1InvalidTagException(asn.Offset); } return(new X509Extension(oid, asn.GetPayload(), critical).ConvertExtension()); }
void encodeRegisteredId(Object value) { if (value == null) { rawData = new Byte[] { 136, 0 }; } else { Asn1Reader asn; switch (value) { case String sValue: Value = sValue; Oid oid = new Oid(sValue); asn = new Asn1Reader(Asn1Utils.EncodeObjectIdentifier(oid)); Value = oid.Value; break; case Oid oid1: asn = new Asn1Reader(Asn1Utils.EncodeObjectIdentifier(oid1)); Value = oid1.Value; break; case Oid2 oid2: asn = new Asn1Reader(Asn1Utils.EncodeObjectIdentifier(new Oid(oid2.Value))); Value = oid2.Value; break; default: throw new ArgumentException("The input data is not valid registered ID."); } rawData = Asn1Utils.Encode(asn.GetPayload(), 136); } }