internal override bool IsMatched(string _host) { if (!this.hashed) { return(base.IsMatched(_host)); } MAC macsha1 = this._enclosing.GetHMACSHA1(); try { lock (macsha1) { macsha1.Init(this.salt); byte[] foo = Util.Str2byte(_host); macsha1.Update(foo, 0, foo.Length); byte[] bar = new byte[macsha1.GetBlockSize()]; macsha1.DoFinal(bar, 0); return(Util.Array_equals(this.hash, bar)); } } catch (Exception e) { System.Console.Out.WriteLine(e); } return(false); }
internal virtual void Hash() { if (this.hashed) { return; } MAC macsha1 = this._enclosing.GetHMACSHA1(); if (this.salt == null) { Random random = Session.random; lock (random) { this.salt = new byte[macsha1.GetBlockSize()]; random.Fill(this.salt, 0, this.salt.Length); } } try { lock (macsha1) { macsha1.Init(this.salt); byte[] foo = Util.Str2byte(this.host); macsha1.Update(foo, 0, foo.Length); this.hash = new byte[macsha1.GetBlockSize()]; macsha1.DoFinal(this.hash, 0); } } catch (Exception) { } this.host = KnownHosts.HashedHostKey.HASH_MAGIC + Util.Byte2str(Util.ToBase64(this .salt, 0, this.salt.Length)) + KnownHosts.HashedHostKey.HASH_DELIM + Util.Byte2str (Util.ToBase64(this.hash, 0, this.hash.Length)); this.hashed = true; }
/// <exception cref="System.Exception"></exception> private void UpdateKeys(KeyExchange kex) { byte[] K = kex.GetK(); byte[] H = kex.GetH(); HASH hash = kex.GetHash(); // String[] guess=kex.guess; if (session_id == null) { session_id = new byte[H.Length]; System.Array.Copy(H, 0, session_id, 0, H.Length); } buf.Reset(); buf.PutMPInt(K); buf.PutByte(H); buf.PutByte(unchecked((byte)unchecked((int)(0x41)))); buf.PutByte(session_id); hash.Update(buf.buffer, 0, buf.index); IVc2s = hash.Digest(); int j = buf.index - session_id.Length - 1; buf.buffer[j]++; hash.Update(buf.buffer, 0, buf.index); IVs2c = hash.Digest(); buf.buffer[j]++; hash.Update(buf.buffer, 0, buf.index); Ec2s = hash.Digest(); buf.buffer[j]++; hash.Update(buf.buffer, 0, buf.index); Es2c = hash.Digest(); buf.buffer[j]++; hash.Update(buf.buffer, 0, buf.index); MACc2s = hash.Digest(); buf.buffer[j]++; hash.Update(buf.buffer, 0, buf.index); MACs2c = hash.Digest(); try { Type c; string method; method = guess[KeyExchange.PROPOSAL_ENC_ALGS_STOC]; c = Sharpen.Runtime.GetType(GetConfig(method)); s2ccipher = (NSch.Cipher)(System.Activator.CreateInstance(c)); while (s2ccipher.GetBlockSize() > Es2c.Length) { buf.Reset(); buf.PutMPInt(K); buf.PutByte(H); buf.PutByte(Es2c); hash.Update(buf.buffer, 0, buf.index); byte[] foo = hash.Digest(); byte[] bar = new byte[Es2c.Length + foo.Length]; System.Array.Copy(Es2c, 0, bar, 0, Es2c.Length); System.Array.Copy(foo, 0, bar, Es2c.Length, foo.Length); Es2c = bar; } s2ccipher.Init(NSch.Cipher.DECRYPT_MODE, Es2c, IVs2c); s2ccipher_size = s2ccipher.GetIVSize(); method = guess[KeyExchange.PROPOSAL_MAC_ALGS_STOC]; c = Sharpen.Runtime.GetType(GetConfig(method)); s2cmac = (MAC)(System.Activator.CreateInstance(c)); s2cmac.Init(MACs2c); //mac_buf=new byte[s2cmac.getBlockSize()]; s2cmac_result1 = new byte[s2cmac.GetBlockSize()]; s2cmac_result2 = new byte[s2cmac.GetBlockSize()]; method = guess[KeyExchange.PROPOSAL_ENC_ALGS_CTOS]; c = Sharpen.Runtime.GetType(GetConfig(method)); c2scipher = (NSch.Cipher)(System.Activator.CreateInstance(c)); while (c2scipher.GetBlockSize() > Ec2s.Length) { buf.Reset(); buf.PutMPInt(K); buf.PutByte(H); buf.PutByte(Ec2s); hash.Update(buf.buffer, 0, buf.index); byte[] foo = hash.Digest(); byte[] bar = new byte[Ec2s.Length + foo.Length]; System.Array.Copy(Ec2s, 0, bar, 0, Ec2s.Length); System.Array.Copy(foo, 0, bar, Ec2s.Length, foo.Length); Ec2s = bar; } c2scipher.Init(NSch.Cipher.ENCRYPT_MODE, Ec2s, IVc2s); c2scipher_size = c2scipher.GetIVSize(); method = guess[KeyExchange.PROPOSAL_MAC_ALGS_CTOS]; c = Sharpen.Runtime.GetType(GetConfig(method)); c2smac = (MAC)(System.Activator.CreateInstance(c)); c2smac.Init(MACc2s); method = guess[KeyExchange.PROPOSAL_COMP_ALGS_CTOS]; InitDeflater(method); method = guess[KeyExchange.PROPOSAL_COMP_ALGS_STOC]; InitInflater(method); } catch (Exception e) { if (e is JSchException) { throw; } throw new JSchException(e.ToString(), e); } }