PageSourceSearch

https://biz.kbcard.com/cxo/wizvera/delfino-g3/delfino.js?20151207101000

js kbcard.com collected 2026-09-24 09:46:28 UTC 94,685 bytes, 2,411 lines download raw bytes

1(function(jQuery) {
2if (typeof jQuery === "undefined") alert("jQuery is not available!!!");
3
4if (typeof Delfino === "undefined") {
5var currentElement = null;
6function setFocusBack() {
7    if(currentElement) {
8        if(currentElement.focus) {
9            currentElement.focus();
10        }
11        currentElement = null;
12    }
13}
14
15var _SignType = {
16    LOGIN: 'LOGIN',
17    AUTH: 'AUTH',
18    AUTH2: 'AUTH2',
19    SIMPLE: 'SIMPLE',
20    CONFIRM: 'CONFIRM'
21};
22
23var _Delfino = {
24    jQuery : jQuery,
25    completes : {},
26    completeHandle : ((new Date().getTime())%100000),
27
28    inited: false,
29
30    SignType: _SignType,
31
32    addComplete:function(complete)
33    {
34        complete = complete || {};
35        if( typeof complete === "function" ){
36            complete = {complete:complete};
37        }
38        
39        var handle = this.completeHandle++;
40        this.completes[handle] = complete;
41        return handle;
42    },
43    getComplete:function(handle)
44    {
45        var complete = this.completes[handle];
46        return complete;
47    },
48    removeComplete:function(handle)
49    {
50        delete this.completes[handle];
51    },
52    emptyComplete:function(handle)
53    {
54        var size = 0, key;
55        for (key in this.completes) {
56            if (this.completes.hasOwnProperty(key)) size++;
57        }
58        return size === 0;
59    },
60    
61    isInstall:function (goInstall,completeCallback) {
62        var ret = this.init(goInstall);
63        if(completeCallback != undefined)
64            completeCallback(ret);
65    },
66
67    isNativeAppMode: function() {
68        var _VPCGClient = window.VPCGClientApp || (top && top.VPCGClientApp);
69        var _DelfinoG10Sign = window.DelfinoG10Sign;
70        
71        if(_VPCGClient && _DelfinoG10Sign && typeof _DelfinoG10Sign === 'function') {
72            return true;
73        }
74        return false;
75    },
76
77    /**
78     * WizIn Delfino ÃʱâÈ­Çϱâ À§ÇÑ ÇÔ¼öÀÌ´Ù.
79     */
80    init:function(installCheck)
81    {
82        currentElement = document.activeElement;
83        if(this.inited) return true;
84
85        if(DCrypto == null) {
86            if(DCrypto == null) {
87                if (typeof installCheck != "undefined" && installCheck == false) return false;
88                if (DelfinoConfig.installMessage.NO != "") {
89                    alert(DelfinoConfig.installMessage.NO);
90                }
91                return false;
92            }
93        }
94        if(DCrypto.init(installCheck)==false) return false;
95
96
97        var config="";
98        config += "IssuerCertFilter=";
99        config += encodeURIComponent(DelfinoConfig.issuerCertFilter);
100        config += "&PolicyOidCertFilter=";
101        config += encodeURIComponent(DelfinoConfig.policyOidCertFilter);
102
103        if(DelfinoConfig.hsmUsingDrivers!=null){
104            config += "&hsm.usingDrivers=";
105            config += encodeURIComponent(DelfinoConfig.hsmUsingDrivers);
106        }
107
108        if(DelfinoConfig.slmNPKIAuthLogging!=null){
109            config += "&slmLoggingFunctionName=";
110            config += encodeURIComponent(DelfinoConfig.slmNPKIAuthLogging);
111        }
112        if(DelfinoConfig.forceScreenKeyboard!=null){
113            config += "&forceScreenKeyboard=";
114            config += encodeURIComponent(DelfinoConfig.forceScreenKeyboard);
115        }
116
117        DCrypto.setConfig(config);
118        this.inited = true;
119
120        try{
121            var properties = {};
122
123            properties["cacheCertStore"] ="" + DelfinoConfig.cacheCertStore;
124            properties["certStoreFilter"] = DelfinoConfig.certStoreFilter;
125            if( DelfinoConfig.prepareCertStore!=null ) properties["prepareCertStore"] = DelfinoConfig.prepareCertStore; //v1.2.3.0 over
126            if( DelfinoConfig.disableCertStore!=null ) properties["disableCertStore"] = DelfinoConfig.disableCertStore;
127
128            //alert(ubikeyConfig.enable+"\n"+ubikeyConfig.download+"\n"+ubikeyConfig.version);
129            if(navigator.userAgent.match(/Mac OS X/i)) {
130                properties["ubikey.enable"] =    ubikeyConfigMac.enable;
131                properties["ubikey.download"] =  ubikeyConfigMac.download;
132                properties["ubikey.version"] =   ubikeyConfigMac.version;
133                properties["ubikey.update"] =    ubikeyConfigMac.update;
134                properties["ubikey.securekeyboard"] =    ubikeyConfigMac.securekeyboard;
135            }
136            else if(navigator.userAgent.match(/Linux/i)) {
137                properties["ubikey.enable"] =    ubikeyConfigLinux.enable;
138                properties["ubikey.download"] =  ubikeyConfigLinux.download;
139                properties["ubikey.version"] =   ubikeyConfigLinux.version;
140                properties["ubikey.update"] =    ubikeyConfigLinux.update;
141                properties["ubikey.securekeyboard"] =    ubikeyConfigLinux.securekeyboard;
142            }
143            else {
144                properties["ubikey.enable"] =    ubikeyConfig.enable;
145                if(navigator.platform == "Win64") {
146                    properties["ubikey.download"] =  ubikeyConfig.download_x64;
147                    properties["ubikey.version"] =   ubikeyConfig.version_x64;
148                }
149                else {
150                    properties["ubikey.download"] =  ubikeyConfig.download;
151                    properties["ubikey.version"] =   ubikeyConfig.version;
152                }
153                properties["ubikey.update"] =    ubikeyConfig.update;
154                properties["ubikey.securekeyboard"] =    ubikeyConfig.securekeyboard;
155            }
156
157            //alert(mobisignConfig.enable+"\n"+mobisignConfig.download+"\n"+mobisignConfig.version);
158            properties["mobisign.enable"] =  mobisignConfig.enable;
159            properties["mobisign.download"] =mobisignConfig.download;
160            properties["mobisign.version"] = mobisignConfig.version;
161            properties["mobisign.sitecode"] = mobisignConfig.sitecode;
162            properties["mobisign.aclist"] = mobisignConfig.aclist;
163            
164            if(DelfinoConfig.smartone!=null){
165                properties["smartone.enable"] = "" + DelfinoConfig.smartone.enable;
166                if(DelfinoConfig.smartone.version!=null) properties["smartone.version"] = DelfinoConfig.smartone.version;
167                properties["smartone.download"] = DelfinoConfig.smartone.download;
168                properties["smartone.host"] = DelfinoConfig.smartone.host;
169                properties["smartone.port"] = "" + DelfinoConfig.smartone.port;
170                properties["smartone.siteCode"] = DelfinoConfig.smartone.siteCode;
171            }
172            
173            if( DelfinoConfig.usim!=null ) {
174                properties["usim.usingDrivers"] = DelfinoConfig.usim.usingDrivers;
175                properties["usim.certSelector"] = DelfinoConfig.usim.certSelector;
176                properties["usim.displayDataAtMobile"] = "" + DelfinoConfig.usim.displayDataAtMobile;
177                properties["usim.siteDomain"] = DelfinoConfig.usim.siteDomain;
178                properties["usim.disableInHSM"] = "" + DelfinoConfig.usim.disableInHSM;
179                
180                if(DelfinoConfig.usim.raon!=null){
181                    properties["usim.raon.siteCode"] = DelfinoConfig.usim.raon.siteCode;
182                    properties["usim.raon.displayDataAtMobile"] = "" + DelfinoConfig.usim.raon.displayDataAtMobile;
183                    properties["usim.raon.download"] = DelfinoConfig.usim.raon.download;
184                }
185                
186                if(DelfinoConfig.usim.dream!=null){
187                    properties["usim.dream.download"] = DelfinoConfig.usim.dream.download;
188                    properties["usim.dream.displayDataAtMobile"] = "" + DelfinoConfig.usim.dream.displayDataAtMobile;
189                    properties["usim.dream.host"] = DelfinoConfig.usim.dream.host;
190                    properties["usim.dream.port"] = DelfinoConfig.usim.dream.port;
191                }
192                
193                if(DelfinoConfig.usim.sumion!=null){
194                    properties["usim.sumion.download"] = DelfinoConfig.usim.sumion.download;
195                    properties["usim.sumion.displayDataAtMobile"] = "" + DelfinoConfig.usim.sumion.displayDataAtMobile;
196                    properties["usim.sumion.host"] = DelfinoConfig.usim.sumion.host;
197                    properties["usim.sumion.port"] = DelfinoConfig.usim.sumion.port;
198                }
199            }
200
201            if( DelfinoConfig.safehard!=null ) {
202                properties["safehard.order"] = "" + DelfinoConfig.safehard.order;
203                properties["safehard.version"] = DelfinoConfig.safehard.version;
204                properties["safehard.download"] = DelfinoConfig.safehard.download;
205                properties["safehard.downloadNormal"] = DelfinoConfig.safehard.downloadNormal;
206                properties["safehard.cloudUrl"] = DelfinoConfig.safehard.cloudUrl;
207                properties["safehard.secureKeyboardConfig"] = JSON.stringify(DelfinoConfig.safehard.secureKeyboardConfig);
208            }
209            
210            if(DelfinoConfig.secureDisk!=null){
211                properties["secureDisk.order"] = "" + DelfinoConfig.secureDisk.order;
212                properties["secureDisk.enable"] = "" + DelfinoConfig.secureDisk.enable;
213                properties["secureDisk.version"] = DelfinoConfig.secureDisk.version;
214                properties["secureDisk.download"] = DelfinoConfig.secureDisk.download;
215            }
216            
217            if(DelfinoConfig.EA!=null){
218                if (!Delfino.isSupportedEA()) DelfinoConfig.EA.enable = false;
219                properties["EA.enable"] = "" + DelfinoConfig.EA.enable;
220            }
221            
222            if(DelfinoConfig.myPassword!=null){
223                properties["myPassword.enable"] = "" + DelfinoConfig.myPassword.enable;
224            }
225            
226            if(DelfinoConfig.connected!=null){
227                properties["connected.servers"] = JSON.stringify(DelfinoConfig.connected);
228            }
229            
230            if(DelfinoConfig.oneSign!=null){
231                properties["oneSign.enable"] = "" + DelfinoConfig.oneSign.enable;
232            }
233            
234            if( DelfinoConfig.KTB!=null && DelfinoConfig.KTB.DGBank!=null) {
235                properties["KTB.DGBank.version"] = DelfinoConfig.KTB.DGBank.version;
236                properties["KTB.DGBank.ip"] = DelfinoConfig.KTB.DGBank.ip;
237                properties["KTB.DGBank.port"] = DelfinoConfig.KTB.DGBank.port;
238                properties["KTB.DGBank.publickey"] = DelfinoConfig.KTB.DGBank.publickey;
239            }
240            
241            
242            if(DelfinoConfig.style!=null){
243                properties["style.button"] = JSON.stringify(DelfinoConfig.style.button);
244                properties["style.tab"] = JSON.stringify(DelfinoConfig.style.tab);
245                
246                if(DelfinoConfig.style.keyboard) {
247                    if(DelfinoConfig.style.keyboard.logoUrl)
248                        DelfinoConfig.style.keyboard.logo = DC_get(DelfinoConfig.style.keyboard.logoUrl, Delfino.getModule());
249                    properties["style.keyboard"] = JSON.stringify(DelfinoConfig.style.keyboard);
250                }
251            }
252            
253
254            properties["securekeyboard.enable"] = "" + secureKeyboardConfig.enable;
255            properties["securekeyboard.products"] = secureKeyboardConfig.product;
256            
257            var productArray = secureKeyboardConfig.product.split(',');
258            //properties["securekeyboard.product"] = productArray[0]; //v3140 below
259            properties["securekeyboard.product"] = productArray[productArray.length-1]; //v3140 below
260            
261            properties["securekeyboard.toggle"] = "" + secureKeyboardConfig.toggle;
262            properties["securekeyboard.showMessage"] = "" + secureKeyboardConfig.showMessage;
263            properties["uiType"] =DelfinoConfig.uiType;
264            properties["enableCheckVid"] ="" + DelfinoConfig.enableCheckVid;
265            properties["passwordCounter"] = DelfinoConfig.passwordCounter;
266            properties["installError"] = "" + DelfinoConfig.installError;
267            
268            if(secureKeyboardConfig.option != null) properties["securekeyboard.option"] = JSON.stringify(secureKeyboardConfig.option);
269            
270            if(DelfinoConfig.enableHsmGuide != null) properties["enableHsmGuide"] = "" + DelfinoConfig.enableHsmGuide;
271            
272            if(DelfinoConfig.license!=null) properties["license"] = DelfinoConfig.license;
273
274            if(DelfinoConfig.sitename!=null) properties["sitename"] = DelfinoConfig.sitename;
275            
276            if(DelfinoConfig.multiDomain!=null) properties["domain"] = DelfinoConfig.multiDomain;
277            
278            if(DelfinoConfig.changePasswordPolicy!=null) properties["changePasswordPolicy"] 
278= DelfinoConfig.changePasswordPolicy;
279
280            if(DelfinoConfig.lastUsedCertFirst!=null) properties["lastUsedCertFirst"] = DelfinoConfig.lastUsedCertFirst;
281            
282            if(DelfinoConfig.cloudcert!=null) {
283                
284                properties["cloudcert.enable"] = "" + DelfinoConfig.cloudcert.enable;
285                
286                if(DelfinoConfig.cloudcert.encryptedParams!=null) properties["cloudcert.encryptedParams"] = DelfinoConfig.cloudcert.encryptedParams;
287                
288                if(DelfinoConfig.cloudcert.encryptedParams_test!=null) properties["cloudcert.encryptedParams_test"] = DelfinoConfig.cloudcert.encryptedParams_test;
289                
290                if(DelfinoConfig.cloudcert.cloudMode!=null) properties["cloudcert.cloudMode"] = DelfinoConfig.cloudcert.cloudMode;
291                
292                if(DelfinoConfig.cloudcert.mode!=null) properties["cloudcert.mode"] = DelfinoConfig.cloudcert.mode;
293            }
294
295            if(DelfinoConfig.closeOnWrongPassword!=null) properties["closeOnWrongPassword"] = DelfinoConfig.closeOnWrongPassword;
296
297            this.setProperties(properties);
298
299        }catch(e){ alert("Delfino.init()\n" + e); }
300
301        if(DelfinoConfig.lang != null){
302            this.setLang(DelfinoConfig.lang);
303        }
304        //else{
305        //  this.setLang(_Delfino_SystemLang);
306        //}
307
308
309        return true;
310    },
311    setProperties:function(properties) {
312        for(var key in properties) {
313            if(typeof properties[key] !== "function"){
314                DCrypto.setProperty(key, properties[key]);
315            }
316        }
317    },
318
319    /**
320     * °øÀÎÀÎÁõ¼­ ·Î±×ÀÎÀ» À§ÇÑ ÀüÀÚ¼­¸íµ¥ÀÌÅ͸¦ »ý¼ºÇÏ¿© ¼­¹ö·Î Àü¼ÛÇÑ´Ù.
321     * @param {HTMLFormElement} form ¼­¸íÇÒ ³»¿ëÀ» °¡Áö°í ÀÖ´Â HTMLFormElement
322     * @param {function} successCB  ÀüÀÚ¼­¸í ¼º°ø½Ã ÀüÀÚ¼­¸í µ¥ÀÌÅ͸¦ Á÷Á¢¹Þ¾Æ¼­ ó¸®ÇÒ ¶§ »ç¿ëÇÏ´Â Äݹé ÇÔ¼öÀÌ´Ù.
323     *                              ÇÔ¼ö Çü½ÄÀº successCB(pkcs7, vid_random)ÀÌ´Ù.
324     *                              ÀÌ ÀÎÀÚ¸¦ ¼³Á¤ÇßÀ» °æ¿ì¿¡´Â ¼­¸íµ¥ÀÌÅ͸¦ ¼­¹ö·Î Àü¼ÛÇÏÁö ¾Ê´Â´Ù.
325     */
326
327    generatePKCS7SignedDataSuccessCallback:null,
328    generatePKCS7SignedDataErrorCallback:null,
329
330    loginForm:function(form, successCB, errorCB)
331    {
332        this.inited = false; //·Î±×Àνà ¹«Á¶°Ç ÃʱâÈ­ ó¸®
333
334        if(this.init() == false) return;
335
336        this.generatePKCS7SignedDataSuccessCallback = successCB;
337        this.generatePKCS7SignedDataErrorCallback = errorCB;
338        if(this.generatePKCS7SignedDataSuccessCallback==null){
339            if(jQuery("#Delfino_PKCS7_form").length==0){
340                jQuery('body').append('<form id="Delfino_PKCS7_form"><input type="hidden" name="PKCS7"><input type="hidden" name="VID_RANDOM"></form>');
341            }
342            var pkcs7Form = jQuery("#Delfino_PKCS7_form")[0];
343
344            pkcs7Form.method = form.method;
345            pkcs7Form.action = form.action;
346            pkcs7Form.target = form.target;
347        }
348
349        var data = jQuery(form).serialize();
350
351        //alert(data);
352
353        DCrypto.resetCertificate();
354
355        this.loadLogoImage(DelfinoConfig.logoImageUrl);
356        
357        if(this.getModule() == "G2"){
358            DCrypto.generatePKCS7SignedData(data, "Delfino_generatePKCS7SignedData_success_callback", "Delfino_error_callback", options);
359            return;
360        }
361        
362        //G3, G4
363        var options = {};
364        options.signedAttribute = "certStoreType";
365        options.attributeAsData = true;
366        options.resetCertificate = true;
367        options.cacheCert = true;
368            
369        this.sign(data, options, function(result){
370                if(result.status == 1){
371                    Delfino_generatePKCS7SignedData_success_callback(result.signData, result.vidRandom);
372                }
373                else{
374                    Delfino_error_callback(result.status, result.message);
375                }
376            });
377    },
378
379    /**
380     * PKCS#7 ÀüÀÚ¼­¸íµ¥ÀÌÅ͸¦ »ý¼ºÇÏ¿© ¼­¹ö·Î Àü¼ÛÇÑ´Ù.
381     * @param {HTMLFormElement} form ¼­¸íÇÒ ³»¿ëÀ» °¡Áö°í ÀÖ´Â HTMLFormElement
382     * @param {function}
382 successCB  ÀüÀÚ¼­¸í ¼º°ø½Ã ÀüÀÚ¼­¸í µ¥ÀÌÅ͸¦ Á÷Á¢¹Þ¾Æ¼­ ó¸®ÇÒ ¶§ »ç¿ëÇÏ´Â Äݹé ÇÔ¼öÀÌ´Ù.
383     *                              ÇÔ¼ö Çü½ÄÀº successCB(pkcs7, vid_random)ÀÌ´Ù.
384     *                              ÀÌ ÀÎÀÚ¸¦ ¼³Á¤ÇßÀ» °æ¿ì¿¡´Â ¼­¸íµ¥ÀÌÅ͸¦ ¼­¹ö·Î Àü¼ÛÇÏÁö ¾Ê´Â´Ù.
385     *
386     */
387
388    signForm : function(form, successCB, errorCB)
389    {
390        if(this.init() == false) return;
391
392        try{
393            this.generatePKCS7SignedDataSuccessCallback = successCB;
394            this.generatePKCS7SignedDataErrorCallback = errorCB;
395            if(this.generatePKCS7SignedDataSuccessCallback==null){
396                if(jQuery("#Delfino_PKCS7_form").length==0){
397                    //alert("delfino_form not found");
398                    jQuery('body').append('<form id="Delfino_PKCS7_form"><input type="hidden" name="PKCS7"><input type="hidden" name="VID_RANDOM"></form>');
399                }
400                var pkcs7Form = jQuery("#Delfino_PKCS7_form")[0];
401
402                pkcs7Form.method = form.method;
403                pkcs7Form.action = form.action;
404                pkcs7Form.target = form.target;
405            }
406
407            var data = jQuery(form).serialize();
408            var rselectTextarea = /^(?:select|textarea)/i;
409            var rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i;
410
411            var formats = jQuery(form).map(function(){
412                return this.elements ? jQuery.makeArray(this.elements) : this;
413            }).filter(function(){
414                return this.name && !this.disabled &&
415                (this.checked || rselectTextarea.test(this.nodeName) ||
416                rinput.test(this.type));
417            }).map(function(i, elem){
418                var val = jQuery(this).attr('format');
419
420                return val == null ? null : {
421                    name: elem.name,
422                    value: val
423                };
424            }).get();
425
426            var formatsParam = jQuery.param(formats);
427            
428            this.loadLogoImage(DelfinoConfig.logoImageUrl);            
429            
430            if(this.getModule() == "G2"){
431                if(formatsParam.length>0){
432                    data = data + "&" + "__USER_CONFIRM_FORMAT=" + encodeURIComponent(formatsParam) ;
433                }
434                DCrypto.generatePKCS7SignedData(data, "Delfino_generatePKCS7SignedData_success_callback", "Delfino_error_callback");
435                return;
436            }
437            
438            //G3, G4
439            var options = {};
440            options.signedAttribute = "certStoreType";
441            options.attributeAsData = true;
442            if(formatsParam.length>0){
443                options.format = formatsParam;
444            }
445            options.dataType = "form-urlencoded";
446            
447            this.sign(data, options, function(result){
448                    if(result.status == 1){
449                        Delfino_generatePKCS7SignedData_success_callback(result.signData, result.vidRandom);
450                    }
451                    else{
452                        Delfino_error_callback(result.status, result.message);
453                    }
454                });
455        }catch(e){
456            alert("signForm:"+e);
457        }
458    },
459
460    signKeyValue:function(keys, values, formats, delimeter, successCB, errorCB)
461    {
462        if(this.init() == false) return;
463
464        if(successCB==null){
465            alert("successCB can NOT be null");
466            return;
467        }
468        if( keys == null ){
469            alert("keys can NOT be null");
470            return;
471        }
472        if( delimeter == null ){
473            alert("delimeter can NOT be null");
474            return;
475        }
476
477        var keyArray = keys.split(delimeter);
478        var valueArray = values.split(delimeter);
479
480        var formatArray = null;
481        if(formats!=null && formats.length>0){
482            formatArray = formats.split(delimeter);
483        }
484
485        if(keyArray.length != valueArray.length || (formatArray!=null && valueArray.length!= formatArray.length)){
486            alert("signKeyValue invalid argument");
487            return;
488        }
489
490        var data = "";
491        var format = "";
492        for(var i=0; i<keyArray.length; i++){
493            if(data.length>0){
494                data += "&";
495            }
496            data += encodeURIComponent(keyArray[i]);
497            data += "=";
498            data += encodeURIComponent(valueArray[i]);
499
500            if(format.length>0){
501                format += "&";
502            }
503            if (formatArray!=null) {
504
505                format += encodeURIComponent(keyArray[i]);
506                format += "=";
507                format += encodeURIComponent(formatArray[i]);
508            }
509        }
510        
511        this.generatePKCS7SignedDataSuccessCallback = successCB;
512        this.generatePKCS7SignedDataErrorCallback = errorCB;
513
514        this.loadLogoImage(DelfinoConfig.logoImageUrl);		
515        if(this.getModule() == "G2"){
516            if(format.length>0){
517                data = data + "&" + "__USER_CONFIRM_FORMAT=" + encodeURIComponent(format) ;
518            }
519            DCrypto.generatePKCS7SignedData(data, "Delfino_generatePKCS7SignedData_success_callback", "Delfino_error_callback");
520            return;
521        }
522        
523        //G3, G4
524        var options = {};
525        options.signedAttribute = "certStoreType";
526        options.attributeAsData = true;
527        if(format.length>0){
528            options.format = format;
529            options.signedAttribute += ",format";
530        }
531        options.dataType = "form-urlencoded";
532        
533        this.sign(data, options, function(result){
534                if(result.status == 1){
535                    Delfino_generatePKCS7SignedData_success_callback(result.signData, result.vidRandom);
536                }
537                else{
538                    Delfino_error_callback(result.status, result.message);
539                }
540            });
541    },
542
543    multiSignString : function(datas, delimeter, successCB, errorCB)
544    {
545        if(this.init() == false) return;
546        
547        this.generatePKCS7SignedDataSuccessCallback = successCB;
548        this.generatePKCS7SignedDataErrorCallback = errorCB;
549
550        this.loadLogoImage(DelfinoConfig.logoImageUrl);
551        
552        if(this.getModule() == "G2"){
553            DCrypto.generateMultiPKCS7SignedData(datas, delimeter, "Delfino_generatePKCS7SignedData_success_callback", "Delfino_error_callback");
554            return;
555        }
556        
557        //G3, G4
558        var options = {};
559        options.multiSign = true;
560        options.multiSignDelimiter = delimeter;
561        options.signedAttribute = "signingTime";
562        
563        this.sign(data, options, function(result){
564                if(result.status == 1){
565                    Delfino_generatePKCS7SignedData_success_callback(result.signData, result.vidRandom);
566                }
567                else{
568                    Delfino_error_callback(result.status, result.message);
569                }
570            });
571        
572    },
573
574
575    /**
576     * document.write¸¦ ÀÌ¿ëÇØ¼­ object ű׷ΠWizIn Delfino PluginÀ» »ý¼ºÇÑ´Ù.
577     */
578    createObject:function()
579    {
580        document.write(DCrypto.getObjectTag());
581    },
582
583    /**
584     * WizIn Delfino PluginÀ» »ý¼ºÇϱâ À§ÇÑ object tag ½ºÆ®¸µÀ» ¸®ÅÏÇÑ´Ù.
585     * @return {String} object tag ½ºÆ®¸µ
586     */
587    getObjectTag:function()
588    {
589        return DCrypto.getObjectTag();
590    },
591
592    /**
593     * °øÀÎÀÎÁõ¼­ °ü¸®Ã¢À» ¶ç¿î´Ù.
594     */
595    manageCertificate:function(options, complete)
596    {
597        var optionsComplete = this._fixOptionsComplete(options, complete);
598        options = optionsComplete.options;
599        complete = optionsComplete.complete;
600        
601        if(this.init() == false) return;
602        if (typeof complete == "undefined") {
603            DCrypto.manageCertificate();
604        } else {
605            options = options || {};
606            var handle = this.addComplete(complete);
607            DCrypto.manageCertificate(handle, JSON.stringify(options));
608        }
609    },
610
611    loadLogoImage:function(url)
612    {
613        var logoImage = null;
614
615        if(DCrypto.getVersion != null && typeof DelfinoConfig.logoImageUrl_428x81 != "undefined"){
616            var version = DCrypto.getVersion();
617            if(version!=null && version!=""){
618                if(DC_compareVersion(version, "1.2.2.0") >= 0) {
619                    var newImageUrl = DelfinoConfig.logoImageUrl_428x81;
620                    logoImage = DC_get(newImageUrl, Delfino.getModule());
621                }
622            }
623        }
624        if(logoImage==null){
625            logoImage = DC_get(url, Delfino.getModule());
626        }
627        if(logoImage!=null){
628            DCrypto.setProperty("delfino.logoimage", logoImage);
629        }
630    },
631
632    requestCertificate_complete_callback:null,
633    requestCertificate:function(ca, referenceValue, secretValue, complete)
634    {
635        if(this.init() == false) return;
636
637        //this.loadLogoImage(DelfinoConfig.logoImageUrl);
638
639        this.requestCertificate_complete_callback = complete;
640        var host;
641        var port;
642        if(ca == "yessign"){
643            host = DelfinoConfig.yessignCaHost;
644            port = DelfinoConfig.yessignCaPort;
645        }
646        else if(ca == "crosscert"){
647            host = DelfinoConfig.crosscertCaHost;
648            port = DelfinoConfig.crosscertCaPort;
649        }
650        else if(ca == "signkorea"){
651            host = DelfinoConfig.signkoreaCaHost;
652            port = DelfinoConfig.signkoreaCaPort;
653        }
654        else if(ca == "yessignWebCmp"){
655            if(this.getModule() != "G4" && this.getModule() != "G5" && this.getModule() != "G10"){
656                alert("Only G4, G5, G10 support WebCMP");
657                return;
658            }
659            host = DelfinoConfig.yessignWebCmpUrl;
660            port = 0;
661        }
662        else if(ca === 'fincert') {
663            
664        }
665        else{
666            alert("not supported ca:" + ca);
667            return;
668        }
669        if(this.getModule() == "G2"){
670            DCrypto.requestCertificate(ca, host, port, referenceValue, secretValue, "Delfino_requestCertificate_complete_callback");
671            return;
672        }
673                
674        var handle = this.addComplete(function(result){
675            complete(result.status, result.message);            
676        });
677        var options = {};
678        DCrypto.requestCertificate2(handle, ca, host, port, referenceValue, secretValue, JSON.stringify(options));
679    },
680    updateCertificate_complete_callback:null,
681    updateCertificate:function(ca, complete)
682    {
683        if(this.init() == false) return;
684
685        this.updateCertificate_complete_callback = complete;
686        var host;
687        var port;
688        if(ca == "yessign"){
689            host = DelfinoConfig.yessignCaHost;
690            port = DelfinoConfig.yessignCaPort;
691        }
692        else if(ca == "crosscert"){
693            host = DelfinoConfig.crosscertCaHost;
694            port = DelfinoConfig.crosscertCaPort;
695        }
696        else if(ca == "signkorea"){
697            host = DelfinoConfig.signkoreaCaHost;
698            port = DelfinoConfig.signkoreaCaPort;
699        }
700        else if(ca == "yessignWebCmp"){
701            if(this.getModule() != "G4" && this.getModule() != "G5" && this.getModule() != "G10"){
702                alert("Only G4, G5, G10 support WebCMP");
703                return;
704            }
705            host = DelfinoConfig.yessignWebCmpUrl;
706            port = 0;
707        }
708        else if(ca === 'fincert') {
709            
710        }
711        else{
712            alert("not supported ca:" + ca);
713            return;
714        }
715        if(this.getModule() == "G2"){
716            DCrypto.updateCertificate(ca, host, port, "Delfino_updateCertificate_complete_callback");
717            return;
718        }
719                
720        var handle = this.addComplete(function(result){
721            complete(result.status, result.message);
722        });
723        var options = {};
724        
725        DCrypto.updateCertificate2(handle, ca, host, port, JSON.stringify(options));
726    },
727
728    requestCertificate2:function(ca, referenceValue, secretValue, options, complete)
729    {
730        var optionsComplete = this._fixOptionsComplete(options, complete);
731        options = optionsComplete.options;
732        complete = optionsComplete.complete;
733        
734        if(this.init() == false) return;
735
736        var host;
737        var port;
738        if(ca == "yessign"){
739            host = DelfinoConfig.yessignCaHost;
740            port = DelfinoConfig.yessignCaPort;
741        }
742        else if(ca == "crosscert"){
743            host = DelfinoConfig.crosscertCaHost;
744            port = DelfinoConfig.crosscertCaPort;
745        }
746        else if(ca == "signkorea"){
747            host = DelfinoConfig.signkoreaCaHost;
748            port = DelfinoConfig.signkoreaCaPort;
749        }
750        else if(ca == "kica"){
751            host = DelfinoConfig.kicaCaHost;
752            port = DelfinoConfig.kicaCaPort;
753        }
754        else if(ca == "yessignWebCmp"){
755            if(this.getModule() != "G4" && this.getModule() != "G5" && this.getModule() != "G10"){
756                alert("Only G4, G5, G10 support WebCMP");
757                return;
758            }
759            host = DelfinoConfig.yessignWebCmpUrl;
760            port = 0;
761        }
762        else if(ca === 'fincert') {
763
764        }
765        else{
766            alert("not supported ca:" + ca);
767            return;
768        }
769
770        if(options == null) options = {};
771        if(options.enableKmCert==null && DelfinoConfig.enableKmCert!=null) options.enableKmCert = DelfinoConfig.enableKmCert;
772
773        var handle = this.addComplete(complete);
774        DCrypto.requestCertificate2(handle, ca, host, port, referenceValue, secretValue, JSON.stringify(options));
775    },
776
777    updateCertificate2:function(ca, options, complete)
778    {
779        var optionsComplete = this._fixOptionsComplete(options, complete);
780        options = optionsComplete.options;
781        complete = optionsComplete.complete;
782        
783        if(this.init() == false) return;
784
785        this.loadLogoImage(DelfinoConfig.logoImageUrl);
786
787        var host;
788        var port;
789        if(ca == "yessign"){
790            host = DelfinoConfig.yessignCaHost;
791            port = DelfinoConfig.yessignCaPort;
792        }
793        else if(ca == "crosscert"){
794            host = DelfinoConfig.crosscertCaHost;
795            port = DelfinoConfig.crosscertCaPort;
796        }
797        else if(ca == "signkorea"){
798            host = DelfinoConfig.signkoreaCaHost;
799            port = DelfinoConfig.signkoreaCaPort;
800        }
801        else if(ca == "kica"){
802            host = DelfinoConfig.kicaCaHost;
803            port = DelfinoConfig.kicaCaPort;
804        }
805        else if(ca == "yessignWebCmp"){
806            if(this.getModule() != "G4" && this.getModule() != "G5" && this.getModule() != "G10"){
807                alert("Only G4, G5, G10 support WebCMP");
808                return;
809            }
810            host = DelfinoConfig.yessignWebCmpUrl;
811            port = 0;
812        }
813        else if(ca === 'fincert') {
814            
815        }
816        else{
817            alert("not supported ca:" + ca);
818            return;
819        }
820
821        if(options == null) options = {};
822        if(options.enableKmCert==null && DelfinoConfig.enableKmCert!=null) options.enableKmCert = DelfinoConfig.enableKmCert;
823
824        var handle = this.addComplete(complete);
825        DCrypto.updateCertificate2(handle, ca, host, port, JSON.stringify(options));
826    },
827    setSecureKeyboard:function(product)
828    {
829        try {
830            secureKeyboardConfig.product = product;
831        } catch(e){ }
832        
833        if(this.inited) DCrypto.setProperty("securekeyboard.product", product);
834    },
835    setVersion:function(version_g2, version_g3)
836    {
837        try {
838            if (version_g2 == null) version_g2 = DelfinoConfig.version_update; 
839            if (version_g3 == null) version_g3 = DelfinoConfig.version_update_g3; 
840            DelfinoConfig.version_g2 = version_g2;
841            DelfinoConfig.version_g3 = version_g3;
842
843            //handler¹öÀü º¯°æ
844            var handler_version = "";
845            if (DC_platformInfo.Windows) {
846                handler_version = DelfinoConfig.version_g3.WinIE;
847                if (!DC_browserInfo.MSIE) handler_version = DelfinoConfig.version_g3.WinMoz;
848            } else if (DC_platformInfo.Mac) {
849                handler_version = DelfinoConfig.version_g3.Mac;
850            } else if (DC_platformInfo.Linux) {
851                handler_version = DelfinoConfig.version_g3.Linux;
852            }
853            delfino.conf.handler.version = handler_version;
854            
855            //ÇöÀç µ¿ÀÛ¸ðµâ g3,g2¿¡ µû¸¥ ¹öÀü º¯°æ
856            if (this.getModule() == "G3") {
857                DelfinoConfig.version = DelfinoConfig.version_g3;
858            } else {
859                DelfinoConfig.version = DelfinoConfig.version_g2;
860            }
861            window.DC_version = DelfinoConfig.version;
862            this.inited = false; //¹öÀüº¯°æ½Ã ¹«Á¶°Ç ÃʱâÈ­ ó¸®
863
864            //plug-in object Á¦°Å
865            if (document.getElementById("delfinoDiv") != null) jQuery("#delfinoDiv").remove();
866            
867        } catch (e) { }
868    },
869    setIssuerCertFilter:function(issuers)
870    {
871        try {
872            DelfinoConfig.issuerCertFilter = issuers;
873        } catch(e){ }
874
875        //if(this.init() == false) return;
876        //DCrypto.setProperty("IssuerCertFilter", issuers);
877        if(this.inited) DCrypto.setProperty("IssuerCertFilter", issuers);
878    },
879    setPolicyOidCertFilter:function(policyOids)
880    {
881        try {
882            DelfinoConfig.policyOidCertFilter = policyOids;
883        } catch(e){ }
884
885        //if(this.init() == false) return;
886        //DCrypto.setProperty("PolicyOidCertFilter", policyOids);
887        if(this.inited) DCrypto.setProperty("PolicyOidCertFilter", policyOids);
888    },
889    resetCertificate : function()
890    {
891        if(this.init() == false) return;
892
893        DCrypto.resetCertificate();
894    },
895    _resetAll: function(options) {
896        if(this.init() == false) return;
897
898        DCrypto._resetAll(options);
899    },
900    signData : function(data, successCB, errorCB)
901    {
902        if(this.init() == false) return;
903
904        this.generatePKCS7SignedDataSuccessCallback = successCB;
905        this.generatePKCS7SignedDataErrorCallback = errorCB;
906        data = "__DATA=" + encodeURIComponent(data);
907        this.loadLogoImage(DelfinoConfig.logoImageUrl);
908        if(this.getModule() == "G2"){
909            DCrypto.generatePKCS7SignedData(data, "Delfino_generatePKCS7SignedData_success_callback", "Delfino_error_callback");
910            return;
911        }
912        
913        //G3, G4
914        var options = {};
915        options.signedAttribute = "certStoreType";
916        options.attributeAsData = true;
917        
918        this.sign(data, options, function(result){
919                if(result.status == 1){
920                    Delfino_generatePKCS7SignedData_success_callback(result.signData, result.vidRandom);
921                }
922                else{
923                    Delfino_error_callback(result.status, result.message);
924                }
925            });
926        
927    },
928    importCertificate:function(options, complete)
929    {
930        var optionsComplete = this._fixOptionsComplete(options, complete);
931        options = optionsComplete.options;
932        complete = optionsComplete.complete;
933        
934        if(this.init() == false) return;
935
936        options = options || {};
937        
938        if(Delfino.getModule() == "G2" || Delfino.getModule() == "G3") options.lang = Delfino._getLang(DelfinoConfig.lang);
939
940        if(options.place=="DelfinoG4") options.provider = 'wizveraV1';
941        else {
942            if(options.provider==null) options.provider = DelfinoConfig.certRelay.provider;
943            if(options.providerUrl==null) options.providerUrl = DelfinoConfig.certRelay.providerUrl;
944        }
945        
946        if(Delfino.getModule() !== "G4" && Delfino.getModule() !== "G5" && Delfino.getModule() !== "EA") options.moveImage = DC_get(DelfinoConfig.importImageUrl, Delfino.getModule());
947        
948        var handle = this.addComplete(complete);
949        DCrypto.importCertificate(handle, JSON.stringify(options));
950    },
951    exportCertificate:function(options, complete)
952    {
953        var optionsComplete = this._fixOptionsComplete(options, complete);
954        options = optionsComplete.options;
955        complete = optionsComplete.complete;
956        
957        if(this.init() == false) return;
958        
959        options = options || {};
960        
961        if(Delfino.getModule() == "G2" || Delfino.getModule() == "G3") options.lang = Delfino._getLang(DelfinoConfig.lang);
962
963        if(options.place=="DelfinoG4") options.provider = 'wizveraV1';
964        else {
965            if(options.provider==null) options.provider = DelfinoConfig.certRelay.provider;
966            if(options.providerUrl==null) options.providerUrl = DelfinoConfig.certRelay.providerUrl;
967        }
968
969        if(Delfino.getModule() !== "G4" && Delfino.getModule() !== "G5" && Delfino.getModule() !== "EA") options.moveImage = DC_get(DelfinoConfig.exportImageUrl, Delfino.getModule());
970
971        var handle = this.addComplete(complete);
972        DCrypto.exportCertificate(handle, param = JSON.stringify(options));
973    },
974    importCertificateFromPC:function(complete)
975    {
976        if(this.init() == false) return;
977
978        var handle = this.addComplete(complete);
979        var transferInfo = DelfinoConfig.transferInfo;
980        transferInfo = JSON.stringify(transferInfo);
981
982        DCrypto.importCertificateFromPC(handle, transferInfo);
983    },
984    exportCertificateToPC:function(complete)
985    {
986        if(this.init() == false) return;
987
988        var handle = this.addComplete(complete);
989        var transferInfo = DelfinoConfig.transferInfo;
990        transferInfo = JSON.stringify(transferInfo);
991
992        DCrypto.exportCertificateToPC(handle, transferInfo);
993    },
994
995    _getLang:function(lang){
996        var langUrl=null;
997        if(lang == "KOR" || lang == "korean"){
998            langUrl = DelfinoConfig.langUrl.koreanUrl;
999            lang = "korean";
1000        }
1001        else if(lang == "ENG" || lang == "english"){
1002            langUrl = DelfinoConfig.langUrl.englishUrl;
1003            lang = "english";
1004        }
1005        else if(lang == "CHN" || lang == "chinese"){
1006            langUrl = DelfinoConfig.langUrl.chaneseUrl;
1007            lang = "chinese";
1008        }
1009        else if(lang == "JPN" || lang == "japanese"){
1010            langUrl = DelfinoConfig.langUrl.japaneseUrl;
1011            lang = "japanese";
1012        }
1013        else if(lang == "VNM" || lang == "vietnamese"){
1014            langUrl = DelfinoConfig.langUrl.vietnameseUrl;
1015            lang = "vietnamese";
1016        }
1017        
1018        var data = DC_get(langUrl);
1019        if(!data) return null;
1020        
1021        return {name:lang, value:data};
1022    },
1023    
1024    setLang:function(lang){	
1025        DelfinoConfig.lang = lang;
1026        if(this.init() == false) return;
1027        
1028        var langObj = this._getLang(lang);
1029        if(langObj!=null){
1030            DCrypto.setLang(langObj.name, langObj.value);
1031        }
1032    },
1033    signForUpdateCertificate:function(data, complete){
1034        if(this.init() == false) return;
1035        this.sign(data, {	
1036                    cacheCertFilter:false,        	
1037                    cacheCert:true,
1038                    certStoreFilter:"CertUpdatable"
1039                }, 
1040                complete);
1041    },
1042    getMACAddress:function(complete){
1043        if(this.init(false) == false) return "";
1044        var macAddr = "";
1045        try{
1046            macAddr = DCrypto.getProperty("MACAddress");
1047        }catch(e){ }
1048
1049        if (typeof(complete) == "function") {
1050            complete(macAddr); //handler¿Í µ¿ÀÏÇÏ°Ô Äݹéó¸®
1051        } else {
1052            return macAddr;
1053        }
1054    },
1055    getVersion:function(complete)
1056    {
1057        if(this.init() == false) return "";
1058        var version = DCrypto.getVersion();
1059        if(complete!=null){
1060            complete(version);
1061        }
1062        return version;
1063    },
1064    sign:function(data, options, complete){
1065        var optionsComplete = this._fixOptionsComplete(options, complete);
1066        options = optionsComplete.options;
1067        complete = optionsComplete.complete;
1068        
1069        if(this.init() == false) return;
1070        this.loadLogoImage(DelfinoConfig.logoImageUrl);
1071        
1072        options = options || {};
1073        
1074        if(options.withPkcs1 === undefined) { options.withPkcs1 = false; }
1075        if(options.signType === undefined) { options.signType = ""; }
1076        if(options.dataType === undefined) { options.dataType = ""; }
1077
1078        if(options.dataType === "ucpid"){
1079        	if(!data.userAgreement){
1080        		alert("missing 'userAgreement' data" );
1081        		return;
1082        	}
1083        	if(!data.userAgreeInfos){
1084        		alert("missing 'userAgreeInfos' data" );
1085        		return;
1086        	}
1087        	for(var i=0; i<data.userAgreeInfos.length; i++){
1088        		var userAgreeInfo = data.userAgreeInfos[i];
1089        		if("realName"!==userAgreeInfo && "gender"!==userAgreeInfo && "nationalInfo"!==userAgreeInfo && "birthDate"!==userAgreeInfo){
1090        			alert("bad 'userAgreeInfos' data:" +  userAgreeInfo);
1091        			return;
1092        		}
1093        	}
1094        	data = JSON.stringify(data);
1095        	options.addNonce = false;
1096        	options.signedAttribute = "signingTime";
1097        } else if(options.dataType === "ucpidv2") {
1098            data = JSON.stringify(data);
1099            options.addNonce = false;
1100            options.signedAttribute = "signingTime";
1101        } else if(options.dataType === "mydata") {
1102            data = JSON.stringify(data);
1103            options.addNonce = false;
1104            options.signedAttribute = "signingTime";
1105        }
1106		else{
1107	        if( typeof data === "object"){
1108	            if( data.nodeName!=null && data.nodeName.toLowerCase() === "form" ){
1109	                data = jQuery(data).serialize();
1110	            }
1111	            else{
1112	                data = data.data || "";
1113	            }
1114	        }
1115	    }
1116        
1117        
1118        if(DelfinoConfig.confirmSignTitleImageUrl != null && options.attributeAsData && options.signedAttribute.indexOf("format") != -1){
1119            options.confirmSignTitleImage = DC_get(DelfinoConfig.confirmSignTitleImageUrl, Delfino.getModule());
1120        }
1121        
1122        if(options.delimiter) options.delimeter = options.delimiter;
1123        if(options.delimeter) options.delimiter = options.delimeter;
1124        if(options.multiSignDelimiter) options.multiSignDelimeter = options.multiSignDelimiter;
1125        if(options.multiSignDelimeter) options.multiSignDelimiter = options.multiSignDelimeter;
1126        if(options.closeOnError == null && DelfinoConfig.closeOnError!=null ) options.closeOnError = DelfinoConfig.closeOnError;
1127        if(this.getModule()=="G3" && window.location.protocol.toLowerCase()!="https:"){
1128            if (_Delfino_SystemMode == "real") options.vidRandom = false;
1129        }
1130        data = this._addNonce(data, options);
1131        if(data==null) return;
1132
1133        if (typeof options.disableExpireFilter === "undefined") options.disableExpireFilter = DelfinoConfig.disableExpireFilter;
1134        if (typeof options.disableExpireWarn === "undefined") options.disableExpireWarn = DelfinoConfig.disableExpireWarn;
1135        if (typeof options.lastUsedCertFirst === "undefined") options.lastUsedCertFirst = DelfinoConfig.lastUsedCertFirst;
1136        
1137        if(options.addCertStoreType == null  && DelfinoConfig.addCertStoreType!=null ) options.addCertStoreType = DelfinoConfig.addCertStoreType;
1138        if(options.addCertStoreType){
1139            options.attributeAsData = true;
1140            if(options.signedAttribute == null){
1141                options.signedAttribute = "certStoreType";
1142            }
1143            else if(options.signedAttribute.indexOf("certStoreType")==-1){
1144                options.signedAttribute += ",certStoreType";
1145            }
1146        }
1147        if(DelfinoConfig.serverTimeUrl && options.withPkcs1 === false) {
1148            if(options.signedAttribute == null){
1149                options.signedAttribute = "signingTime";
1150            }
1151            else if(options.signedAttribute && options.signedAttribute.indexOf("signingTime")==-1){
1152                options.signedAttribute += ",signingTime";
1153            }
1154            options.signingTime = DC_get(DelfinoConfig.serverTimeUrl);
1155        }
1156        if(options.certStoreFilter && Delfino.getModule() != 'G2' && Delfino.getModule() != 'G3' && DelfinoConfig.cg && DelfinoConfig.cg.VPCGClientConfig && DelfinoConfig.cg.VPCGClientConfig.certStoreFilterToProviderList) {
1157            var certStoreFilter = options.certStoreFilter.split('|');
1158
1159            for(var key in DelfinoConfig.cg.VPCGClientConfig.certStoreFilterToProviderList) {
1160                var index = -1;
1161                if( (index = (typeof certStoreFilter.indexOf === 'function' ? certStoreFilter.indexOf(key) : -1)) > -1) {
1162                    certStoreFilter.splice(index, 1);
1163                    options.provider = DelfinoConfig.cg.VPCGClientConfig.certStoreFilterToProviderList[key];
1164                }
1165            }
1166
1167            options.certStoreFilter = certStoreFilter.join('|');
1168        }
1169
1170
1171        if( true && options.withPkcs1 === true && options.signedAttribute){
1172
1173            alert("signedAttribute and options.withPkcs1 cannot be used together");
1174            return;
1175        }
1176
1177        var handle = this._addCompleteIfNeedToHex(options, complete);
1178
1179        DCrypto.sign(handle, data, JSON.stringify(options));
1180    },
1181    _addCompleteIfNeedToHex:function(options, complete){
1182        var outputEncoding = options.outputEncoding || DelfinoConfig.outputEncoding;
1183        if(outputEncoding == null ||  outputEncoding != "hex"){
1184            return this.addComplete(complete);
1185        }
1186
1187        delete options.outputEncoding;
1188
1189        return this.addComplete(function(param) {
1190            if(param.status == 1 && param.signData != null){
1191                if (typeof param.signData === 'string' || param.signData instanceof String){
1192                    if(options.multiSign && options.multiSignDelimiter){
1193                        var multiSignDataArray = param.signData.split(options.multiSignDelimiter);
1194                        for(var i=0; i<multiSignDataArray.length; i++){
1195                            multiSignDataArray[i] = DC_base64ToHex(multiSignDataArray[i]);
1196                        }
1197                        param.signData = multiSignDataArray.join(options.multiSignDelimiter);
1198                    }
1199                    else{
1200                        param.signData = DC_base64ToHex(param.signData);
1201                    }
1202                }
1203                else if (param.signData.constructor == Array){
1204                    for(var i=0; i<param.signData.length; i++){
1205                        param.signData[i] = DC_base64ToHex(param.signData[i]);
1206                    }
1207                }
1208            }
1209
1210            if(param.status == 1 && param.vidRandom != null){
1211                param.vidRandom = DC_base64ToHex(param.vidRandom);
1212            }
1213
1214            complete(param);
1215        });
1216    },
1217    _addNonce:function(data, options){
1218        if(options.addNonce){
1219            var nonce = DelfinoConfig.nonce || DC_get(DelfinoConfig.nonceUrl);
1220            if(nonce.length<20 || nonce.length>40){
1221                alert("ÀüÀÚ¼­¸í ½ÇÆÐ[nonce ¿À·ù]:" + nonce.length);
1222                return null;
1223            }
1224            if(DelfinoConfig.useNonceOption){
1225                options.attributeAsData = true;
1226                if(options.signedAttribute == null){
1227                    options.signedAttribute = "nonce";
1228                }
1229                else if(options.signedAttribute.indexOf("nonce")==-1){
1230                    options.signedAttribute += ",nonce";
1231                }
1232                options.nonce = encodeURIComponent(nonce);
1233            }else{
1234                if(data.length>0) data +="&";
1235                var nonceKeyName = DelfinoConfig.nonceKeyName || "delfinoNonce";
1236                data += nonceKeyName + "=" + encodeURIComponent(nonce);
1237            }
1238        }
1239        return data;
1240    },
1241    importCertificateFromPKCS12:function(p12){
1242        DCrypto.importCertificateFromPKCS12(p12);
1243    },
1244    setCacheCertStore:function(cache){
1245
1246        try {
1247            DelfinoConfig.cacheCertStore = cache?"true":"false";
1248        } catch(e){ }
1249
1250        if(this.init() == false) return;
1251
1252        DCrypto.setProperty("cacheCertStore", cache?"true":"false");
1253    },
1254    addSigner:function(data, options, complete)
1255    {
1256        var optionsComplete = this._fixOptionsComplete(options, complete);
1257        options = optionsComplete.options;
1258        complete = optionsComplete.complete;
1259        
1260        options = options || {};        
1261        options.dataType = "PKCS7";
1262        options.signedAttribute = "signingTime";
1263        this.sign(data, options, complete);
1264    },
1265    addMdSigner:function(data, options, complete)
1266    {
1267        var optionsComplete = this._fixOptionsComplete(options, complete);
1268        options = optionsComplete.options;
1269        complete = optionsComplete.complete;
1270        
1271        options = options || {};        
1272        options.dataType = "PKCS7-sha256-md";
1273        options.signedAttribute = "signingTime";
1274        this.sign(data, options, complete);
1275    },
1276    confirmSign:function(data, format, options, complete){
1277        if(arguments.length==2){
1278            options = format;
1279            format = undefined;
1280        }
1281        else if(arguments.length==3 && typeof format !== "string"){
1282            complete = options;
1283            options = format;
1284            format = undefined;
1285        }
1286        var optionsComplete = this._fixOptionsComplete(options, complete);
1287        options = optionsComplete.options;
1288        complete = optionsComplete.complete;
1289
1290        options = options || {};
1291        options.format = options.format || format;
1292        if(options.dataType != "fixedLengthData"){
1293            options.dataType = data.dataType || "form-urlencoded";
1294            if(options.dataType == "form-urlencoded" && format === undefined){
1295                options.format = "";
1296            }
1297        }
1298        
1299        if(DelfinoConfig.confirmSignTitleImageUrl != null && Delfino.getModule() !== "G4" && Delfino.getModule() !== "G5" && Delfino.getModule() !== "EA"){
1300            options.confirmSignTitleImage = DC_get(DelfinoConfig.confirmSignTitleImageUrl, Delfino.getModule());
1301        }
1302
1303        if(!options.format && options.dataType != "formattedText" && options.dataType != "form-urlencoded"){
1304            alert("missing 'format' parameter");
1305            return;
1306        }
1307        
1308        if(options.dataType == "strings"){
1309            options.delimiter = options.delimiter || DelfinoConfig.stringsDelimiter;
1310            if(!options.delimiter){
1311                alert("missing 'delimiter' option or 'DelfinoConfig.stringsDelimiter' config" );
1312                return;
1313            }
1314            if(options.addNonce){
1315                alert("not supported addNonce option");
1316                return;
1317            }
1318        }
1319        options.attributeAsData = true;
1320        options.signedAttribute = "format";
1321
1322        this.sign(data, options, complete);
1323    },
1324    confirmMultiSign:function(data, format, options, complete){
1325        
1326        var optionsComplete = this._fixOptionsComplete(options, complete);
1327        options = optionsComplete.options;
1328        complete = optionsComplete.complete;
1329        
1330        options = options || {};
1331        options.multiSign = true;
1332        options.multiSignDelimiter = options.multiSignDelimiter || DelfinoConfig.multiSignDelimiter;		
1333                
1334        if(!options.multiSignDelimiter){
1335            alert("missing 'multiSignDelimiter' option or 'DelfinoConfig.multiSignDelimiter' config" );
1336            return;
1337        }
1338        if(options.addNonce){
1339            alert("not supported addNonce option");
1340            return;
1341        }
1342        if( data.nodeName!=null && data.nodeName.toLowerCase() === "form" ){
1343            alert("not supported data type");
1344            return;
1345        }
1346        
1347        options.format = format;
1348        if(!options.format){
1349            alert("missing 'format' parameter");
1350            return;
1351        }
1352        
1353        if(options.dataType != "fixedLengthData"){
1354            options.dataType = data.dataType || "form-urlencoded";
1355        }
1356        if(options.dataType == "strings"){
1357            options.delimiter = options.delimiter || DelfinoConfig.stringsDelimiter;
1358            if(!options.delimiter){
1359                alert("missing 'delimiter' option or 'DelfinoConfig.stringsDelimiter' config" );
1360                return;
1361            }
1362        }
1363        options.attributeAsData = true;
1364        options.signedAttribute = "format,certStoreType";
1365        
1366        this.sign(data, options, complete);
1367    },
1368    mdSign:function(data, complete, options){
1369        options = options || {};
1370        options.dataType = "sha256-md";
1371        this.sign(data, options, complete);
1372    },
1373    mdMultiSign:function(data, complete, options){
1374        options = options || {};
1375        options.dataType = "sha256-md";
1376        options.multiSign = true;
1377        
1378        if(jQuery.isArray(data)){
1379            options.multiSignDelimiter = ",";        
1380            data = data.join(options.multiSignDelimiter);
1381        }
1382
1383        this.sign(data, options, complete);
1384    },
1385
1386    complexSign:function(data, complete, options){
1387        var optionsComplete = this._fixOptionsComplete(options, complete);
1388        options = optionsComplete.options;
1389        complete = optionsComplete.complete;
1390
1391        options.dataType = "complex";
1392
1393        if(jQuery.isArray(data)){
1394            options.multiSignDelimiter = ",";
1395            data = data.join(options.multiSignDelimiter);
1396        }
1397
1398        this.sign(data, options, complete);
1399    },
1400    scrapingSign:function(data, options, complete){
1401        var optionsComplete = this._fixOptionsComplete(options, complete);
1402        options = optionsComplete.options;
1403        complete = optionsComplete.complete;
1404
1405        options.signType = "scraping";
1406
1407        if(!jQuery.isArray(data)){
1408            data = [data];
1409        }
1410
1411        this.sign(JSON.stringify(data), options, complete);
1412    },
1413
1414    login:function(data, options, complete)
1415    {
1416        var optionsComplete = this._fixOptionsComplete(options, complete);
1417        options = optionsComplete.options;
1418        complete = optionsComplete.complete;
1419        
1420        if(this.init() == false) return;
1421        this.resetCertificate();
1422        options = options || {};
1423        if(options.addNonce==null) options.addNonce = true;
1424        options.signedAttribute = "certStoreType";
1425        options.attributeAsData = true;
1426
1427        options.resetCertificate = true;
1428        Delfino_eraseCookie('EAUSE');
1429        options.cacheCert = true;
1430        
1431        options.login = true;
1432        options.cgSignType = _SignType.LOGIN;
1433
1434        this.sign(data, options, complete);
1435    },
1436    auth:function(data, options, complete)
1437    {
1438        var optionsComplete = this._fixOptionsComplete(options, complete);
1439        options = optionsComplete.options;
1440        complete = optionsComplete.complete;
1441        
1442        if(this.init() == false) return;
1443        this.resetCertificate();
1444        options = options || {};
1445        if(options.addNonce==null) options.addNonce = true;
1446        options.signedAttribute = "certStoreType";
1447        options.attributeAsData = true;
1448
1449        options.resetCertificate = true;
1450        Delfino_eraseCookie('EAUSE');
1451        options.cacheCert = true;
1452        
1453        options.login = true;
1454        options.cgSignType = _SignType.AUTH;
1455
1456        this.sign(data, options, complete);
1457    },
1458    auth2:function(data, options, complete)
1459    {
1460        var optionsComplete = this._fixOptionsComplete(options, complete);
1461        options = optionsComplete.options;
1462        complete = optionsComplete.complete;
1463        
1464        if(this.init() == false) return;
1465        this.resetCertificate();
1466        options = options || {};
1467        if(options.addNonce==null) options.addNonce = true;
1468        options.signedAttribute = "certStoreType";
1469        options.attributeAsData = true;
1470
1471        options.resetCertificate = true;
1472        Delfino_eraseCookie('EAUSE');
1473        options.cacheCert = true;
1474        
1475        options.login = true;
1476        options.cgSignType = _SignType.AUTH2;
1477
1478        this.sign(data, options, complete);
1479    },
1480    multiSign:function(data, options, complete)
1481    {
1482        var optionsComplete = this._fixOptionsComplete(options, complete);
1483        options = optionsComplete.options;
1484        complete = optionsComplete.complete;    	
1485        
1486        options = options || {};
1487        options.multiSign = true;
1488        options.multiSignDelimiter = options.multiSignDelimiter || DelfinoConfig.multiSignDelimiter;
1489        
1490        // if(options.signedAttribute==null)
1491        // options.signedAttribute = "signingTime";
1492
1493        if(!options.multiSignDelimiter){
1494            alert("missing 'multiSignDelimiter' option or 'DelfinoConfig.multiSignDelimiter' config" );
1495            return;
1496        }
1497        if(options.addNonce){
1498            alert("not supported addNonce option");
1499            return;
1500        }
1501        if( data.nodeName!=null && data.nodeName.toLowerCase() === "form" ){
1502            alert("not supported data type");
1503            return;
1504        }
1505
1506        this.sign(data, options, complete);
1507    },
1508    endSign:function(ssid, complete)
1509    {
1510        var handle = this.addComplete(complete);
1511        DCrypto.endSign(handle, ssid);
1512    },
1513    signAndEnvelope:function(data, recipientCert, options, complete)
1514    {
1515        var optionsComplete = this._fixOptionsComplete(options, complete);
1516        options = optionsComplete.options;
1517        complete = optionsComplete.complete;
1518        
1519        if(!recipientCert){
1520            alert("invalid recipientCert");
1521            return;
1522        }
1523        
1524        options = options || {};
1525        options.signType = "signedAndEnvelopedData";
1526        options.recipientCert = recipientCert;
1527        
1528        this.sign(data, options, complete);
1529    },
1530    isPasswordError:function(status){
1531        return status == -4008 || status == -1004 || status == -1403;
1532    },
1533    setModule:function(module){
1534        if(module==null){
1535            module = Delfino_readCookie("delfino.recentModule");
1536            if(module==null || module == ""){
1537                module = DelfinoConfig.module;
1538            }
1539        }
1540        var modules = module.split(",");
1541        for(var i=0; i<modules.length; i++){
1542            module = modules[i];
1543            module = module.replace(/^\s+|\s+$/gm,'');
1544            if(DC_isSupported(module)){
1545                break;
1546            }
1547        }
1548
1549        if(module == "G2"){
1550            window.Delfino = DelfinoG2G4;
1551        }
1552        else if(module == "G3"){
1553            window.Delfino = DelfinoHandler;
1554        }
1555        else if(module == "G4"){
1556            window.Delfino = DelfinoG2G4;
1557        }
1558        else if(module == "G5") {
1559            window.Delfino = DelfinoG2G4;
1560        }
1561        else if(module == "G10" || module == "CG") {
1562            window.Delfino = DelfinoG2G4;
1563        }
1564        else if(module == "EA"){
1565            window.Delfino = DelfinoG2G4;
1566        }
1567
1568        if(module == "G2" || module == "G3" || module == "G4" || module == "EA" || module == "G5" || module == "G10" || module == "CG"){
1569            DC_setModule(module);
1570            Delfino.inited = false;
1571            if( DelfinoConfig.useRecentModule ){
1572                Delfino_createCookie("delfino.recentModule", module);
1573            }
1574        }
1575    },
1576    getModule:function(){
1577        return window.DC_module;
1578    },
1579    resetRecentModule:function(){
1580        Delfino_eraseCookie("delfino.recentModule");
1581    },
1582    isSupportedG4:function(){
1583        return DC_isSupported("G4");
1584    },
1585    isSupportedG5:function(){
1586        return DC_isSupported("G5");
1587    },
1588    isSupportedG10:function(){
1589        return DC_isSupported("G10");
1590    },
1591    isSupportedCG:function(){
1592        return DC_isSupported("CG");
1593    },
1594    isSupportedEA:function(){
1595        return DC_isSupported("EA");
1596    },
1597    deleteCertificate:function(subjectOrSerialNumber, options, complete){
1598        options = options || {};
1599        var handle = this.addComplete(complete);
1600        DCrypto.deleteCertificate(handle, subjectOrSerialNumber, JSON.stringify(options));
1601    },
1602    signFileUrl:function(downloadurl, uploadurl, options, complete)
1603    {
1604        var optionsComplete = this._fixOptionsComplete(options, complete);
1605        options = optionsComplete.options;
1606        complete = optionsComplete.complete;
1607        
1608        if(this.init() == false) return;
1609        
1610        if(downloadurl==null || downloadurl==""){ 
1611            alert("downloadurl error");
1612            return;
1613        }
1614        if(uploadurl==null || uploadurl==""){ 
1615            alert("uploadurl error");
1616            return;
1617        }
1618        
1619        this.loadLogoImage(DelfinoConfig.logoImageUrl);
1620
1621        options = options || {};
1622        if(options.delimiter) options.delimeter = options.delimiter;
1623        if(options.delimeter) options.delimiter = options.delimeter;
1624        if(options.multiSignDelimiter) options.multiSignDelimeter = options.multiSignDelimiter;
1625        if(options.multiSignDelimeter) options.multiSignDelimiter = options.multiSignDelimeter;
1626        if(options.closeOnError == null && DelfinoConfig.closeOnError!=null ) options.closeOnError = DelfinoConfig.closeOnError;
1627        if(this.getModule()=="G3" && window.location.protocol.toLowerCase()!="https:"){
1628            if (_Delfino_SystemMode == "real") options.vidRandom = false;
1629        }
1630
1631        if (typeof options.disableExpireFilter === "undefined") options.disableExpireFilter = DelfinoConfig.disableExpireFilter;
1632        if (typeof options.disableExpireWarn === "undefined") options.disableExpireWarn = DelfinoConfig.disableExpireWarn;
1633        
1634        if(options.addCertStoreType == null  && DelfinoConfig.addCertStoreType!=null ) options.addCertStoreType = DelfinoConfig.addCertStoreType;
1635        if(options.addCertStoreType){
1636            options.attributeAsData = true;
1637            if(options.signedAttribute == null){
1638                options.signedAttribute = "certStoreType";
1639            }
1640            else if(options.signedAttribute.indexOf("certStoreType")==-1){
1641                options.signedAttribute += ",certStoreType";
1642            }
1643        }
1644
1645        if (typeof options.signType === "undefined") options.signType = "sig";
1646        
1647        var handle = this._addCompleteIfNeedToHex(options, complete);
1648
1649        DCrypto.signFileUrl(handle, downloadurl, uploadurl, JSON.stringify(options));
1650    },
1651    signFileUrlDown:function(downloadurl, options, complete)
1652    {
1653        var optionsComplete = this._fixOptionsComplete(options, complete);
1654        options = optionsComplete.options;
1655        complete = optionsComplete.complete;
1656        
1657        if(this.init() == false) return;
1658        
1659        if(downloadurl==null || downloadurl==""){ 
1660            alert("downloadurl error");
1661            return;
1662        }
1663        
1664        options = options || {};
1665        if(options.delimiter) options.delimeter = options.delimiter;
1666        if(options.delimeter) options.delimiter = options.delimeter;
1667        if(options.multiSignDelimiter) options.multiSignDelimeter = options.multiSignDelimiter;
1668        if(options.multiSignDelimeter) options.multiSignDelimiter = options.multiSignDelimeter;
1669        
1670        if (typeof options.signType === "undefined") options.signType = "sig";
1671        
1672        var handle = this._addCompleteIfNeedToHex(options, complete);
1673
1674        DCrypto.signFileUrlDown(handle, downloadurl, JSON.stringify(options));
1675        
1676    },
1677    signFileUrlSign:function(filepath, options, complete)
1678    {
1679        var optionsComplete = this._fixOptionsComplete(options, complete);
1680        options = optionsComplete.options;
1681        complete = optionsComplete.complete;
1682        
1683        if(this.init() == false) return;
1684        
1685        this.loadLogoImage(DelfinoConfig.logoImageUrl);
1686
1687        options = options || {};
1688        if(options.delimiter) options.delimeter = options.delimiter;
1689        if(options.delimeter) options.delimiter = options.delimeter;
1690        if(options.multiSignDelimiter) options.multiSignDelimeter = options.multiSignDelimiter;
1691        if(options.multiSignDelimeter) options.multiSignDelimiter = options.multiSignDelimeter;
1692        if(options.closeOnError == null && DelfinoConfig.closeOnError!=null ) options.closeOnError = DelfinoConfig.closeOnError;
1693        if(this.getModule()=="G3" && window.location.protocol.toLowerCase()!="https:"){
1694            if (_Delfino_SystemMode == "real") options.vidRandom = false;
1695        }
1696
1697        if (typeof options.disableExpireFilter === "undefined") options.disableExpireFilter = DelfinoConfig.disableExpireFilter;
1698        if (typeof options.disableExpireWarn === "undefined") options.disableExpireWarn = DelfinoConfig.disableExpireWarn;
1699        
1700        if(options.addCertStoreType == null  && DelfinoConfig.addCertStoreType!=null ) options.addCertStoreType = DelfinoConfig.addCertStoreType;
1701        if(options.addCertStoreType){
1702            options.attributeAsData = true;
1703            if(options.signedAttribute == null){
1704                options.signedAttribute = "certStoreType";
1705            }
1706            else if(options.signedAttribute.indexOf("certStoreType")==-1){
1707                options.signedAttribute += ",certStoreType";
1708            }
1709        }
1710
1711        if (typeof options.signType === "undefined") options.signType = "sig";
1712        
1713        var handle = this._addCompleteIfNeedToHex(options, complete);
1714
1715        DCrypto.signFileUrlSign(handle, JSON.stringify(filepath), JSON.stringify(options));
1716        //DCrypto.signFileUrlSign(handle, filepath, JSON.stringify(options));
1717    },
1718    signFileUrlUp:function(filepath, uploadurl, options, complete)
1719    {
1720        var optionsComplete = this._fixOptionsComplete(options, complete);
1721        options = optionsComplete.options;
1722        complete = optionsComplete.complete;
1723        
1724        if(this.init() == false) return;
1725
1726        if(uploadurl==null || uploadurl==""){ 
1727            alert("uploadurl error");
1728            return;
1729        }
1730        
1731        options = options || {};
1732        if(options.delimiter) options.delimeter = options.delimiter;
1733        if(options.delimeter) options.delimiter = options.delimeter;
1734        if(options.multiSignDelimiter) options.multiSignDelimeter = options.multiSignDelimiter;
1735        if(options.multiSignDelimeter) options.multiSignDelimiter = options.multiSignDelimeter;
1736
1737        if (typeof options.signType === "undefined") options.signType = "sig";
1738        
1739        var handle = this._addCompleteIfNeedToHex(options, complete);
1740
1741        DCrypto.signFileUrlUp(handle, filepath, uploadurl, JSON.stringify(options));
1742        
1743    },
1744    signFile:function(path, options, complete)
1745    {
1746        var optionsComplete = this._fixOptionsComplete(options, complete);
1747        options = optionsComplete.options;
1748        complete = optionsComplete.complete;
1749        
1750        if(this.init() == false) return;
1751        this.loadLogoImage(DelfinoConfig.logoImageUrl);
1752
1753        options = options || {};
1754        if(options.delimiter) options.delimeter = options.delimiter;
1755        if(options.delimeter) options.delimiter = options.delimeter;
1756        if(options.multiSignDelimiter) options.multiSignDelimeter = options.multiSignDelimiter;
1757        if(options.multiSignDelimeter) options.multiSignDelimiter = options.multiSignDelimeter;
1758        if(options.closeOnError == null && DelfinoConfig.closeOnError!=null ) options.closeOnError = DelfinoConfig.closeOnError;
1759        if(this.getModule()=="G3" && window.location.protocol.toLowerCase()!="https:"){
1760            if (_Delfino_SystemMode == "real") options.vidRandom = false;
1761        }
1762
1763        if (typeof options.disableExpireFilter === "undefined") options.disableExpireFilter = DelfinoConfig.disableExpireFilter;
1764        if (typeof options.disableExpireWarn === "undefined") options.disableExpireWarn = DelfinoConfig.disableExpireWarn;
1765        
1766        if(options.addCertStoreType == null  && DelfinoConfig.addCertStoreType!=null ) options.addCertStoreType = DelfinoConfig.addCertStoreType;
1767        if(options.addCertStoreType){
1768            options.attributeAsData = true;
1769            if(options.signedAttribute == null){
1770                options.signedAttribute = "certStoreType";
1771            }
1772            else if(options.signedAttribute.indexOf("certStoreType")==-1){
1773                options.signedAttribute += ",certStoreType";
1774            }
1775        }
1776        
1777        if (typeof options.signType === "undefined") options.signType = "signature";
1778        var handle = this._addCompleteIfNeedToHex(options, complete);
1779        DCrypto.signFile(handle, path, JSON.stringify(options));
1780    },
1781    verifySignFile:function(path, signature, cert, options, complete)
1782    {
1783        var optionsComplete = this._fixOptionsComplete(options, complete);
1784        options = optionsComplete.options;
1785        complete = optionsComplete.complete;
1786        
1787        if(this.init(false) == false) return "";
1788
1789        options = options || {};
1790        if (typeof options.signType === "undefined") options.signType = "signature";
1791        
1792        var handle = this.addComplete(complete);
1793        DCrypto.verifySignFile(handle, path, signature, cert, JSON.stringify(options));
1794    },   
1795    getKTBScanResult:function(complete)
1796    {
1797        if(this.init(false) == false) return "";
1798
1799        var handle = this.addComplete(complete);
1800        DCrypto.getKTBScanResult(handle);
1801    },
1802    _fixOptionsComplete:function(options, complete){
1803        var args = {};
1804        
1805        if(typeof options === "function" || (options && typeof options.complete === "function")){
1806            args.complete = options;
1807        }
1808        if(typeof complete === "function" || (complete && typeof complete.complete === "function")){
1809            args.complete = complete;
1810        }
1811        if(complete != null && typeof complete === "object" && typeof complete.complete !== "function"){
1812            args.options = complete;
1813        }
1814        if(options != null && typeof options === "object" && typeof options.complete !== "function"){
1815            args.options = options;
1816        }
1817
1818        if(typeof args.complete === 'function') {
1819            var tmp = args.complete;
1820            args.complete = function(result, context) {
1821                tmp(result, context);
1822                setFocusBack();
1823            }
1824        } else if(typeof args.complete === 'object' && typeof args.complete.complete === 'function') {
1825            var tmp = args.complete.complete;
1826            args.complete.complete = function(result, context) {
1827                tmp(result, context);
1828                setFocusBack();
1829            }
1830        } else {
1831            args.complete = function() {
1832                setFocusBack();
1833            }
1834        }
1835
1836        return args;
1837    },
1838    preloadOff:function(){
1839        return Delfino4Html.preloadOff();
1840    },
1841    getDeviceID:function(done) {
1842        DelfinoDeviceID.getDeviceID(done);
1843    },
1844  	ucpidSign:function(userAgreement, userAgreeInfos, options, complete){
1845  		var optionsComplete = this._fixOptionsComplete(options, complete);
1846        options = optionsComplete.options;
1847        complete = optionsComplete.complete;
1848        
1849        if(this.init() == false) return;
1850        options = options || {};
1851        options.dataType = "ucpid";
1852        options.addNonce = false;
1853        options.signedAttribute = "signingTime";
1854        options.attributeAsData = false;
1855
1856        options.resetCertificate = true;
1857        Delfino_eraseCookie('EAUSE');
1858        options.cacheCert = true;
1859        
1860        var data = {userAgreement : userAgreement, userAgreeInfos: userAgreeInfos};
1861
1862        this.sign(data, options, complete);
1863  	},
1864    multiSignForMyData:function(inputData, options, complete) {
1865        var optionsComplete = this._fixOptionsComplete(options, complete);
1866        options = optionsComplete.options;
1867        complete = optionsComplete.complete;
1868        
1869        if(this.init() == false) return;
1870        options = options || {};
1871        options.dataType = "mydata";
1872        options.signType = "mydata";
1873        options.addNonce = false;
1874        options.signedAttribute = "signingTime";
1875        options.attributeAsData = false;
1876
1877        options.resetCertificate = true;
1878        Delfino_eraseCookie('EAUSE');
1879        options.cacheCert = true;
1880        
1881        var data = [];
1882        for(var i=0;i<inputData.length;i++) {
1883            data.push({
1884                orgCode: inputData[i].orgCode,
1885                ucpidRequestInfo: {
1886                    userAgreement : inputData[i].ucpidRequestInfo.userAgreement,
1887                    userAgreeInfo: inputData[i].ucpidRequestInfo.userAgreeInfo,
1888                    ispUrlInfo: inputData[i].ucpidRequestInfo.ispUrlInfo,
1889                    ucpidNonce: inputData[i].ucpidRequestInfo.ucpidNonce
1890                },
1891                consentInfo: {
1892                    consent: inputData[i].consentInfo.consent,
1893                    consentNonce: inputData[i].consentInfo.consentNonce
1894                }
1895            });
1896        }
1897
1898        this.sign(data, options, complete);
1899    }
1900
1901};
1902var DelfinoG2G4 = _Delfino;
1903
1904window.Delfino = DelfinoG2G4;
1905}
1906
1907function Delfino_complete(handle, param){
1908    setTimeout(function(){
1909        var complete = Delfino.getComplete(handle);
1910        Delfino.removeComplete(handle);
1911        if(Delfino.emptyComplete() && DCrypto.stopGetResultTimer){
1912            DC_enableBrowser();
1913            DCrypto.stopGetResultTimer();
1914        }
1915        
1916        if(complete !=null && complete.complete!=null ){
1917            DC_enableBrowser();
1918            if(typeof param === "string") param = jQuery.parseJSON(param);
1919
1920            if(param.status==1 && param.message=="°¡Á®¿À±â ³»º¸³»±â ¼º°ø."){
1921                complete.complete(param, complete.context);
1922                return;
1923            }
1924
1925            if(param.cmd == "requestCertificate2" || param.cmd == "updateCertificate2"){
1926                if(DelfinoConfig.alertCmpComplete || DelfinoConfig.alertCmpComplete === undefined){
1927                    if(param.status!=0){
1928                        if (param.status == 1 && param.message == "") param.message = "ÀÎÁõ¼­°¡ Á¤»óÀûÀ¸·Î ¹ß±Þ/°»½Å µÇ¾ú½À´Ï´Ù.";
1929                        alert(param.message);
1930                    }
1931                }
1932                complete.complete(param, complete.context);
1933                return;
1934            }
1935
1936            //2014.03.17 password err check
1937            if ((param.cmd == null || param.cmd == "sign") && param.status == 1 && !param.signData && !param.signedAndEnvelopedData && !param.signedDataList) {
1938                param.status = 0;
1939                param.message = "Password error.";
1940            } else if (Delfino.isPasswordError(param.status) && DelfinoConfig.passwordError != true) {
1941                param.status = 0;
1942            }
1943
1944            if (param.status == -15000) {
1945                param.status = 0;
1946
1947                if(window.EA && ('object' === typeof window.EA)) {
1948                    var data = param.sign_data;
1949                    var options = JSON.parse(param.sign_options);
1950                    var tmpRand = wizvera.kryptos.random.getBytesSync(32);
1951                    var randomBSID = wizvera.kryptos.util.bytesToHex(tmpRand);
1952                    if(options.resetCertificate) {
1953                        EA.resetSessionData();
1954                    }
1955                    data = EA.normalizeSignData(data, options);
1956
1957                    EA.init(randomBSID);
1958                    // options.alreadyHasAttribute = true;
1959                    EA.setTbsData({data:data, options:options});
1960                    if (window.EA.tbsData.options.resetCertificate) {
1961                        EA.resetSessionData();
1962                    }
1963
1964                    EA.open_user_interface(function(result) {
1965                        if (result.status == 1) {
1966                            Delfino_createCookie('EAUSE', 'true');
1967                        }
1968                        complete.complete(result);
1969                    });
1970                    return;
1971                }
1972            }
1973
1974            if(param.status == -10301 && param.url){
1975                if(navigator.userAgent.match(/Linux/i)) {
1976                    window.open(param.url);
1977                }
1978            }
1979
1980            complete.complete(param, complete.context);
1981        }
1982    }, 1);
1983}
1984
1985function Delfino_generatePKCS7SignedData_success_callback(pkcs7, vid_random){
1986    //2014.03.17 password err check
1987    if (pkcs7 == null || pkcs7 == "") {
1988        Delfino_error_callback(0, "Password error.");
1989        return;
1990    }
1991
1992    if(Delfino.generatePKCS7SignedDataSuccessCallback==null){
1993        var pkcs7Form = jQuery("#Delfino_PKCS7_form")[0];
1994        pkcs7Form.PKCS7.value = pkcs7;
1995        pkcs7Form.VID_RANDOM.value = vid_random;
1996        pkcs7Form.submit();
1997    }
1998    else{
1999        Delfino.generatePKCS7SignedDataSuccessCallback(pkcs7, vid_random);
2000    }
2001}
2002
2003function Delfino_error_callback(code, message) {
2004    if(Delfino.generatePKCS7SignedDataErrorCallback==null){
2005        if (code != 0){
2006            alert("error:"+code + ":" + message);
2007        }
2008    }
2009    else{
2010        Delfino.generatePKCS7SignedDataErrorCallback(code, message);
2011    }
2012}
2013
2014function Delfino_requestCertificate_complete_callback(code , msg){
2015    setTimeout(function() {
2016        if(code!=0){
2017            if (code == 1 && (msg == "" || msg == "success"))  msg = "ÀÎÁõ¼­°¡ Á¤»óÀûÀ¸·Î ¹ß±ÞµÇ¾ú½À´Ï´Ù.";
2018            alert(msg);
2019        }
2020        if(Delfino.requestCertificate_complete_callback!=null){
2021            Delfino.requestCertificate_complete_callback(code, msg);
2022        }
2023    }, 1);
2024}
2025
2026function Delfino_updateCertificate_complete_callback(code , msg){
2027    setTimeout(function() {
2028        if(code!=0){
2029            if (code == 1 && (msg == "" || msg == "success")) msg = "ÀÎÁõ¼­ °»½Å¿¡ ¼º°øÇß½À´Ï´Ù.";
2030            alert(msg);
2031        }
2032        if(Delfino.updateCertificate_complete_callback!=null){
2033            Delfino.updateCertificate_complete_callback(code, msg);
2034        }
2035    }, 1);
2036}
2037
2038function Delfino_createCookie(name,value,days) {    
2039    var cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + "; path=/; secure";
2040    
2041    if (typeof days === 'number') {
2042        var date = new Date();
2043        date.setTime(date.getTime()+(days*24*60*60*1000));
2044        cookie += "; expires=" + date.toGMTString();
2045    }
2046
2047    if ( typeof DelfinoConfig !== "undefined" && DelfinoConfig.multiDomain && document.location.hostname.indexOf(DelfinoConfig.multiDomain) >= 0) {
2048        cookie += "; domain=" + DelfinoConfig.multiDomain;
2049    }
2050
2051    document.cookie = cookie;
2052}
2053
2054function Delfino_readCookie(key) {
2055    var cookies = document.cookie ? document.cookie.split('; ') : [];    
2056    for (var i=0; i < cookies.length; i++) {
2057        var parts = cookies[i].split('=');
2058        var name;
2059        try {
2060            name = decodeURIComponent(parts[0]);
2061        } catch(e) {
2062            name = parts[0];
2063        }
2064        if (key === name) {
2065            try {
2066                return parts.length>1 ? decodeURIComponent(parts[1]) : '';
2067            } catch(e) {
2068                return '';
2069            }
2070        }
2071    }
2072    return '';
2073}
2074
2075function Delfino_eraseCookie(name) {
2076    Delfino_createCookie(name,"",-1);
2077}
2078
2079window.Delfino_complete = Delfino_complete;
2080window.Delfino_generatePKCS7SignedData_success_callback = Delfino_generatePKCS7SignedData_success_callback;
2081window.Delfino_error_callback = Delfino_error_callback;
2082window.Delfino_requestCertificate_complete_callback = Delfino_requestCertificate_complete_callback;
2083window.Delfino_updateCertificate_complete_callback = Delfino_updateCertificate_complete_callback;
2084window.Delfino_createCookie = Delfino_createCookie;
2085window.Delfino_readCookie = Delfino_readCookie;
2086window.Delfino_eraseCookie = Delfino_eraseCookie;
2087
2088var DelfinoHandler = DelfinoHandler || (function(jQuery){
2089    if(Delfino.initHandler != undefined) {
2090        Delfino._handlerInitUrl = '';
2091        return Delfino;
2092    }
2093
2094    var _delfino = {};
2095    var _parent = Delfino;
2096    var _parentFuncs = ["scrapingSign","complexSign","ucpidSign", "multiSignForMyData", "getKTBScanResult", "exportCertificate", "importCertificate", "signFileUrlDown", "signFileUrlSign", "signFileUrlUp", "verifySignFile", "signFile", "signFileUrl", "deleteCertificate", "setProperty", "resetCertificate", "loginForm", "sign","signData","addSigner","init","login","signForm","requestCertificate","requestCertificate2","updateCertificate","updateCertificate2","signKeyValue","multiSign","multiSignString","manageCertificate"];
2097
2098    function backupParentFunctions() {
2099        for(var index in _parentFuncs) {
2100            var func = _parentFuncs[index];
2101            _parent["par_"+func] = _parent[func];
2102        }
2103    }
2104
2105    backupParentFunctions();
2106    jQuery.extend(true,_delfino,_parent);
2107
2108    function createProxyFunctions() {
2109        for(var index in _parentFuncs) {
2110            var func = _parentFuncs[index];
2111            (function(func){
2112                _delfino[func] = function() {
2113                    DelfinoHandler.callWithInitHandler(func,arguments);
2114                };
2115            })(func);
2116        }
2117    }
2118    createProxyFunctions();
2119
2120
2121
2122    /* createProxyFunctions°¡ Àß ¾ÈµÇ¸é ÀÏÀÏÀÌ ´ÙÇÒ°Í
2123    _delfino.sign = function() {
2124        this.callWithInitHandler("sign",arguments);
2125    }
2126*/
2127    _delfino._handlerInit = false;
2128    _delfino._handlerInitUrl = "";
2129    _delfino.isHandlerInit = function() {
2130        if(this._handlerInitUrl != window.location.href){
2131            delfino.handler.secure.reset();
2132            this._handlerInit = false;
2133        } 
2134
2135        return this._handlerInit;
2136    };
2137
2138    _delfino.setHandlerInit = function(init) {
2139        this._handlerInit = init;
2140        if(init === true) {
2141            this._handlerInitUrl = window.location.href;
2142            return;
2143        }
2144        delfino.handler.secure.reset();
2145    };
2146    _delfino.isInProcessHandlerInit = function() { return this._handlerInitProcess; };
2147    _delfino.setInProcessHandlerInit = function(process) { this._handlerInitProcess = process; };
2148
2149    _delfino.callWithInitHandler = function(fnName,args)  {
2150
2151        //-----------------------------------------------------------------------
2152        this._lastCallTime = this._lastCallTime || {};
2153        if(this._lastCallTime[fnName] != undefined && (fnName == "login" || fnName == "sign" )) {
2154            var elapsed = new Date() - this._lastCallTime[fnName];
2155            elapsed = Math.round(elapsed / 600);
2156            if(elapsed <=3) {
2157                if(args[1].ssid == ""){
2158                    //alert(fnName + ": õõÈ÷ Çսô٠" +elapsed + " sec");
2159                    return;
2160                }
2161            }
2162        }
2163        this._lastCallTime[fnName] = new Date();
2164        //-----------------------------------------------------------------------
2165
2166        var parentFnName = "par_"+fnName;
2167
2168        if(_delfino.isInProcessHandlerInit()) {
2169            setTimeout(function() {
2170                _delfino.callWithInitHandler(fnName, args);
2171            }, 50);
2172            return;
2173        }
2174        _delfino.setInProcessHandlerInit(true);
2175        this.initHandler({retryCount:0,execTimeout:1000,nnnn:fnName,success:function(){
2176        //this.initHandler({retryCount:(DC_browserInfo.MSIE)?0:1,execTimeout:1000,success:function(){
2177            _delfino.setInProcessHandlerInit(false);
2178            var fn = Delfino[parentFnName];
2179            fn.apply(Delfino,args);
2180        }});
2181    };
2182
2183    _delfino.isInstall = function(goInstall,completeCallback) {
2184        function tempError(param) {
2185            if(goInstall == true)
2186                DCrypto.goInstallPage();
2187            else
2188                completeCallback(false);
2189        }
2190        function tempSuccess() {
2191            completeCallback(true);
2192        }
2193        delfino.handler.helper.isInstall({"ctx":{},"error":tempError,"success":tempSuccess});
2194    };
2195
2196    _delfino.initHandler = function(ctx) {
2197
2198        /* //WIZVERA_TEST_START
2199        var check_allTIME = new Date();
2200        var check_TIME = new Date();
2201        var check_MSG = "";
2202        //WIZVERA_TEST_END */
2203
2204        if(this.isHandlerInit() == true) {
2205            if(ctx.success != undefined)
2206                ctx.success();
2207            return true;
2208        }
2209
2210        if(ctx == undefined) ctx = {retryCount:3,execTimeout:2000};
2211        this._ctx = ctx;
2212
2213        if(this._ctx.retryCount < 0) {
2214            delfino.handler.state.clear();
2215            if(ctx.goInstall != undefined && ctx.goInstall == false) return _delfino.setInProcessHandlerInit(false);
2216            DCrypto.goInstallPage();
2217            _delfino.setInProcessHandlerInit(false);
2218            return;
2219        }
2220        this._ctx.retryCount--;
2221
2222        delfino.handler.state.setState("init",true);
2223        function installCheckOk(ver) {
2224
2225            /* //WIZVERA_TEST_START
2226            check_MSG += "initHandler[ installOK] " + Math.floor( (new Date()).getTime() - check_TIME.getTime() ) / 1000 + "\n";
2227            check_TIME = new Date();
2228            //WIZVERA_TEST_END */
2229
2230            DcryptoHandlerData.version = ver;
2231            delfino.handler.state.setState("init",false);
2232            delfino.handler.state.setState("secure",true);
2233
2234            Delfino.loadLogoImage(DelfinoConfig.logoImageUrl);
2235            Delfino.init(false);
2236
2237            /* //WIZVERA_TEST_START
2238            check_MSG += "initHandler[    initOK] " + Math.floor( (new Date()).getTime() - check_TIME.getTime() ) / 1000 + "\n";
2239            check_TIME = new Date();
2240            //WIZVERA_TEST_END */
2241
2242            (function(ctx){
2243                delfino.handler.secure.init({success:function(){
2244
2245                    Delfino.setHandlerInit(true);
2246                    delfino.handler.state.clear();
2247                    if(ctx.success != undefined) {
2248
2249                        /* //WIZVERA_TEST_START
2250                        check_MSG += "initHandler[secureOK] " + Math.floor( (new Date()).getTime() - check_TIME.getTime() ) / 1000 + "\n";
2251                        check_TIME = new Date();
2252                        //WIZVERA_TEST_END */
2253                        ctx.success();
2254                        
2255                        /* //WIZVERA_TEST_START
2256                        check_MSG += "initHandler[ success] " + Math.floor( (new Date()).getTime() - check_TIME.getTime() ) / 1000 + "\n\n";
2257                        check_MSG += "initHandler[ALL_TIME] " + Math.floor( (new Date()).getTime() - check_allTIME.getTime() ) / 1000 + "\n";
2258                        if (document.location.href.indexOf("debug=on")>=0 && document.location.hostname.indexOf("wizvera.com")>
2258=0) alert(check_MSG);
2259                        //WIZVERA_TEST_END */
2260                        
2261                    }
2262                },error:function(){
2263                    delfino.handler.state.clear();
2264                    _delfino.setInProcessHandlerInit(false);
2265                }});
2266            })(this.ctx);
2267        }
2268        function installCheckError(param) {
2269
2270            /* //WIZVERA_TEST_START
2271            check_MSG += "initHandler[notInstall] " + Math.floor( (new Date()).getTime() - check_TIME.getTime() ) / 1000 + "\n";
2272            if (document.location.href.indexOf("debug=on")>=0) alert(check_MSG);
2273            //WIZVERA_TEST_END */
2274
2275            if(param.objver == "") {    //timeout , error
2276                if(ctx.retryCount < 0) {
2277                    delfino.handler.state.clear();
2278                    if(ctx.goInstall != undefined && ctx.goInstall == false) return _delfino.setInProcessHandlerInit(false);
2279                    DCrypto.goInstallPage();
2280                    _delfino.setInProcessHandlerInit(false);
2281                    return;
2282                }
2283
2284                (function(ctx){
2285                    setTimeout(function(){Delfino.initHandler(ctx);},ctx.execTimeout);
2286                })(this.ctx);
2287                return;
2288            }
2289            else if (param.objver < param.confver) { //old version
2290                delfino.handler.state.clear();
2291                if(ctx.goInstall != undefined && ctx.goInstall == false) return _delfino.setInProcessHandlerInit(false);
2292                DCrypto.goInstallPage();
2293                _delfino.setInProcessHandlerInit(false);
2294                return;
2295            }
2296            delfino.handler.state.setState("init", false);
2297            _delfino.setInProcessHandlerInit(false);
2298        }
2299
2300        (function(ctx){
2301            setTimeout(function() {
2302                delfino.handler.helper.isInstall({"ctx":ctx,"error":installCheckError,"success":installCheckOk});
2303            },1);
2304        })(this._ctx);
2305    };
2306
2307    _delfino.init = function(installCheck) {
2308        if(installCheck == undefined)
2309            installCheck = true;
2310
2311        if(this.inited) {
2312            return true;
2313        }
2314
2315
2316        return this.par_init(installCheck);
2317
2318    };
2319    _delfino.getMACAddress = function(cb) {
2320        //var completeCallback = function(mac){ alert(mac); };
2321        //if (typeof(cb) != "function") cb = completeCallback;
2322        if (typeof(cb) != "function") return "";
2323
2324        delfino.handler.getProperty("MACAddress",{}).onsuccess(function(res){
2325            if(res.res == 0) {
2326                cb(res.data);
2327            } else {
2328                cb("");
2329            }
2330        }).onerror(function(){
2331            cb("");
2332        }).invoke();
2333    };
2334    _delfino.getVersion = function(cb)
2335    {
2336        if (typeof(cb) != "function") return "";
2337        delfino.handler.getVersion({}).onsuccess(function(res){
2338            if(res.res == 0) {
2339                cb(res.data);
2340            } else {
2341                cb("");
2342            }
2343        }).onerror(function(){
2344            cb("");
2345        }).invoke();
2346    };
2347    _delfino.setProperties = function(properties) {
2348        DCrypto.setPropertyJson(properties);
2349    };
2350
2351    _delfino.setLang = function(lang){
2352        DelfinoConfig.lang = lang;
2353
2354        var langUrl="";
2355        if(lang == "KOR" || lang == "korean"){
2356            langUrl = DelfinoConfig.langUrl.koreanUrl;
2357            lang = "korean";
2358        }
2359        else if(lang == "ENG" || lang == "english"){
2360            langUrl = DelfinoConfig.langUrl.englishUrl;
2361            lang = "english";
2362        }
2363        else if(lang == "CHN" || lang == "chinese"){
2364            langUrl = DelfinoConfig.langUrl.chaneseUrl;
2365            lang = "chinese";
2366        }
2367        else if(lang == "JPN" || lang == "japanese"){
2368            langUrl = DelfinoConfig.langUrl.japaneseUrl;
2369            lang = "japanese";
2370        }
2371        else if(lang == "VNM" || lang == "vietnamese"){
2372            langUrl = DelfinoConfig.langUrl.vietnameseUrl;
2373            lang = "vietnamese";
2374        }
2375
2376        jQuery.ajax({
2377            url: langUrl,
2378            async: false,
2379               dataType: 'text',
2380               success: function(data){
2381                   DCrypto.setLang(lang, data);
2382               }
2383        });
2384    };
2385
2386    return _delfino;
2387})(jQuery);
2388
2389jQuery(document).ready(function setup() {
2390    if(typeof window.DelfinoConfig === 'undefined' || typeof window.DC_setModule === 'undefined') {
2391        setTimeout(setup, 100);
2392        return;
2393    }
2394
2395    try {
2396        if(Delfino.initHandler != undefined) {
2397            //Delfino.initHandler({retryCount:0,execTimeout:2000,goInstall:false});
2398        } else {
2399            Delfino.init(false); //Preloaded
2400        }
2401    } catch(e) {}
2402});
2403
2404if( DelfinoConfig.useRecentModule ){
2405    Delfino.setModule();
2406}
2407else{
2408    Delfino.setModule(DelfinoConfig.module);
2409}
2410
2411})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.