72 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<script src="curve25519_generate.js"></script>
 | 
						|
<script>
 | 
						|
// License: GPLv2
 | 
						|
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>
 |