Opc.Ua.Win32.Decode_CERT_INFO C# (CSharp) Method

Decode_CERT_INFO() public static method

Decodes a CERT_INFO.
public static Decode_CERT_INFO ( IntPtr pEncoded, int iEncodedSize ) : CRL_INFO
pEncoded System.IntPtr
iEncodedSize int
return CRL_INFO
        public static CRL_INFO Decode_CERT_INFO(IntPtr pEncoded, int iEncodedSize)
        {
            IntPtr pData2 = IntPtr.Zero;
            int dwDataSize2 = 0;

            try
            {
                // calculate amount of memory required.
                int bResult = Win32.CryptDecodeObjectEx(
                    Win32.X509_ASN_ENCODING | Win32.PKCS_7_ASN_ENCODING,
                    (IntPtr)Win32.X509_CERT_CRL_TO_BE_SIGNED,
                    pEncoded,
                    iEncodedSize,
                    Win32.CRYPT_DECODE_NOCOPY_FLAG,
                    IntPtr.Zero,
                    pData2,
                    ref dwDataSize2);

                if (bResult == 0)
                {
                    throw GetLastError(StatusCodes.BadDecodingError, "Could not get size for CRL_INFO.");
                }

                // allocate memory.
                pData2 = Marshal.AllocHGlobal(dwDataSize2);

                // decode blob.
                bResult = Win32.CryptDecodeObjectEx(
                    Win32.X509_ASN_ENCODING | Win32.PKCS_7_ASN_ENCODING,
                    (IntPtr)Win32.X509_CERT_CRL_TO_BE_SIGNED,
                    pEncoded,
                    iEncodedSize,
                    Win32.CRYPT_DECODE_NOCOPY_FLAG,
                    IntPtr.Zero,
                    pData2,
                    ref dwDataSize2);

                if (bResult == 0)
                {
                    throw GetLastError(StatusCodes.BadDecodingError, "Could not decode CRL_INFO.");
                }

                return (Win32.CRL_INFO)Marshal.PtrToStructure(pData2, typeof(Win32.CRL_INFO));
            }
            finally
            {
                if (pData2 != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(pData2);
                }
            }
        }

Usage Example

コード例 #1
0
ファイル: X509CRL.cs プロジェクト: benvert/pfe
        private void Initialize(byte[] crl)
        {
            m_bufferSize = crl.Length;
            m_pBuffer    = Marshal.AllocHGlobal(m_bufferSize);
            Marshal.Copy(crl, 0, m_pBuffer, m_bufferSize);
            SaveUnmanagedPointer(m_pBuffer);

            m_signedCrl = Win32.Decode_CERT_SIGNED_CONTENT_INFO(m_pBuffer, crl.Length);
            Win32.CRL_INFO info = Win32.Decode_CERT_INFO(m_signedCrl.ToBeSigned.pbData, m_signedCrl.ToBeSigned.cbData);

            Issuer         = Win32.Decode_CERT_NAME_BLOB(info.Issuer);
            UpdateTime     = Win32.Decode_FILETIME(info.ThisUpdate);
            NextUpdateTime = Win32.Decode_FILETIME(info.NextUpdate);
        }