struct KeyPair [src]

Alias for std.crypto.25519.x25519.X25519.KeyPair

An X25519 key pair.

Fields

public_key: [public_length]u8Public part.
secret_key: [secret_length]u8Secret part.

Members

Source

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, }; } }