Sample code for 30+ languages & platforms
Zig

PKCS11 Initialize Normal User PIN

See more PKCS11 Examples

Initializes the Normal User PIN from the Security Officer's logged-on session. This provides a way to reset the user PIN if it has been forgotten.

Note: Requires Chilkat v9.5.0.89 or greater.

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();

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // Note: Chilkat's PKCS11 implementation runs on Windows, Linux, Mac OS X, and other supported operating systems.

    const pkcs11 = try chilkat.Pkcs11.init();
    defer pkcs11.deinit();

    // See PKCS11 Find Driver Library Path for information about how to find the
    // PKCS11 driver file (if not explicitly known) for the plugged-in token or smart card in reader.
    pkcs11.setSharedLibPath("IDPrimePKCS1164.dll");

    pkcs11.initialize() catch {
        std.debug.print("{s}\n", .{try pkcs11.getLastErrorText(alloc)});
        return;
    };

    // Pass -1 for the slotID to open a session on the first non-empty slot.
    const slot_id = -1;

    // Open a session.
    const read_write = true;
    pkcs11.openSession(slot_id, read_write) catch {
        std.debug.print("{s}\n", .{try pkcs11.getLastErrorText(alloc)});
        return;
    };

    // Login as the security officer.
    // The smart card PIN is passed to the Login method.
    // The user type can be one of three choices:
    // 0 - Security Officer
    // 1 - Normal User
    // 2 - Context Specific.
    const user_type = 0;
    const pin = "AA0000000000000000000000000000000000000000000000";
    pkcs11.login(user_type, pin) catch {
        std.debug.print("{s}\n", .{try pkcs11.getLastErrorText(alloc)});
        try pkcs11.closeSession();
        return;
    };

    // Reset the user PIN to 1234
    pkcs11.initPin("1234") catch {
        std.debug.print("{s}\n", .{try pkcs11.getLastErrorText(alloc)});
        try pkcs11.closeSession();
        return;
    };

    // Revert to an unauthenticated session by calling Logout.
    pkcs11.logout() catch {
        std.debug.print("{s}\n", .{try pkcs11.getLastErrorText(alloc)});
        try pkcs11.closeSession();
        return;
    };

    // When finished, close the session.
    // It is important to close the session (memory leaks will occur if the session is not properly closed).
    pkcs11.closeSession() catch {
        std.debug.print("{s}\n", .{try pkcs11.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("Successfully reset user PIN to 1234\n", .{});
}