/// <summary>
        /// Imports the specified RSAParameters.
        /// </summary>
        /// <param name="parameters">The parameters for RSA.</param>
        public void ImportParameters(RSAParameters parameters)
        {
            bool fIncludePrivate = parameters.D != null;
            int  cntAttribs      = fIncludePrivate ? 10 : 4;

            CryptokiAttribute[] attribs = new CryptokiAttribute[cntAttribs];

            attribs[0] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Class,
                                               Utility.ConvertToBytes((int)(fIncludePrivate ? CryptokiClass.PRIVATE_KEY : CryptokiClass.PUBLIC_KEY)));
            attribs[1] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.KeyType,
                                               Utility.ConvertToBytes((int)CryptoKey.KeyType.RSA));
            attribs[2] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Modulus, parameters.Modulus);
            attribs[3] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.PublicExponent, parameters.Exponent);

            if (fIncludePrivate)
            {
                attribs[4] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.PrivateExponent, parameters.D);
                attribs[5] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Exponent1, parameters.DP);
                attribs[6] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Exponent2, parameters.DQ);
                attribs[7] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Coefficent, parameters.InverseQ);
                attribs[8] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Prime1, parameters.P);
                attribs[9] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Prime2, parameters.Q);
            }

            KeyPair     = CryptoKey.LoadKey(m_session, attribs);
            OwnsKeyPair = true;
        }
        //
        // public methods
        //

        /// <summary>
        /// Imports the specified DSAParameters.
        /// </summary>
        /// <param name="parameters">The parameters for DSA.</param>
        public void ImportParameters(DSAParameters parameters)
        {
            bool fIncludePrivate = parameters.X != null;
            int  cntAttribs      = fIncludePrivate ? 7 : 6;

            CryptokiAttribute[] attribs = new CryptokiAttribute[cntAttribs];

            attribs[0] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Class,
                                               Utility.ConvertToBytes((int)(fIncludePrivate ? CryptokiClass.PRIVATE_KEY : CryptokiClass.PUBLIC_KEY)));
            attribs[1] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.KeyType,
                                               Utility.ConvertToBytes((int)CryptoKey.KeyType.DSA));
            attribs[2] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Prime, parameters.P);
            attribs[3] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Subprime, parameters.Q);
            attribs[4] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.Base, parameters.G);
            attribs[5] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.PublicExponent, parameters.Y);

            if (fIncludePrivate)
            {
                attribs[6] = new CryptokiAttribute(CryptokiAttribute.CryptokiType.PrivateExponent, parameters.X);
            }

            KeyPair     = CryptoKey.LoadKey(m_session, attribs);
            OwnsKeyPair = true;
        }