/// <summary> /// Compute RC4HMAC. /// </summary> /// <param name="key">The key to do RC4HMAC.</param> /// <param name="macContent">The content to do HMAC.</param> /// <param name="data">The data to be computed.</param> /// <param name="isExport">True for EncryptionType.RC4_HMAC_EXP, false for EncryptionType.RC4_HMAC.</param> /// <returns>The computed result.</returns> public static byte[] RC4HMAC(byte[] key, byte[] macContent, byte[] data, bool isExport) { byte[] Kseq = null; if (isExport) // EncryptionType.RC4_HMAC_EXP { // Kseq = HMAC(Kss, "fortybits", (int32)0); Kseq = KerberosUtility.HMAC(key, KerberosConstValue.FORTY_BITS, 0); // memset(Kseq+7, 0xab, 9) for (int i = 0; i < 9; ++i) { Kseq[i + 7] = 0xab; } } else // EncryptionType.RC4_HMAC { Kseq = KerberosUtility.HMAC(key, 0); } Kseq = HMAC(Kseq, macContent); return(KerberosUtility.RC4(Kseq, data)); }