Skip to content

Instantly share code, notes, and snippets.

@lithdew
Created November 1, 2021 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lithdew/6f8f4c24aa145eec920191c198e58f1f to your computer and use it in GitHub Desktop.
Save lithdew/6f8f4c24aa145eec920191c198e58f1f to your computer and use it in GitHub Desktop.
zig: x25519 handshake
const std = @import("std");
pub fn main() !void {
const server_keys = try std.crypto.sign.Ed25519.KeyPair.create(null);
const client_keys = try std.crypto.sign.Ed25519.KeyPair.create(null);
std.log.info("server secret key: {s}", .{std.fmt.fmtSliceHexLower(&server_keys.secret_key)});
std.log.info("server public key: {s}", .{std.fmt.fmtSliceHexLower(&server_keys.public_key)});
std.log.info("client secret key: {s}", .{std.fmt.fmtSliceHexLower(&client_keys.secret_key)});
std.log.info("client public key: {s}", .{std.fmt.fmtSliceHexLower(&client_keys.public_key)});
const server_x25519_keys = try std.crypto.dh.X25519.KeyPair.fromEd25519(server_keys);
const client_x25519_keys = try std.crypto.dh.X25519.KeyPair.fromEd25519(client_keys);
const server_recovered_shared_secret = try std.crypto.dh.X25519.scalarmult(server_x25519_keys.secret_key, try std.crypto.dh.X25519.publicKeyFromEd25519(client_keys.public_key));
const client_recovered_shared_secret = try std.crypto.dh.X25519.scalarmult(client_x25519_keys.secret_key, try std.crypto.dh.X25519.publicKeyFromEd25519(server_keys.public_key));
std.log.info("server recovered shared secret: {s}", .{std.fmt.fmtSliceHexLower(&server_recovered_shared_secret)});
std.log.info("client recovered shared secret: {s}", .{std.fmt.fmtSliceHexLower(&client_recovered_shared_secret)});
// info: server secret key: 7931ed55efd0708b44835cf0d86d775e4b4506bba526f1c5facabe66e285bb41888b9325b34eb41c832f025363e1b318604c75348332fae22a60d9f34313bd87
// info: server public key: 888b9325b34eb41c832f025363e1b318604c75348332fae22a60d9f34313bd87
// info: client secret key: 9df89363f95de2fa74081114f16783373515239a2604bab2c0e562db4c97096be307934bf5cdb4b70dab03b89201b33e2808a28e2a4db55318aae19ec0b4e1e5
// info: client public key: e307934bf5cdb4b70dab03b89201b33e2808a28e2a4db55318aae19ec0b4e1e5
// info: server recovered shared secret: 42a1c418fcfd32080df8a67aaf12a3a6ac29845189937d68790751c47f0f0f5d
// info: client recovered shared secret: 42a1c418fcfd32080df8a67aaf12a3a6ac29845189937d68790751c47f0f0f5d
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment