summaryrefslogtreecommitdiffstats
path: root/prog/ž/gen.html
blob: 47fe749558e7a7d30d02c6e8166d38c062b12b15 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!DOCTYPE html>
<h1>private</h1>
<canvas id=privkey></canvas>
<div id=privd></div>
<h1>public</h1>
<canvas id=pubkey></canvas>
<div id=pubsec1></div>
<script src=QR-Code-generator/typescript-javascript/qrcodegen.js></script>
<script>
function draw_canvas (qr, scale, border, light, dark, canvas) {
	canvas.width = canvas.height = (qr.size + border * 2) * scale;
	let ctx = canvas.getContext("2d");
	for (let y = -border; y < qr.size + border; y++) {
		for (let x = -border; x < qr.size + border; x++) {
			ctx.fillStyle = qr.getModule(x, y) ? dark : light;
			ctx.fillRect((x + border) * scale, (y + border) * scale, scale, scale);
		}
	}
}
function a2hex (a) {
	let r = "";
	const hexchars = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
	for (let i = 0; i < a.length; i++) {
		r += hexchars[a[i] >> 4];
		r += hexchars[a[i] % 16];
	}
	return r;
}
async function main () {
	while (!pubsec1.innerText.startsWith("02aa") && !pubsec1.innerText.startsWith("03aa")) {
		window.keyobj = await crypto.subtle.generateKey(
			{
				name: "ECDSA",
				namedCurve: "P-384",
			},
			true,
			["sign", "verify"]
		);
		let jwk = await crypto.subtle.exportKey("jwk", keyobj.privateKey);
		let d = jwk.d.replace(/-/g, "+").replace(/_/g, "/");
		let x = (await crypto.subtle.exportKey("jwk", keyobj.publicKey)).x.replace(/-/g, "+").replace(/_/g, "/");
		let y = (await crypto.subtle.exportKey("jwk", keyobj.publicKey)).y.replace(/-/g, "+").replace(/_/g, "/");
		d = Uint8Array.from(atob(d), c => c.charCodeAt(0));
		privd.innerText = a2hex(d) + "(big endian d) jwk: " + JSON.stringify(jwk);
		draw_canvas(qrcodegen.QrCode.encodeText(JSON.stringify(jwk), qrcodegen.QrCode.Ecc.LOW), 5, 4, "#FFF", "#000", privkey);
		x = Uint8Array.from(atob(x), c => c.charCodeAt(0));
		y = Uint8Array.from(atob(y), c => c.charCodeAt(0));
		var sec1 = new Uint8Array(49);
		if (y[47] % 2)
			sec1[0] = 3;
		else
			sec1[0] = 2;
		for (let i = 0; i < 48; i++)
			sec1[1+i] = x[i];
		pubsec1.innerText = a2hex(sec1) + " (sec-1)";
		draw_canvas(qrcodegen.QrCode.encodeBinary(sec1, qrcodegen.QrCode.Ecc.LOW), 10, 4, "#FFF", "#000", pubkey);
	}
}
main();
</script>