//package modularclient.signencrypt;

import cybertrust2.CTException;
import cybertrust2.crypto.server.CryptoServerException;
import cybertrust2.crypto.server.Document;
import cybertrust2.crypto.server.Encrypter;
import cybertrust2.crypto.server.SignedDocument;
import cybertrust2.crypto.server.Signer;
import cybertrust2.repository.FileRepository;
import cybertrust2.repository.Repository;
import cybertrust2.repository.RepositoryException;
import cybertrust2.repository.RepositoryProperties;
import cybertrust2.repository.TrustManagerWrapper;
import iaik.apps.trustmanager.RevocationStatus;
import iaik.asn1.ObjectID;
import iaik.asn1.structures.Name;
import iaik.security.provider.IAIK;
import iaik.x509.X509Certificate;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.security.Principal;
import java.security.SignatureException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Vector;
import java.io.Console;

public class firmacdm
{
  public static void main(String[] paramArrayOfString)
  throws Exception
  {
    Console console = System.console();
    try
    {
       String strNomeFileDaFirmare = null;
       String strNomeFileFirmato = null;
       String strNomeFileKeystore = null;
       String strPassword = null;
       String strNomeRepositoryProperties = null;

//       int i = 0;
       if (paramArrayOfString.length != 5) {
         System.exit(2);
       }
       strNomeFileDaFirmare = paramArrayOfString[0];
       strNomeFileFirmato = paramArrayOfString[1];
       strNomeRepositoryProperties = paramArrayOfString[2];
       strNomeFileKeystore = paramArrayOfString[3];
       strPassword = paramArrayOfString[4];

       IAIK.addAsProvider();

       FileInputStream FileDaFirmare;
       FileDaFirmare = new FileInputStream(strNomeFileDaFirmare);

       FileRepository FileChiaveRepository = null;
       RepositoryProperties FileChiaveRepositoryProperties = new RepositoryProperties(strNomeRepositoryProperties);
       FileChiaveRepository = new FileRepository(FileChiaveRepositoryProperties, strNomeFileKeystore);
       FileChiaveRepository.open(strPassword);
       if (FileChiaveRepository == null)
       {
         FileDaFirmare.close();
         return;
       }

       SignedDocument localSignedDocument = null;
       byte[] arrayOfByte1 = (byte[])null;
       byte[] arrayOfByte2 = (byte[])null;

       Enumeration localEnumeration = FileChiaveRepository.aliases();
       while (localEnumeration.hasMoreElements())
       {
         arrayOfByte1 = (byte[])localEnumeration.nextElement();
         X509Certificate localX509Certificate = FileChiaveRepository.getX509Certificate(arrayOfByte1);
         boolean[] arrayOfBoolean = localX509Certificate.getKeyUsage();
         if ((arrayOfBoolean == null) || (arrayOfBoolean[1] == false))
           continue;
         arrayOfByte2 = arrayOfByte1;
         break;
       }
       if (arrayOfByte2 != null)
       {
         Signer firmatore = new Signer();
         localSignedDocument = firmatore.signImplicit(FileDaFirmare, FileChiaveRepository, arrayOfByte2);
       }

       FileDaFirmare.close();
       if (localSignedDocument == null)
       {
         FileChiaveRepository.close();
         System.exit(2);
       }
       File FileFirmato = new File(strNomeFileFirmato);
       if (FileFirmato.exists())
         FileFirmato.delete();

       localSignedDocument.writeTo(strNomeFileFirmato);

       FileChiaveRepository.close();

//       System.exit(i);
       System.exit(1);
     }
     catch (RepositoryException localRepositoryException)
     {
//       console.printf("\nErrore nell'apertura del Repository: " + localRepositoryException.getMessage());
       System.exit(2);
     }
     catch (Throwable localThrowable)
     {
       System.exit(2);
     }
   }
 }
