Skip to content

Firmar con un certificado del Almacén de macOS #2005

Closed

Description

@sgomez

Parent

#2000

What to build

Quien elige un certificado de su llavero firma con él desde la ventana y desde una sede; macOS pide permiso o contraseña con su diálogo. Cancelar, la contraseña incorrecta y el resto de errores llegan como las situaciones de siempre.

Acceptance criteria

  • Rust calcula el resumen y el sistema lo firma con RSA PKCS#1 v1.5, RSA PSS y ECDSA, con la rama SHA-1 explícita.
  • Pruebas cfg(macos) contra un llavero temporal firman con cada algoritmo y verifican la firma.
  • Los errores del sistema se traducen a cancelación, contraseña o PIN incorrecto, PIN bloqueado y tarjeta retirada.

Blocked by

Spec extract

Implementation Decisions (from #2000):

  • ID-530: La firma sigue el ADR-0001: Rust calcula el resumen y el sistema firma el resumen ya calculado con RSA PKCS#1 v1.5, RSA PSS y ECDSA (que macOS ya devuelve en DER), SHA-1 incluido con su rama explícita (Windows: CNG firma con SHA-1 cuando la preferencia lo permite #1625). Los errores del sistema se traducen a las situaciones de siempre: cancelación, contraseña o PIN incorrecto, PIN bloqueado, tarjeta retirada.
  • ID-537: Para el Almacén de macOS no hay diálogo propio: la contraseña o el PIN los pide macOS, como en Windows (ID-477).

Testing Decisions (from #2000):

  • TD-131: Una buena prueba mira el comportamiento visible desde fuera: la lista que recibe la ventana con sus chips y su orden, el estado del lector, lo que se firma y si verifica, el estado de la CA y del manejador. No mira llamadas a Security.framework ni a LaunchServices.
  • TD-134: El adaptador del Almacén de macOS con pruebas cfg(macos) contra un llavero temporal que cada prueba crea, desbloquea y borra, con un certificado de pruebas propio (RSA y curva elíptica): listar, firmar con PKCS#1, PSS y ECDSA y verificar la firma; importar un .p12 y quitarlo. Nunca tocan el llavero de inicio de sesión de quien las corre. Precedente: las pruebas CNG de TD-128, que crean y borran su certificado.

Complexity

complex — firma trifásica por una API nueva con cuatro algoritmos y traducción de errores. Estimación: unos 110k tokens.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, an agent can pick it up

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions