# `Sinetex.Serial`
[🔗](https://github.com/openspb/sinetex/blob/v0.1.0/lib/sinetex/serial.ex#L1)

Certificate serial numbers as written in fields C11 and C13
(*Manual de Segurança do SFN* §5.1.4, §5.2.6).

The serial number is written in upper-case hexadecimal, left-padded with
the ASCII character `"0"` to 32 bytes.

# `encode`

```elixir
@spec encode(integer()) ::
  {:ok, &lt;&lt;_::256&gt;&gt;} | {:error, :serial_too_long | :invalid_serial}
```

Encodes a serial number into the 32-byte field format.

    iex> Sinetex.Serial.encode(0x5D77DA7B6F02EFA1EDDA741E78FF3508)
    {:ok, "5D77DA7B6F02EFA1EDDA741E78FF3508"}

    iex> Sinetex.Serial.encode(0x3B3BC056)
    {:ok, "0000000000000000000000003B3BC056"}

Serial numbers longer than 16 bytes do not fit the field:

    iex> Sinetex.Serial.encode(0x0102030405060708090A0B0C0D0E0F1011)
    {:error, :serial_too_long}

# `valid?`

```elixir
@spec valid?(term()) :: boolean()
```

Returns `true` if `field` is a well-formed C11/C13 value: 32 bytes, each one
of `0-9` or `A-F`.

    iex> Sinetex.Serial.valid?("0000000000000000000000003B3BC056")
    true

    iex> Sinetex.Serial.valid?("0000000000000000000000003b3bc056")
    false

---

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