Changeset 0d48c0c in portal_2019


Ignore:
Timestamp:
Aug 23, 2019, 10:51:48 AM (5 years ago)
Author:
pbuitrago@…>
Branches:
desarrollo
Children:
65da7cc
Parents:
520961f
Message:

pruebas de firma, desde el cliente usuando libreria javascript y otras pruebas usando el servivio de Murachi

Location:
pruebas_web_crypto_api
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pruebas_web_crypto_api/FirmandoConMurachiModificado.html

    r520961f r0d48c0c  
    245245                                                console.log("sign()" + importarLlave);
    246246                                                $.ajax({
     247                                type: 'POST',
     248                                contentType: 'application/json',
    247249                                                        url:"https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/pdfs/resenas",
    248                                                         type: 'POST',
    249250                                                        dataType: 'json',
    250                                                         data: JSON.stringify({'signature':importarLlave}),
    251                                                         contentType: 'application/json',
     251                                                        data: JSON.stringify({"signature":importarLlave}),
     252                                xhrFields: { withCredentials: true },
    252253                                                        headers: {"Authorization":"Basic YWRtaW46YWRtaW4="},
    253                                                         xhrFields: { withCredentials: true },
    254254                                                        success: function(data, textStatus, jqXHR){
    255255                                                                var responseString = JSON.stringify(data);
  • pruebas_web_crypto_api/testingDigitalSignatureWebCryptography.html

    r9bc9e0d r0d48c0c  
     1<!--  Prueba: Este código contiene dos pruebas
     21.- Verificar y firmar el Hash usando la claves asimétricas generadas por la librería javascript Cryptography API Supported y usando los algoritmo de firma RSASSA-PKCS1-v1₅ y RSA-PSS
     3
     42.- Verificar y firmar el Hash usando la información gestionada del archivo .p12 por la librería javascript Forge y exportando dicha información a Cryptography API Supported, se probo usando los algoritmo de firma RSASSA-PKCS1-v1₅ y RSA-PSS
     5
     6para ver los resultados debe activar la consola web del navegador
     7-->
     8
    19<!DOCTYPE html>
    210<html lang="es">
     
    1523    </form>
    1624    <section id="resultados">
     25      <br>
    1726      <div id="seccion1"></div>
     27      <br>
    1828      <div id="seccion2"></div>
     29      <br>
    1930      <div id="seccion3"></div>
     31      <br>
    2032      <div id="seccion4"></div>
    2133    </section>
     
    4052      privateKeyRSAPSS = null,
    4153      publicKeyRSAPSS = null,
     54      publicKeyRSASSAPKCS1v1_5 = null,
    4255      importarLlave = null;
    43 
    44 
    4556
    4657  /* ----- Funciones ----- */
     
    107118        for ( var sbi = 0; sbi < safeContents.safeBags.length; ++sbi ) {
    108119          var safeBag = safeContents.safeBags[sbi];
    109           //if (safeBag.cert != undefined) {
    110             //console.log("antes de llamar safeBag.cert.publicKey")
    111             //var publicKey = safeBag.cert.publicKey;
    112             //console.log("**** publickey ****");
    113             //console.log(publicKey);
    114             //console.log("**** publickey ****");
    115             //}
    116 
    117120          if ( safeBag.type === forge.pki.oids.keyBag ) {
    118121            privateKey = safeBag.key;
     
    124127      return privateKey;
    125128    }
    126     //var rsaPublicKey = pki.publicKeyToAsn1(publicKey);
    127 
    128129    // Función para convertir la llave publica a PKCS#8
    129130    function publicKeyToPkcs8 ( publicKeyP12 ) {
     
    153154
    154155    // Función para importar la llave privada with RSASSA-PKCS1-v1_5
    155     /*
     156   
    156157    function importarLlavePrivada ( llavePrivada ) {
    157158      var qweasd = crypto.subtle.importKey(
     
    174175    }
    175176
    176 
    177     */
     177   /*
    178178    // Función para importar la llave privada with RSA-PSS
    179179    function importarLlavePrivada ( llavePrivada ) {
     
    199199      });
    200200    }
    201 
     201*/
     202/*
    202203// Función para importar la llave publica with RSA-PSS
    203204    function importarLlavePublica ( llavePublica ) {
     
    225226      });
    226227    }
     228*/
     229// Función para importar la llave publica with RSASSA-PKCS1-v1_5
     230    function importarLlavePublica ( llavePublica ) {
     231        console.log("importarLlavePublica llavePublica");
     232        console.log(llavePublica);
     233        console.log("importarLlavePublica llavePublica");
     234      var qweasd = crypto.subtle.importKey(
     235        "spki", //can be "jwk" (public or private), "spki" (public only), or "pkcs8" (private only)
     236        llavePublica,
     237        {   //these are the algorithm options
     238          name: "RSASSA-PKCS1-v1_5",
     239          hash: { name: "SHA-256" }, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
     240        },
     241        false, //whether the key is extractable (i.e. can be used in exportKey)
     242        ["verify"] //"verify" for public key import, "sign" for private key imports
     243      ).then(function(publicKey){
     244        //returns a publicKey (or privateKey if you are importing a private key)}
     245        console.log("llavePublica importada");
     246        console.log(publicKey);
     247        console.log("llavePublica importada");
     248        publicKeyRSASSAPKCS1v1_5 = publicKey;
     249      })
     250      .catch(function(err){
     251        console.error(err);
     252      });
     253    }
    227254    // Función para convertir el certificado .p12 en hexadecimal
    228255    function convertirPKCS12aHexadecimal ( pkcs12 ) {
     
    246273      return certBytesHex;
    247274    }
    248 
    249 
    250275    // Función para leer el .p12 luego de cargarlo
    251276    function leerCertificadoPKCS12 () {
     
    276301  /* ----- Eventos ----- */
    277302
    278 
    279 
    280    
     303 
    281304function convertStringToArrayBufferView(str)
    282305{
     
    296319var private_key_object = null;
    297320var public_key_object = null;
    298 
    299 //var data = "QNimate";
    300321var data = "7a42eea172776c7a6de6d57aa9958d9654410934f5cfbf483b6135a24543f51c";
    301 
    302322var encrypted_hash = null;
    303323var encrypt_promise = null;
    304 
    305324var signature = null;
    306 
    307325var decrypt_promise = null;
    308326
    309327// Usando el algoritmo  RSA-PSS
    310 
     328/*
    311329if(crypto.subtle)
    312330{
     
    318336    promise_key.then(function(key){
    319337        private_key_object = key.privateKey;
    320         console.log("******// public_key_object //******");
     338        console.log("****** public_key_object ******");
    321339        console.log(public_key_object);
    322         console.log("******// public_key_object //******");
     340        console.log("****** public_key_object ******");
    323341        public_key_object = key.publicKey;
    324342        console.log("****.. antes del encrypt_data()..****");
     
    389407    if(publicKeyRSAPSS == null) {
    390408        console.log("function decrypt_data()");
    391         console.log("******// public_key_object decrypt_data() //******");
     409        console.log("****** public_key_object decrypt_data() ******");
    392410        console.log(public_key_object);
    393         console.log("******// public_key_object decrypt_data() //******");
     411        console.log("****** public_key_object decrypt_data() ******");
    394412        decrypt_promise = crypto.subtle.verify({name: "RSA-PSS", saltLength: 128, }, public_key_object, signature, convertStringToArrayBufferView(data));
    395413
     
    405423    else {
    406424        console.log("function decrypt_data()");
    407         console.log("******// publicKeyRSAPSS decrypt_data() //******");
     425        console.log("****** publicKeyRSAPSS decrypt_data() ******");
    408426        console.log(publicKeyRSAPSS);
    409         console.log("******// publicKeyRSAPSS decrypt_data() //******");
     427        console.log("****** publicKeyRSAPSS decrypt_data() ******");
    410428        decrypt_promise = crypto.subtle.verify({name: "RSA-PSS", saltLength: 128, }, publicKeyRSAPSS, signature, convertStringToArrayBufferView(data));
    411429        decrypt_promise.then(
     
    421439
    422440}
    423 /*
     441
     442*/
    424443// Usando el algoritmo  RSASSA-PKCS1-v1_5
    425444if(crypto.subtle)
    426445{
    427446    console.log("Antes del alert");
    428     alert("Cryptography API Supported");
     447    alert("Cryptography API Supported... Prueba 1 usando las claves generadas");
    429448
    430449    promise_key = crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: new Uint8Array([1, 0, 1]), hash: {name: "SHA-256"}}, false, ["sign", "verify"]);
     
    447466}
    448467
     468//Función para realizar la firma del hash usando las claves asimetricas generdas por Cryptography y por la clave privada gestionado del archivo .p12
     469//
    449470function encrypt_data()
    450471{
     
    457478    console.log(privateKeyRSASSAPKCS1v1_5);
    458479    console.log("*** fin privatekey ***");
    459 
     480    document.getElementById("seccion1").innerHTML = data;
     481    //evalua si la clave privada extraída del .p12 es nula para firma usando la clave asimetrica generada con Cryptography API clave privada = private_key_object
    460482    if(privateKeyRSASSAPKCS1v1_5 == null) {
    461483        encrypt_promise = crypto.subtle.sign({name: "RSASSA-PKCS1-v1_5"}, private_key_object, convertStringToArrayBufferView(data));
     
    468490                console.log("**************************************");
    469491                console.log("****.. antes del decrypt_data()..****");
    470                 decrypt_data();
     492                document.getElementById("seccion2").innerHTML = signature;
     493                decrypt_data(); //Llamado para verificaar la firma (hash firmado)
    471494            },
    472495            function(e){
    473496                console.log(e);
    474497            }
    475         ); 
    476     } else {
    477          console.log("privateKey != Null");
     498        );
     499       
     500    } else { //la clave privada del extraída .p12 no es null por lo tanto se realiza la firma usando la clave del archivo .p12
    478501         encrypt_promise = crypto.subtle.sign({name: "RSASSA-PKCS1-v1_5"}, privateKeyRSASSAPKCS1v1_5, convertStringToArrayBufferView(data));
    479502
     
    485508                console.log("**************************************");
    486509                console.log("****.. antes del decrypt_data()..****");
    487                 decrypt_data();
     510                document.getElementById("seccion2").innerHTML = signature; 
     511                decrypt_data(); //Llamado para verificaar la firma (hash firmado)
    488512            },
    489513            function(e){
     
    491515            }
    492516        );
    493     }
    494 }
    495 
     517     
     518    }
     519}
     520
     521//Función para realizar la verificación de la firma del hash usando las claves asimetricas generdas por Cryptography y por la clave publica gestionado del archivo .p12
     522//
    496523function decrypt_data()
    497524{
    498     console.log("function decrypt_data()");
     525  console.log("function decrypt_data()");
     526  //evalua si la clave publica del .p12 esta vacia para realziar la verificación usando la clave asimetrica generada con Cryptography API clave privada = private_key_object
     527  if(publicKeyRSASSAPKCS1v1_5 == null) {
     528     
     529    console.log("****** public_key_object decrypt_data() ******");
     530    console.log(public_key_object);
     531    console.log("****** public_key_object decrypt_data() ******");
    499532    decrypt_promise = crypto.subtle.verify({name: "RSASSA-PKCS1-v1_5"}, public_key_object, signature, convertStringToArrayBufferView(data));
    500533
    501534    decrypt_promise.then(
    502         function(result){
    503             console.log(result);//true or false
    504         },
    505         function(e){
    506             console.log(e.message);
    507         }
     535      function(result){
     536        console.log(result);//true or false
     537        document.getElementById("seccion3").innerHTML = result; 
     538      },
     539      function(e){
     540        console.log(e.message);
     541      }
    508542    );
    509 }
    510 */
     543  document.getElementById("seccion4").innerHTML = "Para la segunda prueba carga el pdf y el archivo .p12 usando el formulaio"; 
     544  } else { //evalua si la clave publica del .p12 no esta vacia para realizar la verificación usando la clave pública extraída del .p12
     545   
     546    console.log("****** publicKeyRSASSAPKCS1v1_5 decrypt_data() ******");
     547    console.log(publicKeyRSASSAPKCS1v1_5);
     548    console.log("****** publicKeyRSASSAPKCS1v1_5 decrypt_data() ******");
     549
     550    decrypt_promise = crypto.subtle.verify({name: "RSASSA-PKCS1-v1_5"}, publicKeyRSASSAPKCS1v1_5, signature, convertStringToArrayBufferView(data));
     551
     552    decrypt_promise.then(
     553      function(result){
     554        console.log(result);//true or false
     555        document.getElementById("seccion3").innerHTML = result; 
     556      },
     557      function(e){
     558        console.log(e.message);
     559      }
     560    );
     561   document.getElementById("seccion4").innerHTML = "";   
     562  }
     563}
    511564
    512565  buttonsubmit3.addEventListener('click', function() {
Note: See TracChangeset for help on using the changeset viewer.