JavaScript generic ASN.1 parser (mirror)
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Use Base64 in URL, instead of longer hex. Move example data to a button, so that by default it is clean to paste. Avoid JavaScript in HTML, activate it from existing script.

+20 -30
+4 -19
index.html
··· 13 13 <div id="tree"></div> 14 14 </div> 15 15 <form> 16 - <textarea id="area" style="width: 100%;" rows="8"> 17 - MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIAwggHvMIIB 18 - WKADAgECAhAvoXazbunwSfREtACZZhlFMA0GCSqGSIb3DQEBBQUAMAwxCjAIBgNVBAMMAWEwHhcN 19 - MDgxMDE1MTUwMzQxWhcNMDkxMDE1MTUwMzQxWjAMMQowCAYDVQQDDAFhMIGfMA0GCSqGSIb3DQEB 20 - AQUAA4GNADCBiQKBgQCJUwlwhu5hR8X01f+vG0mKPRHsVRjpZNxSEmsmFPdDiD9kylE3ertTDf0g 21 - RkpIvWfNJ+eymuxoXF0Qgl5gXAVuSrjupGD6J+VapixJiwLXJHokmDihLs3zfGARz08O3qnO5ofB 22 - y0pRxq5isu/bAAcjoByZ1sI/g0iAuotC1UFObwIDAQABo1IwUDAOBgNVHQ8BAf8EBAMCBPAwHQYD 23 - VR0OBBYEFEIGXQB4h+04Z3y/n7Nv94+CqPitMB8GA1UdIwQYMBaAFEIGXQB4h+04Z3y/n7Nv94+C 24 - qPitMA0GCSqGSIb3DQEBBQUAA4GBAE0G7tAiaacJxvP3fhEj+yP9VDxL0omrRRAEaMXwWaBf/Ggk 25 - 1T/u+8/CDAdjuGNCiF6ctooKc8u8KpnZJsGqnpGQ4n6L2KjTtRUDh+hija0eJRBFdirPQe2HAebQ 26 - GFnmOk6Mn7KiQfBIsOzXim/bFqaBSbf06bLTQNwFouSO+jwOAAAxggElMIIBIQIBATAgMAwxCjAI 27 - BgNVBAMMAWECEC+hdrNu6fBJ9ES0AJlmGUUwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkq 28 - hkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA4MTAxNTE1MDM0M1owIwYJKoZIhvcNAQkEMRYEFAAA 29 - AAAAAAAAAAAAAAAAAAAAAAAAMA0GCSqGSIb3DQEBAQUABIGAdB7ShyMGf5lVdZtvwKlnYLHMUqJW 30 - uBnFk7aQwHAmg3JnH6OcgId2F+xfg6twXm8hhUBkhHPlHGoWa5kQtN9n8rz3NorzvcM/1Xv9+0Ea 31 - l7NYSn2Hb0C0DMj2XNIYH2C6CLIHkmy1egzUvzsomZPTkx5nGDWm+8WHCjWb9A6lyrMAAAAAAAA= 32 - </textarea> 16 + <textarea id="area" style="width: 100%;" rows="8"></textarea> 33 17 <br> 34 18 <label title="can be slow with big files"><input type="checkbox" id="wantHex" checked="checked"> with hex dump</label> 35 - <input type="button" value="decode" onclick="decodeArea();"> 36 - <input type="button" value="clear" onclick="clearAll();"> 19 + <input id="butDecode" type="button" value="decode"> 20 + <input id="butClear" type="button" value="clear"> 21 + <input id="butExample" type="button" value="example"> 37 22 <input type="file" id="file"> 38 23 </form> 39 24 <div id="help">
+16 -11
index.js
··· 26 26 tree.appendChild(asn1.toDOM()); 27 27 if (wantHex.checked) 28 28 dump.appendChild(asn1.toHexDOM()); 29 - var hex = (der.length < maxLength) ? asn1.toHexString() : ''; 30 - if (area.value === '') 31 - area.value = hex; 29 + var b64 = (der.length < maxLength) ? asn1.toB64String() : ''; 30 + if (area.value === '') 31 + area.value = Base64.pretty(b64); 32 32 try { 33 - window.location.hash = hash = '#' + hex; 33 + window.location.hash = hash = '#' + b64; 34 34 } catch (e) { // fails with "Access Denied" on IE with URLs longer than ~2048 chars 35 35 window.location.hash = hash = '#'; 36 36 } ··· 38 38 text(tree, e); 39 39 } 40 40 } 41 - function decodeArea() { 41 + function decodeText(val) { 42 42 try { 43 - var val = area.value, 44 - der = reHex.test(val) ? Hex.decode(val) : Base64.unarmor(val); 43 + var der = reHex.test(val) ? Hex.decode(val) : Base64.unarmor(val); 45 44 decode(der); 46 45 } catch (e) { 47 46 text(tree, e); ··· 63 62 dump.innerHTML = ''; 64 63 } 65 64 } 66 - function clearAll() { 65 + // set up buttons 66 + id('butDecode').onclick = function () { decodeText(area.value); }; 67 + id('butClear').onclick = function () { 67 68 area.value = ''; 68 69 tree.innerHTML = ''; 69 70 dump.innerHTML = ''; 70 71 hash = window.location.hash = ''; 71 72 } 73 + id('butExample').onclick = function () { 74 + var demo = 'MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIAwggHvMIIBWKADAgECAhAvoXazbunwSfREtACZZhlFMA0GCSqGSIb3DQEBBQUAMAwxCjAIBgNVBAMMAWEwHhcNMDgxMDE1MTUwMzQxWhcNMDkxMDE1MTUwMzQxWjAMMQowCAYDVQQDDAFhMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJUwlwhu5hR8X01f-vG0mKPRHsVRjpZNxSEmsmFPdDiD9kylE3ertTDf0gRkpIvWfNJ-eymuxoXF0Qgl5gXAVuSrjupGD6J-VapixJiwLXJHokmDihLs3zfGARz08O3qnO5ofBy0pRxq5isu_bAAcjoByZ1sI_g0iAuotC1UFObwIDAQABo1IwUDAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0OBBYEFEIGXQB4h-04Z3y_n7Nv94-CqPitMB8GA1UdIwQYMBaAFEIGXQB4h-04Z3y_n7Nv94-CqPitMA0GCSqGSIb3DQEBBQUAA4GBAE0G7tAiaacJxvP3fhEj-yP9VDxL0omrRRAEaMXwWaBf_Ggk1T_u-8_CDAdjuGNCiF6ctooKc8u8KpnZJsGqnpGQ4n6L2KjTtRUDh-hija0eJRBFdirPQe2HAebQGFnmOk6Mn7KiQfBIsOzXim_bFqaBSbf06bLTQNwFouSO-jwOAAAxggElMIIBIQIBATAgMAwxCjAIBgNVBAMMAWECEC-hdrNu6fBJ9ES0AJlmGUUwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA4MTAxNTE1MDM0M1owIwYJKoZIhvcNAQkEMRYEFAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0GCSqGSIb3DQEBAQUABIGAdB7ShyMGf5lVdZtvwKlnYLHMUqJWuBnFk7aQwHAmg3JnH6OcgId2F-xfg6twXm8hhUBkhHPlHGoWa5kQtN9n8rz3NorzvcM_1Xv9-0Eal7NYSn2Hb0C0DMj2XNIYH2C6CLIHkmy1egzUvzsomZPTkx5nGDWm-8WHCjWb9A6lyrMAAAAAAAA'; 75 + decodeText(demo); 76 + }; 72 77 // this is only used if window.FileReader 73 78 function read(f) { 74 - area.value = ''; // clear text area, will get hex content 79 + area.value = ''; // clear text area, will get b64 content 75 80 var r = new FileReader(); 76 81 r.onloadend = function () { 77 82 if (r.error) ··· 93 98 // Firefox is not consistent with other browsers and return an 94 99 // already-decoded hash string so we risk double-decoding here, 95 100 // but since % is not allowed in base64 nor hexadecimal, it's ok 96 - area.value = decodeURIComponent(hash.substr(1)); 97 - decodeArea(); 101 + var val = decodeURIComponent(hash.substr(1)); 102 + decodeText(val); 98 103 } 99 104 } 100 105 function stop(e) {