public byte[] Decrypt(byte[] data, string privateKey) { using (var reader = new StringReader(privateKey)) { // https://stackoverflow.com/a/60423034 var pemReader = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(reader); var pem = pemReader.ReadPemObject(); AsymmetricKeyParameter pk = PrivateKeyFactory.CreateKey(pem.Content); var cipher1 = new Pkcs1Encoding(new RsaEngine()); cipher1.Init(false, (ICipherParameters)pk); var decipheredData = cipher1.ProcessBlock(data, 0, data.Length); return(decipheredData); } }
public byte[] GenerateSignature(byte[] data, string privateKey) { using (var reader = new StringReader(privateKey)) { // https://stackoverflow.com/a/60423034 var pemReader = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(reader); var pem = pemReader.ReadPemObject(); AsymmetricKeyParameter pk = PrivateKeyFactory.CreateKey(pem.Content); var signer = SignerUtilities.GetSigner("SHA256WITHRSA"); signer.Init(true, pk); signer.BlockUpdate(data, 0, data.Length); var signature = signer.GenerateSignature(); return(signature); } }
public static CertificateInfo GetCertificateInfo(byte[] certificate, TCertificateFormat certificateFormat) { CertificateInfo result = null; X509CertificateStructure cert = null; switch (certificateFormat) { case TCertificateFormat.NotSet: break; case TCertificateFormat.PEM: Org.BouncyCastle.Utilities.IO.Pem.PemReader reader = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(new StreamReader(new MemoryStream(certificate))); Org.BouncyCastle.Utilities.IO.Pem.PemObject pem = reader.ReadPemObject(); while (pem != null) { if (pem.Type.EndsWith("CERTIFICATE")) { cert = X509CertificateStructure.GetInstance(pem.Content); } else if (pem.Type.EndsWith("PRIVATE KEY")) { if (result == null) { result = new CertificateInfo(); } result.PrivateKey = GetPrivateKeyFromPEM(pem); } pem = reader.ReadPemObject(); } break; case TCertificateFormat.PFX: break; case TCertificateFormat.CER: cert = X509CertificateStructure.GetInstance(certificate); break; default: break; } if (cert != null) { if (result == null) { result = new CertificateInfo(); } result.Subject = new CertificateSubject(cert); X509Certificate certX509 = new X509Certificate(cert); Asn1OctetString subjectKeyID = certX509.GetExtensionValue(X509Extensions.SubjectKeyIdentifier); if (subjectKeyID != null) { byte[] encodeKeyID = subjectKeyID.GetOctets(); byte[] keyID = new byte[encodeKeyID[1]]; Buffer.BlockCopy(encodeKeyID, 2, keyID, 0, encodeKeyID[1]); result.SubjectKeyID = keyID; } } return(result); }
public static CertificateInfo GetCertificateInfo(byte[] certificate, TCertificateFormat certificateFormat) { CertificateInfo result = null; X509CertificateStructure cert = null; switch (certificateFormat) { case TCertificateFormat.NotSet: break; case TCertificateFormat.PEM: Org.BouncyCastle.Utilities.IO.Pem.PemReader reader = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(new StreamReader(new MemoryStream(certificate))); Org.BouncyCastle.Utilities.IO.Pem.PemObject pem = reader.ReadPemObject(); while (pem != null) { if (pem.Type.EndsWith("CERTIFICATE")) { cert = X509CertificateStructure.GetInstance(pem.Content); } else if (pem.Type.EndsWith("PRIVATE KEY")) { if (result == null) result = new CertificateInfo(); result.PrivateKey = GetPrivateKeyFromPEM(pem); } pem = reader.ReadPemObject(); } break; case TCertificateFormat.PFX: break; case TCertificateFormat.CER: cert = X509CertificateStructure.GetInstance(certificate); break; default: break; } if (cert != null) { if (result == null) result = new CertificateInfo(); result.Subject = new CertificateSubject(cert); X509Certificate certX509 = new X509Certificate(cert); Asn1OctetString subjectKeyID = certX509.GetExtensionValue(X509Extensions.SubjectKeyIdentifier); if (subjectKeyID != null) { byte[] encodeKeyID = subjectKeyID.GetOctets(); byte[] keyID = new byte[encodeKeyID[1]]; Buffer.BlockCopy(encodeKeyID, 2, keyID, 0, encodeKeyID[1]); result.SubjectKeyID = keyID; } } return result; }