/// <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); }
/// <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"); } }