Sat.Certificados.PrivateKey (sat_certificados v4.0.1)

Copy Markdown

Llave privada RSA en PKCS#8 (típico archivo .key del SAT, DER cifrado o PEM claro).

Summary

Types

Opciones de carga.

t()

Functions

true si esta llave corresponde al certificado dado (mismo módulo y exponente).

Carga llave desde DER (p. ej. .key cifrado del SAT) usando la contraseña.

Lee archivo .key (DER cifrado o PEM claro).

Carga llave desde PEM (sin cifrar).

Desencripta un mensaje cifrado con la llave pública del certificado correspondiente (RSA PKCS#1 v1.5). El input debe estar en Base64. Retorna el plaintext como binary.

Firma datos con RSA y SHA-256 por defecto; devuelve la firma en Base64.

PEM PKCS#8 (sin cifrar) de la llave decodificada.

Types

load_opts()

@type load_opts() :: [{:strict, boolean()}]

Opciones de carga.

  • :strict — si true, rechaza llaves no cifradas (PKCS#8 plano o PKCS#1). Por convención SAT las .key siempre vienen cifradas.

t()

@type t() :: %Sat.Certificados.PrivateKey{decoded: term(), raw_der: binary()}

Functions

belongs_to_certificate?(private_key, cert)

@spec belongs_to_certificate?(t(), Sat.Certificados.Certificate.t()) :: boolean()

true si esta llave corresponde al certificado dado (mismo módulo y exponente).

from_der(der, password, opts \\ [])

@spec from_der(binary(), String.t() | nil, load_opts()) ::
  {:ok, t()} | {:error, term()}

Carga llave desde DER (p. ej. .key cifrado del SAT) usando la contraseña.

Soporta PKCS#8 EncryptedPrivateKeyInfo (formato SAT), PKCS#8 PrivateKeyInfo plano y PKCS#1 RSAPrivateKey plano.

Cuando opts[:strict] es true, solo acepta PKCS#8 cifrado.

from_file(path, password \\ nil, opts \\ [])

@spec from_file(String.t(), String.t() | nil, load_opts()) ::
  {:ok, t()} | {:error, term()}

Lee archivo .key (DER cifrado o PEM claro).

En modo strict: true rechaza PEM y DER sin cifrar.

from_pem(pem)

@spec from_pem(String.t()) :: {:ok, t()} | {:error, term()}

Carga llave desde PEM (sin cifrar).

rsa_decrypt(private_key, ciphertext_b64)

@spec rsa_decrypt(t(), String.t()) :: {:ok, binary()} | {:error, term()}

Desencripta un mensaje cifrado con la llave pública del certificado correspondiente (RSA PKCS#1 v1.5). El input debe estar en Base64. Retorna el plaintext como binary.

sign(private_key, data, algo \\ :sha256)

@spec sign(t(), iodata(), atom()) :: String.t()

Firma datos con RSA y SHA-256 por defecto; devuelve la firma en Base64.

Algoritmos válidos: :sha256, :sha384, :sha512, :sha, :md5.

to_pem(private_key)

@spec to_pem(t()) :: String.t()

PEM PKCS#8 (sin cifrar) de la llave decodificada.