fix merge
This commit is contained in:
		
						commit
						d2c256d0bc
					
				
							
								
								
									
										49
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								README.md
									
									
									
									
									
								
							| @ -1,9 +1,46 @@ | |||||||
| # Bluecrypt™ Keypairs | # Bluecrypt™ [Keypairs](https://git.rootprojects.org/root/bluecrypt-keypairs.js) | A [Root](https://rootprojects.org) Project | ||||||
| 
 | 
 | ||||||
| A port of [keypairs.js](https://git.coolaj86.com/coolaj86/keypairs.js) to the browser. | A port of [keypairs.js](https://git.coolaj86.com/coolaj86/keypairs.js) to the browser. | ||||||
| 
 | 
 | ||||||
| * Keypairs | # Features (port in-progress) | ||||||
|   * Eckles (ECDSA) | 
 | ||||||
|   * Rasha (RSA) |   * [x] Keypair generation and encoding | ||||||
|   * X509 |     * [x] RSA | ||||||
|   * ASN1 |     * [x] ECDSA (P-256, P-384) | ||||||
|  |     * [x] JWK-to-PEM | ||||||
|  |     * [ ] JWK-to-SSH | ||||||
|  |     * [ ] PEM-to-JWK | ||||||
|  |     * [ ] SSH-to-JWK | ||||||
|  |     * [x] ASN1, X509, PEM, DER | ||||||
|  |   * [x] SHA256 JWK Thumbprints | ||||||
|  |   * [x] Sign JWS | ||||||
|  |   * [ ] Create JWTs | ||||||
|  |   * [ ] JWK fetching. See [Keyfetch.js](https://npmjs.com/packages/keyfetch/) | ||||||
|  |     * [ ] OIDC | ||||||
|  |     * [ ] Auth0 | ||||||
|  |   * [ ] CLI (ee [keypairs-cli](https://npmjs.com/packages/keypairs-cli/)) | ||||||
|  |   * [ ] Node.js (ee [keypairs.js](https://npmjs.com/packages/keypairs.js)) | ||||||
|  |   * [ ] [CSR.js](https://git.rootprojects.org/root/bluecrypt-csr.js) | ||||||
|  |   * [ ] [ACME.js](https://git.rootprojects.org/root/bluecrypt-acme.js) (Let's Encyrpt) | ||||||
|  | 
 | ||||||
|  | # Online Demos | ||||||
|  | 
 | ||||||
|  | * Bluecrypt Keypairs.js Demo <https://rootprojects.org/keypairs/> | ||||||
|  | 
 | ||||||
|  | # QuickStart | ||||||
|  | 
 | ||||||
|  | `bluecrypt-keypairs.js` | ||||||
|  | ```html | ||||||
|  | <script src="https://rootprojects.org/keypairs/bluecrypt-keypairs.js"></script> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | `bluecrypt-keypairs.min.js` | ||||||
|  | ```html | ||||||
|  | <script src="https://rootprojects.org/keypairs/bluecrypt-keypairs.min.js"></script> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | You can see `index.html` and `app.js` in the repo for full example usage. | ||||||
|  | 
 | ||||||
|  | # Documentation | ||||||
|  | 
 | ||||||
|  | See [keypairs.js](https://git.coolaj86.com/coolaj86/keypairs.js) for documentation. | ||||||
|  | |||||||
							
								
								
									
										7
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								app.js
									
									
									
									
									
								
							| @ -17,11 +17,6 @@ | |||||||
|     return Array.prototype.slice.call(document.querySelectorAll(sel)); |     return Array.prototype.slice.call(document.querySelectorAll(sel)); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   function checkTos(tos) { |  | ||||||
|     console.log("TODO checkbox for agree to terms"); |  | ||||||
|     return tos; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   function run() { |   function run() { | ||||||
|     console.log('hello'); |     console.log('hello'); | ||||||
| 
 | 
 | ||||||
| @ -113,8 +108,6 @@ | |||||||
|         $$('button').map(function ($el) { $el.disabled = false; }); |         $$('button').map(function ($el) { $el.disabled = false; }); | ||||||
|         $('.js-toc-jwk').hidden = false; |         $('.js-toc-jwk').hidden = false; | ||||||
| 
 | 
 | ||||||
|         $('.js-create-account').hidden = false; |  | ||||||
|         $('.js-create-csr').hidden = false; |  | ||||||
|       }); |       }); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										42
									
								
								bundle.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								bundle.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | # Development Version | ||||||
|  | cat > bluecrypt-keypairs.js << EOF | ||||||
|  | // Copyright 2015-2019 AJ ONeal. All rights reserved | ||||||
|  | /* This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||||||
|  | ; | ||||||
|  | EOF | ||||||
|  | cat ./lib/encoding.js \ | ||||||
|  |   ./lib/asn1-packer.js \ | ||||||
|  |   ./lib/x509.js \ | ||||||
|  |   ./lib/ecdsa.js \ | ||||||
|  |   ./lib/rsa.js \ | ||||||
|  |   ./lib/keypairs.js \ | ||||||
|  |   >> bluecrypt-keypairs.js | ||||||
|  | 
 | ||||||
|  | # Gzipped | ||||||
|  | cat > bluecrypt-keypairs.min.js << EOF | ||||||
|  | // Copyright 2015-2019 AJ ONeal. All rights reserved | ||||||
|  | /* This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||||||
|  | ; | ||||||
|  | EOF | ||||||
|  | uglifyjs bluecrypt-keypairs.js >> bluecrypt-keypairs.min.js | ||||||
|  | gzip -f bluecrypt-keypairs.min.js | ||||||
|  | 
 | ||||||
|  | # Minified Gzipped | ||||||
|  | cat > bluecrypt-keypairs.min.js << EOF | ||||||
|  | // Copyright 2015-2019 AJ ONeal. All rights reserved | ||||||
|  | /* This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||||||
|  | ; | ||||||
|  | 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/ | ||||||
							
								
								
									
										43
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								index.html
									
									
									
									
									
								
							| @ -15,12 +15,20 @@ | |||||||
|         white-space: -o-pre-wrap;   /* Opera 7 */ |         white-space: -o-pre-wrap;   /* Opera 7 */ | ||||||
|         word-wrap: break-word;      /* IE */ |         word-wrap: break-word;      /* IE */ | ||||||
|       } |       } | ||||||
|   </style> |     </style> | ||||||
| </head> |   </head> | ||||||
| <body> |   <body> | ||||||
|   <h1>BlueCrypt for the Browser</h1> |     <h1>@bluecrypt/keypairs: Universal keygen & signing for browsers</h1> | ||||||
|   <p>BlueCrypt is universal crypto for the browser. It's lightweight, fast, and based on native webcrypto. |     <p>Keypairs.js is <strong>easy-to-use browser crypto in kilobytes, not megabytes.</strong></p> | ||||||
|     This means it's easy-to-use crypto in kilobytes, not megabytes.</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> |   <h2>Keypair Generation</h2> | ||||||
|   <form class="js-keygen"> |   <form class="js-keygen"> | ||||||
| @ -109,12 +117,19 @@ | |||||||
|     <pre><code class="js-jwt" ></code></pre> |     <pre><code class="js-jwt" ></code></pre> | ||||||
|   </details> |   </details> | ||||||
| 
 | 
 | ||||||
|   <script src="./lib/bluecrypt-encoding.js"></script> |     <br> | ||||||
|   <script src="./lib/asn1-packer.js"></script> |     <p>Bluecrypt™ is a collection of lightweight, zero-dependency, libraries written in VanillaJS. | ||||||
|   <script src="./lib/x509.js"></script> |     They are fast, tiny, and secure, using the native features of modern browsers where possible.</p> | ||||||
|   <script src="./lib/ecdsa.js"></script> |     <br> | ||||||
|   <script src="./lib/rsa.js"></script> |     <footer>View (git) source | ||||||
|   <script src="./lib/keypairs.js"></script> |       <a href="https://git.rootprojects.org/root/bluecrypt-keypairs.js">@bluecrypt/keypairs</a></footer> | ||||||
|   <script src="./app.js"></script> | 
 | ||||||
| </body> |     <script src="./lib/bluecrypt-encoding.js"></script> | ||||||
|  |     <script src="./lib/asn1-packer.js"></script> | ||||||
|  |     <script src="./lib/x509.js"></script> | ||||||
|  |     <script src="./lib/ecdsa.js"></script> | ||||||
|  |     <script src="./lib/rsa.js"></script> | ||||||
|  |     <script src="./lib/keypairs.js"></script> | ||||||
|  |     <script src="./app.js"></script> | ||||||
|  |   </body> | ||||||
| </html> | </html> | ||||||
|  | |||||||
| @ -125,7 +125,7 @@ PEM.parseBlock = PEM.parseBlock || function (str) { | |||||||
|   var der = str.split(/\n/).filter(function (line) { |   var der = str.split(/\n/).filter(function (line) { | ||||||
|     return !/-----/.test(line); |     return !/-----/.test(line); | ||||||
|   }).join(''); |   }).join(''); | ||||||
|   return { der: Enc.base64ToBuf(der) }; |   return { bytes: Enc.base64ToBuf(der) }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| Enc.base64ToBuf = function (b64) { | Enc.base64ToBuf = function (b64) { | ||||||
|  | |||||||
| @ -66,8 +66,11 @@ Enc.numToHex = function (d) { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| Enc.bufToUrlBase64 = function (u8) { | Enc.bufToUrlBase64 = function (u8) { | ||||||
|   return Enc.bufToBase64(u8) |   return Enc.base64ToUrlBase64(Enc.bufToBase64(u8)); | ||||||
|     .replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); | }; | ||||||
|  | 
 | ||||||
|  | Enc.base64ToUrlBase64 = function (str) { | ||||||
|  |   return str.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| Enc.bufToBase64 = function (u8) { | Enc.bufToBase64 = function (u8) { | ||||||
| @ -186,10 +186,6 @@ Keypairs.signJws = function (opts) { | |||||||
|         , signature: Enc.bufToUrlBase64(buf) |         , signature: Enc.bufToUrlBase64(buf) | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         console.log('Signed Base64 Msg:'); |  | ||||||
|         console.log(JSON.stringify(signedMsg, null, 2)); |  | ||||||
| 
 |  | ||||||
|         console.log('msg:', msg); |  | ||||||
|         return signedMsg; |         return signedMsg; | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
| @ -219,10 +215,12 @@ Keypairs._sign = function (opts, payload) { | |||||||
|     ).then(function (signature) { |     ).then(function (signature) { | ||||||
|       signature = new Uint8Array(signature); // ArrayBuffer -> u8
 |       signature = new Uint8Array(signature); // ArrayBuffer -> u8
 | ||||||
|       // This will come back into play for CSRs, but not for JOSE
 |       // This will come back into play for CSRs, but not for JOSE
 | ||||||
|       if ('EC' === opts.jwk.kty && /x509/i.test(opts.format)) { |       if ('EC' === opts.jwk.kty && /x509|asn1/i.test(opts.format)) { | ||||||
|         signature = Keypairs._ecdsaJoseSigToAsn1Sig(signature); |         return Keypairs._ecdsaJoseSigToAsn1Sig(signature); | ||||||
|  |       } else { | ||||||
|  |         // jose/jws/jwt
 | ||||||
|  |         return signature; | ||||||
|       } |       } | ||||||
|       return signature; |  | ||||||
|     }); |     }); | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
| @ -261,7 +259,6 @@ Keypairs._import = function (opts) { | |||||||
|     opts.jwk.ext = true; |     opts.jwk.ext = true; | ||||||
|     opts.jwk.key_ops = ops; |     opts.jwk.key_ops = ops; | ||||||
| 
 | 
 | ||||||
|     console.log('jwk', opts.jwk); |  | ||||||
|     return window.crypto.subtle.importKey( |     return window.crypto.subtle.importKey( | ||||||
|       "jwk" |       "jwk" | ||||||
|     , opts.jwk |     , opts.jwk | ||||||
| @ -298,7 +295,7 @@ Keypairs._ecdsaJoseSigToAsn1Sig = function (bufsig) { | |||||||
|   if (len >= 0x80) { head.push(0x81); } |   if (len >= 0x80) { head.push(0x81); } | ||||||
|   head.push(len); |   head.push(len); | ||||||
| 
 | 
 | ||||||
|   return Uint8Array.from(head.concat([0x02, r.length], r, [0x02, s.byteLength], s)); |   return Uint8Array.from(head.concat([0x02, r.length], r, [0x02, s.length], s)); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| function setTime(time) { | function setTime(time) { | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								package.json
									
									
									
									
									
								
							| @ -1,13 +1,18 @@ | |||||||
| { | { | ||||||
|   "name": "bluecrypt-keypairs", |   "name": "@bluecrypt/keypairs", | ||||||
|   "version": "0.1.1", |   "version": "0.1.1", | ||||||
|   "description": "Zero-Dependency Native Browser support for ECDSA P-256 and P-384, and RSA 2048/3072/4096 written in VanillaJS", |   "description": "Zero-Dependency Native Browser support for ECDSA P-256 and P-384, and RSA 2048/3072/4096 written in VanillaJS", | ||||||
|  |   "homepage": "https://rootprojects.org/keypairs/", | ||||||
|  |   "files": [ | ||||||
|  |     "lib", | ||||||
|  |     "bluecrypt-keypairs.js", | ||||||
|  |     "bluecrypt-keypairs.min.js" | ||||||
|  |   ], | ||||||
|   "directories": { |   "directories": { | ||||||
|     "lib": "lib" |     "lib": "lib" | ||||||
|   }, |   }, | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "test": "node server.js", |     "test": "node test.js" | ||||||
|     "start": "node server.js" |  | ||||||
|   }, |   }, | ||||||
|   "repository": { |   "repository": { | ||||||
|     "type": "git", |     "type": "git", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user