Changes between Version 7 and Version 8 of actividades_2018_pruebas


Ignore:
Timestamp:
May 30, 2018, 2:29:44 PM (6 years ago)
Author:
pbuitrago
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • actividades_2018_pruebas

    v7 v8  
    9797|| function getCertificate(e)
    9898        {
    99         console.log("*... getCertificate ...*");
     99        console.log("*... getCertificate ...*");[[BR]]
     100
    100101        // Get PFX
    101         var fileInput = document.getElementById('pfx');
    102         var file = fileInput.files[0];
     102        var fileInput = document.getElementById('pfx');[[BR]]
     103
     104        var file = fileInput.files[0];[[BR]]
     105
    103106        // Read it
    104         var reader = new FileReader();
     107        var reader = new FileReader();[[BR]]
     108
    105109        reader.onload = function(e)  {
    106                 console.log("*.... cargo el archivo .p12 ....*");
    107                 var contents = e.target.result;
    108                 pkcs12Der = arrayBufferToString(contents)
    109                 pkcs12B64 = forge.util.encode64(pkcs12Der);
    110                 var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);
    111                 //var password = $('#pfxp').val();
    112                 var password = "123456";
    113                
    114                 pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);
     110                console.log("*.... cargo el archivo .p12 ....*");[[BR]]
     111
     112                var contents = e.target.result;[[BR]]
     113
     114                pkcs12Der = arrayBufferToString(contents);[[BR]]
     115
     116                pkcs12B64 = forge.util.encode64(pkcs12Der);[[BR]]
     117
     118                var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);[[BR]]
     119
     120                var password = $('#pfxp').val();[[BR]]
     121
     122                pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);[[BR]]
     123
    115124                // load keys
    116125                for(var sci = 0; sci < pkcs12.safeContents.length; ++sci)
    117                         {
    118                         var safeContents = pkcs12.safeContents[sci];
     126                        {[[BR]]
     127
     128                        var safeContents = pkcs12.safeContents[sci];[[BR]]
     129
    119130                        for(var sbi = 0; sbi < safeContents.safeBags.length; ++sbi)
    120131                                {
    121                                 var safeBag = safeContents.safeBags[sbi];
    122                                 if(safeBag.type === forge.pki.oids.keyBag)
     132                                var safeBag = safeContents.safeBags[sbi];[[BR]]
     133
     134                                if(safeBag.type === forge.pki.oids.keyBag) [[BR]]
     135
    123136                                        {
    124137                                        //Found plain private key
    125                                         privateKey = safeBag.key;
     138                                        privateKey = safeBag.key;[[BR]]
     139
    126140                                        }
    127141                                else
    128                                 if(safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag)
     142                                if(safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag) [[BR]]
     143
    129144                                        {
    130145                                        // found encrypted private key
    131                                         privateKey = safeBag.key;
     146                                        privateKey = safeBag.key;[[BR]]
     147
    132148                                        }
    133149                                else
    134                                 if(safeBag.type === forge.pki.oids.certBag)
     150                                if(safeBag.type === forge.pki.oids.certBag) [[BR]]
     151
    135152                                        {
    136153                                        // this bag has a certificate...
    137                                         certCount = certCount +1;       
    138 
    139                                         if(certP12bag == null)
     154                                        certCount = certCount +1;       [[BR]]
     155
     156
     157                                        if(certP12bag == null) [[BR]]
     158
    140159                                                {
    141                                                 certP12bag = safeBag.cert;
    142                                                 certpem = "" +  forge.pki.certificateToPem(certP12bag).toString();
    143                                                 certBytesHex = forge.util.bytesToHex(certpem);
    144                                                 }
    145                                         }       
    146                                 }
    147                         }
     160                                                certP12bag = safeBag.cert;[[BR]]
     161
     162                                                certpem = "" +  forge.pki.certificateToPem(certP12bag).toString();[[BR]]
     163
     164                                                certBytesHex = forge.util.bytesToHex(certpem);[[BR]]
     165
     166                                                }[[BR]]
     167
     168                                        }       [[BR]]
     169
     170                                }[[BR]]
     171
     172                        }[[BR]]
     173
     174                }[[BR]]
     175
     176                reader.readAsArrayBuffer(file);[[BR]]
     177
     178        }[[BR]]
     179
     180||
     181----
     182[[BR]]
     183Con esta función obtenemos la clave privada almacenada en la variable privateKey y el certificado almacenado en la variable certBytesHex.
     184
     185La clave privada es un conjunto de bytes que debemos convertir a string, para esto se tiene la siguiente función
     186[[BR]]
     187
     188----
     189|| function arrayBufferToString( buffer ) [[BR]]
     190
     191        {
     192        var binary = '';[[BR]]
     193
     194        var bytes = new Uint8Array( buffer );[[BR]]
     195
     196        var len = bytes.byteLength;[[BR]]
     197
     198        for (var i = 0; i < len; i++) [[BR]]
     199
     200                {
     201                binary += String.fromCharCode( bytes[ i ] );[[BR]]
     202
    148203                }
    149                 reader.readAsArrayBuffer(file);
    150         }
    151 ||
    152 ----
    153 [[BR]]
    154 Con esta función obtenemos la clave privada almacenada en la variable privateKey y el certificado almacenado en la variable certBytesHex.
    155 
    156 La clave privada es un conjunto de bytes que debemos convertir a string, para esto se tiene la siguiente función
    157 [[BR]]
    158 
    159 ----
    160 || function arrayBufferToString( buffer )
    161         {
    162         var binary = '';
    163         var bytes = new Uint8Array( buffer );
    164         var len = bytes.byteLength;
    165         for (var i = 0; i < len; i++)
    166                 {
    167                 binary += String.fromCharCode( bytes[ i ] );
    168                 }
    169         return binary;
     204        return binary;[[BR]]
     205
    170206        }
    171207||
     
    191227
    192228----
    193 || function SignFilePDF() {
    194         //cargar el archivo .p12
    195         getCertificate();
    196         var fileInput = document.getElementById("file-sign");
    197         var list = fileInput.files;
    198         var form = $('firmar')[0];
    199         var data = new FormData();
    200         data.append('upload', $("#file-sign")[0].files[0]);
    201         $.ajax({             
    202         url: "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos",
    203         type: "post",
    204         dataType: "json",
    205         data: data,
    206         cache: false,
    207         contentType: false,
    208         processData: false,
    209         xhrFields: {withCredentials: true},
    210         headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
    211         success: function(response) {
    212             var responseString = JSON.stringify(response);                                     
    213             document.getElementById("seccion1").innerHTML = responseString;
    214         }
     229|| function SignFilePDF() {[[BR]]
     230
     231        //cargar el archivo .p12[[BR]]
     232
     233        getCertificate();[[BR]]
     234
     235        var fileInput = document.getElementById("file-sign");[[BR]]
     236
     237        var list = fileInput.files;[[BR]]
     238
     239        var form = $('firmar')[0];[[BR]]
     240
     241        var data = new FormData();[[BR]]
     242
     243        data.append('upload', $("#file-sign")[0].files[0]);[[BR]]
     244
     245        $.ajax({   [[BR]]
     246           
     247        url: "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos",[[BR]]
     248
     249        type: "post",[[BR]]
     250
     251        dataType: "json",[[BR]]
     252
     253        data: data,[[BR]]
     254
     255        cache: false,[[BR]]
     256
     257        contentType: false,[[BR]]
     258
     259        processData: false,[[BR]]
     260
     261        xhrFields: {withCredentials: true},[[BR]]
     262
     263        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},[[BR]]
     264
     265        success: function(response) {[[BR]]
     266
     267            var responseString = JSON.stringify(response); [[BR]]
     268                                     
     269            document.getElementById("seccion1").innerHTML = responseString;[[BR]]
     270
     271        }[[BR]]
     272
    215273)}
    216274||
     
    225283
    226284----
    227 || <!doctype html>
    228 <html>
    229 <head>
    230 <meta charset="utf-8">
    231     <title>Javascript firma p12 Demo</title>
    232     <script type="text/javascript" src="forge.min.js"></script>
    233 </head>
    234 
    235 <script>
     285|| <!doctype html>[[BR]]
     286
     287<html>[[BR]]
     288
     289<head>[[BR]]
     290
     291<meta charset="utf-8">[[BR]]
     292
     293    <title>Javascript firma p12 Demo</title>[[BR]]
     294
     295    <script type="text/javascript" src="forge.min.js"></script>[[BR]]
     296</head>[[BR]]
     297
     298<script>[[BR]]
    236299
    237300//Funciones de conversión
    238301
    239 function arrayBufferToString( buffer )
     302function arrayBufferToString( buffer ) [[BR]]
    240303        {
    241         var binary = '';
    242         var bytes = new Uint8Array( buffer );
    243         var len = bytes.byteLength;
    244         for (var i = 0; i < len; i++)
     304        var binary = '';[[BR]]
     305        var bytes = new Uint8Array( buffer );[[BR]]
     306        var len = bytes.byteLength;[[BR]]
     307        for (var i = 0; i < len; i++) [[BR]]
    245308                {
    246                 binary += String.fromCharCode( bytes[ i ] );
     309                binary += String.fromCharCode( bytes[ i ] );[[BR]]
    247310                }
    248         return binary;
     311        return binary;[[BR]]
    249312        }
    250313
    251314//function que obtengo la clave privada y el certificado del archivo .p12
    252 function getCertificate(e)
     315function getCertificate(e)[[BR]]
    253316        {
    254         // Get PFX
    255         var fileInput = document.getElementById('pfx');
    256         var file = fileInput.files[0];
    257         // Read it
    258         var reader = new FileReader();
    259         reader.onload = function(e)  {
    260                 var contents = e.target.result;
    261                 pkcs12Der = arrayBufferToString(contents)
    262                 pkcs12B64 = forge.util.encode64(pkcs12Der);
    263                 var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);
     317        // Get PFX[[BR]]
     318        var fileInput = document.getElementById('pfx');[[BR]]
     319        var file = fileInput.files[0];[[BR]]
     320        // Read it[[BR]]
     321        var reader = new FileReader();[[BR]]
     322        reader.onload = function(e)  {[[BR]]
     323                var contents = e.target.result;[[BR]]
     324                pkcs12Der = arrayBufferToString(contents);[[BR]]
     325                pkcs12B64 = forge.util.encode64(pkcs12Der);[[BR]]
     326                var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);[[BR]]
    264327                var password = $('#pfxp').val();
    265328               
    266                 pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);
    267                 // load keys
    268                 for(var sci = 0; sci < pkcs12.safeContents.length; ++sci)
    269                         {
    270                         var safeContents = pkcs12.safeContents[sci];
    271                         for(var sbi = 0; sbi < safeContents.safeBags.length; ++sbi)
    272                                 {
    273                                 var safeBag = safeContents.safeBags[sbi];
    274                                 if(safeBag.type === forge.pki.oids.keyBag)
    275                                         {
    276                                         //Found plain private key
    277                                         privateKey = safeBag.key;
    278                                         }
    279                                 else
    280                                 if(safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag)
    281                                         {
    282                                         // found encrypted private key
    283                                         privateKey = safeBag.key;
    284                                         }
    285                                 else
    286                                 if(safeBag.type === forge.pki.oids.certBag)
    287                                         {
    288                                         // this bag has a certificate...
    289                                         certCount = certCount +1;                                              
    290                                         console.log("GET_CERTIFICATE___"+ certCount + "...certBag Ok"); 
    291 
    292                                         if(certP12bag == null)
    293                                                 {
    294                                                 certP12bag = safeBag.cert;
    295                                                 certpem = "" +  forge.pki.certificateToPem(certP12bag).toString();
    296                                                 certBytesHex = forge.util.bytesToHex(certpem);
    297                                                 }
    298                                         }       
    299                                 }
    300                         }
    301                 }
    302                 reader.readAsArrayBuffer(file);
    303         }
    304 
    305 //funcion que ejecuta el proceso de firma electrónica usando el servicio Murachí
    306 function SignFilePDF() {
    307         //cargar el archivo .p12
    308         getCertificate();
    309     var fileInput = document.getElementById("file-sign");
    310     var list = fileInput.files;
    311     var form = $('firmar')[0];
    312     var data = new FormData();
    313     data.append('upload', $("#file-sign")[0].files[0]);
    314     $.ajax({             
    315         url: "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos",
    316         type: "post",
    317         dataType: "json",
    318         data: data,
    319         cache: false,
    320         contentType: false,
    321         processData: false,
    322         xhrFields: {withCredentials: true},
    323         headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
    324         success: function(response) {
    325             var responseString = JSON.stringify(response);                                     
    326             document.getElementById("seccion1").innerHTML = responseString;
    327            }
    328     )}
     329                pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);[[BR]]
     330                // load keys[[BR]]
     331                for(var sci = 0; sci < pkcs12.safeContents.length; ++sci) [[BR]]
     332                        {[[BR]]
     333                        var safeContents = pkcs12.safeContents[sci];[[BR]]
     334                        for(var sbi = 0; sbi < safeContents.safeBags.length; ++sbi) [[BR]]
     335                                {[[BR]]
     336                                var safeBag = safeContents.safeBags[sbi];[[BR]]
     337                                if(safeBag.type === forge.pki.oids.keyBag) [[BR]]
     338                                        {[[BR]]
     339                                        //Found plain private key[[BR]]
     340                                        privateKey = safeBag.key;[[BR]]
     341                                        } [[BR]]
     342                                else [[BR]]
     343                                if(safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag) [[BR]]
     344                                        {[[BR]]
     345                                        // found encrypted private key[[BR]]
     346                                        privateKey = safeBag.key;[[BR]]
     347                                        } [[BR]]
     348                                else [[BR]]
     349                                if(safeBag.type === forge.pki.oids.certBag) [[BR]]
     350                                        {[[BR]]
     351                                        // this bag has a certificate...[[BR]]
     352                                        certCount = certCount +1;       [[BR]]                                 
     353                                        console.log("GET_CERTIFICATE___"+ certCount + "...certBag Ok");  [[BR]]
     354
     355                                        if(certP12bag == null) [[BR]]
     356                                                { [[BR]]
     357                                                certP12bag = safeBag.cert; [[BR]]
     358                                                certpem = "" +  forge.pki.certificateToPem(certP12bag).toString(); [[BR]]
     359                                                certBytesHex = forge.util.bytesToHex(certpem); [[BR]]
     360                                                } [[BR]]
     361                                        }       [[BR]]
     362                                }  [[BR]]
     363                        } [[BR]]
     364                } [[BR]]
     365                reader.readAsArrayBuffer(file); [[BR]]
     366        } [[BR]]
     367
     368//funcion que ejecuta el proceso de firma electrónica usando el servicio Murachí [[BR]]
     369function SignFilePDF() { [[BR]]
     370        //cargar el archivo .p12 [[BR]]
     371        getCertificate(); [[BR]]
     372    var fileInput = document.getElementById("file-sign"); [[BR]]
     373    var list = fileInput.files; [[BR]]
     374    var form = $('firmar')[0]; [[BR]]
     375    var data = new FormData(); [[BR]]
     376    data.append('upload', $("#file-sign")[0].files[0]); [[BR]]
     377    $.ajax({               [[BR]]
     378        url: "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos", [[BR]]
     379        type: "post", [[BR]]
     380        dataType: "json", [[BR]]
     381        data: data, [[BR]]
     382        cache: false, [[BR]]
     383        contentType: false, [[BR]]
     384        processData: false,[[BR]]
     385        xhrFields: {withCredentials: true},[[BR]]
     386        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},[[BR]]
     387        success: function(response) { [[BR]]
     388            var responseString = JSON.stringify(response);                                      [[BR]]
     389            document.getElementById("seccion1").innerHTML = responseString;[[BR]]
     390           }[[BR]]
     391    )}[[BR]]
    329392
    330393||
     
    353416||
    354417
    355 document.getElementById("seccion1").innerHTML = responseString;
    356             var fileId = response.fileId.toString();
    357             alert("antes de leer el certificado");
    358             if(certBytesHex != null) {
    359                 console.log("tengo certificado");
    360                         var cert = certBytesHex;
    361                         console.log("certGet:"+ cert);
    362                         var parameters = JSON.stringify({
    363                                 "fileId":fileId,
    364                                 "certificate":cert,
    365                                 "reason":"Certificado",
    366                                 "location":"CENDITEL",
    367                                 "contact":"582746574336",
    368                                 "signatureVisible":"true"
    369                         });
    370                         console.log("cert...3");
    371                         $.ajax({
    372                             type: 'POST',
    373                             contentType: 'application/json',                
    374                             url:"https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/pdfs",
    375                             dataType: "json",
    376                             data: parameters,
    377                             xhrFields: {withCredentials: true},       
    378                             headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
    379                             success: function(data, textStatus, jqXHR) {
    380                                         var responseString = JSON.stringify(data);
    381                                         document.getElementById("seccion2").innerHTML = responseString;
    382                         }
    383     )}
     418document.getElementById("seccion1").innerHTML = responseString; [[BR]]
     419            var fileId = response.fileId.toString();[[BR]]
     420            alert("antes de leer el certificado");[[BR]]
     421            if(certBytesHex != null) {[[BR]]
     422                console.log("tengo certificado");[[BR]]
     423                        var cert = certBytesHex;[[BR]]
     424                        console.log("certGet:"+ cert);[[BR]]
     425                        var parameters = JSON.stringify({[[BR]]
     426                                "fileId":fileId,[[BR]]
     427                                "certificate":cert,[[BR]]
     428                                "reason":"Certificado",[[BR]]
     429                                "location":"CENDITEL",[[BR]]
     430                                "contact":"582746574336",[[BR]]
     431                                "signatureVisible":"true"[[BR]]
     432                        });[[BR]]
     433                        console.log("cert...3");[[BR]]
     434                        $.ajax({[[BR]]
     435                            type: 'POST',[[BR]]
     436                            contentType: 'application/json', [[BR]]               
     437                            url:"https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/pdfs",[[BR]]
     438                            dataType: "json",[[BR]]
     439                            data: parameters,[[BR]]
     440                            xhrFields: {withCredentials: true},    [[BR]]   
     441                            headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},[[BR]]
     442                            success: function(data, textStatus, jqXHR) {[[BR]]
     443                                        var responseString = JSON.stringify(data);[[BR]]
     444                                        document.getElementById("seccion2").innerHTML = responseString;[[BR]]
     445                        }[[BR]]
     446    )}[[BR]]
    384447||
    385448----
     
    393456||
    394457
    395 <!doctype html>
    396 <html>
    397 <head>
    398 <meta charset="utf-8">
    399     <title>Javascript firma p12 Demo</title>
    400     <script type="text/javascript" src="forge.min.js"></script>
    401 </head>
    402 
    403 <script>
    404 
    405 //Funciones de conversión
    406 
    407 function arrayBufferToString( buffer )
     458<!doctype html> [[BR]]
     459<html>[[BR]]
     460<head>[[BR]]
     461<meta charset="utf-8">[[BR]]
     462    <title>Javascript firma p12 Demo</title>[[BR]]
     463    <script type="text/javascript" src="forge.min.js"></script>[[BR]]
     464</head>[[BR]]
     465
     466<script>[[BR]]
     467
     468//Funciones de conversión[[BR]]
     469
     470function arrayBufferToString( buffer ) [[BR]]
    408471{
    409     var binary = '';
    410     var bytes = new Uint8Array( buffer );
    411     var len = bytes.byteLength;
    412     for (var i = 0; i < len; i++)
    413     {
    414         binary += String.fromCharCode( bytes[ i ] );
    415     }
    416     return binary;
    417 }
    418 
    419 //function que obtengo la clave privada y el certificado del archivo .p12
    420 function getCertificate(e)
    421 {
    422     // Get PFX
    423     var fileInput = document.getElementById('pfx');
    424     var file = fileInput.files[0];
    425     // Read it
    426     var reader = new FileReader();
    427     reader.onload = function(e)  {
    428         console.log("*.... cargo el archivo .p12 ....*");
    429         var contents = e.target.result;
    430         pkcs12Der = arrayBufferToString(contents)
    431         pkcs12B64 = forge.util.encode64(pkcs12Der);
    432         var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);
    433         var password = $('#pfxp').val();
    434         pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);
    435         // load keys
    436         for(var sci = 0; sci < pkcs12.safeContents.length; ++sci)
    437         {
    438             var safeContents = pkcs12.safeContents[sci];
    439             for(var sbi = 0; sbi < safeContents.safeBags.length; ++sbi)
    440                 {
    441                 var safeBag = safeContents.safeBags[sbi];
    442                 if(safeBag.type === forge.pki.oids.keyBag)
    443                 {
    444                     //Found plain private key
    445                     privateKey = safeBag.key;
    446                 }
    447                 else
    448                 if(safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag)
    449                 {
    450                     // found encrypted private key
    451                     privateKey = safeBag.key;
    452                 }
    453                 else
    454                     if(safeBag.type === forge.pki.oids.certBag)
    455                     {
    456                         // this bag has a certificate...
    457                         certCount = certCount +1;                                              
    458                         console.log("GET_CERTIFICATE___"+ certCount + "...certBag Ok"); 
    459 
    460                         if(certP12bag == null)
    461                         {
    462                             certP12bag = safeBag.cert;
    463                             certpem = "" +  forge.pki.certificateToPem(certP12bag).toString();
    464                             certBytesHex = forge.util.bytesToHex(certpem);
    465                         }
    466                     }   
    467                 }
    468             }
    469         }
    470         reader.readAsArrayBuffer(file);
    471     }
    472 
     472    var binary = '';[[BR]]
     473    var bytes = new Uint8Array( buffer );[[BR]]
     474    var len = bytes.byteLength;[[BR]]
     475    for (var i = 0; i < len; i++) [[BR]]
     476    {[[BR]]
     477        binary += String.fromCharCode( bytes[ i ] );[[BR]]
     478    }[[BR]]
     479    return binary;[[BR]]
     480}[[BR]]
     481
     482//function que obtengo la clave privada y el certificado del archivo .p12[[BR]]
     483function getCertificate(e)[[BR]]
     484{[[BR]]
     485    // Get PFX[[BR]]
     486    var fileInput = document.getElementById('pfx');[[BR]]
     487    var file = fileInput.files[0];[[BR]]
     488    // Read it[[BR]]
     489    var reader = new FileReader();[[BR]]
     490    reader.onload = function(e)  {[[BR]]
     491        console.log("*.... cargo el archivo .p12 ....*");[[BR]]
     492        var contents = e.target.result;[[BR]]
     493        pkcs12Der = arrayBufferToString(contents);[[BR]]
     494        pkcs12B64 = forge.util.encode64(pkcs12Der);[[BR]]
     495        var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);[[BR]]
     496        var password = $('#pfxp').val();[[BR]]
     497        pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);[[BR]]
     498        // load keys[[BR]]
     499        for(var sci = 0; sci < pkcs12.safeContents.length; ++sci) [[BR]]
     500        {[[BR]]
     501            var safeContents = pkcs12.safeContents[sci];[[BR]]
     502            for(var sbi = 0; sbi < safeContents.safeBags.length; ++sbi) [[BR]]
     503                {[[BR]]
     504                var safeBag = safeContents.safeBags[sbi];[[BR]]
     505                if(safeBag.type === forge.pki.oids.keyBag) [[BR]]
     506                {[[BR]]
     507                    //Found plain private key[[BR]]
     508                    privateKey = safeBag.key;[[BR]]
     509                } [[BR]]
     510                else [[BR]]
     511                if(safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag) [[BR]]
     512                {[[BR]]
     513                    // found encrypted private key[[BR]]
     514                    privateKey = safeBag.key;[[BR]]
     515                } [[BR]]
     516                else [[BR]]
     517                    if(safeBag.type === forge.pki.oids.certBag) [[BR]]
     518                    {[[BR]]
     519                        // this bag has a certificate...[[BR]]
     520                        certCount = certCount +1;       [[BR]]                                 
     521                        console.log("GET_CERTIFICATE___"+ certCount + "...certBag Ok");  [[BR]]
     522
     523                        if(certP12bag == null) [[BR]]
     524                        {[[BR]]
     525                            certP12bag = safeBag.cert;[[BR]]
     526                            certpem = "" +  forge.pki.certificateToPem(certP12bag).toString();[[BR]]
     527                            certBytesHex = forge.util.bytesToHex(certpem);[[BR]]
     528                        }[[BR]]
     529                    }   [[BR]]
     530                }[[BR]]
     531            }[[BR]]
     532        }[[BR]]
     533        reader.readAsArrayBuffer(file);[[BR]]
     534    }[[BR]]
     535[[BR]]
    473536//funcion que ejecuta el proceso de firma electrónica usando el servicio Murachí
    474 function SignFilePDF() {
    475     //cargar el archivo .p12
    476     getCertificate();
    477     var fileInput = document.getElementById("file-sign");
    478     var list = fileInput.files;
    479     var form = $('firmar')[0];
    480     var data = new FormData();
    481     data.append('upload', $("#file-sign")[0].files[0]);
    482     $.ajax({             
    483         url: "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos",
    484         type: "post",
    485         dataType: "json",
    486         data: data,
    487         cache: false,
    488         contentType: false,
    489         processData: false,
    490         xhrFields: {withCredentials: true},
    491         headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
    492         success: function(response) {
    493             var responseString = JSON.stringify(response);                                     
    494             document.getElementById("seccion1").innerHTML = responseString;
    495             var fileId = response.fileId.toString();
    496             alert("antes de leer el certificado");
    497             if(certBytesHex != null) {
    498                 var cert = certBytesHex;
    499                 var parameters = JSON.stringify({
    500                     "fileId":fileId,
    501                     "certificate":cert,
    502                     "reason":"Certificado",
    503                     "location":"CENDITEL",
    504                     "contact":"582746574336",
    505                     "signatureVisible":"true"
    506                 });
     537function SignFilePDF() {[[BR]]
     538    //cargar el archivo .p12[[BR]]
     539    getCertificate();[[BR]]
     540    var fileInput = document.getElementById("file-sign");[[BR]]
     541    var list = fileInput.files;[[BR]]
     542    var form = $('firmar')[0];[[BR]]
     543    var data = new FormData();[[BR]]
     544    data.append('upload', $("#file-sign")[0].files[0]);[[BR]]
     545    $.ajax({              [[BR]]
     546        url: "https://murachi.cenditel.gob.ve/Murachi/0.1/archivos",[[BR]]
     547        type: "post",[[BR]]
     548        dataType: "json",[[BR]]
     549        data: data,[[BR]]
     550        cache: false,[[BR]]
     551        contentType: false,[[BR]]
     552        processData: false,[[BR]]
     553        xhrFields: {withCredentials: true},[[BR]]
     554        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},[[BR]]
     555        success: function(response) {[[BR]]
     556            var responseString = JSON.stringify(response);      [[BR]]                               
     557            document.getElementById("seccion1").innerHTML = responseString;[[BR]]
     558            var fileId = response.fileId.toString();[[BR]]
     559            alert("antes de leer el certificado");[[BR]]
     560            if(certBytesHex != null) {[[BR]]
     561                var cert = certBytesHex;[[BR]]
     562                var parameters = JSON.stringify({[[BR]]
     563                    "fileId":fileId,[[BR]]
     564                    "certificate":cert,[[BR]]
     565                    "reason":"Certificado",[[BR]]
     566                    "location":"CENDITEL",[[BR]]
     567                    "contact":"582746574336",[[BR]]
     568                    "signatureVisible":"true"[[BR]]
     569                });[[BR]]
    507570               
    508                 $.ajax({
    509                     type: 'POST',
    510                     contentType: 'application/json',                
    511                     url:"https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/pdfs",
    512                     dataType: "json",
    513                     data: parameters,
    514                     xhrFields: {withCredentials: true},        
    515                     headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
    516                     success: function(data, textStatus, jqXHR) {
    517                         var responseString = JSON.stringify(data);
    518                         document.getElementById("seccion2").innerHTML = responseString;
    519                     }
    520                 )}
    521            }
    522     )}
     571                $.ajax({[[BR]]
     572                    type: 'POST',[[BR]]
     573                    contentType: 'application/json',  [[BR]]             
     574                    url:"https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/pdfs",[[BR]]
     575                    dataType: "json",[[BR]]
     576                    data: parameters,[[BR]]
     577                    xhrFields: {withCredentials: true},   [[BR]]     
     578                    headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},[[BR]]
     579                    success: function(data, textStatus, jqXHR) {[[BR]]
     580                        var responseString = JSON.stringify(data);[[BR]]
     581                        document.getElementById("seccion2").innerHTML = responseString;[[BR]]
     582                    }[[BR]]
     583                )}[[BR]]
     584           }[[BR]]
     585    )}[[BR]]
    523586||
    524587----