コード例 #1
0
ファイル: Util.cs プロジェクト: shoff/ngit
 internal static string GetFingerPrint(HASH hash, byte[] data)
 {
     try
     {
         hash.Init();
         hash.Update(data, 0, data.Length);
         byte[]        foo = hash.Digest();
         StringBuilder sb  = new StringBuilder();
         int           bar;
         for (int i = 0; i < foo.Length; i++)
         {
             bar = foo[i] & unchecked ((int)(0xff));
             sb.Append(chars[((int)(((uint)bar) >> 4)) & unchecked ((int)(0xf))]);
             sb.Append(chars[(bar) & unchecked ((int)(0xf))]);
             if (i + 1 < foo.Length)
             {
                 sb.Append(":");
             }
         }
         return(sb.ToString());
     }
     catch (Exception)
     {
         return("???");
     }
 }
コード例 #2
0
 private HASH GenHash()
 {
     try
     {
         Type c = Sharpen.Runtime.GetType(JSch.GetConfig("md5"));
         hash = (HASH)(System.Activator.CreateInstance(c));
         hash.Init();
     }
     catch (Exception)
     {
     }
     return(hash);
 }
コード例 #3
0
ファイル: Util.cs プロジェクト: LunarLanding/ngit
		internal static string GetFingerPrint(HASH hash, byte[] data)
		{
			try
			{
				hash.Init();
				hash.Update(data, 0, data.Length);
				byte[] foo = hash.Digest();
				StringBuilder sb = new StringBuilder();
				int bar;
				for (int i = 0; i < foo.Length; i++)
				{
					bar = foo[i] & unchecked((int)(0xff));
					sb.Append(chars[((int)(((uint)bar) >> 4)) & unchecked((int)(0xf))]);
					sb.Append(chars[(bar) & unchecked((int)(0xf))]);
					if (i + 1 < foo.Length)
					{
						sb.Append(":");
					}
				}
				return sb.ToString();
			}
			catch (Exception)
			{
				return "???";
			}
		}
コード例 #4
0
ファイル: KeyPair.cs プロジェクト: yayanyang/monodevelop
		private HASH GenHash()
		{
			try
			{
				Type c = Sharpen.Runtime.GetType(JSch.GetConfig("md5"));
				hash = (HASH)(System.Activator.CreateInstance(c));
				hash.Init();
			}
			catch (Exception)
			{
			}
			return hash;
		}
コード例 #5
0
 /// <exception cref="NSch.JSchException"></exception>
 private IdentityFile(string name, byte[] prvkey, byte[] pubkey, JSch jsch)
 {
     this.identity = name;
     this.jsch     = jsch;
     // prvkey from "ssh-add" command on the remote.
     if (pubkey == null && prvkey != null && (prvkey.Length > 11 && prvkey[0] == 0 &&
                                              prvkey[1] == 0 && prvkey[2] == 0 && prvkey[3] == 7))
     {
         Buffer buf   = new Buffer(prvkey);
         string _type = Sharpen.Runtime.GetStringForBytes(buf.GetString());
         // ssh-rsa
         if (_type.Equals("ssh-rsa"))
         {
             type    = RSA;
             n_array = buf.GetString();
             e_array = buf.GetString();
             d_array = buf.GetString();
             buf.GetString();
             buf.GetString();
             buf.GetString();
             this.identity += Sharpen.Runtime.GetStringForBytes(buf.GetString());
         }
         else
         {
             if (_type.Equals("ssh-dss"))
             {
                 type           = DSS;
                 P_array        = buf.GetString();
                 Q_array        = buf.GetString();
                 G_array        = buf.GetString();
                 pub_array      = buf.GetString();
                 prv_array      = buf.GetString();
                 this.identity += Sharpen.Runtime.GetStringForBytes(buf.GetString());
             }
             else
             {
                 throw new JSchException("privatekey: invalid key " + Sharpen.Runtime.GetStringForBytes
                                             (prvkey, 4, 7));
             }
         }
         encoded_data = prvkey;
         encrypted    = false;
         keytype      = OPENSSH;
         return;
     }
     try
     {
         Type c;
         c      = Sharpen.Runtime.GetType((string)JSch.GetConfig("3des-cbc"));
         cipher = (NSch.Cipher)(System.Activator.CreateInstance(c));
         key    = new byte[cipher.GetBlockSize()];
         // 24
         iv = new byte[cipher.GetIVSize()];
         // 8
         c    = Sharpen.Runtime.GetType((string)JSch.GetConfig("md5"));
         hash = (HASH)(System.Activator.CreateInstance(c));
         hash.Init();
         byte[] buf = prvkey;
         int    len = buf.Length;
         int    i   = 0;
         while (i < len)
         {
             if (buf[i] == '-' && i + 4 < len && buf[i + 1] == '-' && buf[i + 2] == '-' && buf
                 [i + 3] == '-' && buf[i + 4] == '-')
             {
                 break;
             }
             i++;
         }
         while (i < len)
         {
             if (buf[i] == 'B' && i + 3 < len && buf[i + 1] == 'E' && buf[i + 2] == 'G' && buf
                 [i + 3] == 'I')
             {
                 i += 6;
                 if (buf[i] == 'D' && buf[i + 1] == 'S' && buf[i + 2] == 'A')
                 {
                     type = DSS;
                 }
                 else
                 {
                     if (buf[i] == 'R' && buf[i + 1] == 'S' && buf[i + 2] == 'A')
                     {
                         type = RSA;
                     }
                     else
                     {
                         if (buf[i] == 'S' && buf[i + 1] == 'S' && buf[i + 2] == 'H')
                         {
                             // FSecure
                             type    = UNKNOWN;
                             keytype = FSECURE;
                         }
                         else
                         {
                             //System.err.println("invalid format: "+identity);
                             throw new JSchException("invalid privatekey: " + identity);
                         }
                     }
                 }
                 i += 3;
                 continue;
             }
             if (buf[i] == 'A' && i + 7 < len && buf[i + 1] == 'E' && buf[i + 2] == 'S' && buf
                 [i + 3] == '-' && buf[i + 4] == '2' && buf[i + 5] == '5' && buf[i + 6] == '6' &&
                 buf[i + 7] == '-')
             {
                 i += 8;
                 if (Session.CheckCipher((string)JSch.GetConfig("aes256-cbc")))
                 {
                     c      = Sharpen.Runtime.GetType((string)JSch.GetConfig("aes256-cbc"));
                     cipher = (NSch.Cipher)(System.Activator.CreateInstance(c));
                     key    = new byte[cipher.GetBlockSize()];
                     iv     = new byte[cipher.GetIVSize()];
                 }
                 else
                 {
                     throw new JSchException("privatekey: aes256-cbc is not available " + identity);
                 }
                 continue;
             }
             if (buf[i] == 'A' && i + 7 < len && buf[i + 1] == 'E' && buf[i + 2] == 'S' && buf
                 [i + 3] == '-' && buf[i + 4] == '1' && buf[i + 5] == '9' && buf[i + 6] == '2' &&
                 buf[i + 7] == '-')
             {
                 i += 8;
                 if (Session.CheckCipher((string)JSch.GetConfig("aes192-cbc")))
                 {
                     c      = Sharpen.Runtime.GetType((string)JSch.GetConfig("aes192-cbc"));
                     cipher = (NSch.Cipher)(System.Activator.CreateInstance(c));
                     key    = new byte[cipher.GetBlockSize()];
                     iv     = new byte[cipher.GetIVSize()];
                 }
                 else
                 {
                     throw new JSchException("privatekey: aes192-cbc is not available " + identity);
                 }
                 continue;
             }
             if (buf[i] == 'A' && i + 7 < len && buf[i + 1] == 'E' && buf[i + 2] == 'S' && buf
                 [i + 3] == '-' && buf[i + 4] == '1' && buf[i + 5] == '2' && buf[i + 6] == '8' &&
                 buf[i + 7] == '-')
             {
                 i += 8;
                 if (Session.CheckCipher((string)JSch.GetConfig("aes128-cbc")))
                 {
                     c      = Sharpen.Runtime.GetType((string)JSch.GetConfig("aes128-cbc"));
                     cipher = (NSch.Cipher)(System.Activator.CreateInstance(c));
                     key    = new byte[cipher.GetBlockSize()];
                     iv     = new byte[cipher.GetIVSize()];
                 }
                 else
                 {
                     throw new JSchException("privatekey: aes128-cbc is not available " + identity);
                 }
                 continue;
             }
             if (buf[i] == 'C' && i + 3 < len && buf[i + 1] == 'B' && buf[i + 2] == 'C' && buf
                 [i + 3] == ',')
             {
                 i += 4;
                 for (int ii = 0; ii < iv.Length; ii++)
                 {
                     iv[ii] = unchecked ((byte)(((A2b(buf[i++]) << 4) & unchecked ((int)(0xf0))) + (A2b(
                                                                                                        buf[i++]) & unchecked ((int)(0xf)))));
                 }
                 continue;
             }
             if (buf[i] == unchecked ((int)(0x0d)) && i + 1 < len && buf[i + 1] == unchecked ((int
                                                                                               )(0x0a)))
             {
                 i++;
                 continue;
             }
             if (buf[i] == unchecked ((int)(0x0a)) && i + 1 < len)
             {
                 if (buf[i + 1] == unchecked ((int)(0x0a)))
                 {
                     i += 2;
                     break;
                 }
                 if (buf[i + 1] == unchecked ((int)(0x0d)) && i + 2 < len && buf[i + 2] == unchecked (
                         (int)(0x0a)))
                 {
                     i += 3;
                     break;
                 }
                 bool inheader = false;
                 for (int j = i + 1; j < len; j++)
                 {
                     if (buf[j] == unchecked ((int)(0x0a)))
                     {
                         break;
                     }
                     //if(buf[j]==0x0d) break;
                     if (buf[j] == ':')
                     {
                         inheader = true;
                         break;
                     }
                 }
                 if (!inheader)
                 {
                     i++;
                     encrypted = false;
                     // no passphrase
                     break;
                 }
             }
             i++;
         }
         if (type == ERROR)
         {
             throw new JSchException("invalid privatekey: " + identity);
         }
         int start = i;
         while (i < len)
         {
             if (buf[i] == unchecked ((int)(0x0a)))
             {
                 bool xd = (buf[i - 1] == unchecked ((int)(0x0d)));
                 System.Array.Copy(buf, i + 1, buf, i - (xd ? 1 : 0), len - i - 1 - (xd ? 1 : 0));
                 if (xd)
                 {
                     len--;
                 }
                 len--;
                 continue;
             }
             if (buf[i] == '-')
             {
                 break;
             }
             i++;
         }
         encoded_data = Util.FromBase64(buf, start, i - start);
         if (encoded_data.Length > 4 && encoded_data[0] == unchecked ((byte)unchecked ((int)
                                                                                       (0x3f))) && encoded_data[1] == unchecked ((byte)unchecked ((int)(0x6f))) && encoded_data
             [2] == unchecked ((byte)unchecked ((int)(0xf9))) && encoded_data[3] == unchecked ((
                                                                                                   byte)unchecked ((int)(0xeb))))
         {
             // FSecure
             Buffer _buf = new Buffer(encoded_data);
             _buf.GetInt();
             // 0x3f6ff9be
             _buf.GetInt();
             byte[] _type = _buf.GetString();
             //System.err.println("type: "+new String(_type));
             byte[] _cipher   = _buf.GetString();
             string cipherStr = Util.Byte2str(_cipher);
             //System.err.println("cipher: "+cipher);
             if (cipherStr.Equals("3des-cbc"))
             {
                 _buf.GetInt();
                 byte[] foo = new byte[encoded_data.Length - _buf.GetOffSet()];
                 _buf.GetByte(foo);
                 encoded_data = foo;
                 encrypted    = true;
                 throw new JSchException("unknown privatekey format: " + identity);
             }
             else
             {
                 if (cipherStr.Equals("none"))
                 {
                     _buf.GetInt();
                     //_buf.getInt();
                     encrypted = false;
                     byte[] foo = new byte[encoded_data.Length - _buf.GetOffSet()];
                     _buf.GetByte(foo);
                     encoded_data = foo;
                 }
             }
         }
         if (pubkey == null)
         {
             return;
         }
         buf = pubkey;
         len = buf.Length;
         if (buf.Length > 4 && buf[0] == '-' && buf[1] == '-' && buf[2] == '-' && buf[3] ==
             '-')
         {
             // FSecure's public key
             i = 0;
             do
             {
                 i++;
             }while (len > i && buf[i] != unchecked ((int)(0x0a)));
             if (len <= i)
             {
                 return;
             }
             while (i < len)
             {
                 if (buf[i] == unchecked ((int)(0x0a)))
                 {
                     bool inheader = false;
                     for (int j = i + 1; j < len; j++)
                     {
                         if (buf[j] == unchecked ((int)(0x0a)))
                         {
                             break;
                         }
                         if (buf[j] == ':')
                         {
                             inheader = true;
                             break;
                         }
                     }
                     if (!inheader)
                     {
                         i++;
                         break;
                     }
                 }
                 i++;
             }
             if (len <= i)
             {
                 return;
             }
             start = i;
             while (i < len)
             {
                 if (buf[i] == unchecked ((int)(0x0a)))
                 {
                     System.Array.Copy(buf, i + 1, buf, i, len - i - 1);
                     len--;
                     continue;
                 }
                 if (buf[i] == '-')
                 {
                     break;
                 }
                 i++;
             }
             publickeyblob = Util.FromBase64(buf, start, i - start);
             if (type == UNKNOWN && publickeyblob.Length > 8)
             {
                 if (publickeyblob[8] == 'd')
                 {
                     type = DSS;
                 }
                 else
                 {
                     if (publickeyblob[8] == 'r')
                     {
                         type = RSA;
                     }
                 }
             }
         }
         else
         {
             if (buf[0] != 's' || buf[1] != 's' || buf[2] != 'h' || buf[3] != '-')
             {
                 return;
             }
             i = 0;
             while (i < len)
             {
                 if (buf[i] == ' ')
                 {
                     break;
                 }
                 i++;
             }
             i++;
             if (i >= len)
             {
                 return;
             }
             start = i;
             while (i < len)
             {
                 if (buf[i] == ' ' || buf[i] == '\n')
                 {
                     break;
                 }
                 i++;
             }
             publickeyblob = Util.FromBase64(buf, start, i - start);
             if (publickeyblob.Length < 4 + 7)
             {
                 // It must start with "ssh-XXX".
                 if (JSch.GetLogger().IsEnabled(Logger.WARN))
                 {
                     JSch.GetLogger().Log(Logger.WARN, "failed to parse the public key");
                 }
                 publickeyblob = null;
             }
         }
     }
     catch (Exception e)
     {
         //System.err.println("IdentityFile: "+e);
         if (e is JSchException)
         {
             throw (JSchException)e;
         }
         if (e is Exception)
         {
             throw new JSchException(e.ToString(), (Exception)e);
         }
         throw new JSchException(e.ToString());
     }
 }
コード例 #6
0
ファイル: IdentityFile.cs プロジェクト: yayanyang/monodevelop
		/// <exception cref="NSch.JSchException"></exception>
		private IdentityFile(string name, byte[] prvkey, byte[] pubkey, JSch jsch)
		{
			this.identity = name;
			this.jsch = jsch;
			try
			{
				Type c;
				c = Sharpen.Runtime.GetType((string)JSch.GetConfig("3des-cbc"));
				cipher = (NSch.Cipher)(System.Activator.CreateInstance(c));
				key = new byte[cipher.GetBlockSize()];
				// 24
				iv = new byte[cipher.GetIVSize()];
				// 8
				c = Sharpen.Runtime.GetType((string)JSch.GetConfig("md5"));
				hash = (HASH)(System.Activator.CreateInstance(c));
				hash.Init();
				byte[] buf = prvkey;
				int len = buf.Length;
				int i = 0;
				while (i < len)
				{
					if (buf[i] == '-' && i + 4 < len && buf[i + 1] == '-' && buf[i + 2] == '-' && buf
						[i + 3] == '-' && buf[i + 4] == '-')
					{
						break;
					}
					i++;
				}
				while (i < len)
				{
					if (buf[i] == 'B' && i + 3 < len && buf[i + 1] == 'E' && buf[i + 2] == 'G' && buf
						[i + 3] == 'I')
					{
						i += 6;
						if (buf[i] == 'D' && buf[i + 1] == 'S' && buf[i + 2] == 'A')
						{
							type = DSS;
						}
						else
						{
							if (buf[i] == 'R' && buf[i + 1] == 'S' && buf[i + 2] == 'A')
							{
								type = RSA;
							}
							else
							{
								if (buf[i] == 'S' && buf[i + 1] == 'S' && buf[i + 2] == 'H')
								{
									// FSecure
									type = UNKNOWN;
									keytype = FSECURE;
								}
								else
								{
									//System.err.println("invalid format: "+identity);
									throw new JSchException("invalid privatekey: " + identity);
								}
							}
						}
						i += 3;
						continue;
					}
					if (buf[i] == 'A' && i + 7 < len && buf[i + 1] == 'E' && buf[i + 2] == 'S' && buf
						[i + 3] == '-' && buf[i + 4] == '2' && buf[i + 5] == '5' && buf[i + 6] == '6' &&
						 buf[i + 7] == '-')
					{
						i += 8;
						if (Session.CheckCipher((string)JSch.GetConfig("aes256-cbc")))
						{
							c = Sharpen.Runtime.GetType((string)JSch.GetConfig("aes256-cbc"));
							cipher = (NSch.Cipher)(System.Activator.CreateInstance(c));
							key = new byte[cipher.GetBlockSize()];
							iv = new byte[cipher.GetIVSize()];
						}
						else
						{
							throw new JSchException("privatekey: aes256-cbc is not available " + identity);
						}
						continue;
					}
					if (buf[i] == 'C' && i + 3 < len && buf[i + 1] == 'B' && buf[i + 2] == 'C' && buf
						[i + 3] == ',')
					{
						i += 4;
						for (int ii = 0; ii < iv.Length; ii++)
						{
							iv[ii] = unchecked((byte)(((A2b(buf[i++]) << 4) & unchecked((int)(0xf0))) + (A2b(
								buf[i++]) & unchecked((int)(0xf)))));
						}
						continue;
					}
					if (buf[i] == unchecked((int)(0x0d)) && i + 1 < len && buf[i + 1] == unchecked((int
						)(0x0a)))
					{
						i++;
						continue;
					}
					if (buf[i] == unchecked((int)(0x0a)) && i + 1 < len)
					{
						if (buf[i + 1] == unchecked((int)(0x0a)))
						{
							i += 2;
							break;
						}
						if (buf[i + 1] == unchecked((int)(0x0d)) && i + 2 < len && buf[i + 2] == unchecked(
							(int)(0x0a)))
						{
							i += 3;
							break;
						}
						bool inheader = false;
						for (int j = i + 1; j < len; j++)
						{
							if (buf[j] == unchecked((int)(0x0a)))
							{
								break;
							}
							//if(buf[j]==0x0d) break;
							if (buf[j] == ':')
							{
								inheader = true;
								break;
							}
						}
						if (!inheader)
						{
							i++;
							encrypted = false;
							// no passphrase
							break;
						}
					}
					i++;
				}
				if (type == ERROR)
				{
					throw new JSchException("invalid privatekey: " + identity);
				}
				int start = i;
				while (i < len)
				{
					if (buf[i] == unchecked((int)(0x0a)))
					{
						bool xd = (buf[i - 1] == unchecked((int)(0x0d)));
						System.Array.Copy(buf, i + 1, buf, i - (xd ? 1 : 0), len - i - 1 - (xd ? 1 : 0));
						if (xd)
						{
							len--;
						}
						len--;
						continue;
					}
					if (buf[i] == '-')
					{
						break;
					}
					i++;
				}
				encoded_data = Util.FromBase64(buf, start, i - start);
				if (encoded_data.Length > 4 && encoded_data[0] == unchecked((byte)unchecked((int)
					(0x3f))) && encoded_data[1] == unchecked((byte)unchecked((int)(0x6f))) && encoded_data
					[2] == unchecked((byte)unchecked((int)(0xf9))) && encoded_data[3] == unchecked((
					byte)unchecked((int)(0xeb))))
				{
					// FSecure
					Buffer _buf = new Buffer(encoded_data);
					_buf.GetInt();
					// 0x3f6ff9be
					_buf.GetInt();
					byte[] _type = _buf.GetString();
					//System.err.println("type: "+new String(_type)); 
					byte[] _cipher = _buf.GetString();
					string cipher2 = Util.Byte2str(_cipher);
					//System.err.println("cipher: "+cipher); 
					if (cipher2.Equals("3des-cbc"))
					{
						_buf.GetInt();
						byte[] foo = new byte[encoded_data.Length - _buf.GetOffSet()];
						_buf.GetByte(foo);
						encoded_data = foo;
						encrypted = true;
						throw new JSchException("unknown privatekey format: " + identity);
					}
					else
					{
						if (cipher2.Equals("none"))
						{
							_buf.GetInt();
							//_buf.getInt();
							encrypted = false;
							byte[] foo = new byte[encoded_data.Length - _buf.GetOffSet()];
							_buf.GetByte(foo);
							encoded_data = foo;
						}
					}
				}
				if (pubkey == null)
				{
					return;
				}
				buf = pubkey;
				len = buf.Length;
				if (buf.Length > 4 && buf[0] == '-' && buf[1] == '-' && buf[2] == '-' && buf[3] ==
					 '-')
				{
					// FSecure's public key
					i = 0;
					do
					{
						i++;
					}
					while (len > i && buf[i] != unchecked((int)(0x0a)));
					if (len <= i)
					{
						return;
					}
					while (i < len)
					{
						if (buf[i] == unchecked((int)(0x0a)))
						{
							bool inheader = false;
							for (int j = i + 1; j < len; j++)
							{
								if (buf[j] == unchecked((int)(0x0a)))
								{
									break;
								}
								if (buf[j] == ':')
								{
									inheader = true;
									break;
								}
							}
							if (!inheader)
							{
								i++;
								break;
							}
						}
						i++;
					}
					if (len <= i)
					{
						return;
					}
					start = i;
					while (i < len)
					{
						if (buf[i] == unchecked((int)(0x0a)))
						{
							System.Array.Copy(buf, i + 1, buf, i, len - i - 1);
							len--;
							continue;
						}
						if (buf[i] == '-')
						{
							break;
						}
						i++;
					}
					publickeyblob = Util.FromBase64(buf, start, i - start);
					if (type == UNKNOWN && publickeyblob.Length > 8)
					{
						if (publickeyblob[8] == 'd')
						{
							type = DSS;
						}
						else
						{
							if (publickeyblob[8] == 'r')
							{
								type = RSA;
							}
						}
					}
				}
				else
				{
					if (buf[0] != 's' || buf[1] != 's' || buf[2] != 'h' || buf[3] != '-')
					{
						return;
					}
					i = 0;
					while (i < len)
					{
						if (buf[i] == ' ')
						{
							break;
						}
						i++;
					}
					i++;
					if (i >= len)
					{
						return;
					}
					start = i;
					while (i < len)
					{
						if (buf[i] == ' ' || buf[i] == '\n')
						{
							break;
						}
						i++;
					}
					publickeyblob = Util.FromBase64(buf, start, i - start);
					if (publickeyblob.Length < 4 + 7)
					{
						// It must start with "ssh-XXX".
						if (JSch.GetLogger().IsEnabled(Logger.WARN))
						{
							JSch.GetLogger().Log(Logger.WARN, "failed to parse the public key");
						}
						publickeyblob = null;
					}
				}
			}
			catch (Exception e)
			{
				//System.err.println("IdentityFile: "+e);
				if (e is JSchException)
				{
					throw (JSchException)e;
				}
				if (e is Exception)
				{
					throw new JSchException(e.ToString(), (Exception)e);
				}
				throw new JSchException(e.ToString());
			}
		}