init commit
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using Org.BouncyCastle.Asn1;
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using Org.BouncyCastle.Security;
|
||||
using Org.BouncyCastle.Security.Certificates;
|
||||
|
||||
namespace Org.BouncyCastle.X509.Extension;
|
||||
|
||||
public class AuthorityKeyIdentifierStructure : AuthorityKeyIdentifier
|
||||
{
|
||||
public AuthorityKeyIdentifierStructure(Asn1OctetString encodedValue)
|
||||
: base((Asn1Sequence)X509ExtensionUtilities.FromExtensionValue(encodedValue))
|
||||
{
|
||||
}
|
||||
|
||||
private static Asn1Sequence FromCertificate(X509Certificate certificate)
|
||||
{
|
||||
try
|
||||
{
|
||||
GeneralName name = new GeneralName(PrincipalUtilities.GetIssuerX509Principal(certificate));
|
||||
if (certificate.Version == 3)
|
||||
{
|
||||
Asn1OctetString extensionValue = certificate.GetExtensionValue(X509Extensions.SubjectKeyIdentifier);
|
||||
if (extensionValue != null)
|
||||
{
|
||||
Asn1OctetString asn1OctetString = (Asn1OctetString)X509ExtensionUtilities.FromExtensionValue(extensionValue);
|
||||
return (Asn1Sequence)new AuthorityKeyIdentifier(asn1OctetString.GetOctets(), new GeneralNames(name), certificate.SerialNumber).ToAsn1Object();
|
||||
}
|
||||
}
|
||||
SubjectPublicKeyInfo spki = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(certificate.GetPublicKey());
|
||||
return (Asn1Sequence)new AuthorityKeyIdentifier(spki, new GeneralNames(name), certificate.SerialNumber).ToAsn1Object();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
throw new CertificateParsingException("Exception extracting certificate details", exception);
|
||||
}
|
||||
}
|
||||
|
||||
private static Asn1Sequence FromKey(AsymmetricKeyParameter pubKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
SubjectPublicKeyInfo spki = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey);
|
||||
return (Asn1Sequence)new AuthorityKeyIdentifier(spki).ToAsn1Object();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidKeyException("can't process key: " + ex);
|
||||
}
|
||||
}
|
||||
|
||||
public AuthorityKeyIdentifierStructure(X509Certificate certificate)
|
||||
: base(FromCertificate(certificate))
|
||||
{
|
||||
}
|
||||
|
||||
public AuthorityKeyIdentifierStructure(AsymmetricKeyParameter pubKey)
|
||||
: base(FromKey(pubKey))
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using Org.BouncyCastle.Asn1;
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using Org.BouncyCastle.Security.Certificates;
|
||||
|
||||
namespace Org.BouncyCastle.X509.Extension;
|
||||
|
||||
public class SubjectKeyIdentifierStructure : SubjectKeyIdentifier
|
||||
{
|
||||
public SubjectKeyIdentifierStructure(Asn1OctetString encodedValue)
|
||||
: base((Asn1OctetString)X509ExtensionUtilities.FromExtensionValue(encodedValue))
|
||||
{
|
||||
}
|
||||
|
||||
private static Asn1OctetString FromPublicKey(AsymmetricKeyParameter pubKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
SubjectPublicKeyInfo spki = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey);
|
||||
return (Asn1OctetString)new SubjectKeyIdentifier(spki).ToAsn1Object();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new CertificateParsingException("Exception extracting certificate details: " + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public SubjectKeyIdentifierStructure(AsymmetricKeyParameter pubKey)
|
||||
: base(FromPublicKey(pubKey))
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using Org.BouncyCastle.Asn1;
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Security.Certificates;
|
||||
using Org.BouncyCastle.Utilities;
|
||||
|
||||
namespace Org.BouncyCastle.X509.Extension;
|
||||
|
||||
public class X509ExtensionUtilities
|
||||
{
|
||||
public static Asn1Object FromExtensionValue(Asn1OctetString extensionValue)
|
||||
{
|
||||
return Asn1Object.FromByteArray(extensionValue.GetOctets());
|
||||
}
|
||||
|
||||
public static ICollection GetIssuerAlternativeNames(X509Certificate cert)
|
||||
{
|
||||
Asn1OctetString extensionValue = cert.GetExtensionValue(X509Extensions.IssuerAlternativeName);
|
||||
return GetAlternativeName(extensionValue);
|
||||
}
|
||||
|
||||
public static ICollection GetSubjectAlternativeNames(X509Certificate cert)
|
||||
{
|
||||
Asn1OctetString extensionValue = cert.GetExtensionValue(X509Extensions.SubjectAlternativeName);
|
||||
return GetAlternativeName(extensionValue);
|
||||
}
|
||||
|
||||
private static ICollection GetAlternativeName(Asn1OctetString extVal)
|
||||
{
|
||||
IList list = Platform.CreateArrayList();
|
||||
if (extVal != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
Asn1Sequence instance = Asn1Sequence.GetInstance(FromExtensionValue(extVal));
|
||||
foreach (Asn1Encodable item in instance)
|
||||
{
|
||||
IList list2 = Platform.CreateArrayList();
|
||||
GeneralName instance2 = GeneralName.GetInstance(item);
|
||||
list2.Add(instance2.TagNo);
|
||||
switch (instance2.TagNo)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
case 5:
|
||||
list2.Add(instance2.Name.ToAsn1Object());
|
||||
break;
|
||||
case 4:
|
||||
list2.Add(X509Name.GetInstance(instance2.Name).ToString());
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 6:
|
||||
list2.Add(((IAsn1String)instance2.Name).GetString());
|
||||
break;
|
||||
case 8:
|
||||
list2.Add(DerObjectIdentifier.GetInstance(instance2.Name).Id);
|
||||
break;
|
||||
case 7:
|
||||
list2.Add(Asn1OctetString.GetInstance(instance2.Name).GetOctets());
|
||||
break;
|
||||
default:
|
||||
throw new IOException("Bad tag number: " + instance2.TagNo);
|
||||
}
|
||||
list.Add(list2);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new CertificateParsingException(ex.Message);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user