getConfig() приватный Метод

private getConfig ( String foo ) : String
foo String
Результат String
Пример #1
0
        byte[] getSignature_rsa(Session session, byte[] data)
        {
            try
            {
                Type         t   = Type.GetType(jsch.getConfig("signature.rsa"));
                SignatureRSA rsa = (SignatureRSA)Activator.CreateInstance(t);

                rsa.init();
                rsa.setPrvKey(e_array, n_array, d_array, p_array, q_array, dmp1_array, dmq1_array, iqmp_array);

                /*
                 * byte[] goo=new byte[4];
                 * goo[0]=(byte)(session.getSessionId().Length>>>24);
                 * goo[1]=(byte)(session.getSessionId().Length>>>16);
                 * goo[2]=(byte)(session.getSessionId().Length>>>8);
                 * goo[3]=(byte)(session.getSessionId().Length);
                 * rsa.update(goo);
                 * rsa.update(session.getSessionId());
                 */
                rsa.update(data);
                byte[] sig = rsa.sign();
                Buffer buf = new Buffer("ssh-rsa".Length + 4 +
                                        sig.Length + 4);
                buf.putString(System.Text.Encoding.Default.GetBytes("ssh-rsa"));
                buf.putString(sig);
                return(buf.buffer);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(null);
        }
Пример #2
0
 private Random genRandom()
 {
     if (random == null)
     {
         try
         {
             Type t = Type.GetType(jsch.getConfig("random"));
             random = (Random)Activator.CreateInstance(t);
         }
         catch (Exception e) { Console.Error.WriteLine("connect: random " + e); }
     }
     return(random);
 }
Пример #3
0
		public String getFingerPrint(JSch jsch){
			HASH hash=null;
			try{
			hash=(HASH)Activator.CreateInstance(Type.GetType(jsch.getConfig("md5")));
			}
			catch(Exception e){ Console.Error.WriteLine("getFingerPrint: "+e); }
			return Util.getFingerPrint(hash, key);
		}
Пример #4
0
        public String getFingerPrint(JSch jsch)
        {
            HASH hash = null;

            try{
                hash = (HASH)Activator.CreateInstance(Type.GetType(jsch.getConfig("md5")));
            }
            catch (Exception e) { Console.Error.WriteLine("getFingerPrint: " + e); }
            return(Util.getFingerPrint(hash, key));
        }
Пример #5
0
		public static void test()
		{
			JSch jsch = new JSch();
			DH dh1 = null;
			DH dh2 = null;
			try
			{
				Type t=Type.GetType(jsch.getConfig("dh"));
				dh1=(DH)(Activator.CreateInstance(t));
				dh1.init();
				dh2=(DH)(Activator.CreateInstance(t));
				dh2.init();
			}
			catch(Exception ee)
			{
				Console.WriteLine(ee);
			}

			dh1.setP(DHG1.p);
			dh1.setG(DHG1.g);
			dh2.setP(DHG1.p);
			dh2.setG(DHG1.g);

			// The client responds with:
			// byte  SSH_MSG_KEXDH_INIT(30)
			// mpint e <- g^x mod p
			//         x is a random number (1 < x < (p-1)/2)

			byte[] e=dh1.getE();
			byte[] f=dh2.getE();
			Console.WriteLine("Private1 = {0}", hex(e));
			Console.WriteLine();
			Console.WriteLine("Private2 = {0}", hex(f));
			Console.WriteLine();
			dh1.setF(f);
			dh2.setF(e);
			byte[] k1 = dh1.getK();
			byte[] k2 = dh2.getK();
			Console.WriteLine("Public1 = {0}", hex(k1));
			Console.WriteLine();
			Console.WriteLine("Public2 = {0}", hex(k2));
			Console.WriteLine();
		}
Пример #6
0
		internal IdentityFile(String identity, JSch jsch) 
		{
			this.identity=identity;
			this.jsch=jsch;
			try
			{
				Type c=Type.GetType(jsch.getConfig("3des-cbc"));
				cipher=(Cipher)Activator.CreateInstance(c);
				key=new byte[cipher.getBlockSize()];   // 24
				iv=new byte[cipher.getIVSize()];       // 8
				c=Type.GetType(jsch.getConfig("md5"));
				hash=(HASH)(Activator.CreateInstance(c));
				hash.init();
				FileInfo file=new FileInfo(identity);
				FileStream fis = File.OpenRead(identity);
				byte[] buf=new byte[(int)(file.Length)];
				int len=fis.Read(buf, 0, buf.Length);
				fis.Close();

				int i=0;
				while(i<len)
				{
					if(buf[i]=='B'&& 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.out.println("invalid format: "+identity);
							throw new JSchException("invaid privatekey: "+identity);
						}
						i+=3;
						continue;
					}
					if(buf[i]=='C'&& buf[i+1]=='B'&& buf[i+2]=='C'&& buf[i+3]==',')
					{
						i+=4;
						for(int ii=0; ii<iv.Length; ii++)
						{
							iv[ii]=(byte)(((a2b(buf[i++])<<4)&0xf0)+
								(a2b(buf[i++])&0xf));
						}
						continue;
					}
					if(buf[i]==0x0d &&
						i+1<buf.Length && buf[i+1]==0x0a)
					{
						i++;
						continue;
					}
					if(buf[i]==0x0a && i+1<buf.Length)
					{
						if(buf[i+1]==0x0a){ i+=2; break; }
						if(buf[i+1]==0x0d &&
							i+2<buf.Length && buf[i+2]==0x0a)
						{
							i+=3; break;
						}
						bool inheader=false;
						for(int j=i+1; j<buf.Length; j++)
						{
							if(buf[j]==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("invaid privatekey: "+identity);
				}

				int start=i;
				while(i<len)
				{
					if(buf[i]==0x0a)
					{
						bool xd=(buf[i-1]==0x0d);
						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 &&            // FSecure
					encoded_data[0]==(byte)0x3f &&
					encoded_data[1]==(byte)0x6f &&
					encoded_data[2]==(byte)0xf9 &&
					encoded_data[3]==(byte)0xeb)
				{

					Buffer _buf=new Buffer(encoded_data);
					_buf.ReadInt();  // 0x3f6ff9be
					_buf.ReadInt();
					byte[]_type=_buf.ReadString();
					//System.out.println("type: "+Encoding.UTF8.GetString(_type)); 
					byte[] _cipher=_buf.ReadString();
					String s_cipher=System.Text.Encoding.Default.GetString(_cipher);
					//System.out.println("cipher: "+cipher); 
					if(s_cipher.Equals("3des-cbc"))
					{
						_buf.ReadInt();
						byte[] foo=new byte[encoded_data.Length-_buf.Offset];
						_buf.ReadByte(foo);
						encoded_data=foo;
						encrypted=true;
						throw new JSchException("unknown privatekey format: "+identity);
					}
					else if(s_cipher.Equals("none"))
					{
						_buf.ReadInt();
						//_buf.getInt();

						encrypted=false;

						byte[] foo=new byte[encoded_data.Length-_buf.Offset];
						_buf.ReadByte(foo);
						encoded_data=foo;
					}

				}

				try
				{
					file=new FileInfo(identity+".pub");
					fis=File.OpenRead(identity+".pub");
					buf=new byte[(int)(file.Length)];
					len=fis.Read(buf, 0, buf.Length);
					fis.Close();
				}
				catch
				{
					return;
				}

				if(buf.Length>4 &&             // FSecure's public key
					buf[0]=='-' && buf[1]=='-' && buf[2]=='-' && buf[3]=='-')
				{

					i=0;
					do{i++;}while(buf.Length>i && buf[i]!=0x0a);
					if(buf.Length<=i) return;

					while(true)
					{
						if(buf[i]==0x0a)
						{
							bool inheader=false;
							for(int j=i+1; j<buf.Length; j++)
							{
								if(buf[j]==0x0a) break;
								if(buf[j]==':'){inheader=true; break;}
							}
							if(!inheader)
							{
								i++; 
								break;
							}
						}
						i++;
					}
					if(buf.Length<=i) return;

					start=i;
					while(i<len)
					{
						if(buf[i]==0x0a)
						{
							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)
					{
						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]==' ')break; i++;}
					publickeyblob=Util.fromBase64(buf, start, i-start);
				}

			}
			catch(Exception e)
			{
				Console.WriteLine("Identity: "+e);
				if(e is JSchException) throw (JSchException)e;
				throw new JSchException(e.ToString());
			}

		}
Пример #7
0
        internal IdentityFile(String identity, JSch jsch)
        {
            this.identity = identity;
            this.jsch     = jsch;
            try
            {
                Type c = Type.GetType(jsch.getConfig("3des-cbc"));
                cipher = (Cipher)Activator.CreateInstance(c);
                key    = new byte[cipher.getBlockSize()];              // 24
                iv     = new byte[cipher.getIVSize()];                 // 8
                c      = Type.GetType(jsch.getConfig("md5"));
                hash   = (HASH)(Activator.CreateInstance(c));
                hash.init();
                FileInfo   file = new FileInfo(identity);
                FileStream fis  = File.OpenRead(identity);
                byte[]     buf  = new byte[(int)(file.Length)];
                int        len  = fis.Read(buf, 0, buf.Length);
                fis.Close();

                int i = 0;
                while (i < len)
                {
                    if (buf[i] == 'B' && 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.out.println("invalid format: "+identity);
                            throw new JSchException("invaid privatekey: " + identity);
                        }
                        i += 3;
                        continue;
                    }
                    if (buf[i] == 'C' && buf[i + 1] == 'B' && buf[i + 2] == 'C' && buf[i + 3] == ',')
                    {
                        i += 4;
                        for (int ii = 0; ii < iv.Length; ii++)
                        {
                            iv[ii] = (byte)(((a2b(buf[i++]) << 4) & 0xf0) +
                                            (a2b(buf[i++]) & 0xf));
                        }
                        continue;
                    }
                    if (buf[i] == 0x0d &&
                        i + 1 < buf.Length && buf[i + 1] == 0x0a)
                    {
                        i++;
                        continue;
                    }
                    if (buf[i] == 0x0a && i + 1 < buf.Length)
                    {
                        if (buf[i + 1] == 0x0a)
                        {
                            i += 2; break;
                        }
                        if (buf[i + 1] == 0x0d &&
                            i + 2 < buf.Length && buf[i + 2] == 0x0a)
                        {
                            i += 3; break;
                        }
                        bool inheader = false;
                        for (int j = i + 1; j < buf.Length; j++)
                        {
                            if (buf[j] == 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("invaid privatekey: " + identity);
                }

                int start = i;
                while (i < len)
                {
                    if (buf[i] == 0x0a)
                    {
                        bool xd = (buf[i - 1] == 0x0d);
                        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 &&                         // FSecure
                    encoded_data[0] == (byte)0x3f &&
                    encoded_data[1] == (byte)0x6f &&
                    encoded_data[2] == (byte)0xf9 &&
                    encoded_data[3] == (byte)0xeb)
                {
                    Buffer _buf = new Buffer(encoded_data);
                    _buf.getInt();                      // 0x3f6ff9be
                    _buf.getInt();
                    byte[] _type = _buf.getString();
                    //System.out.println("type: "+new String(_type));
                    byte[] _cipher  = _buf.getString();
                    String s_cipher = System.Text.Encoding.Default.GetString(_cipher);
                    //System.out.println("cipher: "+cipher);
                    if (s_cipher.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 (s_cipher.Equals("none"))
                    {
                        _buf.getInt();
                        //_buf.getInt();

                        encrypted = false;

                        byte[] foo = new byte[encoded_data.Length - _buf.getOffSet()];
                        _buf.getByte(foo);
                        encoded_data = foo;
                    }
                }

                try
                {
                    file = new FileInfo(identity + ".pub");
                    fis  = File.OpenRead(identity + ".pub");
                    buf  = new byte[(int)(file.Length)];
                    len  = fis.Read(buf, 0, buf.Length);
                    fis.Close();
                }
                catch
                {
                    return;
                }

                if (buf.Length > 4 &&                          // FSecure's public key
                    buf[0] == '-' && buf[1] == '-' && buf[2] == '-' && buf[3] == '-')
                {
                    i = 0;
                    do
                    {
                        i++;
                    }while(buf.Length > i && buf[i] != 0x0a);
                    if (buf.Length <= i)
                    {
                        return;
                    }

                    while (true)
                    {
                        if (buf[i] == 0x0a)
                        {
                            bool inheader = false;
                            for (int j = i + 1; j < buf.Length; j++)
                            {
                                if (buf[j] == 0x0a)
                                {
                                    break;
                                }
                                if (buf[j] == ':')
                                {
                                    inheader = true; break;
                                }
                            }
                            if (!inheader)
                            {
                                i++;
                                break;
                            }
                        }
                        i++;
                    }
                    if (buf.Length <= i)
                    {
                        return;
                    }

                    start = i;
                    while (i < len)
                    {
                        if (buf[i] == 0x0a)
                        {
                            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)
                    {
                        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] == ' ')
                        {
                            break;
                        }
                        i++;
                    }
                    publickeyblob = Util.fromBase64(buf, start, i - start);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Identity: " + e);
                if (e is JSchException)
                {
                    throw (JSchException)e;
                }
                throw new JSchException(e.ToString());
            }
        }