Appendix B: IPv6 Address Normalization

Prev

Normalized IPv6 addresses are required for upload into DataX. IPv6 addresses must be normalized according to RFC 5952 normalization rules, so that the data can be 100% accurately matched after encryption. If IPv6 addresses are not normalized, a single IP address can be written in multiple valid formats (e.g., 2001:db8:0:0::1 and 2001:0db8::0001).

Format

Description

Normalized Example

Full IPv6 Address

128-bit address, maximally compressed per RFC 5952 rules

2001:db8::1

Important

  • Submitting /64 prefixes or other CIDR blocks is not supported.

  • IPv4-Mapped IPv6: Do not submit addresses like ::ffff:192.168.1.1. Please hash the original IPv4 address instead.

Normalization Rules (RFC 5952)

Normalize IPv6 addresses as follows:

  1. Suppress Leading Zeros: Leading zeros in each 16-bit group must be removed.

    • 2001:0db8 → 2001:db8

  2. Longest Zero Run (::): Use :: to replace the longest consecutive sequence of all-zero groups.

    • 2001:db8:0:0:0:0:0:1 → 2001:db8::1

  3. Tie-breaking: If there are two zero runs of equal length, compress the first (leftmost) one.

    • 2001:db8:0:0:1:0:0:1 → 2001:db8::1:0:0:1

  4. No Single Group Compression: Do not use :: to replace a single 16-bit zero group. Use :0: instead.

    • 2001:db8:0:1:0:0:0:1 → 2001:db8:0:1::1

  5. Lowercase: All hexadecimal characters must be lowercase.

    • 2001:DB8:AAAA::1 → 2001:db8:aaaa::1

Verify Normalized IPv6 Addresses

The normalized IPv6 address must be verified using SHA256 hashing. The hash input must be the UTF-8 encoded normalized string with no trailing newline.

To Verify the Normalized IPv6 Address:

Run echo -n "2001:db8::1" | sha256sum in the terminal. The output must be 5afd19e...1ed536. If it differs, the normalization or encoding is wrong.

Important

Trailing Newline

  • Many echo commands add a \n which completely changes the hash. Always use echo -n.

Examples of Normalized IPs

The following are examples of normalized IPv6 addresses with their hash results.

Normalized Value

SHA256 Hash Result

2001:db8::1

5afd19e856d1c18d17d600dfd2b5f534992333985e126c2a951047102c1ed536

2001:db8:aaaa:1::1

a26075760baa14c6db85931695017ae4e20b56b01b017ceacbd5c6fe2f69eecc

fe80::202:b3ff:fe1e:8329

a63b8244f25c80d6c736ddc532c28a17a448543b6b5e9dbff39d5c3187822c97

2001:db8:0:1::1

a81588f63cc78f25925f96562007801a6b9bd628529c6812f6b968ff4ef03b81