Compare commits
	
		
			5 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 93e939e517 | |||
| e7f5376a45 | |||
| 5d920d108a | |||
| 8da6604f32 | |||
| ddc04a5492 | 
							
								
								
									
										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 | ||||
							
								
								
									
										66
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								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; | ||||
|       }); | ||||
| @ -106,12 +108,72 @@ | ||||
|         $$('button').map(function ($el) { $el.disabled = false; }); | ||||
|         $('.js-toc-jwk').hidden = false; | ||||
| 
 | ||||
|         $('.js-create-account').hidden = false; | ||||
|         $('.js-create-csr').hidden = false; | ||||
|       }); | ||||
|     }); | ||||
| 
 | ||||
|     $('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); | ||||
|  | ||||
| @ -25,7 +25,7 @@ cat > bluecrypt-keypairs.min.js << EOF | ||||
| ; | ||||
| EOF | ||||
| uglifyjs bluecrypt-keypairs.js >> bluecrypt-keypairs.min.js | ||||
| gzip bluecrypt-keypairs.min.js | ||||
| gzip -f bluecrypt-keypairs.min.js | ||||
| 
 | ||||
| # Minified Gzipped | ||||
| cat > bluecrypt-keypairs.min.js << EOF | ||||
| @ -37,5 +37,6 @@ cat > bluecrypt-keypairs.min.js << EOF | ||||
| EOF | ||||
| uglifyjs bluecrypt-keypairs.js >> bluecrypt-keypairs.min.js | ||||
| 
 | ||||
| rsync -av ./ root@beta.therootcompany.com:~/beta.therootcompany.com/keypairs/ | ||||
| rsync -av ./ root@beta.rootprojects.org:~/beta.rootprojects.org/keypairs/ | ||||
| rsync -av ./ ubuntu@rootprojects.org:/srv/www/rootprojects.org/keypairs/ | ||||
|  | ||||
							
								
								
									
										46
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								index.html
									
									
									
									
									
								
							| @ -1,4 +1,5 @@ | ||||
| <html> | ||||
| 
 | ||||
| <head> | ||||
|   <title>BlueCrypt</title> | ||||
|   <style> | ||||
| @ -17,9 +18,17 @@ | ||||
|     </style> | ||||
|   </head> | ||||
|   <body> | ||||
|     <h1>BlueCrypt for the Browser</h1> | ||||
|     <p>BlueCrypt is universal crypto for the browser. It's lightweight, fast, and based on native webcrypto. | ||||
|     This means it's easy-to-use crypto in kilobytes, not megabytes.</p> | ||||
|     <h1>@bluecrypt/keypairs: Universal keygen & signing for browsers</h1> | ||||
|     <p>Keypairs.js is <strong>easy-to-use browser crypto in kilobytes, not megabytes.</strong></p> | ||||
| 
 | ||||
|     <p>It's a modern alternative to larger, legacy libraries like PKI.js and rsasign, | ||||
|     with more universal support for keygen, signing, and verification (including PKI, X509, JOSE, JWS, and JWT) | ||||
|     at a fraction of the cost.</p> | ||||
| 
 | ||||
|     <p>This is intended to be explored with your JavaScript console open.</p> | ||||
|     <pre><code><script src="<a href="https://rootprojects.org/keypairs/bluecrypt-keypairs.js">https://rootprojects.org/keypairs/bluecrypt-keypairs.js</a>"></script></code></pre> | ||||
|     <pre><code><script src="<a href="https://rootprojects.org/keypairs/bluecrypt-keypairs.min.js">https://rootprojects.org/keypairs/bluecrypt-keypairs.min.js</a>"></script></code></pre> | ||||
|     <a href="https://git.rootprojects.org/root/bluecrypt-keypairs.js">Documentation</a> | ||||
| 
 | ||||
|   <h2>Keypair Generation</h2> | ||||
|   <form class="js-keygen"> | ||||
| @ -88,6 +97,37 @@ | ||||
|     <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> | ||||
|     <br> | ||||
|     <footer>View (git) source | ||||
|       <a href="https://git.rootprojects.org/root/bluecrypt-keypairs.js">@bluecrypt/keypairs</a></footer> | ||||
| 
 | ||||
|     <script src="./lib/bluecrypt-encoding.js"></script> | ||||
|     <script src="./lib/asn1-packer.js"></script> | ||||
|     <script src="./lib/x509.js"></script> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user