source: aportesmurachi/tahel/Murachi-pre/sign.js

Last change on this file was 12e6ddf, checked in by Antonio Araujo <aaraujo@…>, 7 years ago

Agregados los directorio de aportes de Tahel al control de versiones.

  • Property mode set to 100644
File size: 2.6 KB
Line 
1function signText(text) {
2    if (window.event) {
3        window.event.cancelBubble = true;
4        }
5    return sign(text);
6}
7
8function sign(src) {
9    if (window.crypto && window.crypto.signText) {
10        return sign_NS(src);
11        }
12        if (isIE()) {
13                return sign_IE(src);
14        }
15       
16        alert("Sorry, your browser is not supported");
17        return "";
18}
19
20function sign_NS(src) {
21    return crypto.signText(src, "ask");
22}
23
24// CAPICOM constants
25var CAPICOM_STORE_OPEN_READ_ONLY = 0;
26var CAPICOM_CURRENT_USER_STORE = 2;
27var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
28var CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY = 6;
29var CAPICOM_CERTIFICATE_FIND_TIME_VALID = 9;
30var CAPICOM_CERTIFICATE_FIND_KEY_USAGE = 12;
31var CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE = 0x00000080;
32var CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
33var CAPICOM_INFO_SUBJECT_SIMPLE_NAME = 0;
34var CAPICOM_ENCODE_BASE64 = 0;
35var CAPICOM_E_CANCELLED = -2138568446;
36var CERT_KEY_SPEC_PROP_ID = 6;
37
38function isIE() {
39        if ("ActiveXObject" in window){
40                return true;
41        }
42        return false;
43}
44
45function findCertificateByHash() {
46    try {
47        // instantiate the CAPICOM objects
48        var store = new ActiveXObject("CAPICOM.Store");
49        // open the current users personal certificate store
50        store.Open(CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY);
51
52        var certificates = store.Certificates.Select(); 
53                                       
54        var signer = new ActiveXObject("CAPICOM.Signer");
55        signer.Certificate = certificates.Item(1);
56        return signer;
57    } catch (e) {
58        if (e.number != CAPICOM_E_CANCELLED) {
59            return new ActiveXObject("CAPICOM.Signer");
60        }
61    }
62}
63
64function sign_IE(src) {
65    try {
66        // instantiate the CAPICOM objects
67        var signedData = new ActiveXObject("CAPICOM.SignedData");
68        var timeAttribute = new ActiveXObject("CAPICOM.Attribute");
69
70        // Set the data that we want to sign
71        signedData.Content = src;
72        var signer = findCertificateByHash();
73
74        // Set the time in which we are applying the signature
75        var today = new Date();
76        timeAttribute.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
77        timeAttribute.Value = today.getVarDate();
78        signer.AuthenticatedAttributes.Add(timeAttribute);
79
80        // Do the Sign operation
81        var signed = signedData.Sign(signer, true, CAPICOM_ENCODE_BASE64);
82                // Important: IE uses UTF-16LE to encode the signed data
83        return signed;
84    } catch (e) {
85        if (e.number != CAPICOM_E_CANCELLED) {
86            alert("An error occurred when attempting to sign the content, the error was: " + e.description);
87        }
88    }
89    return "";
90}
Note: See TracBrowser for help on using the repository browser.