Sample code for 30+ languages & platforms
Zig

Load a PuTTY Public Key

See more SSH Key Examples

Demonstrates how to load a PuTTY public key.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // Load a PuTTY public key.
    const putty_key = try chilkat.SshKey.init();
    defer putty_key.deinit();
    const pub_key_text = try putty_key.loadText(alloc, "qa_data/ppk/putty_public.pem");

    // The pubKeyText contains this content:

    //     ---- BEGIN SSH2 PUBLIC KEY ----
    //     Comment: "rsa-key-20170126"
    //     AAAAB3NzaC1yc2EAAAABJQAAAQEAx+52s7vvaZ8rT2UdFZWlSUVDHDQ+5ZRFvgRW
    //     6nm2sO1c9WqNg7u2PQL4jeKSDX2XWcMnpleALz2x8Rr4rMy5E1iZzvWov8VtFd8l
    //     fa9HOkgEeJB3VFuYR3NlnD3eyCoYJYPVpHJHrIeui2WZs5vQ76HDe+th8+z5Ald4
    //     zPw3p2c6ZJpBrkSBM67hWokoBDi23c7NhszDHhJBrv+B98cQxnagI1PUKqN7E8Vg
    //     bNtBI8beIMHyI69up9G1AXSEi0cGIjYNx9RNUPau1mRk/SvfqxgWkAjM005lj7hc
    //     bOsjbdKK3T2NtrKTaYjEiXlEXcj1iGuApsD/m73pYaEJB3Nd7w==
    //     ---- END SSH2 PUBLIC KEY ----

    putty_key.fromRfc4716PublicKey(pub_key_text) catch {
        std.debug.print("{s}\n", .{try putty_key.getLastErrorText(alloc)});
        return;
    };

    // If desired, convert to other public key formats:
    const open_ssh_pub_key_str = try putty_key.toOpenSshPublicKey(alloc);
    std.debug.print("{s}\n", .{open_ssh_pub_key_str});

    // openSshPubKeyStr contains:
    // ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAx+52s7vvaZ8rT2UdFZWlSUVDHDQ+5ZRFvgRW6nm2sO1c9WqNg7u2PQL4jeKSDX2XWcMnpleALz2x8Rr4rMy5E1iZzvWov8VtFd8lfa9HOkgEeJB3VFuYR3NlnD3eyCoYJYPVpHJHrIeui2WZs5vQ76HDe+th8+z5Ald4zPw3p2c6ZJpBrkSBM67hWokoBDi23c7NhszDHhJBrv+B98cQxnagI1PUKqN7E8VgbNtBI8beIMHyI69up9G1AXSEi0cGIjYNx9RNUPau1mRk/SvfqxgWkAjM005lj7hcbOsjbdKK3T2NtrKTaYjEiXlEXcj1iGuApsD/m73pYaEJB3Nd7w== rsa-key-20170126

    // Convert to an XML format:
    const xml_pub_key_str = try putty_key.toXml(alloc);
    std.debug.print("{s}\n", .{xml_pub_key_str});

    // xmlPubKeyStr contains:
    // <RSAPublicKey>
    //     <Modulus>x+52s7vvaZ8rT2UdFZWlSUVDHDQ+5ZRFvgRW6nm2sO1c9WqNg7u2PQL4jeKSDX2XWcMnpleALz2x8Rr4rMy5E1iZzvWov8VtFd8lfa9HOkgEeJB3VFuYR3NlnD3eyCoYJYPVpHJHrIeui2WZs5vQ76HDe+th8+z5Ald4zPw3p2c6ZJpBrkSBM67hWokoBDi23c7NhszDHhJBrv+B98cQxnagI1PUKqN7E8VgbNtBI8beIMHyI69up9G1AXSEi0cGIjYNx9RNUPau1mRk/SvfqxgWkAjM005lj7hcbOsjbdKK3T2NtrKTaYjEiXlEXcj1iGuApsD/m73pYaEJB3Nd7w==</Modulus>
    //     <Exponent>JQ==</Exponent>
    // </RSAPublicKey>
    //
    //
}