/// <summary> /// Create context /// </summary> /// <param name="domain">Domain name</param> /// <param name="cName">Principal name</param> /// <param name="password">Password of principal</param> /// <param name="accountType">Accoundtype, user or device</param> public KerberosContext(string domain, string cName, string password, KerberosAccountType accountType, string salt = null) : this() { if (domain == null) { throw new ArgumentNullException("domain"); } if (cName == null) { throw new ArgumentNullException("cName"); } if (password == null) { throw new ArgumentNullException("password"); } this.Realm = new Realm(domain); PrincipalName name = new PrincipalName(new KerbInt32((int)PrincipalType.NT_PRINCIPAL), KerberosUtility.String2SeqKerbString(cName)); if (null == salt) { if (accountType == KerberosAccountType.User) { salt = KerberosUtility.GenerateSalt(domain, cName, accountType); } else if (accountType == KerberosAccountType.Device) { salt = KerberosUtility.GenerateSalt(domain, cName, accountType); } else { throw new ArgumentOutOfRangeException("Account type not support"); } } this.CName = new Principal(accountType, this.Realm, name, password, salt); }