﻿//** 환경 설정시 주의사항 ***************************************************************	//
// 																						
// . 인증기관 LDAP 정보 모음 은 LDAP 에서 인증서를 가져올 때 반드시 사용된다.											
// 																						
//**************************************************************************************//

//** 기본정보 설정			************************************************************//

// == 인증기관 관련 정보 모음		================================= //
var CA_LDAP_INFO = "KISA:dirsys.rootca.or.kr:389|KICA:ldap.signgate.com:389|SignKorea:dir.signkorea.com:389|Yessign:203.233.91.35:389|CrossCert:dir.crosscert.com:389|TradeSign:ldap.tradesign.net:389|NCASign:ds.nca.or.kr:389|";

// == 인증서 정책  관련 		===================================== //
// -- 법인 상호연동용 OID 모음
var FIRST_COMP_CERT_POLICIES = "1 2 410 200012 1 1 3:전자거래법인서명용|1 2 410 200004 5 1 1 7:전자거래법인서명용|1 2 410 200005 1 1 5:전자거래법인서명용|1 2 410 200004 5 2 1 1:전자거래법인서명용|1 2 410 200004 5 2 1 4:전자거래법인서명용|1 2 410 200004 5 2 1 5:전자거래법인서명용|1 2 410 200004 5 4 1 2:전자거래법인서명용|";	
// -- 개인 상호연동용 OID 모음
var FIRST_INDI_CERT_POLICIES = "1 2 410 200012 1 1 1:전자거래개인서명용|1 2 410 200004 5 1 1 5:전자거래개인서명용|1 2 410 200005 1 1 1:전자거래개인서명용|1 2 410 200005 1 1 4:전자거래개인서명용|1 2 410 200004 5 2 1 1:전자거래개인서명용|1 2 410 200004 5 4 1 1:전자거래개인서명용|1 2 410 200004 5 2 1 2:개인상호연동용(범용)|";
// -- TradeSign 용도제한용 OID 모음
var TRADESIGN_LIMITED_COMP_CERT_POLICIES = "1 2 410 200012 1 1 9|1 2 410 200012 1 1 10|1 2 410 200012 1 1 15|1 2 410 200012 1 1 16|1 2 410 200012 1 1 201|1 2 410 200012 1 1 202|1 2 410 200012 5 1 1 11|1 2 410 200012 1 1 12|1 2 410 200012 5 1 1 21|1 2 410 200012 1 1 22|1 2 410 200012 5 1 1 31|1 2 410 200012 1 1 32|1 2 410 200012 5 1 1 41|1 2 410 200012 1 1 42|1 2 410 200012 5 1 1 51|1 2 410 200012 1 1 52|1 2 410 200012 5 1 1 61|1 2 410 200012 1 1 62|";
// -- 모든 인증서 허용
var ALL_CERT_POLICIES = "";	
// ============================================================== //

// == 인증서 저장매체 관련 	===================================== //
var HARD_DISK 		= 0;	
var REMOVABLE_DISK 	= 1;	
var IC_CARD 		= 2;
var PKCS11	 		= 3;
// ============================================================== //

// == 인증서 Type 관련 		===================================== //
var CERT_TYPE_SIGN 		= 1;	
var CERT_TYPE_KM 		= 2;	
var DATA_TYPE_PEM		= 0;
var DATA_TYPE_BASE64 	= 1;
var DATA_TYPE_FILE		= 1;
// ============================================================== //

// == HASH 알고리즘		========================================= //
var HASH_ID_MD5				= 1;
var HASH_ID_RIPEMD160		= 2;		
var HASH_ID_SHA1			= 3;		// 기본적으로 사용함.
var HASH_ID_HAS160			= 4;
// ============================================================== //

// == 대칭키 알고리즘 & 모드	===================================== //
var SYMMETRIC_ID_DES		= 1;
var SYMMETRIC_ID_3DES		= 2;		// 기본적으로 사용함.
var SYMMETRIC_ID_SEED		= 3;
var SYMMETRIC_MODE_ECB		= 1;		
var SYMMETRIC_MODE_CBC		= 2;		// 기본적으로 사용함.
var SYMMETRIC_MODE_CFB		= 3;		
var SYMMETRIC_MODE_OFB		= 4;		
// ============================================================== //

// == 인증서 정보 관련 설정값		================================= //
var CERT_ATTR_VERSION						= 1;
var CERT_ATTR_SERIAL_NUBMER 				= 2;
var CERT_ATTR_SIGNATURE_ALGO_ID 			= 3;
var CERT_ATTR_ISSUER_DN 					= 4;
var CERT_ATTR_SUBJECT_DN 					= 5;
var CERT_ATTR_SUBJECT_PUBLICKEY_ALGO_ID 	= 6;
var CERT_ATTR_VALID_FROM 					= 7;
var CERT_ATTR_VALID_TO 						= 8;
var CERT_ATTR_PUBLIC_KEY 					= 9;
var CERT_ATTR_SIGNATURE 					= 10;
var CERT_ATTR_KEY_USAGE 					= 11;
var CERT_ATTR_AUTORITY_KEY_ID 				= 12;
var CERT_ATTR_SUBJECT_KEY_ID 				= 13;
var CERT_ATTR_EXT_KEY_USAGE 				= 14;
var CERT_ATTR_SUBJECT_ALT_NAME 				= 15;
var CERT_ATTR_BASIC_CONSTRAINT 				= 16;
var CERT_ATTR_POLICY 						= 17;
var CERT_ATTR_CRLDP 						= 18;
var CERT_ATTR_AIA 							= 19;
var CERT_ATTR_VALID 						= 20;
// ============================================================== //

// == 인증서 Type 관련 		===================================== //
var DATA_TYPE_CACERT 		= 1;	
var DATA_TYPE_SIGN_CERT 	= 2;	
var DATA_TYPE_KM_CERT		= 3;
var DATA_TYPE_CRL	 		= 4;
var DATA_TYPE_ARL	 		= 5;
// ============================================================== //

//**************************************************************************************//

//** 환경 설정				************************************************************//

// 인증서 선택시 기본 매체.
var STORAGE_TYPE = HARD_DISK;

// 보고자하는 인증서 정책 모음. 
//var POLICIES = FIRST_COMP_CERT_POLICIES + FIRST_INDI_CERT_POLICIES + "1.2.410.200005.1.1.4";
//var POLICIES =  FIRST_COMP_CERT_POLICIES + FIRST_INDI_CERT_POLICIES + "1 2 410 200005 1 1 4:금결원 인터넷뱅킹용|1 2 410 200012 5 4 1 11:게임물등급위원회 특정목적용|";
var POLICIES =  FIRST_COMP_CERT_POLICIES + FIRST_INDI_CERT_POLICIES + "1 2 410 200005 1 1 4:금결원 인터넷뱅킹용|1 2 410 200012 5 4 1 11:게임물등급위원회 특정목적용|1 2 410 200004 5 4 1 2:법인(범용)인증서|1 2 410 200004 5 4 2 13:법인(용도제한용)인증서|";

// 서명시 필요한 Config 조절.
// 서명 생성시 인증서 포함 여부, 0 : 서명자 인증서만 포함.(기본), 1 : 서명자 & CA 인증서 포함.
var INC_CERT_SIGN 		= 0;
// 서명 생성시 CRL 인증서 포함 여부, 0 : 미포함 (기본), 1 : 포함, 
var INC_CRL_SIGN		= 0;
// 서명 생성시 서명시간 포함 여부, 0 : 미포함, 1 : 포함(기본)
var INC_SIGN_TIME_SIGN	= 1;
// 서명 생성시 원본데이타 포함 여부 , 0 : 미포함, 1 : 포함(기본)
var INC_CONTENT_SIGN 	= 1;

// 인증서 검증에 필요한 Config 조절
// 사용자 인증서 검증 조건, 0 : CRL 체크 안함. 1 : 현재시간기준으로 유효한 CRL 사용(기본), 2 : 현재 시간기준으로 유효한 CRL 못 구할 시 이전 CRL 사용.
var USING_CRL_CHECK		= 1;
// CA 인증서 검증 조건, 0 : ARL 체크 안함. 1 : 현재시간기준으로 유효한 ARL 사용(기본), 2 : 현재 시간기준으로 유효한 CRL 못 구할 시 이전 ARL 사용.
var USING_ARL_CHECK		= 0;

var CTL_INFO = "";
										
// Envelop 테스트시 사용하는 상대방 인증서
var pemSignCert, pemSignKey, pemKMCert, pemKMKey;
pemSignCert = "-----BEGIN CERTIFICATE-----MIIE8TCCA9mgAwIBAgIEWWjEBTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJLUjESMBAGA1UECgwJVHJhZGVTaWduMRUwEwYDVQQLDAxBY2NyZWRpdGVkQ0ExFDASBgNVBAMMC1RyYWRlU2lnbkNBMB4XDTA2MDcyNDEyMDAxNVoXDTA3MDcwNjA0MTE0N1owYTELMAkGA1UEBhMCS1IxEjAQBgNVBAoMCVRyYWRlU2lnbjETMBEGA1UECwwKTGljZW5zZWRDQTEOMAwGA1UECwwFS1RORVQxGTAXBgNVBAMMEO2FjOyKpO2KuChLVE5FVCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOto3UJt8LL2ojzAVoTxz/eAEoRUYI34c1KcDP2CnaiKueEbWOAcZiTQ+6hMl87FdjSBXMLMgn+QK+DOG1KXJiFGONjqArp3vByvC/PGTJfFC5yNhcJ3jcfXLKy4NCE8HYTW1jUmb+JtlYfaHKxQ8f3rynHvt7BdxdTesnX/saJhAgMBAAGjggJGMIICQjCBjwYDVR0jBIGHMIGEgBQrdgKuglx97oGRnvWJW7nimVupr6FopGYwZDELMAkGA1UEBhMCS1IxDTALBgNVBAoMBEtJU0ExLjAsBgNVBAsMJUtvcmVhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENlbnRyYWwxFjAUBgNVBAMMDUtJU0EgUm9vdENBIDGCAidkMB0GA1UdDgQWBBQmoQFNxEVTguKb2oL+iqGhyZG4CDAOBgNVHQ8BAf8EBAMCBsAwegYDVR0gAQH/BHAwbjBsBgkqgxqMmkwBAQMwXzAuBggrBgEFBQcCAjAiHiDHdAAgx3jJncEcspQAIKz1x3jHeMmdwRwAIMeFssiy5DAtBggrBgEFBQcCARYhaHR0cDovL3d3dy50cmFkZXNpZ24ubmV0L2Nwcy5odG1sMFgGA1UdEQRRME+gTQYJKoMajJpECgEBoEAwPgwJ7YWM7Iqk7Yq4MDEwLwYKKoMajJpECgEBATAhMAcGBSsOAwIaoBYEFMuZiUnQgLpuSed2DxWgUp7NzBRpMGQGA1UdHwRdMFswWaBXoFWGU2xkYXA6Ly9sZGFwLnRyYWRlc2lnbi5uZXQ6Mzg5L2NuPWNybDFkcDIwLG91PWNybGRwLG91PUFjY3JlZGl0ZWRDQSxvPVRyYWRlU2lnbixjPUtSMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcwAYYnaHR0cDovL29jc3AudHJhZGVzaWduLm5ldDo4MC9PQ1NQU2VydmVyMA0GCSqGSIb3DQEBBQUAA4IBAQBB0en5/PpanjQSyBlFPYIHM+JIwP125q7Lfp3p5TOBU2rhvYk9EMnixbHHFgtItTuu6ZjID2nYjlRkKvcW9WCj2+mFBP83goYoasrFNIiN32NETPNkbCBX+aiG7xB+fiIHnvCImdrN0fr1xx4nR97ASULggJtITIXa40IefpzxKB5rqV9T5SgwsEe3o8ayupt2b1Z3HVV1ijb3YqxINI9Mx2CT/r/tP7AIIHlhETJNMpk6s82LiUJcNh3F5BN0ONX15r8E6mMhix4/hwa7to/pmF7pEKjLPRknpyAKNCIvmJILCcH4RmPvwdLJxQ1xWmTl9wwArK813c+frX8XBkwd-----END CERTIFICATE-----";
pemSignKey = "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIC/jBIBgkqhkiG9w0BBQ0wOzAbBgkqhkiG9w0BBQwwDgQIhYFLAWoVUwkCAgQAMBwGCCqDGoyaRAEEBBCe4fIJYSMmK/fYbg700b1lBIICsF5Q3HL7FebKKQcMG9JJQom9qjc6N9TohBeyI3aQRPkR/mDoMJOlfrb1DOPynEGOUNHSmNYIjaO+FEHoXF6aKrN3deWY0r54gbyQysXf94ZAUdxsjZ4ZLy/yxdzYZhEfswug+URKP8gUHdoV86bNq4JNZ5ap/j8RB02WJfFox0iXwmFaIcCs9r0CaqaIJuN78osGB36RT2fcsIXejPNtROwIMlvgSEA/mzDMXv1sEKJCgsXJfi/0TQ+xhav3EkgO+gCWZbOAub/F5wun3EXbfAcUmFjfdQh5enjFAk9YBpIIy93BGUTV0EaN2MUJJEF5i9I7S5bebctzF1Gss5Ac8vyoIWMMeKnVtKB+72Y8A76p1tB1+PpgFj6Pck4L94ZXxyh6sP5FKf2qkdnPRKcQ7Xuib9uUMqpWYLLJdUp6NoOtl5G/aD52o7JMXN5tB9bqOx8GgsySdzvEfLZROqajODxK3LrH/HvK7Uo9Cs8t2SgNf3uxOy9xVtfAk4p82ouOWuIoHYZJ2e+AQndPcyZkDOAwqmDGSWoVtK1pzIdqqElZ+nge0HbhmKST4oNH2PMzycijl8A3B+uhiBJ5X45k7gTrV6ncoj3aM7OSyWk4P24oDOgWfMeiF0PgwbNu1yiB4LulgtkG8nrITiNd5gFKOoif/zDP3kBT6XlOhTMSB2PKRLz2Qd1xx/Phj9oGD5rBVJ5MtXdYryMT6daenxurbCK5xVTrIp5Q1qB+soMgnVzSbQmTi0XSZ//1mAFeb3Id7uX8b86XbOKoS//6jUohXmCXHii8QLYb2g8mh+hfp+HE2RPrd2jeB3SIqiCEMC/HkCyotCR7phTbhtTc33DbFCIdlgl2VwEYcIHOlMgk0VGeWNAEFrovAkLSTd4MiT48aNVnarjRaHQeQsUVfRIxBQs=-----END ENCRYPTED PRIVATE KEY-----";
pemKMCert = "-----BEGIN CERTIFICATE-----MIIElzCCA3+gAwIBAgIEWWjEBjANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJLUjESMBAGA1UECgwJVHJhZGVTaWduMRUwEwYDVQQLDAxBY2NyZWRpdGVkQ0ExFDASBgNVBAMMC1RyYWRlU2lnbkNBMB4XDTA2MDcyNDEyMDAxNVoXDTA3MDcwNjA0MTE0N1owYTELMAkGA1UEBhMCS1IxEjAQBgNVBAoMCVRyYWRlU2lnbjETMBEGA1UECwwKTGljZW5zZWRDQTEOMAwGA1UECwwFS1RORVQxGTAXBgNVBAMMEO2FjOyKpO2KuChLVE5FVCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMg+mODpAYwgpiPVRAt60Olo0vgIiufqV8YUqM6GG7wQ5X4ASClf3lcKbX5rVh/cawPCmbxpGo0MrK6YRcpOQ4wM6hxK/BnKBvZyyKGVJJzawvO34plW0Zoi1/vU9O50Z7NKRwhmHb9AQ5p5oqvfgRNb2+4MjnrBPuARkxOCL5HTAgMBAAGjggHsMIIB6DCBjwYDVR0jBIGHMIGEgBQrdgKuglx97oGRnvWJW7nimVupr6FopGYwZDELMAkGA1UEBhMCS1IxDTALBgNVBAoMBEtJU0ExLjAsBgNVBAsMJUtvcmVhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENlbnRyYWwxFjAUBgNVBAMMDUtJU0EgUm9vdENBIDGCAidkMB0GA1UdDgQWBBQico3zYfEW/0UAYui1oi8GIc6GwDAOBgNVHQ8BAf8EBAMCBSAwegYDVR0gAQH/BHAwbjBsBgkqgxqMmkwBAQQwXzAuBggrBgEFBQcCAjAiHiDHdAAgx3jJncEcspQAIKz1x3jHeMmdwRwAIMeFssiy5DAtBggrBgEFBQcCARYhaHR0cDovL3d3dy50cmFkZXNpZ24ubmV0L2Nwcy5odG1sMGQGA1UdHwRdMFswWaBXoFWGU2xkYXA6Ly9sZGFwLnRyYWRlc2lnbi5uZXQ6Mzg5L2NuPWNybDFkcDIwLG91PWNybGRwLG91PUFjY3JlZGl0ZWRDQSxvPVRyYWRlU2lnbixjPUtSMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcwAYYnaHR0cDovL29jc3AudHJhZGVzaWduLm5ldDo4MC9PQ1NQU2VydmVyMA0GCSqGSIb3DQEBBQUAA4IBAQBBiys2Q0JCR7yNZkf83qp5jdqWOiY+K1OjZzGyrrHINas9nXGUomoLNv/s3EMB2As4vT5YHPmZ5H3N6DNHDHV1FCa6TR/YwffKNeP0FpunRl5vMpFAXijJwjA/EveHMrp9SRRTm6ybEkvQ+py0DnenLE01VM+sN4vmNefwKsH7ZGnyXWBKtf78Os8ZSfAKVB5o81t64hxiDUrhaQub1pna0bbtatBIUlLxyNZcav/u9hPRg9W0I3zQNe4YQeDZ6GiW+YozkuG1e7Wb3P+MEk6UujAXPWXnJsJxwqYdC+6rZppi0U1N6+uPR2ZioeGf4yucooUfjdPZV+XkEn/Fsj82-----END CERTIFICATE-----";
pemKMKey = "-----BEGIN ENCRYPTED PRIVATE KEY-----MIICzjBIBgkqhkiG9w0BBQ0wOzAbBgkqhkiG9w0BBQwwDgQIT2b2oOGkTXUCAgQAMBwGCCqDGoyaRAEEBBCbj/vw5rC0Cwk5dCOboO/OBIICgJRDTc4mBPi7LxM3sHPnNU42l2T83aLMFf35E5GDlQA8owniAQhZj9Z6/lvUewLiCrb0VlP69h2Y5DvIH8ALLOTJFEXY7+5WpPYmnBJX4pMkslWXseHEl096bbVTZ6mS9hRsIMd7sgLfoQRWLsx7xe7HjjvWp4Jq1KeDaizDFSbCc1Pd70Z12agGJsb3CmVUm7gYeGP/1xO+MOQZvvlNcubfWfF4enMWMK00jMDmQzNNAi8MSzdk27jutOokeqT7IhWOUWHewhEVYbA3kyhNyUbQr+2GUDEzTibkOJNJwcmK3vsYLw61T46Bew0qiWQt5/jxRf2ADqfH1ZocyyDxjZTomVk/cvCr5A1X32G0eVDlxQl9mSw2I9wKXri3Q0J/mSNLYwU1ajElTy3AfykUUfi76G63eGXoDpxPZRFjqxYGck+bmxn66h38npuofNavggr2Lx+OGa5fPFwjlfagoxcj2NSfvV6NIMIbXZfvU0xBmQR9/9V9+Crk5w8OdVIVk3IK658NMc4ePhRbIfhlE8oaFjWOgiC1zvSyWB3cAcugZW4gNry1CHGRFWrK/20A1R9EnAfntlYyobvBxMyZwKby87PtyuVGUnFN22BV9XscAGoyErGAPm2t4+PQp46xCPKwUi/Ebg7c5JA/WRbLTEjG3scApxoaxgykwgeQiGn2mStosaN+dp8VwokYoDLhDfzsHVpfVLfdCvU0DXxwpsagj305Xt6wPXu1CaceLMaxe5FKrvsTz+ZRMXVutsjnnQMyD0kQZkaf1/bVqm7QMiSZ3JxDVsKPgpAFrQJN92YfAgN18th95k8wSh61m+yvasENH3EmnCK+jNyJkvpaQcI=-----END ENCRYPTED PRIVATE KEY-----";


//**************************************************************************************//

function escape_url(url) {
	var i;
	var ch;
	var out = '';
	var url_string = '';

	url_string = String(url);

	for (i = 0; i < url_string.length; i++) {
		ch = url_string.charAt(i);
		if (ch == ' ')
		    out += '%20';
		else if (ch == '%')
		    out += '%25';
		else if (ch == '&')
		    out += '%26';
		else if (ch == '+')
		    out += '%2B';
		else if (ch == '=')
		    out += '%3D';
		else if (ch == '?')
		    out += '%3F';
		else
		    out += ch;
	}
	return out;
}

