# `Tezex.Crypto.PrivateKey`
[🔗](https://github.com/objkt-com/tezex/blob/v4.0.0/lib/crypto/private_key.ex#L1)

Holds private key data.

Used to create private keys and created public keys from private keys.

Parameters:
- `:secret` [`t:binary/0`]: public key point data;
- `:curve` [`t:Tezex.Crypto.Curve.t/0`]: public key curve information.

# `t`

```elixir
@type t() :: %Tezex.Crypto.PrivateKey{curve: Tezex.Crypto.Curve.t(), secret: binary()}
```

# `__struct__`
*struct* 

Holds private key data.

Parameters:
- `:secret` [`t:binary/0`]: private key secret number as bytes
- `:curve` [`t:Tezex.Crypto.Curve.t/0`]: private key curve information

# `from_encoded_key`

```elixir
@spec from_encoded_key(String.t(), String.t() | nil) :: {:ok, t()} | {:error, atom()}
```

Creates a private key from a Tezos encoded key string.

Supports both encrypted and unencrypted private keys in the formats:
- edsk... (Ed25519 seed or secret key)
- edesk... (Ed25519 encrypted seed)
- spsk... (Secp256k1 secret key)
- spesk... (Secp256k1 encrypted secret key)
- p2sk... (P256 secret key) 
- p2esk... (P256 encrypted secret key)
- BLsk... (BLS12-381 secret key)
- BLesk... (BLS12-381 encrypted secret key)

## Parameters

- `encoded_key` - Base58-encoded private key string
- `passphrase` - Passphrase for encrypted keys (optional)

## Returns

- `{:ok, private_key}` - Successfully parsed private key
- `{:error, reason}` - Parsing failed

# `from_encoded_key!`

```elixir
@spec from_encoded_key!(String.t(), String.t() | nil) :: t()
```

Creates a private key from a Tezos encoded key string (raises on error).

## Parameters

- `encoded_key` - Base58-encoded private key string
- `passphrase` - Passphrase for encrypted keys (optional)

## Returns

- `private_key` - Successfully parsed private key

## Raises

- `RuntimeError` - When key parsing fails

# `generate`

```elixir
@spec generate(nil | binary(), atom()) :: t()
```

Creates a new private key

Parameters:
- `secret` [`t:binary/0`]: private key secret. Default: nil -> random key will be generated
- `curve_name` [`t:atom/0`]: curve name. Default: :secp256k1

Returns:
- `private_key` [`t:Tezex.Crypto.PrivateKey.t/0`]: private key struct

## Example:

    iex> Tezex.Crypto.PrivateKey.generate()
    %Tezex.Crypto.PrivateKey{...}

# `get_public_key`

```elixir
@spec get_public_key(t()) :: Tezex.Crypto.PublicKey.t()
```

Gets the public key associated with a private key

Parameters:
- `private_key` [`t:Tezex.Crypto.PrivateKey.t/0`]: private key struct

Returns:
- `public_key` [`t:Tezex.Crypto.PublicKey.t/0`]: public key struct

## Example:

    iex> Tezex.Crypto.PrivateKey.get_public_key(private_key)
    %Tezex.Crypto.PublicKey{...}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
