structstd.crypto.25519.x25519.X25519.KeyPair[src]

An X25519 key pair.

Fields

public_key: [public_length]u8

Public part.

secret_key: [secret_length]u8

Secret part.

Functions

FunctiongenerateDeterministic[src]

pub fn generateDeterministic(seed: [seed_length]u8) IdentityElementError!KeyPair

Deterministically derive a key pair from a cryptograpically secure secret seed.

Except in tests, applications should generally call generate() instead of this function.

Parameters

seed: [seed_length]u8

Source Code

Source code
pub fn generateDeterministic(seed: [seed_length]u8) IdentityElementError!KeyPair {
    const kp = KeyPair{
        .public_key = try X25519.recoverPublicKey(seed),
        .secret_key = seed,
    };
    return kp;
}

Functiongenerate[src]

pub fn generate() KeyPair

Generate a new, random key pair.

Source Code

Source code
pub fn generate() KeyPair {
    var random_seed: [seed_length]u8 = undefined;
    while (true) {
        crypto.random.bytes(&random_seed);
        return generateDeterministic(random_seed) catch {
            @branchHint(.unlikely);
            continue;
        };
    }
}

FunctionfromEd25519[src]

pub fn fromEd25519(ed25519_key_pair: crypto.sign.Ed25519.KeyPair) (IdentityElementError || EncodingError)!KeyPair

Create a key pair from an Ed25519 key pair

Parameters

ed25519_key_pair: crypto.sign.Ed25519.KeyPair

Source Code

Source code
pub fn fromEd25519(ed25519_key_pair: crypto.sign.Ed25519.KeyPair) (IdentityElementError || EncodingError)!KeyPair {
    const seed = ed25519_key_pair.secret_key.seed();
    var az: [Sha512.digest_length]u8 = undefined;
    Sha512.hash(&seed, &az, .{});
    var sk = az[0..32].*;
    Curve.scalar.clamp(&sk);
    const pk = try publicKeyFromEd25519(ed25519_key_pair.public_key);
    return KeyPair{
        .public_key = pk,
        .secret_key = sk,
    };
}

Source Code

Source code
pub const KeyPair = struct {
    /// Public part.
    public_key: [public_length]u8,
    /// Secret part.
    secret_key: [secret_length]u8,

    /// Deterministically derive a key pair from a cryptograpically secure secret seed.
    ///
    /// Except in tests, applications should generally call `generate()` instead of this function.
    pub fn generateDeterministic(seed: [seed_length]u8) IdentityElementError!KeyPair {
        const kp = KeyPair{
            .public_key = try X25519.recoverPublicKey(seed),
            .secret_key = seed,
        };
        return kp;
    }

    /// Generate a new, random key pair.
    pub fn generate() KeyPair {
        var random_seed: [seed_length]u8 = undefined;
        while (true) {
            crypto.random.bytes(&random_seed);
            return generateDeterministic(random_seed) catch {
                @branchHint(.unlikely);
                continue;
            };
        }
    }

    /// Create a key pair from an Ed25519 key pair
    pub fn fromEd25519(ed25519_key_pair: crypto.sign.Ed25519.KeyPair) (IdentityElementError || EncodingError)!KeyPair {
        const seed = ed25519_key_pair.secret_key.seed();
        var az: [Sha512.digest_length]u8 = undefined;
        Sha512.hash(&seed, &az, .{});
        var sk = az[0..32].*;
        Curve.scalar.clamp(&sk);
        const pk = try publicKeyFromEd25519(ed25519_key_pair.public_key);
        return KeyPair{
            .public_key = pk,
            .secret_key = sk,
        };
    }
}