forked from root/acme.js
		
	make Prettier
This commit is contained in:
		
							parent
							
								
									8e2763ecd6
								
							
						
					
					
						commit
						0d26a42bc7
					
				
							
								
								
									
										196
									
								
								examples/app.js
									
									
									
									
									
								
							
							
						
						
									
										196
									
								
								examples/app.js
									
									
									
									
									
								
							@ -33,7 +33,7 @@
 | 
				
			|||||||
			$el.addEventListener('change', function(ev) {
 | 
								$el.addEventListener('change', function(ev) {
 | 
				
			||||||
				console.log(this);
 | 
									console.log(this);
 | 
				
			||||||
				console.log(ev);
 | 
									console.log(ev);
 | 
				
			||||||
        if ("RSA" === ev.target.value) {
 | 
									if ('RSA' === ev.target.value) {
 | 
				
			||||||
					$('.js-rsa-opts').hidden = false;
 | 
										$('.js-rsa-opts').hidden = false;
 | 
				
			||||||
					$('.js-ec-opts').hidden = true;
 | 
										$('.js-ec-opts').hidden = true;
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
@ -54,53 +54,75 @@
 | 
				
			|||||||
			$$('.js-toc-pem').forEach(function($el) {
 | 
								$$('.js-toc-pem').forEach(function($el) {
 | 
				
			||||||
				$el.hidden = true;
 | 
									$el.hidden = true;
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
      $$('input').map(function ($el) { $el.disabled = true; });
 | 
								$$('input').map(function($el) {
 | 
				
			||||||
      $$('button').map(function ($el) { $el.disabled = true; });
 | 
									$el.disabled = true;
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
								$$('button').map(function($el) {
 | 
				
			||||||
 | 
									$el.disabled = true;
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
			var opts = {
 | 
								var opts = {
 | 
				
			||||||
        kty: $('input[name="kty"]:checked').value
 | 
									kty: $('input[name="kty"]:checked').value,
 | 
				
			||||||
      , namedCurve: $('input[name="ec-crv"]:checked').value
 | 
									namedCurve: $('input[name="ec-crv"]:checked').value,
 | 
				
			||||||
      , modulusLength: $('input[name="rsa-len"]:checked').value
 | 
									modulusLength: $('input[name="rsa-len"]:checked').value
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			var then = Date.now();
 | 
								var then = Date.now();
 | 
				
			||||||
			console.log('opts', opts);
 | 
								console.log('opts', opts);
 | 
				
			||||||
			Keypairs.generate(opts).then(function(results) {
 | 
								Keypairs.generate(opts).then(function(results) {
 | 
				
			||||||
        console.log("Key generation time:", (Date.now() - then) + "ms");
 | 
									console.log('Key generation time:', Date.now() - then + 'ms');
 | 
				
			||||||
				var pubDer;
 | 
									var pubDer;
 | 
				
			||||||
				var privDer;
 | 
									var privDer;
 | 
				
			||||||
				if (/EC/i.test(opts.kty)) {
 | 
									if (/EC/i.test(opts.kty)) {
 | 
				
			||||||
					privDer = x509.packPkcs8(results.private);
 | 
										privDer = x509.packPkcs8(results.private);
 | 
				
			||||||
					pubDer = x509.packSpki(results.public);
 | 
										pubDer = x509.packSpki(results.public);
 | 
				
			||||||
          Eckles.export({ jwk: results.private, format: 'sec1' }).then(function (pem) {
 | 
										Eckles.export({
 | 
				
			||||||
 | 
											jwk: results.private,
 | 
				
			||||||
 | 
											format: 'sec1'
 | 
				
			||||||
 | 
										}).then(function(pem) {
 | 
				
			||||||
						$('.js-input-pem-sec1-private').innerText = pem;
 | 
											$('.js-input-pem-sec1-private').innerText = pem;
 | 
				
			||||||
						$('.js-toc-pem-sec1-private').hidden = false;
 | 
											$('.js-toc-pem-sec1-private').hidden = false;
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
          Eckles.export({ jwk: results.private, format: 'pkcs8' }).then(function (pem) {
 | 
										Eckles.export({
 | 
				
			||||||
 | 
											jwk: results.private,
 | 
				
			||||||
 | 
											format: 'pkcs8'
 | 
				
			||||||
 | 
										}).then(function(pem) {
 | 
				
			||||||
						$('.js-input-pem-pkcs8-private').innerText = pem;
 | 
											$('.js-input-pem-pkcs8-private').innerText = pem;
 | 
				
			||||||
						$('.js-toc-pem-pkcs8-private').hidden = false;
 | 
											$('.js-toc-pem-pkcs8-private').hidden = false;
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
          Eckles.export({ jwk: results.public, public: true }).then(function (pem) {
 | 
										Eckles.export({ jwk: results.public, public: true }).then(
 | 
				
			||||||
 | 
											function(pem) {
 | 
				
			||||||
							$('.js-input-pem-spki-public').innerText = pem;
 | 
												$('.js-input-pem-spki-public').innerText = pem;
 | 
				
			||||||
							$('.js-toc-pem-spki-public').hidden = false;
 | 
												$('.js-toc-pem-spki-public').hidden = false;
 | 
				
			||||||
          });
 | 
											}
 | 
				
			||||||
 | 
										);
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					privDer = x509.packPkcs8(results.private);
 | 
										privDer = x509.packPkcs8(results.private);
 | 
				
			||||||
					pubDer = x509.packSpki(results.public);
 | 
										pubDer = x509.packSpki(results.public);
 | 
				
			||||||
          Rasha.export({ jwk: results.private, format: 'pkcs1' }).then(function (pem) {
 | 
										Rasha.export({
 | 
				
			||||||
 | 
											jwk: results.private,
 | 
				
			||||||
 | 
											format: 'pkcs1'
 | 
				
			||||||
 | 
										}).then(function(pem) {
 | 
				
			||||||
						$('.js-input-pem-pkcs1-private').innerText = pem;
 | 
											$('.js-input-pem-pkcs1-private').innerText = pem;
 | 
				
			||||||
						$('.js-toc-pem-pkcs1-private').hidden = false;
 | 
											$('.js-toc-pem-pkcs1-private').hidden = false;
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
          Rasha.export({ jwk: results.private, format: 'pkcs8' }).then(function (pem) {
 | 
										Rasha.export({
 | 
				
			||||||
 | 
											jwk: results.private,
 | 
				
			||||||
 | 
											format: 'pkcs8'
 | 
				
			||||||
 | 
										}).then(function(pem) {
 | 
				
			||||||
						$('.js-input-pem-pkcs8-private').innerText = pem;
 | 
											$('.js-input-pem-pkcs8-private').innerText = pem;
 | 
				
			||||||
						$('.js-toc-pem-pkcs8-private').hidden = false;
 | 
											$('.js-toc-pem-pkcs8-private').hidden = false;
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
          Rasha.export({ jwk: results.public, format: 'pkcs1' }).then(function (pem) {
 | 
										Rasha.export({ jwk: results.public, format: 'pkcs1' }).then(
 | 
				
			||||||
 | 
											function(pem) {
 | 
				
			||||||
							$('.js-input-pem-pkcs1-public').innerText = pem;
 | 
												$('.js-input-pem-pkcs1-public').innerText = pem;
 | 
				
			||||||
							$('.js-toc-pem-pkcs1-public').hidden = false;
 | 
												$('.js-toc-pem-pkcs1-public').hidden = false;
 | 
				
			||||||
          });
 | 
											}
 | 
				
			||||||
          Rasha.export({ jwk: results.public, format: 'spki' }).then(function (pem) {
 | 
										);
 | 
				
			||||||
 | 
										Rasha.export({ jwk: results.public, format: 'spki' }).then(
 | 
				
			||||||
 | 
											function(pem) {
 | 
				
			||||||
							$('.js-input-pem-spki-public').innerText = pem;
 | 
												$('.js-input-pem-spki-public').innerText = pem;
 | 
				
			||||||
							$('.js-toc-pem-spki-public').hidden = false;
 | 
												$('.js-toc-pem-spki-public').hidden = false;
 | 
				
			||||||
          });
 | 
											}
 | 
				
			||||||
 | 
										);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				$('.js-der-public').innerText = pubDer;
 | 
									$('.js-der-public').innerText = pubDer;
 | 
				
			||||||
@ -110,8 +132,12 @@
 | 
				
			|||||||
				$('.js-jwk').innerText = JSON.stringify(results, null, 2);
 | 
									$('.js-jwk').innerText = JSON.stringify(results, null, 2);
 | 
				
			||||||
				$('.js-loading').hidden = true;
 | 
									$('.js-loading').hidden = true;
 | 
				
			||||||
				$('.js-jwk').hidden = false;
 | 
									$('.js-jwk').hidden = false;
 | 
				
			||||||
        $$('input').map(function ($el) { $el.disabled = false; });
 | 
									$$('input').map(function($el) {
 | 
				
			||||||
        $$('button').map(function ($el) { $el.disabled = false; });
 | 
										$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-account').hidden = false;
 | 
				
			||||||
@ -124,30 +150,39 @@
 | 
				
			|||||||
			ev.stopPropagation();
 | 
								ev.stopPropagation();
 | 
				
			||||||
			$('.js-loading').hidden = false;
 | 
								$('.js-loading').hidden = false;
 | 
				
			||||||
			var acme = ACME.create({
 | 
								var acme = ACME.create({
 | 
				
			||||||
        Keypairs: Keypairs
 | 
									Keypairs: Keypairs,
 | 
				
			||||||
      , CSR: CSR
 | 
									CSR: CSR
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
      acme.init('https://acme-staging-v02.api.letsencrypt.org/directory').then(function (result) {
 | 
								acme.init(
 | 
				
			||||||
 | 
									'https://acme-staging-v02.api.letsencrypt.org/directory'
 | 
				
			||||||
 | 
								).then(function(result) {
 | 
				
			||||||
				console.log('acme result', result);
 | 
									console.log('acme result', result);
 | 
				
			||||||
				var privJwk = JSON.parse($('.js-jwk').innerText).private;
 | 
									var privJwk = JSON.parse($('.js-jwk').innerText).private;
 | 
				
			||||||
				var email = $('.js-email').value;
 | 
									var email = $('.js-email').value;
 | 
				
			||||||
        return acme.accounts.create({
 | 
									return acme.accounts
 | 
				
			||||||
          email: email
 | 
										.create({
 | 
				
			||||||
        , agreeToTerms: checkTos
 | 
											email: email,
 | 
				
			||||||
        , accountKeypair: { privateKeyJwk: privJwk }
 | 
											agreeToTerms: checkTos,
 | 
				
			||||||
        }).then(function (account) {
 | 
											accountKeypair: { privateKeyJwk: privJwk }
 | 
				
			||||||
          console.log("account created result:", account);
 | 
										})
 | 
				
			||||||
 | 
										.then(function(account) {
 | 
				
			||||||
 | 
											console.log('account created result:', account);
 | 
				
			||||||
						accountStuff.account = account;
 | 
											accountStuff.account = account;
 | 
				
			||||||
						accountStuff.privateJwk = privJwk;
 | 
											accountStuff.privateJwk = privJwk;
 | 
				
			||||||
						accountStuff.email = email;
 | 
											accountStuff.email = email;
 | 
				
			||||||
						accountStuff.acme = acme;
 | 
											accountStuff.acme = acme;
 | 
				
			||||||
						$('.js-create-order').hidden = false;
 | 
											$('.js-create-order').hidden = false;
 | 
				
			||||||
						$('.js-toc-acme-account-response').hidden = false;
 | 
											$('.js-toc-acme-account-response').hidden = false;
 | 
				
			||||||
          $('.js-acme-account-response').innerText = JSON.stringify(account, null, 2);
 | 
											$(
 | 
				
			||||||
        }).catch(function (err) {
 | 
												'.js-acme-account-response'
 | 
				
			||||||
          console.error("A bad thing happened:");
 | 
											).innerText = JSON.stringify(account, null, 2);
 | 
				
			||||||
 | 
										})
 | 
				
			||||||
 | 
										.catch(function(err) {
 | 
				
			||||||
 | 
											console.error('A bad thing happened:');
 | 
				
			||||||
						console.error(err);
 | 
											console.error(err);
 | 
				
			||||||
          window.alert(err.message || JSON.stringify(err, null, 2));
 | 
											window.alert(
 | 
				
			||||||
 | 
												err.message || JSON.stringify(err, null, 2)
 | 
				
			||||||
 | 
											);
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
@ -166,71 +201,100 @@
 | 
				
			|||||||
			var email = accountStuff.email;
 | 
								var email = accountStuff.email;
 | 
				
			||||||
			var acme = accountStuff.acme;
 | 
								var acme = accountStuff.acme;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var domains = ($('.js-domains').value || 'example.com').split(
 | 
				
			||||||
      var domains = ($('.js-domains').value||'example.com').split(/[, ]+/g);
 | 
									/[, ]+/g
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
			return getDomainPrivkey().then(function(domainPrivJwk) {
 | 
								return getDomainPrivkey().then(function(domainPrivJwk) {
 | 
				
			||||||
				console.log('Has CSR already?');
 | 
									console.log('Has CSR already?');
 | 
				
			||||||
				console.log(accountStuff.csr);
 | 
									console.log(accountStuff.csr);
 | 
				
			||||||
        return acme.certificates.create({
 | 
									return acme.certificates
 | 
				
			||||||
          accountKeypair: { privateKeyJwk: privJwk }
 | 
										.create({
 | 
				
			||||||
        , account: account
 | 
											accountKeypair: { privateKeyJwk: privJwk },
 | 
				
			||||||
        , serverKeypair: { privateKeyJwk: domainPrivJwk }
 | 
											account: account,
 | 
				
			||||||
        , csr: accountStuff.csr
 | 
											serverKeypair: { privateKeyJwk: domainPrivJwk },
 | 
				
			||||||
        , domains: domains
 | 
											csr: accountStuff.csr,
 | 
				
			||||||
        , skipDryRun: $('input[name="skip-dryrun"]:checked') && true
 | 
											domains: domains,
 | 
				
			||||||
        , agreeToTerms: checkTos
 | 
											skipDryRun:
 | 
				
			||||||
        , challenges: {
 | 
												$('input[name="skip-dryrun"]:checked') && true,
 | 
				
			||||||
 | 
											agreeToTerms: checkTos,
 | 
				
			||||||
 | 
											challenges: {
 | 
				
			||||||
							'dns-01': {
 | 
												'dns-01': {
 | 
				
			||||||
								set: function(opts) {
 | 
													set: function(opts) {
 | 
				
			||||||
									console.info('dns-01 set challenge:');
 | 
														console.info('dns-01 set challenge:');
 | 
				
			||||||
									console.info('TXT', opts.dnsHost);
 | 
														console.info('TXT', opts.dnsHost);
 | 
				
			||||||
									console.info(opts.dnsAuthorization);
 | 
														console.info(opts.dnsAuthorization);
 | 
				
			||||||
									return new Promise(function(resolve) {
 | 
														return new Promise(function(resolve) {
 | 
				
			||||||
                  while (!window.confirm("Did you set the challenge?")) {}
 | 
															while (
 | 
				
			||||||
 | 
																!window.confirm(
 | 
				
			||||||
 | 
																	'Did you set the challenge?'
 | 
				
			||||||
 | 
																)
 | 
				
			||||||
 | 
															) {}
 | 
				
			||||||
										resolve();
 | 
															resolve();
 | 
				
			||||||
									});
 | 
														});
 | 
				
			||||||
              }
 | 
													},
 | 
				
			||||||
            , remove: function (opts) {
 | 
													remove: function(opts) {
 | 
				
			||||||
									console.log('dns-01 remove challenge:');
 | 
														console.log('dns-01 remove challenge:');
 | 
				
			||||||
									console.info('TXT', opts.dnsHost);
 | 
														console.info('TXT', opts.dnsHost);
 | 
				
			||||||
									console.info(opts.dnsAuthorization);
 | 
														console.info(opts.dnsAuthorization);
 | 
				
			||||||
									return new Promise(function(resolve) {
 | 
														return new Promise(function(resolve) {
 | 
				
			||||||
                  while (!window.confirm("Did you delete the challenge?")) {}
 | 
															while (
 | 
				
			||||||
 | 
																!window.confirm(
 | 
				
			||||||
 | 
																	'Did you delete the challenge?'
 | 
				
			||||||
 | 
																)
 | 
				
			||||||
 | 
															) {}
 | 
				
			||||||
										resolve();
 | 
															resolve();
 | 
				
			||||||
									});
 | 
														});
 | 
				
			||||||
								}
 | 
													}
 | 
				
			||||||
            }
 | 
												},
 | 
				
			||||||
          , 'http-01': {
 | 
												'http-01': {
 | 
				
			||||||
								set: function(opts) {
 | 
													set: function(opts) {
 | 
				
			||||||
									console.info('http-01 set challenge:');
 | 
														console.info('http-01 set challenge:');
 | 
				
			||||||
									console.info(opts.challengeUrl);
 | 
														console.info(opts.challengeUrl);
 | 
				
			||||||
									console.info(opts.keyAuthorization);
 | 
														console.info(opts.keyAuthorization);
 | 
				
			||||||
									return new Promise(function(resolve) {
 | 
														return new Promise(function(resolve) {
 | 
				
			||||||
                  while (!window.confirm("Did you set the challenge?")) {}
 | 
															while (
 | 
				
			||||||
 | 
																!window.confirm(
 | 
				
			||||||
 | 
																	'Did you set the challenge?'
 | 
				
			||||||
 | 
																)
 | 
				
			||||||
 | 
															) {}
 | 
				
			||||||
										resolve();
 | 
															resolve();
 | 
				
			||||||
									});
 | 
														});
 | 
				
			||||||
              }
 | 
													},
 | 
				
			||||||
            , remove: function (opts) {
 | 
													remove: function(opts) {
 | 
				
			||||||
									console.log('http-01 remove challenge:');
 | 
														console.log('http-01 remove challenge:');
 | 
				
			||||||
									console.info(opts.challengeUrl);
 | 
														console.info(opts.challengeUrl);
 | 
				
			||||||
									console.info(opts.keyAuthorization);
 | 
														console.info(opts.keyAuthorization);
 | 
				
			||||||
									return new Promise(function(resolve) {
 | 
														return new Promise(function(resolve) {
 | 
				
			||||||
                  while (!window.confirm("Did you delete the challenge?")) {}
 | 
															while (
 | 
				
			||||||
 | 
																!window.confirm(
 | 
				
			||||||
 | 
																	'Did you delete the challenge?'
 | 
				
			||||||
 | 
																)
 | 
				
			||||||
 | 
															) {}
 | 
				
			||||||
										resolve();
 | 
															resolve();
 | 
				
			||||||
									});
 | 
														});
 | 
				
			||||||
								}
 | 
													}
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
          }
 | 
											},
 | 
				
			||||||
        , challengeTypes: [$('input[name="acme-challenge-type"]:checked').value]
 | 
											challengeTypes: [
 | 
				
			||||||
        }).then(function (results) {
 | 
												$('input[name="acme-challenge-type"]:checked').value
 | 
				
			||||||
 | 
											]
 | 
				
			||||||
 | 
										})
 | 
				
			||||||
 | 
										.then(function(results) {
 | 
				
			||||||
						console.log('Got Certificates:');
 | 
											console.log('Got Certificates:');
 | 
				
			||||||
						console.log(results);
 | 
											console.log(results);
 | 
				
			||||||
						$('.js-toc-acme-order-response').hidden = false;
 | 
											$('.js-toc-acme-order-response').hidden = false;
 | 
				
			||||||
          $('.js-acme-order-response').innerText = JSON.stringify(results, null, 2);
 | 
											$('.js-acme-order-response').innerText = JSON.stringify(
 | 
				
			||||||
        }).catch(function (err) {
 | 
												results,
 | 
				
			||||||
          console.error("challenge failed:");
 | 
												null,
 | 
				
			||||||
 | 
												2
 | 
				
			||||||
 | 
											);
 | 
				
			||||||
 | 
										})
 | 
				
			||||||
 | 
										.catch(function(err) {
 | 
				
			||||||
 | 
											console.error('challenge failed:');
 | 
				
			||||||
						console.error(err);
 | 
											console.error(err);
 | 
				
			||||||
          window.alert("failed! " + err.message || JSON.stringify(err));
 | 
											window.alert(
 | 
				
			||||||
 | 
												'failed! ' + err.message || JSON.stringify(err)
 | 
				
			||||||
 | 
											);
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
@ -239,11 +303,13 @@
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function getDomainPrivkey() {
 | 
						function getDomainPrivkey() {
 | 
				
			||||||
    if (accountStuff.domainPrivateJwk) { return Promise.resolve(accountStuff.domainPrivateJwk); }
 | 
							if (accountStuff.domainPrivateJwk) {
 | 
				
			||||||
 | 
								return Promise.resolve(accountStuff.domainPrivateJwk);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return Keypairs.generate({
 | 
							return Keypairs.generate({
 | 
				
			||||||
      kty: $('input[name="kty"]:checked').value
 | 
								kty: $('input[name="kty"]:checked').value,
 | 
				
			||||||
    , namedCurve: $('input[name="ec-crv"]:checked').value
 | 
								namedCurve: $('input[name="ec-crv"]:checked').value,
 | 
				
			||||||
    , modulusLength: $('input[name="rsa-len"]:checked').value
 | 
								modulusLength: $('input[name="rsa-len"]:checked').value
 | 
				
			||||||
		}).then(function(pair) {
 | 
							}).then(function(pair) {
 | 
				
			||||||
			console.log('domain keypair:', pair);
 | 
								console.log('domain keypair:', pair);
 | 
				
			||||||
			accountStuff.domainPrivateJwk = pair.private;
 | 
								accountStuff.domainPrivateJwk = pair.private;
 | 
				
			||||||
@ -271,4 +337,4 @@
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	window.addEventListener('load', run);
 | 
						window.addEventListener('load', run);
 | 
				
			||||||
}());
 | 
					})();
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										6
									
								
								examples/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								examples/example.env
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					ENV=DEV
 | 
				
			||||||
 | 
					SUBSCRIBER_EMAIL=letsencrypt+staging@example.com
 | 
				
			||||||
 | 
					BASE_DOMAIN=test.example.com
 | 
				
			||||||
 | 
					CHALLENGE_TYPE=dns-01
 | 
				
			||||||
 | 
					CHALLENGE_PLUGIN=digitalocean
 | 
				
			||||||
 | 
					CHALLENGE_OPTIONS='{"token":"xxxxxxxxxxxx"}'
 | 
				
			||||||
@ -1,13 +1,15 @@
 | 
				
			|||||||
<html>
 | 
					<html>
 | 
				
			||||||
	<head>
 | 
						<head>
 | 
				
			||||||
		<title>Bluecrypt ACME - A Root Project</title>
 | 
							<title>Bluecrypt ACME - A Root Project</title>
 | 
				
			||||||
 | 
							<meta charset="UTF-8" />
 | 
				
			||||||
		<style>
 | 
							<style>
 | 
				
			||||||
			textarea {
 | 
								textarea {
 | 
				
			||||||
				width: 42em;
 | 
									width: 42em;
 | 
				
			||||||
				height: 10em;
 | 
									height: 10em;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			/* need to word wrap the binary no space der */
 | 
								/* need to word wrap the binary no space der */
 | 
				
			||||||
      .js-der-public, .js-der-private{
 | 
								.js-der-public,
 | 
				
			||||||
 | 
								.js-der-private {
 | 
				
			||||||
				white-space: pre-wrap; /* CSS3 */
 | 
									white-space: pre-wrap; /* CSS3 */
 | 
				
			||||||
				white-space: -moz-pre-wrap; /* Firefox */
 | 
									white-space: -moz-pre-wrap; /* Firefox */
 | 
				
			||||||
				white-space: -pre-wrap; /* Opera <7 */
 | 
									white-space: -pre-wrap; /* Opera <7 */
 | 
				
			||||||
@ -17,41 +19,77 @@
 | 
				
			|||||||
		</style>
 | 
							</style>
 | 
				
			||||||
	</head>
 | 
						</head>
 | 
				
			||||||
	<body>
 | 
						<body>
 | 
				
			||||||
    <h1>@bluecrypt/acme: Let's Encrypt for the Browser</h1>
 | 
							<h1>
 | 
				
			||||||
 | 
								@bluecrypt/acme: Let's Encrypt for the Browser
 | 
				
			||||||
 | 
							</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <p>This is intended to be explored with your JavaScript console open.</p>
 | 
							<p>
 | 
				
			||||||
 | 
								This is intended to be explored with your JavaScript console open.
 | 
				
			||||||
 | 
							</p>
 | 
				
			||||||
		<pre><code><script src="<a href="https://rootprojects.org/acme/bluecrypt-acme.js">https://rootprojects.org/acme/bluecrypt-acme.js</a>"></script></code></pre>
 | 
							<pre><code><script src="<a href="https://rootprojects.org/acme/bluecrypt-acme.js">https://rootprojects.org/acme/bluecrypt-acme.js</a>"></script></code></pre>
 | 
				
			||||||
		<pre><code><script src="<a href="https://rootprojects.org/acme/bluecrypt-acme.min.js">https://rootprojects.org/acme/bluecrypt-acme.min.js</a>"></script></code></pre>
 | 
							<pre><code><script src="<a href="https://rootprojects.org/acme/bluecrypt-acme.min.js">https://rootprojects.org/acme/bluecrypt-acme.min.js</a>"></script></code></pre>
 | 
				
			||||||
    <a href="https://git.rootprojects.org/root/bluecrypt-acme.js">Documentation</a>
 | 
							<a href="https://git.rootprojects.org/root/bluecrypt-acme.js"
 | 
				
			||||||
 | 
								>Documentation</a
 | 
				
			||||||
 | 
							>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<h2>1. Keypair Generation</h2>
 | 
							<h2>1. Keypair Generation</h2>
 | 
				
			||||||
		<form class="js-keygen">
 | 
							<form class="js-keygen">
 | 
				
			||||||
			<p>Key Type:</p>
 | 
								<p>Key Type:</p>
 | 
				
			||||||
			<div>
 | 
								<div>
 | 
				
			||||||
        <input type="radio" id="-ktyEC"
 | 
									<input type="radio" id="-ktyEC" name="kty" value="EC" checked />
 | 
				
			||||||
         name="kty" value="EC" checked>
 | 
					 | 
				
			||||||
				<label for="-ktyEC">ECDSA</label>
 | 
									<label for="-ktyEC">ECDSA</label>
 | 
				
			||||||
        <input type="radio" id="-ktyRSA"
 | 
									<input type="radio" id="-ktyRSA" name="kty" value="RSA" />
 | 
				
			||||||
         name="kty" value="RSA">
 | 
					 | 
				
			||||||
				<label for="-ktyRSA">RSA</label>
 | 
									<label for="-ktyRSA">RSA</label>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<div class="js-ec-opts">
 | 
								<div class="js-ec-opts">
 | 
				
			||||||
				<p>EC Options:</p>
 | 
									<p>EC Options:</p>
 | 
				
			||||||
        <label for="-crv2"><input type="radio" id="-crv2"
 | 
									<label for="-crv2"
 | 
				
			||||||
         name="ec-crv" value="P-256" checked>P-256</label>
 | 
										><input
 | 
				
			||||||
        <label for="-crv3"><input type="radio" id="-crv3"
 | 
											type="radio"
 | 
				
			||||||
         name="ec-crv" value="P-384">P-384</label>
 | 
											id="-crv2"
 | 
				
			||||||
 | 
											name="ec-crv"
 | 
				
			||||||
 | 
											value="P-256"
 | 
				
			||||||
 | 
											checked
 | 
				
			||||||
 | 
										/>P-256</label
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
									<label for="-crv3"
 | 
				
			||||||
 | 
										><input
 | 
				
			||||||
 | 
											type="radio"
 | 
				
			||||||
 | 
											id="-crv3"
 | 
				
			||||||
 | 
											name="ec-crv"
 | 
				
			||||||
 | 
											value="P-384"
 | 
				
			||||||
 | 
										/>P-384</label
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
				<!-- label for="-crv5"><input type="radio" id="-crv5"
 | 
									<!-- label for="-crv5"><input type="radio" id="-crv5"
 | 
				
			||||||
         name="ec-crv" value="P-521">P-521</label -->
 | 
					         name="ec-crv" value="P-521">P-521</label -->
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<div class="js-rsa-opts" hidden>
 | 
								<div class="js-rsa-opts" hidden>
 | 
				
			||||||
				<p>RSA Options:</p>
 | 
									<p>RSA Options:</p>
 | 
				
			||||||
        <label for="-modlen2"><input type="radio" id="-modlen2"
 | 
									<label for="-modlen2"
 | 
				
			||||||
         name="rsa-len" value="2048" checked>2048</label>
 | 
										><input
 | 
				
			||||||
        <label for="-modlen3"><input type="radio" id="-modlen3"
 | 
											type="radio"
 | 
				
			||||||
         name="rsa-len" value="3072">3072</label>
 | 
											id="-modlen2"
 | 
				
			||||||
        <label for="-modlen5"><input type="radio" id="-modlen5"
 | 
											name="rsa-len"
 | 
				
			||||||
         name="rsa-len" value="4096">4096</label>
 | 
											value="2048"
 | 
				
			||||||
 | 
											checked
 | 
				
			||||||
 | 
										/>2048</label
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
									<label for="-modlen3"
 | 
				
			||||||
 | 
										><input
 | 
				
			||||||
 | 
											type="radio"
 | 
				
			||||||
 | 
											id="-modlen3"
 | 
				
			||||||
 | 
											name="rsa-len"
 | 
				
			||||||
 | 
											value="3072"
 | 
				
			||||||
 | 
										/>3072</label
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
									<label for="-modlen5"
 | 
				
			||||||
 | 
										><input
 | 
				
			||||||
 | 
											type="radio"
 | 
				
			||||||
 | 
											id="-modlen5"
 | 
				
			||||||
 | 
											name="rsa-len"
 | 
				
			||||||
 | 
											value="4096"
 | 
				
			||||||
 | 
										/>4096</label
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<button class="js-generate" hidden>Generate</button>
 | 
								<button class="js-generate" hidden>Generate</button>
 | 
				
			||||||
		</form>
 | 
							</form>
 | 
				
			||||||
@ -59,33 +97,72 @@
 | 
				
			|||||||
		<h2>2. ACME Account</h2>
 | 
							<h2>2. ACME Account</h2>
 | 
				
			||||||
		<form class="js-acme-account">
 | 
							<form class="js-acme-account">
 | 
				
			||||||
			<label for="-acmeEmail">Email:</label>
 | 
								<label for="-acmeEmail">Email:</label>
 | 
				
			||||||
      <input class="js-email" type="email" id="-acmeEmail" value="john.doe@gmail.com">
 | 
								<input
 | 
				
			||||||
      <br>
 | 
									class="js-email"
 | 
				
			||||||
      <label for="-acmeTos"><input class="js-tos" name="tos" type="checkbox" id="-acmeTos" checked>
 | 
									type="email"
 | 
				
			||||||
        Agree to Let's Encrypt Terms of Service</label>
 | 
									id="-acmeEmail"
 | 
				
			||||||
      <br>
 | 
									value="john.doe@gmail.com"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<br />
 | 
				
			||||||
 | 
								<label for="-acmeTos"
 | 
				
			||||||
 | 
									><input
 | 
				
			||||||
 | 
										class="js-tos"
 | 
				
			||||||
 | 
										name="tos"
 | 
				
			||||||
 | 
										type="checkbox"
 | 
				
			||||||
 | 
										id="-acmeTos"
 | 
				
			||||||
 | 
										checked
 | 
				
			||||||
 | 
									/>
 | 
				
			||||||
 | 
									Agree to Let's Encrypt Terms of Service</label
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<br />
 | 
				
			||||||
			<button class="js-create-account" hidden>Create Account</button>
 | 
								<button class="js-create-account" hidden>Create Account</button>
 | 
				
			||||||
		</form>
 | 
							</form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<h2>3. (optional) Certificate Signing Request</h2>
 | 
							<h2>3. (optional) Certificate Signing Request</h2>
 | 
				
			||||||
		<form class="js-csr">
 | 
							<form class="js-csr">
 | 
				
			||||||
			<label for="-acmeDomains">Domains:</label>
 | 
								<label for="-acmeDomains">Domains:</label>
 | 
				
			||||||
      <input class="js-domains" type="text" id="-acmeDomains" value="example.com www.example.com">
 | 
								<input
 | 
				
			||||||
      <br>
 | 
									class="js-domains"
 | 
				
			||||||
 | 
									type="text"
 | 
				
			||||||
 | 
									id="-acmeDomains"
 | 
				
			||||||
 | 
									value="example.com www.example.com"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<br />
 | 
				
			||||||
			<button class="js-create-csr" hidden>Create CSR</button>
 | 
								<button class="js-create-csr" hidden>Create CSR</button>
 | 
				
			||||||
		</form>
 | 
							</form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<h2>4. ACME Certificate Order</h2>
 | 
							<h2>4. ACME Certificate Order</h2>
 | 
				
			||||||
		<form class="js-acme-order">
 | 
							<form class="js-acme-order">
 | 
				
			||||||
			Challenge type:
 | 
								Challenge type:
 | 
				
			||||||
      <label for="-http01"><input type="radio" id="-http01"
 | 
								<label for="-http01"
 | 
				
			||||||
       name="acme-challenge-type" value="http-01" checked>http-01</label>
 | 
									><input
 | 
				
			||||||
      <label for="-dns01"><input type="radio" id="-dns01"
 | 
										type="radio"
 | 
				
			||||||
       name="acme-challenge-type" value="dns-01">dns-01</label>
 | 
										id="-http01"
 | 
				
			||||||
      <br>
 | 
										name="acme-challenge-type"
 | 
				
			||||||
      <label for="-skipDryrun"><input class="js-skip-dryrun" name="skip-dryrun"
 | 
										value="http-01"
 | 
				
			||||||
        type="checkbox" id="-skipDryrun" checked> Skip dry-run challenge</label>
 | 
										checked
 | 
				
			||||||
      <br>
 | 
									/>http-01</label
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<label for="-dns01"
 | 
				
			||||||
 | 
									><input
 | 
				
			||||||
 | 
										type="radio"
 | 
				
			||||||
 | 
										id="-dns01"
 | 
				
			||||||
 | 
										name="acme-challenge-type"
 | 
				
			||||||
 | 
										value="dns-01"
 | 
				
			||||||
 | 
									/>dns-01</label
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<br />
 | 
				
			||||||
 | 
								<label for="-skipDryrun"
 | 
				
			||||||
 | 
									><input
 | 
				
			||||||
 | 
										class="js-skip-dryrun"
 | 
				
			||||||
 | 
										name="skip-dryrun"
 | 
				
			||||||
 | 
										type="checkbox"
 | 
				
			||||||
 | 
										id="-skipDryrun"
 | 
				
			||||||
 | 
										checked
 | 
				
			||||||
 | 
									/>
 | 
				
			||||||
 | 
									Skip dry-run challenge</label
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<br />
 | 
				
			||||||
			<button class="js-create-order" hidden>Create Order</button>
 | 
								<button class="js-create-order" hidden>Create Order</button>
 | 
				
			||||||
		</form>
 | 
							</form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -132,12 +209,20 @@
 | 
				
			|||||||
			<pre><code class="js-acme-order-response"> </code></pre>
 | 
								<pre><code class="js-acme-order-response"> </code></pre>
 | 
				
			||||||
		</details>
 | 
							</details>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <br>
 | 
							<br />
 | 
				
			||||||
    <p>Bluecrypt™ is a collection of lightweight, zero-dependency, libraries written in VanillaJS.
 | 
							<p>
 | 
				
			||||||
    They are fast, tiny, and secure, using the native features of modern browsers where possible.
 | 
								Bluecrypt™ is a collection of lightweight, zero-dependency,
 | 
				
			||||||
    This means it's easy-to-use crypto in kilobytes, not megabytes.</p>
 | 
								libraries written in VanillaJS. They are fast, tiny, and secure,
 | 
				
			||||||
    <br>
 | 
								using the native features of modern browsers where possible. This
 | 
				
			||||||
    <footer>View (git) source <a href="https://git.rootprojects.org/root/bluecrypt-acme.js">@bluecrypt/acme</a></footer>
 | 
								means it's easy-to-use crypto in kilobytes, not megabytes.
 | 
				
			||||||
 | 
							</p>
 | 
				
			||||||
 | 
							<br />
 | 
				
			||||||
 | 
							<footer>
 | 
				
			||||||
 | 
								View (git) source
 | 
				
			||||||
 | 
								<a href="https://git.rootprojects.org/root/bluecrypt-acme.js"
 | 
				
			||||||
 | 
									>@bluecrypt/acme</a
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
							</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<script src="./lib/encoding.js"></script>
 | 
							<script src="./lib/encoding.js"></script>
 | 
				
			||||||
		<script src="./lib/asn1-packer.js"></script>
 | 
							<script src="./lib/asn1-packer.js"></script>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user