77
88 < head >
99 < meta charset =utf-8 >
10-
10+
1111 < title >
1212 Generate Key Pair
1313 </ title >
1919
2020 < link rel =icon type ='image/x-icon ' href ='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAAVFBMVEVHcEwAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEAAAABAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEAAAABAQEAAACsl1DQAAAAG3RSTlMA+Nbo8C8MBGaeFKt9TBx0ijlZy5XAUkQi4Lb6C8LjAAABM0lEQVQoz31TibKDIAzkkBsqBbXV/f//fMHOq9IrMw6jmw2bTWSsC6PZ19Bp2ja3fMm4Bw4KHu6f0MtMkBCUsnnzDkegJu9TBeISXyt4gfVKRx5XiDKI1MPXAY6UTwgOQ1n33FPcODJjC8eWwZMjBV0HSiIYE8BtwKD8jKGja/qwkIBqB1TNLGC76pZD2hXztgPlFdYT4CqE445uJQHLm/YaKMUSepMQlx5u7EWSqSXFlbzpUbUTSBh5S0/wzykq9SCPdKS5gTz7wxEpJ3X9v82nKCBPnlMTkOJB3qP5dmppFG3Qh9TyIuwShxO5qdzMu+xnudp3baYzmTHXD+RMNqpk0WeTn89XK5vOthtH8cXqozD4Svb7z/uscrzd20p8/yHYCJQfMG1e/AHrHH4VZ+bh2h/qTRXn16T2TQAAAABJRU5ErkJggg== '>
2121 < meta name =viewport content ='width=device-width, initial-scale=1 '>
22-
22+
2323 < script type ='application/ld+json '>
2424 {
2525 "@context" : "https://schema.org" ,
3535 "offers" : { "@type" :"Offer" , "price" :"0" , "priceCurrency" :"GBP" }
3636 }
3737 </ script >
38-
39-
40- < script src ='https://libs.ext-code.com/js/dom/component/component.js '> </ script >
38+
39+
40+ < script src ='https://libs.ext-code.com/js/dom/component/v3.0/ component.js '> </ script >
4141
4242 < script init >
4343 console . clear ( ) ;
4444 console . log ( 'generate-key-pair-v2.0.html' ) ;
4545 console . log ( ) ;
4646 console . json = v => console . log ( JSON . stringify ( v , null , 4 ) ) ;
47-
47+
4848 var df = true , did = 'gen-https-cert'
4949 ;
5050
5454 var menumod ;
5555 var keydown ;
5656 var debug ;
57-
58-
57+
58+
5959 var menu ;
6060
6161
6262 var hdr ;
6363
6464 //:
6565
66-
66+
6767 async function init ( ) {
6868
6969
8383
8484
8585 initdom ( document . body ) ;
86-
87-
86+
87+
8888 console . log ( 'ready' ) ;
8989 } //init
9090
9191
9292
9393
9494( async ( ) => {
95-
96- mod . stack . add ;
9795
96+ mod . stack . add ;
97+
9898 var { ext} = await import ( 'https://libs.ext-code.com/js/io/ext-loader/ext-loader.m.js' ) ;
9999
100100 var promise = ext . load . libs (
105105 'js/debug/debug.js' ,
106106 ) ;
107107 [ $ , datatype , menumod , keydown , debug ] = await promise ;
108-
109-
108+
109+
110110 mod . stack . complete ;
111-
112- } ) ( ) ;
113111
114- </ script init>
115-
112+ } ) ( ) ;
116113
114+ </ script init>
115+
116+
117117
118118
119119 < style >
120-
120+
121121 html
122122 {height : 100% }
123123 body
126126 x509-hdr
127127 {margin-bottom : 20px }
128128
129- .hdr
129+ .hdr
130130 {font-family : arial;position : relative;margin-top : 0 ;margin-bottom : 20px ;background : white;
131131 padding-bottom : 10px ;border-bottom : 3px solid lightblue}
132- .hdr-icon
132+ .hdr-icon
133133 {display : inline-block;text-align : center;background : whitesmoke;border-radius : 5px ;
134134 border : 1px solid lightgray;padding : 5px 3px 0px ;cursor : pointer;margin-right : 10px ;
135135 min-width : 50px }
136- .hdr-icon-img
136+ .hdr-icon-img
137137 {width : 25px ;height : 25px }
138- .hdr-icon-label
138+ .hdr-icon-label
139139 {margin : 2px 0 0 }
140- .hdr-title
140+ .hdr-title
141141 {position : absolute;left : 0 ;right : 0 ;z-index : 0 ;margin : 0 auto}
142142 .hdr-date
143143 {float : right}
144-
144+
145145 input
146146 {padding : 5px 10px ;font-size : 16px }
147147 input [type = button ]
148148 {cursor : pointer}
149-
149+
150150 # btns
151151 {margin-bottom : 20px }
152152 # view
161161 {flex : 1 }
162162 pre
163163 {border : 1px solid lightgray;padding : 10px ;font-family : monospace}
164-
165-
164+
165+
166166 .visually-hidden
167167 {position : absolute !important ;width : 1px !important ;height : 1px !important ;padding : 0 !important ;margin : -1px !important ;overflow : hidden !important ;
168168 clip : rect (0 0 0 0 ) !important ;white-space : nowrap !important ;border : 0 !important }
169-
170-
169+
170+
171171 </ style >
172-
173-
172+
173+
174174 </ head >
175-
176-
175+
176+
177177 < body >
178-
179-
178+
179+
180180 < x509-hdr component =grp v2.0 >
181181 < h1 class =visually-hidden >
182182 Generate Key Pair
@@ -186,11 +186,11 @@ <h1 class=visually-hidden>
186186 15 Nov 2025
187187 </ time >
188188 </ x509-hdr >
189-
190-
191-
192-
193- <!--
189+
190+
191+
192+
193+ <!--
194194 <div class=hdr>
195195 <a class=hdr-icon href='https://javascript-2020.github.io/'>
196196 <img class=hdr-icon-img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAAqFBMVEVHcEwjmpckopg9f3YxpJM6r5kjq58Nmp0Nn6QRoKExrpshnpgtoJUdoZwYnZ02spwYpaEmrZ8djpINn6Qtrp4inpcjqZ8SoqM3s5w0sp01spwrr58vr50oqpwdnpo0sZwtrJwUpKMMoaUtq50op5ssqpopppseqaM1sJwgpJ0NoaUSoaI3kYobqaMSpKQrr58PoaMVpaIOoKMLpKcXpaEkqp8Rm58YrKUL0CR4AAAAOHRSTlMACBkBCyinK59CQhUOLyKjqbUGpZgSYn6rp5WsekcmgkyWmCkmNB7AYTiuVgKuuo91i2PLn2lJ7kISMf4AAAElSURBVCjPrdPXloIwEAbgBDFKCRo6SO8lYEHd93+zxV7Zm2WuSL6Tk/MPEwBGLFH8SzFCeFiDXNeJ+7GtGds1D+ghDzzPzXX6xlJbq75s5KVLiJsSB76xIhd22Mz0pkyRnqzW2htD/SeUjL0EQKY60nqRvTLXGl64PR/SfDVxVvETZ123w8vN9Ur5YKUF4R9cd/WxqiePgCs3IMF1QXcVt6vK59tSqyjN4hwQbhS8mUuvWTLbwYtTQGhEjLHVPprv+4ztQ8AeRVn50uipBcXg/IPgfPaFF+z1axyeMEkcJwwdYHHZINQ02gALS49lJcQMci/COGzdue8apRQwNz4tYvM207JSRVEUhvtW6KeBIFVVbds07xPncZfCfWSK+UtNJ/9+VL/nTBuX7xjDZwAAAABJRU5ErkJggg==' />
@@ -241,8 +241,8 @@ <h1 class=visually-hidden>
241241 </ div >
242242
243243 </ div >
244-
245-
244+
245+
246246 </ body >
247247
248248
@@ -251,8 +251,8 @@ <h1 class=visually-hidden>
251251 console . log ( 'generate-key-pair.html' ) ;
252252 console . log ( ) ;
253253 console . json = v => console . log ( JSON . stringify ( v , null , 4 ) ) ;
254-
255-
254+
255+
256256 var $ = ( root , sel ) => ( ! sel && ( sel = root , root = document ) , root . querySelector ( sel ) ) ;
257257 $ . mousetext = function ( e , text ) {
258258
@@ -268,8 +268,8 @@ <h1 class=visually-hidden>
268268 setTimeout ( rem , time ) ;
269269
270270 } //mousetext
271-
272-
271+
272+
273273 var keys ;
274274 var pem = { } ;
275275
@@ -280,15 +280,15 @@ <h1 class=visually-hidden>
280280 btn . public = { } ;
281281 var fn = { } ;
282282 var pretty = { } ;
283-
283+
284284
285285 //:
286286
287287
288-
288+
289289 function initdom ( rootnode ) {
290290
291- var root = document . body ;
291+ var root = document . body ;
292292
293293 hdr . initdom ( root ) ;
294294
@@ -304,12 +304,12 @@ <h1 class=visually-hidden>
304304 $ ( pub_root , '[value=save]' ) . onclick = btn . public . save ;
305305
306306 } //initdom
307-
308-
307+
308+
309309 //:
310310
311-
312- btn . generate = async function ( ) {
311+
312+ btn . generate = async function ( ) {
313313
314314 var params = { name :'RSA-OAEP' , modulusLength :1024 , publicExponent :new Uint8Array ( [ 1 , 0 , 1 ] ) , hash :'SHA-256' } ;
315315 keys = await window . crypto . subtle . generateKey ( params , true , [ 'encrypt' , 'decrypt' ] ) ;
@@ -319,22 +319,22 @@ <h1 class=visually-hidden>
319319
320320 pem . public = await fn . export . public ( keys . publicKey ) ;
321321 $ ( '#public' ) . textContent = pem . public ;
322-
323-
322+
323+
324324
325325 } //generate
326-
327-
326+
327+
328328 btn . private . copy = async function ( e ) {
329-
329+
330330 var err ;
331331 try {
332-
332+
333333 await navigator . clipboard . writeText ( pem . private ) ;
334334
335335 }
336336 catch ( err2 ) {
337-
337+
338338 err = err2 ;
339339
340340 }
@@ -347,22 +347,22 @@ <h1 class=visually-hidden>
347347
348348
349349 btn . private . save = function ( ) {
350-
350+
351351 save ( 'private.key.pem' , pem . private ) ;
352-
352+
353353 } //save
354354
355355
356356 btn . public . copy = async function ( ) {
357-
358- var err ;
359- try {
360-
357+
358+ var err ;
359+ try {
360+
361361 await navigator . clipboard . writeText ( pem . public ) ;
362362
363363 }
364364 catch ( err2 ) {
365-
365+
366366 err = err ;
367367
368368 }
@@ -375,7 +375,7 @@ <h1 class=visually-hidden>
375375
376376
377377 btn . public . save = function ( ) {
378-
378+
379379 save ( 'public.key.pem' , pem . public ) ;
380380
381381 } //save
@@ -396,10 +396,10 @@ <h1 class=visually-hidden>
396396 } //export
397397 fn . export . public = public => fn . export ( 'public' , public ) ;
398398 fn . export . private = private => fn . export ( 'private' , private ) ;
399-
399+
400400 var cert_hdr = ( type = 'public' ) => `-----BEGIN ${ type . toUpperCase ( ) } KEY-----` ;
401401 var cert_ftr = ( type = 'public' ) => `-----END ${ type . toUpperCase ( ) } KEY-----` ;
402-
402+
403403 function buf_b64 ( buf ) {
404404
405405 var bytes = new Uint8Array ( buf ) ;
@@ -408,7 +408,7 @@ <h1 class=visually-hidden>
408408 return b64 ;
409409
410410 } //buf_b64
411-
411+
412412 pretty . out = function ( pem ) {
413413
414414 var { hdr, b64, ftr} = extract ( pem ) ;
@@ -426,8 +426,8 @@ <h1 class=visually-hidden>
426426 return txt ;
427427
428428 } //pretty.out
429-
430-
429+
430+
431431 function extract ( pem ) {
432432
433433 var i1 = pem . indexOf ( 'KEY' ) + 8 ;
@@ -438,13 +438,13 @@ <h1 class=visually-hidden>
438438 return { hdr, b64, ftr} ;
439439
440440 } //extract
441-
442-
441+
442+
443443 //:
444444
445445
446446 function save ( filename , txt ) {
447-
447+
448448 var blob = new Blob ( [ txt ] ) ;
449449 var url = window . URL . createObjectURL ( blob ) ;
450450
@@ -454,12 +454,12 @@ <h1 class=visually-hidden>
454454 a . click ( ) ;
455455
456456 } //save
457-
458-
459-
457+
458+
459+
460460 </ script >
461-
462-
461+
462+
463463</ html >
464464
465465
0 commit comments