diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..bec4847 --- /dev/null +++ b/.editorconfig @@ -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 \ No newline at end of file diff --git a/app.js b/app.js index 9780beb..e16f5ec 100644 --- a/app.js +++ b/app.js @@ -48,6 +48,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; }); @@ -55,8 +57,8 @@ $$('button').map(function ($el) { $el.disabled = true; }); var opts = { kty: $('input[name="kty"]:checked').value - , namedCurve: $('input[name="ec-crv"]:checked').value - , modulusLength: $('input[name="rsa-len"]:checked').value + , namedCurve: $('input[name="ec-crv"]:checked').value + , modulusLength: $('input[name="rsa-len"]:checked').value }; var then = Date.now(); console.log('opts', opts); @@ -116,7 +118,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); diff --git a/index.html b/index.html index d4e99de..e140335 100644 --- a/index.html +++ b/index.html @@ -1,30 +1,34 @@ - - BlueCrypt - - - -

BlueCrypt for the Browser

-

BlueCrypt is universal crypto for the browser. It's lightweight, fast, and based on native webcrypto. + + + BlueCrypt + + + +

BlueCrypt for the Browser

+

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.

-

Keypair Generation

-
-

Key Type:

-
+

Keypair Generation

+ +

Key Type:

+
@@ -50,50 +54,74 @@
- - + + - + - - - - - - - - + + + + + + + + - - - - - - - - +

Signing

+
+
+
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + +