<%@ page contentType="text/html; charset=utf-8" %> <%@ page import="xecure.servlet.*" %> <%@ page import="xecure.crypto.*" %> <%@ page import="xecure.crypto.jni.*" %> <%@ page import="java.io.*" %> <% int err = 0; String[] pemCerts = {}; // 서명 대상 파일 경로 String strOrgFile = "/signfileinfo/test.txt"; // 1차 서명 파일을 저장할 경로 String strSignFile = "/signfileinfo/test_1.sig"; // 2차 서명 파일을 저장할 경로 String strSignFile2 = "/signfileinfo/test_2.sig"; // 2차 서명 인증서 정보 File certpath = new File("/signfileinfo/cert/signCert.der"); File keypath = new File("/signfileinfo/cert/signPri.key"); String passwd = "qwer1234"; String signedData = request.getParameter("aSignedMsg"); String vidMsg = request.getParameter("aVidMsg"); out.println("

XecureWeb for Multi - SignFileInfo Test (Server)

"); //----------------------------------------------------------------------------- out.println("

1. 클라이언트 서명값

"); if(signedData == null || signedData.length() == 0) { out.println("invalid request"); return; } out.println("Client Signed Data: " + signedData + "
"); //----------------------------------------------------------------------------- out.println("

2. 기존 서명 파일 삭제

"); out.println("Delete File 1: " + strSignFile + "
"); out.println("Delete File 2: " + strSignFile2 + "
"); File f1 = new File(strSignFile); File f2 = new File(strSignFile2); f1.delete(); f2.delete(); //----------------------------------------------------------------------------- out.println("

3. 서명값 + 원본 파일 병합

"); out.println("Original File Path: " + strOrgFile + "
"); out.println("Merge File Path: " + strSignFile + "
"); XecureConfig xconfig = new XecureConfig(); SplitFileSign sfs = new SplitFileSign(xconfig); byte[] bytes = new java.math.BigInteger(signedData, 16).toByteArray(); err = sfs.merge(strSignFile, strOrgFile, bytes, pemCerts); if (err != 0) { out.println("> SplitFileSign.merge error[" + sfs.getLastError() + "]"); return; } out.println("> SplitFileSign.merge success
"); //----------------------------------------------------------------------------- out.println("

4. 병합된 서명 파일 검증

"); out.println("Merge File Path: " + strSignFile + "
"); FileSignVerifier fsv = new FileSignVerifier(xconfig, strSignFile); if (fsv.getLastError() != 0) { out.println("> FileSignVerifier error[" + fsv.getLastError() + "][" + fsv.getLastErrorMsg() + "]"); return; } out.println("> FileSignVerifier success
"); //----------------------------------------------------------------------------- out.println("

5. 식별번호 검증

"); if(vidMsg == null || vidMsg.length() == 0) { out.println("> no input VID Data"); } else { out.println("Client VID Data: " + vidMsg + "
"); VidVerifier vv = new VidVerifier(xconfig); //vv.virtualIDVerifyS(vidMsg, fsv.getSignerCertificate().getCertPem(), "1111112222222"); // 서버측에서 식별번호 입력 시 사용 vv.virtualIDVerifyS(vidMsg, fsv.getSignerCertificate().getCertPem()); if (vv.getLastError() != 0) { out.println("> VidVerifier error[" + vv.getLastError() + "][" + vv.getLastErrorMsg() + "]"); return; } out.println("> VidVerifier success
"); } //----------------------------------------------------------------------------- out.println("

6. 서버에서 파일 서명 (2차 서명)

"); out.println("2nd Sign File path:" + strSignFile2 + "
"); out.println("Cert File path:" + certpath + "
"); out.println("Key File path:" + keypath + "
"); out.println("Password:" + passwd + "
"); if (!certpath.exists() || !keypath.exists()) { out.println("> not exists Cert"); return; } RandomAccessFile fcert = new RandomAccessFile(certpath, "r"); byte[] bpem = new byte[(int)fcert.length()]; fcert.read(bpem); fcert.close(); RandomAccessFile fkey = new RandomAccessFile(keypath, "r"); byte[] bkey = new byte[(int)fkey.length()]; fkey.read(bkey); fkey.close(); byte[] bpasswd = passwd.getBytes(); FileSigner fs = new FileSigner(xconfig); err = fs.signFileAddWithKey(bpem, bkey, bpasswd, strSignFile, strSignFile2); if (err != 0) { out.println("> FileSigner.signFileAddWithKey error[" + fs.getLastError() + "]"); return; } out.println("> FileSigner.signFileAddWithKey success"); //----------------------------------------------------------------------------- out.println("

7. 2차 서명 파일 검증

"); out.println("2nd Sign File path:" + strSignFile2 + "
"); FileMultiSignVerifier fmsv = new FileMultiSignVerifier(xconfig, strSignFile2); if (fmsv.getLastError() != 0) { out.println("> FileMultiSignVerifier error[" + fmsv.getLastError() + "]"); return; } out.println("> FileMultiSignVerifier success"); %>