aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/contrib/examples/keygen-html/keygen.html
blob: d12f6b9a9e04303142b6d8f5ff3c5028a21e06d0 (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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<script src="curve25519_generate.js"></script>
<script>
/* SPDX-License-Identifier: GPL-2.0
 *
 * Copyright (C) 2015-2017 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
 */
function generateWireguardKeypair()
{
	var privateKey = Module._malloc(32);
	var publicKey = Module._malloc(32);
	Module._curve25519_generate_private(privateKey);
	Module._curve25519_generate_public(publicKey, privateKey);
	var privateBase64 = Module._malloc(45);
	var publicBase64 = Module._malloc(45);
	Module._key_to_base64(privateBase64, privateKey);
	Module._key_to_base64(publicBase64, publicKey);
	Module._free(privateKey);
	Module._free(publicKey);
	var keypair = {
		publicKey: Module.Pointer_stringify(publicBase64),
		privateKey: Module.Pointer_stringify(privateBase64)
	};
	Module._free(privateBase64);
	Module._free(publicBase64);
	return keypair;
}

function sendPubkeyToServer(pubkey, username, password)
{
	alert("Sending " + username + ":" + password + " to server for new pubkey " + pubkey + "...");

	// send info to server

	var serverResponse = {
		publicKey: "6spHEFoJrp9pijbxjJoS6fHjZaAWQqtdFFO/OtpVe3w=",
		allowedIPs: [ "0.0.0.0/0", "::/0" ],
		endpoint: "demo.wireguard.com:63321",
		address: [ "192.168.18.42/32", "fd08:1234:1111::77/128" ],
		dns: [ "8.8.8.8", "8.8.4.4" ]
	}

	return serverResponse;
}

function downloadNewConfiguration()
{
	var keypair = generateWireguardKeypair();
	var serverResponse = sendPubkeyToServer(keypair.publicKey, "zx2c4", "supersecretpassword");

	var config = [];
	config.push("[Interface]");
	config.push("PrivateKey = " + keypair.privateKey);
	config.push("Address = " + serverResponse.address.join(", "));
	config.push("DNS = " + serverResponse.dns.join(", "));
	config.push("");
	config.push("[Peer]");
	config.push("PublicKey = " + serverResponse.publicKey);
	config.push("AllowedIPs = " + serverResponse.allowedIPs.join(", "));
	config.push("Endpoint = " + serverResponse.endpoint);
	config.push("");
	config = config.join("\n");

	var blob = new Blob([config], { type: "text/plain" });
	var a = document.createElement("a");
	a.download = "demo0.conf";
	a.href = URL.createObjectURL(blob);
	a.style.display = "none";
	document.body.appendChild(a);
	a.click();
	document.body.removeChild(a);
}
</script>

<a href="javascript:downloadNewConfiguration()">Download a WireGuard configuration file</a>