init commit

This commit is contained in:
2025-10-09 09:57:24 +09:00
commit 4d551bd74f
6636 changed files with 1218703 additions and 0 deletions

View File

@@ -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))
{
}
}

View File

@@ -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))
{
}
}

View File

@@ -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;
}
}