Compare commits
	
		
			1 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 93e939e517 | 
							
								
								
									
										11
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
# editorconfig.org
 | 
			
		||||
root = true
 | 
			
		||||
 | 
			
		||||
[*]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
tab_width = 2
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
charset = utf-8
 | 
			
		||||
trim_trailing_whitespace = true
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
							
								
								
									
										64
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								app.js
									
									
									
									
									
								
							@ -43,6 +43,8 @@
 | 
			
		||||
      $('.js-jwk').hidden = true;
 | 
			
		||||
      $('.js-toc-der-public').hidden = true;
 | 
			
		||||
      $('.js-toc-der-private').hidden = true;
 | 
			
		||||
      $('.js-toc-jwk').hidden = true;
 | 
			
		||||
 | 
			
		||||
      $$('.js-toc-pem').forEach(function ($el) {
 | 
			
		||||
        $el.hidden = true;
 | 
			
		||||
      });
 | 
			
		||||
@ -109,7 +111,69 @@
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $('form.js-keysign').addEventListener('submit', function (ev) {
 | 
			
		||||
      ev.preventDefault();
 | 
			
		||||
      ev.stopPropagation();
 | 
			
		||||
      $('.js-pem-loading').hidden = false;
 | 
			
		||||
      $('.js-toc-jws').hidden = true;
 | 
			
		||||
      $('.js-toc-jwt').hidden = true;
 | 
			
		||||
      $$('input').map(function ($el) { $el.disabled = true; });
 | 
			
		||||
      $$('button').map(function ($el) { $el.disabled = true; });
 | 
			
		||||
 | 
			
		||||
      try {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        var opts = {
 | 
			
		||||
          jwk: JSON.parse($('textarea[name="jwk"]').value),
 | 
			
		||||
          claims: {
 | 
			
		||||
            exp: "1h",
 | 
			
		||||
            iss: document.getElementById(`-acmeDomains`).value
 | 
			
		||||
          }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        Keypairs.signJwt(opts).then(function (msg) {
 | 
			
		||||
          document.getElementById(`sign-error`).innerText = null;
 | 
			
		||||
          $('.js-jwt').innerText = msg;
 | 
			
		||||
          $('.js-toc-jwt').hidden = false;
 | 
			
		||||
          var msgArr = msg.split(".")
 | 
			
		||||
          var protected64 = msgArr[0]
 | 
			
		||||
          var payload64 = msgArr[1]
 | 
			
		||||
          var signature = msgArr[2]
 | 
			
		||||
          var signedMsg = {
 | 
			
		||||
            protected: protected64
 | 
			
		||||
            , payload: payload64
 | 
			
		||||
            , signature
 | 
			
		||||
          };
 | 
			
		||||
          $('.js-jws').innerText = JSON.stringify(signedMsg, null, 2);
 | 
			
		||||
          $('.js-toc-jws').hidden = false;
 | 
			
		||||
          $('.js-pem-loading').hidden = true;
 | 
			
		||||
          $$('input').map(function ($el) { $el.disabled = false; });
 | 
			
		||||
          $$('button').map(function ($el) { $el.disabled = false; });
 | 
			
		||||
        }).catch(function (error) {
 | 
			
		||||
          document.getElementById(`sign-error`).innerText = error.message
 | 
			
		||||
          $('.js-pem-loading').hidden = true;
 | 
			
		||||
          $$('input').map(function ($el) { $el.disabled = false; });
 | 
			
		||||
          $$('button').map(function ($el) { $el.disabled = false; });
 | 
			
		||||
        })
 | 
			
		||||
      } catch (error) {
 | 
			
		||||
        document.getElementById(`sign-error`).innerText = error.message
 | 
			
		||||
        $('.js-pem-loading').hidden = true;
 | 
			
		||||
        $$('input').map(function ($el) { $el.disabled = false; });
 | 
			
		||||
        $$('button').map(function ($el) { $el.disabled = false; });
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $('.js-generate').hidden = false;
 | 
			
		||||
    $('.js-sign').hidden = false;
 | 
			
		||||
    $('textarea[name="jwk"]').value = JSON.stringify({
 | 
			
		||||
      "crv": "P-256",
 | 
			
		||||
      "d": "LImWxqqTHbP3LHQfqscDSUzf_uNePGqf9U6ETEcO5Ho",
 | 
			
		||||
      "kty": "EC",
 | 
			
		||||
      "x": "vdjQ3T6VBX82LIKDzepYgRsz3HgRwp83yPuonu6vqos",
 | 
			
		||||
      "y": "IUkEXtAMnppnV1A19sE2bJhUo4WPbq6EYgWxma4oGyg",
 | 
			
		||||
      "kid": "MnfJYyS9W5gUjrJLdn8ePMzik8ZJz2qc-VZmKOs_oCw"
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  window.addEventListener('load', run);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								index.html
									
									
									
									
									
								
							@ -1,5 +1,6 @@
 | 
			
		||||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
  <title>BlueCrypt</title>
 | 
			
		||||
  <style>
 | 
			
		||||
    textarea {
 | 
			
		||||
@ -96,6 +97,30 @@
 | 
			
		||||
    <pre><code  class="js-input-pem-spki-public" ></code></pre>
 | 
			
		||||
  </details>
 | 
			
		||||
 | 
			
		||||
  <h2>Signing</h2>
 | 
			
		||||
  <div class="errors" id="sign-error"></div>
 | 
			
		||||
  <form class="js-keysign">
 | 
			
		||||
    <div>
 | 
			
		||||
      <label for="-acmeDomains">Domains:</label>
 | 
			
		||||
      <input class="js-domains" type="text" id="-acmeDomains" value="example.com www.example.com">
 | 
			
		||||
    </div>
 | 
			
		||||
    <div>
 | 
			
		||||
      <label for="jwk">JWK:</label>
 | 
			
		||||
      <br>
 | 
			
		||||
      <textarea id="jwk" name="jwk"></textarea>
 | 
			
		||||
    </div>
 | 
			
		||||
    <button class="js-sign" hidden>Sign</button>
 | 
			
		||||
  </form>
 | 
			
		||||
  <div class="js-pem-loading" hidden>Loading</div>
 | 
			
		||||
  <details class="js-toc-jws" hidden>
 | 
			
		||||
    <summary>JWS </summary>
 | 
			
		||||
    <pre><code class="js-jws"></code></pre>
 | 
			
		||||
  </details>
 | 
			
		||||
  <details class="js-toc-jwt" hidden>
 | 
			
		||||
    <summary>JWT </summary>
 | 
			
		||||
    <pre><code class="js-jwt"></code></pre>
 | 
			
		||||
  </details>
 | 
			
		||||
 | 
			
		||||
    <br>
 | 
			
		||||
    <p>Bluecrypt™ is a collection of lightweight, zero-dependency, libraries written in VanillaJS.
 | 
			
		||||
    They are fast, tiny, and secure, using the native features of modern browsers where possible.</p>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user