public static void showChains(uint pStoreContext)
        {
            const uint X509_ASN_ENCODING                     = 0x00000001;
            const uint PKCS_7_ASN_ENCODING                   = 0x00010000;
            const uint CERT_CHAIN_FIND_BY_ISSUER             = 1;
            const uint CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG = 0x4000;

            uint pChainContext = 0;

            if (pStoreContext == 0)
            {
                Console.WriteLine("No store is currently open.");
                return;
            }

            Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA pvFindPara =
                new Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA();

            //get size of CERT_CHAIN_FIND_BY_ISSUER_PARA struct
            pvFindPara.cbSize = Marshal.SizeOf(pvFindPara);
            try
            {
                //get first chain
                pChainContext = Win32.CertFindChainInStore(
                    pStoreContext,
                    X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                    CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG,
                    CERT_CHAIN_FIND_BY_ISSUER,
                    ref pvFindPara,
                    0
                    );

                //get the rest
                while (pChainContext != 0)
                {
                    displayChain(pChainContext);                      // display chains
                    pChainContext = Win32.CertFindChainInStore(
                        pStoreContext,
                        X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                        CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG,
                        CERT_CHAIN_FIND_BY_ISSUER,
                        ref pvFindPara,
                        pChainContext);
                }
                return;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in " + e.Source + ": " + e.Message);
                return;
            }
        }
        public static uint getChainFromStore(uint pStoreContext, int index)
        {
            const uint X509_ASN_ENCODING                     = 0x00000001;
            const uint PKCS_7_ASN_ENCODING                   = 0x00010000;
            const uint CERT_CHAIN_FIND_BY_ISSUER             = 1;
            const uint CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG = 0x4000;

            uint pChainContext = 0;

            if (pStoreContext == 0)
            {
                Console.WriteLine("No store is currently open.");
                return(0);
            }

            Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA pvFindPara =
                new Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA();

            //get size of CERT_CHAIN_FIND_BY_ISSUER_PARA struct
            pvFindPara.cbSize = Marshal.SizeOf(pvFindPara);
            try
            {
                //get the chain
                while (index > 0)
                {
                    pChainContext = Win32.CertFindChainInStore(
                        pStoreContext,
                        X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                        CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG,
                        CERT_CHAIN_FIND_BY_ISSUER,
                        ref pvFindPara,
                        pChainContext);

                    if (pChainContext == 0)
                    {
                        Console.WriteLine(" Couldn't find chain with index " + index);
                        return(0);
                    }
                    index--;
                }
                return(pChainContext);
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in " + e.Source + ": " + e.Message);
                return(0);
            }
        }
Exemple #3
0
        public static void showChains(uint pStoreContext)
        {
            const uint X509_ASN_ENCODING						= 0x00000001;
            const uint PKCS_7_ASN_ENCODING						= 0x00010000;
            const uint CERT_CHAIN_FIND_BY_ISSUER				= 1;
            const uint CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG	=  0x4000;

            uint  pChainContext = 0;

            if (pStoreContext == 0)
            {
                Console.WriteLine("No store is currently open.");
                return;
            }

            Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA pvFindPara =
                                new Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA();

            //get size of CERT_CHAIN_FIND_BY_ISSUER_PARA struct
            pvFindPara.cbSize = Marshal.SizeOf(pvFindPara);
            try
            {
                //get first chain
                pChainContext = Win32.CertFindChainInStore(
                    pStoreContext,
                    X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                    CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG,
                    CERT_CHAIN_FIND_BY_ISSUER,
                    ref pvFindPara,
                    0
                    );

                //get the rest
                while (pChainContext != 0)
                {
                    displayChain(pChainContext);  // display chains
                    pChainContext = Win32.CertFindChainInStore(
                        pStoreContext,
                        X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                        CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG,
                        CERT_CHAIN_FIND_BY_ISSUER,
                        ref pvFindPara,
                        pChainContext);

                }
                return;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in " + e.Source + ": " + e.Message);
                return;
            }
        }
Exemple #4
0
        public static uint getChainFromStore(uint pStoreContext, int index)
        {
            const uint X509_ASN_ENCODING						= 0x00000001;
            const uint PKCS_7_ASN_ENCODING						= 0x00010000;
            const uint CERT_CHAIN_FIND_BY_ISSUER				= 1;
            const uint CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG	=  0x4000;

            uint  pChainContext = 0;

            if (pStoreContext == 0)
            {
                Console.WriteLine("No store is currently open.");
                return 0;
            }

            Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA pvFindPara =
                new Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA();

            //get size of CERT_CHAIN_FIND_BY_ISSUER_PARA struct
            pvFindPara.cbSize = Marshal.SizeOf(pvFindPara);
            try
            {
                //get the chain
                while (index > 0)
                {
                    pChainContext = Win32.CertFindChainInStore(
                        pStoreContext,
                        X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                        CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG,
                        CERT_CHAIN_FIND_BY_ISSUER,
                        ref pvFindPara,
                        pChainContext);

                    if (pChainContext == 0)
                    {
                        Console.WriteLine(" Couldn't find chain with index " + index);
                        return 0;
                    }
                    index--;
                }
                return pChainContext;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in " + e.Source + ": " + e.Message);
                return 0;
            }
        }