Esempio n. 1
0
        /*
         * void dump(byte[] foo){
         * for(int i=0; i<foo.length; i++){
         *      if((foo[i]&0xf0)==0)System.out.print("0");
         *      System.out.print(Integer.toHexString(foo[i]&0xff));
         *      if(i%16==15){System.out.println(""); continue;}
         *      if(i%2==1)System.out.print(" ");
         * }
         * }
         */

        internal static String[] guess(byte[] I_S, byte[] I_C)
        {
            //System.out.println("guess: ");
            String[] guess = new String[PROPOSAL_MAX];
            LibSterileSSH.SecureShell.Buffer sb = new LibSterileSSH.SecureShell.Buffer(I_S);
            sb.setOffSet(17);
            LibSterileSSH.SecureShell.Buffer cb = new LibSterileSSH.SecureShell.Buffer(I_C);
            cb.setOffSet(17);

            for (int i = 0; i < PROPOSAL_MAX; i++)
            {
                byte[] sp = sb.getString();                  // server proposal
                byte[] cp = cb.getString();                  // client proposal

                //System.out.println("server-proposal: |"+new String(sp)+"|");
                //System.out.println("client-proposal: |"+new String(cp)+"|");

                int j = 0;
                int k = 0;
                //System.out.println(new String(cp));
                //loop(using BREAK instead):
                while (j < cp.Length)
                {
                    while (j < cp.Length && cp[j] != ',')
                    {
                        j++;
                    }
                    if (k == j)
                    {
                        return(null);
                    }
                    String algorithm = StringAux.getString(cp, k, j - k);
                    //System.out.println("algorithm: "+algorithm);
                    int l = 0;
                    int m = 0;
                    while (l < sp.Length)
                    {
                        while (l < sp.Length && sp[l] != ',')
                        {
                            l++;
                        }
                        if (m == l)
                        {
                            return(null);
                        }
                        //System.out.println("  "+new String(sp, m, l-m));
                        if (algorithm.Equals(StringAux.getString(sp, m, l - m)))
                        {
                            guess[i] = algorithm;
                            //System.out.println("  "+algorithm);
                            goto BREAK;
                        }
                        l++;
                        m = l;
                    }
                    j++;
                    k = j;
                }
BREAK:
                if (j == 0)
                {
                    guess[i] = "";
                }
                else if (guess[i] == null)
                {
                    //System.out.println("  fail");
                    return(null);
                }
            }

            //    for(int i=0; i<PROPOSAL_MAX; i++){
            //      System.out.println("guess: ["+guess[i]+"]");
            //    }

            return(guess);
        }