1 | <!DOCTYPE html> |
---|
2 | <!-- release v4.1.8, copyright 2014 - 2015 Kartik Visweswaran --> |
---|
3 | <html lang="es"> |
---|
4 | <head> <!--Inicio del head --> |
---|
5 | <meta charset="UTF-8"/> |
---|
6 | <script type="text/javascript" src="js/jquery.min.js"></script> |
---|
7 | <script type="text/javascript" src="js/hwcrypto-legacy.js"></script> |
---|
8 | <script type="text/javascript" src="js/hwcrypto.js"></script> |
---|
9 | <script type="text/javascript" src="js/hex2base.js"></script> |
---|
10 | <script type="text/javascript" src="js/forge.min.js"></script> |
---|
11 | |
---|
12 | <script type="text/javascript" charset="utf-8"> |
---|
13 | $(document).ready(function() { |
---|
14 | $("#botonCertificado").click(FindCertificateByHash); |
---|
15 | }) |
---|
16 | function signDigest(text){ |
---|
17 | if(window.event){ |
---|
18 | window.event.cancelBubble = true; |
---|
19 | |
---|
20 | var dest = sign(text); //TODO |
---|
21 | alert(dest); |
---|
22 | return dest; |
---|
23 | } |
---|
24 | } |
---|
25 | |
---|
26 | // CAPICOM constants |
---|
27 | var CAPICOM_STORE_OPEN_READ_ONLY = 0; |
---|
28 | var CAPICOM_CURRENT_USER_STORE = 2; |
---|
29 | var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0; |
---|
30 | var CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY = 6; |
---|
31 | var CAPICOM_CERTIFICATE_FIND_TIME_VALID = 9; |
---|
32 | var CAPICOM_CERTIFICATE_FIND_KEY_USAGE = 12; |
---|
33 | var CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE = 0x00000080; |
---|
34 | var CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0; |
---|
35 | var CAPICOM_INFO_SUBJECT_SIMPLE_NAME = 0; |
---|
36 | var CAPICOM_ENCODE_BASE64 = 0; |
---|
37 | var CAPICOM_E_CANCELLED = -2138568446; |
---|
38 | var CERT_KEY_SPEC_PROP_ID = 6; |
---|
39 | |
---|
40 | function IsCAPICOMInstalled(){ |
---|
41 | if(typeof(oCAPICOM) == "object"){ |
---|
42 | if( (oCAPICOM.object != null) ){ |
---|
43 | // We found CAPICOM! |
---|
44 | return true; |
---|
45 | } |
---|
46 | } |
---|
47 | } |
---|
48 | |
---|
49 | function FindCertificateByHash(){ |
---|
50 | try{ |
---|
51 | // instantiate the CAPICOM objects |
---|
52 | var MyStore = new ActiveXObject("CAPICOM.Store"); |
---|
53 | // open the current users personal certificate store |
---|
54 | MyStore.Open(CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY); |
---|
55 | |
---|
56 | // find all of the certificates that have the specified hash |
---|
57 | var FilteredCertificates = MyStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, strUserCertigicateThumbprint); |
---|
58 | |
---|
59 | var Signer = new ActiveXObject("CAPICOM.Signer"); |
---|
60 | Signer.Certificate = FilteredCertificates.Item(1); |
---|
61 | return Signer; |
---|
62 | |
---|
63 | // Clean Up |
---|
64 | MyStore = null; |
---|
65 | FilteredCertificates = null; |
---|
66 | }catch (e){ |
---|
67 | if (e.number != CAPICOM_E_CANCELLED){ |
---|
68 | return new ActiveXObject("CAPICOM.Signer"); |
---|
69 | } |
---|
70 | } |
---|
71 | } |
---|
72 | |
---|
73 | function sign(src){ |
---|
74 | if(window.crypto && window.crypto.signText){ |
---|
75 | return sign_NS(src); |
---|
76 | } |
---|
77 | return sign_IE(src); |
---|
78 | } |
---|
79 | |
---|
80 | function sign_NS(src){ |
---|
81 | var s = crypto.signText(src, "ask" ); |
---|
82 | return s; |
---|
83 | } |
---|
84 | |
---|
85 | function sign_IE(src){ |
---|
86 | try{ |
---|
87 | // instantiate the CAPICOM objects |
---|
88 | var SignedData = new ActiveXObject("CAPICOM.SignedData"); |
---|
89 | var TimeAttribute = new ActiveXObject("CAPICOM.Attribute"); |
---|
90 | |
---|
91 | // Set the data that we want to sign |
---|
92 | SignedData.Content = src; |
---|
93 | var Signer = FindCertificateByHash(); |
---|
94 | |
---|
95 | // Set the time in which we are applying the signature |
---|
96 | var Today = new Date(); |
---|
97 | TimeAttribute.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME; |
---|
98 | TimeAttribute.Value = Today.getVarDate(); |
---|
99 | Today = null; |
---|
100 | Signer.AuthenticatedAttributes.Add(TimeAttribute); |
---|
101 | |
---|
102 | // Do the Sign operation |
---|
103 | var szSignature = SignedData.Sign(Signer, true, CAPICOM_ENCODE_BASE64); |
---|
104 | return szSignature; |
---|
105 | }catch (e){ |
---|
106 | if (e.number != CAPICOM_E_CANCELLED){ |
---|
107 | alert("An error occurred when attempting to sign the content, the errot was: " + e.description); |
---|
108 | } |
---|
109 | } |
---|
110 | return ""; |
---|
111 | } |
---|
112 | </script> |
---|
113 | |
---|
114 | </head> |
---|
115 | |
---|
116 | |
---|
117 | <body> |
---|
118 | <br> |
---|
119 | <button type="button" class="button" name="botonCertificado" id="botonCertificado">Obtiene Certificado</button> |
---|
120 | <br> |
---|
121 | <div id="respuesta"></div> |
---|
122 | <div id="progresoupload"></div> |
---|
123 | <div id="progresodownload"></div> |
---|
124 | |
---|
125 | </body> |
---|
126 | </html> |
---|