Table of Contents

ICP-Brasil

SimpleSign provides built-in support for the Brazilian Public Key Infrastructure (ICP-Brasil), including trust anchors, certificate detection, and CPF/CNPJ extraction.

Installation

dotnet add package SimpleSign.Brasil

Trust Anchors

The SimpleSign.Brasil package bundles all AC Raiz (root CA) certificates from ICP-Brasil (v4 through v13), enabling offline chain validation:

using SimpleSign.Brasil;
using SimpleSign.Brasil.Signing;

// Register ICP-Brasil trust anchors for validation
var brasil = new BrasilExtension();
var validator = new PdfSignatureValidator(
    new ValidationOptions { CheckRevocation = true },
    trustAnchorProviders: brasil.TrustAnchorProviders
);

var results = await validator.ValidateAsync(File.OpenRead("signed.pdf"));

Certificate Detection

Detect whether a certificate belongs to the ICP-Brasil chain:

using SimpleSign.Brasil.IcpBrasil;

bool isIcpBrasil = IcpBrasilChainValidator.IsIcpBrasilCertificate(cert);

Extract CPF / CNPJ

ICP-Brasil certificates embed the holder's CPF or CNPJ in custom OIDs:

var (cpf, cnpj) = IcpBrasilChainValidator.ExtractCpfCnpj(cert);

if (cpf is not null)
    Console.WriteLine($"CPF: {cpf}");
if (cnpj is not null)
    Console.WriteLine($"CNPJ: {cnpj}");

Detect Certificate Level

ICP-Brasil certificates have levels (A1–A4 for authentication, S1–S4 for confidentiality):

var level = IcpBrasilChainValidator.DetectCertificateLevel(cert);
// IcpBrasilCertificateLevel.A1, A3, S1, etc.

Detect Signature Policy

var policy = IcpBrasilChainValidator.DetectPolicy(cert);
// IcpBrasilPolicy.AdRb, AdRt, AdRv, AdRc, AdRa

Full Chain Validation

Validate the entire certificate chain against ICP-Brasil root CAs:

var validator = new IcpBrasilChainValidator();
var result = await validator.ValidateAsync(cert);

Console.WriteLine($"Chain Valid: {result.IsChainValid}");
Console.WriteLine($"ICP-Brasil: {result.IsIcpBrasilCertificate}");
Console.WriteLine($"Policy: {result.DetectedPolicy}");
Console.WriteLine($"Level: {result.CertificateLevel}");

foreach (var error in result.Errors)
    Console.WriteLine($"Error: {error}");

AEA — Advanced Electronic Signature (Lei 14.063/2020)

SimpleSign supports signature manifests for Lei 14.063 compliance, which defines three levels of electronic signatures in Brazilian government interactions:

  • Simple (EES) — basic electronic signature
  • Advanced (AES) — uses ICP-Brasil or Gov.br credentials
  • Qualified (QES) — uses ICP-Brasil digital certificate

Gov.br Integration

Validate certificate assurance levels for Gov.br authentication:

var govValidator = new GovBrChainValidator();
var level = await govValidator.GetAssuranceLevelAsync(certificate);
// Bronze, Silver, Gold

CLI Support

The CLI tool automatically detects ICP-Brasil certificates during validation:

simplesign validate signed.pdf

The output will show ICP-Brasil specific information when a signer certificate is from the Brazilian PKI.