%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page buffer="16kb" %>
<%@ page import="xecure.servlet.*" %>
<%@ page import="xecure.crypto.*" %>
<%@ page import="java.io.*" %>
<%
//out.println(java.nio.charset.Charset.defaultCharset().name());
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
String aCharset = "UTF-8";
XecureConfig aXecureConfig = new XecureConfig ();
MultiSignVerifier verifier = null;
String aSignedMsg1 = request.getParameter("aResult");
String aSignedMsg2 = request.getParameter("aResult2");
String aSignedMsg = request.getParameter("aSignedMsg");
int aErrCode = 0;
String aErrReason = "";
String aPlain = "";
String aPlainHex = "";
String aCertificate = "";
String aSubjectRDN = "";
int aSignerNum = 0;
if (aSignedMsg1 != null && aSignedMsg1.length() > 0)
{
aSignedMsg = aSignedMsg1;
}
else if (aSignedMsg2 != null && aSignedMsg2.length() > 0)
{
aSignedMsg = aSignedMsg2;
}
SplitSign aSplitSign = new SplitSign(aXecureConfig);
String aRequestPlain = request.getParameter("aPlain");
byte[] aPlainByte = null;
String aSignedData = "";
String[] aOptions = request.getParameterValues("aOption");
int aOption = 0;
for (int i = 0; aOptions !=null && i < aOptions.length; i++)
{
aOption += Integer.parseInt(aOptions[i]);
}
/* 분리 서명 검증 시 */
if ((aOption & 0x100) == 0 && (aOption & 0x200) == 0x200 && (aOption & 0x1000) == 0x1000)
{
aPlainByte = aRequestPlain.getBytes(aCharset);
aSignedData = aSplitSign.merge(aSignedMsg, aPlainByte);
if (aSplitSign.getLastError() != 0)
{
aErrCode = aSplitSign.getLastError();
aErrReason = aSplitSign.getLastErrorMsg();
out.println ("분리 서명 데이터 오류
");
out.println ("Error Code: " + aErrCode + "
");
out.println ("Error Reason: " + aErrReason + "
");
return;
}
aSignedMsg = aSignedData;
}
if (aSignedMsg == null || aSignedMsg.equals(""))
{
aErrCode = -1;
aErrReason = "invalid parameter";
}
else if (aSignedMsg.length() < 10)
{
aErrCode = -1;
aErrReason = "invalid parameter (short)";
}
else
{
if (aSignedMsg.substring(0, 4).equalsIgnoreCase("3082"))
{
/* Hex encoded Data */
verifier = new MultiSignVerifier (aXecureConfig , aSignedMsg, aCharset);
}
else
{
/* Base64 encoded Data */
verifier = new MultiSignVerifier (aXecureConfig , aSignedMsg, aCharset);
}
if (verifier != null && verifier.getLastError() != 0)
{
aErrCode = verifier.getLastError();
aErrReason = verifier.getLastErrorMsg();
}
else
{
// 서명 원문
aPlain = verifier.getVerifiedMsg_Text();
// 서명 원문(Hex)
if(aPlain != null) {
byte[] buf = verifier.getVerifiedMsg();
String tmp = "";
for (int i = 0; i < buf.length; i++)
{
tmp = Integer.toHexString(0xFF & buf[i]);
if (tmp.length() == 1) tmp = "0" + tmp;
aPlainHex += tmp;
}
}
// 서명 인증서
aSignerNum = verifier.getNumberOfSigner();
}
}
/* 식별번호 검증 */
VidVerifier vid = null;
String aVidMsg = request.getParameter("aVidMsg");
String aServerIdn = request.getParameter("aServerIdn");
int aIsVid = 0;
int aVidErrCode = 0;
String aVidErrReason = "";
int aVidCertNum = 0;
String aVidCertSubjectRDN = "";
String aIdn = "";
String aRealName = "";
if (aVidMsg != null && aVidMsg.length() > 0 && aSignerNum > 0)
{
aIsVid = 1;
vid = new VidVerifier(aXecureConfig);
for (int i = 0; i < aSignerNum; i++)
{
if (aServerIdn != null && aServerIdn.length() > 0)
{
// 서버측에서 식별번호 입력 시 사용
vid.virtualIDVerifyS(aVidMsg, verifier.getSignerCertificate(i).getCertPem(), aServerIdn);
aIdn = "(서버에서 입력)";
}
else
{
vid.virtualIDVerifyS(aVidMsg, verifier.getSignerCertificate(i).getCertPem());
}
if (vid != null && vid.getLastError() == 0)
{
aVidCertNum = i;
aVidCertSubjectRDN = verifier.getSignerCertificate(i).getSubject();
aIdn += vid.getIdn();
aRealName = vid.getRealName();
break;
}
}
if (vid != null && vid.getLastError() != 0)
{
aVidErrCode = vid.getLastError();
aVidErrReason = vid.getLastErrorMsg();
}
}
%>