Function init [src]

Create an blind key pair from an existing key pair, a blinding seed and a context.

Prototype

pub fn init(key_pair: Ed25519.KeyPair, blind_seed: [blind_seed_length]u8, ctx: []const u8) (NonCanonicalError || IdentityElementError)!BlindKeyPair

Parameters

key_pair: Ed25519.KeyPairblind_seed: [blind_seed_length]u8ctx: []const u8

Source

pub fn init(key_pair: Ed25519.KeyPair, blind_seed: [blind_seed_length]u8, ctx: []const u8) (NonCanonicalError || IdentityElementError)!BlindKeyPair { var h: [Sha512.digest_length]u8 = undefined; Sha512.hash(&key_pair.secret_key.seed(), &h, .{}); Curve.scalar.clamp(h[0..32]); const scalar = Curve.scalar.reduce(h[0..32].*); const blind_h = blindCtx(blind_seed, ctx); const blind_factor = Curve.scalar.reduce(blind_h[0..32].*); const blind_scalar = Curve.scalar.mul(scalar, blind_factor); const blind_public_key = BlindPublicKey{ .key = try PublicKey.fromBytes((Curve.basePoint.mul(blind_scalar) catch return error.IdentityElement).toBytes()), }; var prefix: [64]u8 = undefined; prefix[0..32].* = h[32..64].*; prefix[32..64].* = blind_h[32..64].*; const blind_secret_key = BlindSecretKey{ .prefix = prefix, .blind_scalar = blind_scalar, .blind_public_key = blind_public_key, }; return BlindKeyPair{ .blind_public_key = blind_public_key, .blind_secret_key = blind_secret_key, }; }