Created
November 1, 2021 14:21
-
-
Save lithdew/6f8f4c24aa145eec920191c198e58f1f to your computer and use it in GitHub Desktop.
zig: x25519 handshake
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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