public static void Check(UInt32 resultCode) { if (resultCode == VMCAAdaptor.VMCA_SUCCESS || resultCode == VMCAAdaptor.VMCA_ENUM_END) { return; } switch ((VMCAErrorCode)resultCode) { case VMCAErrorCode.KeyIOFailure: throw new VMCAException(resultCode, "Private key is not valid"); case VMCAErrorCode.CertIOFailure: throw new VMCAException(resultCode, "Certificate is not valid"); case VMCAErrorCode.NotCACert: throw new VMCAException(resultCode, "Certificate is not a valid CA Certificate"); } var errorStringPtr = new IntPtr(); UInt32 dwError = VMCAAdaptor.VMCAGetErrorString( resultCode, out errorStringPtr); string errorString = string.Empty; if (dwError == 0) { errorString = Marshal.PtrToStringAnsi(errorStringPtr); } else { errorString = "Unknown Error"; } throw new VMCAException(resultCode, errorString); }
public IEnumerable <X509Certificate2> GetCertificates() { Int32 enumStatus = 0; OpenEnumContext(); while (enumStatus != (int)VMCAEnum.End) { IntPtr pCert = new IntPtr(); UInt32 error = VMCAAdaptor.VMCAGetNextCertificate(_context, out pCert, out _currentIndex, out enumStatus); VMCAError.Check(error); if ((VMCAEnum)enumStatus != VMCAEnum.Success) { yield break; } string certString = Marshal.PtrToStringAnsi(pCert); VMCAAdaptor.VMCAFreeCertificate(pCert); var cert = new X509Certificate2(ASCIIEncoding.ASCII.GetBytes(certString)); yield return(cert); } }
public void Dispose() { if (_context != null) { VMCAAdaptor.VMCACloseEnumContext(_context); } }
public static bool Validate(string certificate) { UInt32 result = VMCAAdaptor.VMCAValidateCACertificate(certificate); VMCAError.Check(result); return(true); }
public void OpenEnumContext() { if (_context.ToInt64() == 0) { UInt32 error = VMCAAdaptor.VMCAOpenEnumContextHA(Client.ServerContext, Client.ServerName, (int)Filter, out _context); VMCAError.Check(error); } }
public static string GetCertificateAsString(X509Certificate2 cert) { var certStringPtr = new IntPtr(); UInt32 result = VMCAAdaptor.VMCAGetCertificateAsString(cert.ExportToPem(), out certStringPtr); VMCAError.Check(result); var certString = Marshal.PtrToStringAnsi(certStringPtr); VMCAAdaptor.VMCAFreeString(certStringPtr); return(certString); }
public static KeyPairData Create(UInt32 length) { IntPtr pk = new IntPtr(); IntPtr pbk = new IntPtr(); try { UInt32 result = VMCAAdaptor.VMCACreatePrivateKey(null, length, out pk, out pbk); VMCAError.Check(result); string pkString = Marshal.PtrToStringAnsi(pk); string pbkString = Marshal.PtrToStringAnsi(pbk); return(new KeyPairData(pbkString, pkString)); } finally { VMCAAdaptor.VMCAFreeString(pk); VMCAAdaptor.VMCAFreeString(pbk); } }
public static void Check(UInt32 resultCode) { if (resultCode == VMCAAdaptor.VMCA_SUCCESS || resultCode == VMCAAdaptor.VMCA_ENUM_END) { return; } var errorStringPtr = new IntPtr(); UInt32 dwError = VMCAAdaptor.VMCAGetErrorString( resultCode, out errorStringPtr); string errorString = string.Empty; if (dwError == 0) { errorString = Marshal.PtrToStringAnsi(errorStringPtr); } else { errorString = "Unknown Error"; } throw new VMCAException(resultCode, errorString); }
public void Revoke() { UInt32 result = VMCAAdaptor.VMCARevokeCertificate(_client.ServerName, _certificate); VMCAError.Check(result); }