/// <summary>
        /// Creates an PacCredentialInfo instance using the specified Type and credentials.
        /// </summary>
        /// <param name="type">Encryption Type.</param>
        /// <param name="key">The encrypt key.</param>
        /// <param name="credentials">A list of security package supplemental credentials.</param>
        /// <returns>The created PacCredentialInfo instance.</returns>
        /// <exception cref="ArgumentOutOfRangeException">Type is not defined.</exception>
        public static PacCredentialInfo CreateCredentialInfoBuffer(
            EncryptionType_Values type,
            byte[] key,
            _SECPKG_SUPPLEMENTAL_CRED[] credentials)
        {
            PacCredentialInfo credentialInfo = new PacCredentialInfo();

            credentialInfo.NativePacCredentialInfo.EncryptionType = type;

            _PAC_CREDENTIAL_DATA credentialData = new _PAC_CREDENTIAL_DATA();

            credentialData.CredentialCount = (uint)credentials.Length;
            credentialData.Credentials     = credentials;

            credentialInfo.Encrypt(credentialData, key);

            return(credentialInfo);
        }
예제 #2
0
        /// <summary>
        /// Decrypt specified cypher to plain text, according to specified encryption type.
        /// </summary>
        /// <param name="key">The decrypt key.</param>
        /// <param name="cypher">The specified cypher.</param>
        /// <param name="type">The specified encryption type.</param>
        /// <returns>Yhe decrypted plain text.</returns>
        private static byte[] Decrypt(byte[] key, byte[] cypher, EncryptionType_Values type)
        {
            switch (type)
            {
            case EncryptionType_Values.DES_CBC_CRC:
                return(DesCbcCrypto.Decrypt(key, cypher, EncryptionType.DES_CBC_CRC));

            case EncryptionType_Values.DES_CBC_MD5:
                return(DesCbcCrypto.Decrypt(key, cypher, EncryptionType.DES_CBC_MD5));

            case EncryptionType_Values.AES128_CTS_HMAC_SHA1_96:
                return(AesCtsHmacSha1Crypto.Decrypt(key, cypher, KerbNonKerbSalt, AesKeyType.Aes128BitsKey));

            case EncryptionType_Values.AES256_CTS_HMAC_SHA1_96:
                return(AesCtsHmacSha1Crypto.Decrypt(key, cypher, KerbNonKerbSalt, AesKeyType.Aes256BitsKey));

            case EncryptionType_Values.RC4_HMAC:
                return(Rc4HmacCrypto.Decrypt(key, cypher, KerbNonKerbSalt, EncryptionType.RC4_HMAC));

            default:
                throw new ArgumentOutOfRangeException("type");
            }
        }
        /// <summary>
        /// Encrypt specified plain text to cypher, according to specified encryption type.
        /// </summary>
        /// <param name="key">The encrypt key.</param>
        /// <param name="plain">The specified plain text.</param>
        /// <param name="type">The specified encryption type.</param>
        /// <returns>The encrypted cypher.</returns>
        private static byte[] Encrypt(byte[] key, byte[] plain, EncryptionType_Values type)
        {
            switch (type)
            {
                case EncryptionType_Values.DES_CBC_CRC:
                    return DesCbcCrypto.Encrypt(key, plain, EncryptionType.DES_CBC_CRC);

                case EncryptionType_Values.DES_CBC_MD5:
                    return DesCbcCrypto.Encrypt(key, plain, EncryptionType.DES_CBC_MD5);

                case EncryptionType_Values.AES128_CTS_HMAC_SHA1_96:
                    return AesCtsHmacSha1Crypto.Encrypt(key, plain, KerbNonKerbSalt, AesKeyType.Aes128BitsKey);

                case EncryptionType_Values.AES256_CTS_HMAC_SHA1_96:
                    return AesCtsHmacSha1Crypto.Encrypt(key, plain, KerbNonKerbSalt, AesKeyType.Aes256BitsKey);

                case EncryptionType_Values.RC4_HMAC:
                    return Rc4HmacCrypto.Encrypt(key, plain, KerbNonKerbSalt, EncryptionType.RC4_HMAC);

                default:
                    throw new ArgumentOutOfRangeException("type");
            }
        }