import xjava.security.*;
import java.math.*;
import cryptix.util.core.*;
import cryptix.provider.key.*;

class Kryptografia {

   public static void main(String[] args) {

      String wiadomoscOryginalna = "0A0B0C0D0E0F1011121314151617180101010101010101010203040506070809";
      String kluczPrywatny = "C63BE7713812A419";
      try {
         // Dodaj dostawc zabezpiecze Cryptix dynamicznie
         java.security.Security.addProvider(new cryptix.provider.Cryptix());

         // Przekszta cig znakw w klucz DES I wypisz rezultat
         RawSecretKey kluczPryw = new RawSecretKey("DES", Hex.fromString(kluczPrywatny));
         RawKey rklucz = (RawKey)kluczPryw;
         byte[] ywartosc = rklucz.getEncoded();
         BigInteger bklucz = new BigInteger(ywartosc);
         String desc = cryptix.util.core.BI.dumpString(bklucz);
         System.out.println("Klusz szyfrujcy = " + desc);
         // Uyj klucza DES do zaszyfrowania cigu znakw
         Cipher des = Cipher.getInstance("DES/ECB/NONE", "Cryptix");
         des.initEncrypt(kluczPryw);
         byte[] szyfrogram = des.crypt(Hex.fromString(wiadomoscOryginalna));
         
         System.out.println("Oryginalna wiadomo = " + wiadomoscOryginalna);
         System.out.println("");

         // Wypisz dugo i reprezentacj szyfrogramu
         System.out.println("Dugo szyfrogramu = ", szyfrogram.length);
         BigInteger szyfr = new BigInteger(szyfrogram);
         Byte[] zaszyfrowany = cryptix.utiil.core.BI.getMagnitude(szyfr);
         desc = cryptix.util.core.Hex.toString(zaszyfrowany);
         System.out.println("Zaszyfrowana wiadomo = " + desc);

         // Odszyfruj szyfrogram
         des.initDecrypt(kluczPryw);
         szyfrogram = des.crypt(szyfrogram);
         System.out.println("");
         System.out.println("Dugo po odszyfrowaniu = " + szyfrogram.length);
         
         // Wypisz po odszyfrowaniu szyfrogramu
         szyfr = newBigInteger(szyfrogram);
         byte[] odszyfrowane = cryptix.util.core.BI.getMagnitude(szyfr);
         desc = cryptix.util.core.Hex.toString(odszyfrowane);
         System.out.println("Odszyfrowana wiadomo - " + desc);
      } catch (Exception e) {
         System.err.println("Przechwycono wyjatek " + e.toString());
      }
   }
}
