/// <summary>
        /// Initializes a new instance of the X509Certificate2 class from a byte array
        /// </summary>
        /// <param name="session">Cryptoki session for which this certificate will be created</param>
        /// <param name="data">Data bytes for the certificate (PEM, DER, P12, etc.)</param>
        /// <param name="password">Password for decrypting the certificate data (optional)</param>
        public X509Certificate2(Session session, byte[] data, string password = "")
        {
            if (data == null || data.Length == 0)
            {
                throw new ArgumentException();
            }

            m_cert = CryptokiCertificate.LoadCertificate(session, data, password);

            Init();
        }
        internal X509Certificate2(CryptokiCertificate cert)
        {
            m_cert = cert;

            Init();
        }
        /// <summary>
        /// Initializes a new instance of the X509Certificate2 class from a Cryptoki attribute array
        /// </summary>
        /// <param name="session"></param>
        /// <param name="template"></param>
        public X509Certificate2(Session session, CryptokiAttribute[] template)
        {
            m_cert = CryptokiCertificate.CreateCertificate(session, template);

            Init();
        }