Skip to content

Commit

Permalink
Modify zimbra 8 integration
Browse files Browse the repository at this point in the history
  • Loading branch information
trongdd26 committed Feb 26, 2015
1 parent bcdf0b8 commit 6674513
Show file tree
Hide file tree
Showing 8 changed files with 632 additions and 184 deletions.
266 changes: 234 additions & 32 deletions CAAppletSimple/src/com/ecoit/asia/EcoitApplet.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,25 @@

import java.applet.Applet;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.security.PrivateKey;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.UIManager;

import org.apache.commons.io.FileUtils;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import vn.ptit.project.encrypt.FormEncrypt;
Expand All @@ -34,75 +48,263 @@
import vn.ptit.project.token.TokenModule;
import vn.ptit.project.token.TokenModules;

import com.ecoit.asia.pdfsigner.SigningModules;

public class EcoitApplet extends Applet {

public EcoitApplet() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
}

private static final long serialVersionUID = 1L;

/**
*
* @param original
* @return base64 format of signature
*/
public String signForm(String original) throws SignatureException{
return FormSigner.signForm(original);
public String signForm(final String original) {
return AccessController.doPrivileged(new PrivilegedAction<String>() {

@Override
public String run() {
try {
return FormSigner.signForm(original);
} catch (SignatureException e) {
e.printStackTrace();
return null;
}
}
});

}

/**
*
* @param original
* @param signature : base64 format
* @param signature
* : base64 format
* @param base64Cetificate
* @return
* @throws Exception
*/
public boolean verifyForm(String original,String signature,String base64Cetificate) throws Exception{
byte b[] = new BASE64Decoder().decodeBuffer(base64Cetificate);
InputStream _in = new ByteArrayInputStream(b);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(_in);
return FormSigner.verifyForm(signature, original, cert.getPublicKey());
public boolean verifyForm(final String original,final String signature,
final String base64Cetificate){
return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {

/*
* (non-Javadoc)
*
* @see java.security.PrivilegedAction#run()
*/
@Override
public Boolean run() {
try{
byte b[] = new BASE64Decoder().decodeBuffer(base64Cetificate);
InputStream _in = new ByteArrayInputStream(b);
CertificateFactory certFactory = CertificateFactory
.getInstance("X.509");
X509Certificate cert = (X509Certificate) certFactory
.generateCertificate(_in);
return FormSigner.verifyForm(signature, original, cert.getPublicKey());
}catch(Exception ex){
ex.printStackTrace();
}
return false;
}
});
}

/**
*
* @return certificate in usb-token
*/
public String getCertificate() throws Exception{
TokenModule token = TokenModules.newDefaultTokenModule();
X509Certificate cer = (X509Certificate) token.getEncryptCertificate();
return new BASE64Encoder().encode(cer.getEncoded());
*/
public String getCertificate() {
return AccessController.doPrivileged(new PrivilegedAction<String>() {

/*
* (non-Javadoc)
*
* @see java.security.PrivilegedAction#run()
*/
@Override
public String run() {
try {
TokenModule token = TokenModules.newDefaultTokenModule();
X509Certificate cer = (X509Certificate) token.getEncryptCertificate();
return new BASE64Encoder().encode(cer.getEncoded());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
});
}

/**
*
* @param original
* @param base64Certificate
* @return dataEncrypt
* @throws Exception
*/
public String encryptData(String original,String base64Certificate) throws Exception{
TokenModule token = TokenModules.newDefaultTokenModule();
X509Certificate cer = (X509Certificate) token.getEncryptCertificate();
return FormEncrypt.encrypt(original, cer.getPublicKey());
public String encryptData(final String original,final String base64Certificate){
return AccessController.doPrivileged(new PrivilegedAction<String>() {

/*
* (non-Javadoc)
*
* @see java.security.PrivilegedAction#run()
*/
@Override
public String run() {
try {
TokenModule token = TokenModules.newDefaultTokenModule();
X509Certificate cer = (X509Certificate) token.getEncryptCertificate();
return FormEncrypt.encrypt(original, cer.getPublicKey());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
});
}

/**
*
* @param encryptData
* @return data original
* @throws Exception
*/
public String decryptData(String encryptData) throws Exception{
TokenModule token = TokenModules.newDefaultTokenModule();
return FormEncrypt.decrypt(encryptData, token.getEncryptPrivateKey());
public String decryptData(final String encryptData) {
return AccessController.doPrivileged(new PrivilegedAction<String>() {

/*
* (non-Javadoc)
*
* @see java.security.PrivilegedAction#run()
*/
@Override
public String run() {
try {
TokenModule token = TokenModules.newDefaultTokenModule();
return FormEncrypt.decrypt(encryptData, token.getEncryptPrivateKey());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
});
}

/**
* Generate challenge with 100 character
* @param challenge string in base64 format
* @return response String
* Generate challenge with 100 character
*
* @param challenge
* string in base64 format
* @return response String
* @throws Exception
*/
public String response(String challenge) throws Exception{
TokenModule token = TokenModules.newDefaultTokenModule();
return FormEncrypt.authenticate(challenge, token.getEncryptPrivateKey());
public String response(final String challenge){
return AccessController.doPrivileged(new PrivilegedAction<String>() {

/*
* (non-Javadoc)
*
* @see java.security.PrivilegedAction#run()
*/
@Override
public String run() {
try {
TokenModule token = TokenModules.newDefaultTokenModule();
return FormEncrypt
.authenticate(challenge, token.getEncryptPrivateKey());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
});
}
}

public String signPDF(final String url,final float minX,final float minY,final float maxX,final float maxY) {
return AccessController.doPrivileged(new PrivilegedAction<String>() {

/*
* (non-Javadoc)
*
* @see java.security.PrivilegedAction#run()
*/
@Override
public String run() {
System.out
.println("================ signPDF ==================");
try {
String property = "java.io.tmpdir";
String tempDir = System.getProperty(property);
// Select signature
JFileChooser signatureFileChooser = new JFileChooser();
signatureFileChooser.setDialogTitle("Chọn hình ảnh cho chữ ký");
signatureFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int signatureFileChooserReturnVal = signatureFileChooser.showOpenDialog(null);
if (signatureFileChooserReturnVal == JFileChooser.APPROVE_OPTION) {
File signatureFile = signatureFileChooser.getSelectedFile();
File f = new File(tempDir + File.separator
+ "originalfile.pdf");
FileUtils.copyURLToFile(new URL(url), f);

String pathSigned = SigningModules.signPDF(f.getPath(),signatureFile,minX,minY,maxX,maxY);
if (pathSigned == null)
throw new Exception();
Path path = Paths.get(pathSigned, new String[0]);
byte[] data = Files.readAllBytes(path);
return new BASE64Encoder().encode(data);
// JFileChooser chooser = new JFileChooser();
// chooser.setDialogTitle("Chọn thư mục lưu tệp tin");
// chooser.setCurrentDirectory(f);
// chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
// chooser.setCurrentDirectory(new File(System
// .getProperty("user.home")
// + File.separator
// + "Desktop" + File.separator));
// chooser.setSelectedFile(new File(FilenameUtils
// .getBaseName(url)
// + "."
// + FilenameUtils.getExtension(url)));
// chooser.setAcceptAllFileFilterUsed(false);
// int returnVal = chooser.showSaveDialog(null);
// if (returnVal == JFileChooser.APPROVE_OPTION) {
// FileUtils.copyFile(new File(pathSigned),
// chooser.getSelectedFile());
// }
} else {
JOptionPane.showMessageDialog(null, "Ký số được hủy bỏ bởi người sử dụng!");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

System.out
.println("================ End signPDF ==================");
return "";
}
});

}

public static void main(String agrs[]) {
try {
System.out.println(new EcoitApplet().getCertificate());
} catch (Exception e) {
e.printStackTrace();
}
}
}
8 changes: 6 additions & 2 deletions CAAppletSimple/src/vn/ptit/project/encrypt/FormEncrypt.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,16 @@
import java.security.PublicKey;
import java.security.spec.KeySpec;
import java.util.Random;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;

import org.apache.commons.codec.binary.Hex;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import vn.ptit.project.utils.Convert;
Expand Down Expand Up @@ -118,10 +122,10 @@ public static String authenticate(String request, PrivateKey priKey) {
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, priKey);
byte[] b = new BASE64Decoder().decodeBuffer(request);
byte[] b = Hex.decodeHex(request.toCharArray());
byte[] cipherText = cipher.doFinal(b);
String data = new String(cipherText);
return data.substring(data.length() - 100);
return data;
} catch (Exception e) {
e.printStackTrace();
}
Expand Down
Loading

0 comments on commit 6674513

Please sign in to comment.