title: How to load a PKCS#12 Digital Certificate with Javascript WebCrypto API
body: <p>I'm trying to sign data using the WebCrypto API, but instead of creating a private/public  key and exporting it to pkcs#1 or 8, I would really like to use a user's PKCS#12 to sign data. I've read the W3C spec, but cannot make much of it and can't find any good material on how to do this. Right now I want to leave ActiveX and Java Applets aside. Is there a way to tweak the following:</p>
  
  <pre><code>var buffer = encode(prompt("Please enter your password"));
      //TODO:
      //implement a prompt for a pfx or cert
  
    return crypto.subtle.importKey("raw", buffer, "PBKDF2", false, usages);
      //TODO:
      //instead of importing it, ask for the certificate's pass to sign data
      //with crypto.subtle.sign
  </code></pre>
  
  <p>Any pointers?</p>
  
  <p><strong>UPDATE</strong>
  Here's the code I've been working</p>
  
  <pre><code>&lt;script src="forge.min.js"&gt;&lt;/script&gt;
  
  &lt;script&gt;
      var errorsReportedByVerifier;
      errorsReportedByVerifier = checkStorage() &amp;&amp; checkBrowserAPIs();
      if (!errorsReportedByVerifier){
          console.log("adding click event");
          document.getElementById('btnPfx').addEventListener('click', handlePFXFile, false);
          storeVariables();
          getVariables();
      }
  
  
      function handlePFXFile(evnt) {
          console.log("handling pfx")
          //alert(document.getElementById('pfx').value);
  
          //error happens in 1st line
          //error object does not accept property replace
          //forge.min.js Line 1, Column: 17823
          var p12Der = forge.util.decode64(document.getElementById('pfx').valueOf());
          //var pkcs12Asn1 = forge.asn1.fromDer(p12Der);
          //var pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, 'pss');
          console.log("pkcs12");
      }
  &lt;/script&gt;
  </code></pre>