private static void autoECDH(String filename)
	{
		try
		{
			  FileInputStream fstream = new FileInputStream(filename+".txt");
			  DataInputStream in = new DataInputStream(fstream);
			  BufferedReader br = new BufferedReader(new InputStreamReader(in));
			  String strLine;
			  String strOut = new String();
			  int m = 0;
			  int k = 0;
			  BigInteger gx = BigInteger.ZERO;
			  BigInteger gy = BigInteger.ZERO;
			  BigInteger a2 = BigInteger.ZERO;
			  BigInteger a6 = BigInteger.ZERO;
			  Klient klientA;
			  Klient klientB;
			  ECPunkt punktG = null;
			  while ((strLine = br.readLine()) != null)   
			  {
				  try
				  {
					  if(strLine.startsWith("k: "))
					  {
						  k=Integer.parseInt(strLine.substring(3));
						  while(!(strLine = br.readLine()).equals(""))
						  {
							  if (strLine.startsWith("m: "))
							  {
								  m=Integer.parseInt(strLine.substring(3));
								  continue;
							  }
							  else if (strLine.startsWith("Gx: "))
							  {
								  gx=new BigInteger(strLine.substring(4),16);
								  continue;
							  }
							  else if (strLine.startsWith("Gy: "))
							  {
								  gy=new BigInteger(strLine.substring(4),16);
								  continue;
							  }
							  else if (strLine.startsWith("a2: "))
							  {
								  a2=new BigInteger(strLine.substring(4),16);
								  continue;
							  }
							  else if (strLine.startsWith("a6: "))
							  {
								  a6=new BigInteger(strLine.substring(4),16);
								  continue;
							  }
						  }
					  }
					  if (m==0 || k==0 || (gx.equals(BigInteger.ZERO)) || (gy.equals(BigInteger.ZERO))
							  || (a2.equals(BigInteger.ZERO)) || (a6.equals(BigInteger.ZERO)))
						  throw new IllegalArgumentException("Zmienne nie zostay zainicjalizowane");
					  if (k>=m)
							throw new IllegalArgumentException("Wykadnik k nie moe by wikszy ni m");
					  if (m<=1)
							throw new IllegalArgumentException("Wykadnik k nie moe by wikszy ni m");
					  if (gx.toString(2).length() > m || gy.toString(2).length() > m || 
							a2.toString(2).length() > m || a6.toString(2).length() > m)
							throw new IllegalArgumentException("Wartoci parametrw wykraczaj poza zakres");
					  System.out.println("k: "+k);
					  System.out.println("m: "+m);
					  System.out.println("Gx: "+gx.toString(16));
					  System.out.println("Gy: "+gy.toString(16));
					  System.out.println("a2: "+a2.toString(16));
					  System.out.println("a6: "+a6.toString(16));
					  punktG = new ECPunkt(m,k,a2,a6,gx,gy);
					  if (!punktG.naEC())
							throw new IllegalArgumentException("Generator nie naley do zbioru punktw krzywej eliptycznej");
						//////////////////////////////Sprawdzenie nieprzywiedlnoci wielomianu modulo
						Polynomial p = new Polynomial();
						p=p.setDegree(new BigInteger(Integer.toString(m)));
						p=p.setDegree(new BigInteger(Integer.toString(k)));
						p=p.setDegree(BigInteger.ZERO);
						if (p.isReducible())
							throw new IllegalArgumentException("Wielomian modulo ciaa nie jest nieprzywiedlny");
						/////////////////////////////////////////////////////////////////////////////
					  	klientA = new Klient(punktG);
					  	klientA.genKluczaPrywatnego(m);
				  		System.out.println("A.Prywatny: "+klientA.kluczPrywatny.toString(16)+"\r\n");
					  	klientB = new Klient(punktG);
					  	klientB.genKluczaPrywatnego(m);
					  	System.out.println("B.Prywatny: "+klientB.kluczPrywatny.toString(16)+"\r\n");
					  	klientB.ustawKluczPublicznyB(klientA.oblKluczaPublicznego());
				  		System.out.println("APub.X: "+klientA.kluczPubliczny.X.b.toString(16)+"\r\n");
				  		System.out.println("APub.Y: "+klientA.kluczPubliczny.Y.b.toString(16)+"\r\n");
					  	klientA.ustawKluczPublicznyB(klientB.oblKluczaPublicznego());
				  		System.out.println("BPub.X: "+klientB.kluczPubliczny.X.b.toString(16)+"\r\n");
				  		System.out.println("BPub.Y: "+klientB.kluczPubliczny.Y.b.toString(16)+"\r\n");
					  	klientA.oblKluczaTajnego();
					  	System.out.println("ATajny.X: "+klientA.kluczTajny.X.b.toString(16)+"\r\n");
				  		System.out.println("ATajny.Y: "+klientA.kluczTajny.Y.b.toString(16)+"\r\n");
					  	klientB.oblKluczaTajnego();
					  	System.out.println("BTajny.X: "+klientB.kluczTajny.X.b.toString(16)+"\r\n");
				  		System.out.println("BTajny.Y: "+klientB.kluczTajny.Y.b.toString(16)+"\r\n");
					  	GF2Elem xCord = new GF2Elem(klientA.kluczTajny.X);
					  	if (xCord.dodaj(klientB.kluczTajny.X).b.equals(BigInteger.ZERO))
					  	{
					  		///Algorytm zadziaa poprawnie
					  		strOut = strOut.concat("////////////////////////////////////////"+"\r\n");
					  		strOut = strOut.concat("k: "+k+"\r\n");
					  		strOut = strOut.concat("m: "+m+"\r\n");
					  		strOut = strOut.concat("Gx: "+gx.toString(16)+"\r\n");
					  		strOut = strOut.concat("Gy: "+gy.toString(16)+"\r\n");
					  		strOut = strOut.concat("a2: "+a2.toString(16)+"\r\n");
					  		strOut = strOut.concat("a6: "+a6.toString(16)+"\r\n");
					  		strOut = strOut.concat("\nWygenerowane parametry sesji:"+"\r\n");
					  		strOut = strOut.concat("APub.X: "+klientA.kluczPubliczny.X.b.toString(16)+"\r\n");
					  		strOut = strOut.concat("APub.Y: "+klientA.kluczPubliczny.Y.b.toString(16)+"\r\n");
					  		strOut = strOut.concat("BPub.X: "+klientB.kluczPubliczny.X.b.toString(16)+"\r\n");
					  		strOut = strOut.concat("BPub.Y: "+klientB.kluczPubliczny.Y.b.toString(16)+"\r\n");
					  		strOut = strOut.concat("Wspolny klucz sesji: "+klientA.genklucz01()+"\r\n");
					  		System.out.println("Wspolny klucz sesji: "+klientA.genklucz01()+"\r\n");
					  		strOut = strOut.concat("////////////////////////////////////////"+"\r\n");
					  	}
					  	else
					  	{
					  		///Algorytm nie zadziaa poprawnie
					  		strOut = strOut.concat("////////////////////////////////////////"+"\r\n");
					  		strOut = strOut.concat("k: "+k+"\r\n");
					  		strOut = strOut.concat("m: "+m+"\r\n");
					  		strOut = strOut.concat("Gx: "+gx.toString(16)+"\r\n");
					  		strOut = strOut.concat("Gy: "+gy.toString(16)+"\r\n");
					  		strOut = strOut.concat("a2: "+a2.toString(16)+"\r\n");
					  		strOut = strOut.concat("a6: "+a6.toString(16)+"\r\n");
					  		strOut = strOut.concat("\nAlgorytm nie zadziaa poprawnie"+"\r\n");
					  		System.out.println("\nAlgorytm nie zadziaa poprawnie"+"\r\n");
					  		strOut = strOut.concat("////////////////////////////////////////"+"\r\n");
					  	}
					}
					catch (NumberFormatException e)
					{
						System.out.println("Wprowadzone parametry nie s w kodzie HEX");
					}
					catch (IllegalArgumentException e)
					{
						System.out.println("Bdnie sformatowane dane w pliku");
					}
				  FileOutputStream foutstream = new FileOutputStream(filename+"output.txt",true);
				  DataOutputStream out = new DataOutputStream(foutstream);
				  BufferedWriter boutr = new BufferedWriter(new OutputStreamWriter(out));
				  boutr.write(strOut);
				  m = 0;
				  k = 0;
				  gx = BigInteger.ZERO;
				  gy = BigInteger.ZERO;
				  a2 = BigInteger.ZERO;
				  a6 = BigInteger.ZERO;
				  strOut = null;
				  boutr.close();
				  out.close();
			  }
			  in.close();
			  
		}
		catch (Exception e)
		{
			  System.err.println("Error: " + e.getMessage());
			  e.printStackTrace();
		}
	}