1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
#!/bin/sh
: ${uuid=./uuid}
exp='encode: STR: f50c5fcc-6b66-11ef-bafc-efdff7d5f2f6
SIV: 325725109554302597798550804656796594934
decode: variant: DCE 1.1, ISO/IEC 11578:1996
version: 1 (time and node based)
content: time: 2024-09-05 09:12:21.383982.0 UTC
clock: 15100 (usually random)
node: ef:df:f7:d5:f2:f6 (local multicast)'
[ "$($uuid -d f50c5fcc-6b66-11ef-bafc-efdff7d5f2f6 )" = "$exp" ] || { echo "uuid: -d f50c5fcc-6b66-11ef-bafc-efdff7d5f2f6 wrong" >&2; exit 1; }
[ "$($uuid -dF SIV 325725109554302597798550804656796594934)" = "$exp" ] || { echo "uuid: -dF SIV 325725109554302597798550804656796594934 wrong" >&2; exit 1; }
[ "$(printf '\365\014\137\314\153\146\021\357\272\374\357\337\367\325\362\366' | $uuid -dF BIN -)" = "$exp" ] || { echo "uuid: -dF BIN ... wrong" >&2; exit 1; }
# https://bugs.debian.org/1041542
timemin='encode: STR: 00000000-0000-1100-a000-000000000000
SIV: 80291759423830037102592
decode: variant: DCE 1.1, ISO/IEC 11578:1996
version: 1 (time and node based)
content: time: 1811-02-16 23:50:03.792793.6 UTC
clock: 8192 (usually random)
node: 00:00:00:00:00:00 (global unicast)'
[ "$($uuid -d 00000000-0000-1100-a000-000000000000)" = "$timemin" ] || {
echo "uuid: -d 00000000-0000-1100-a000-000000000000 wrong" >&2
[ "$($uuid -d 00000000-0000-1100-a000-000000000000)" = "$(printf '%s\n' "$timemin" | sed 's/1811-02-16 23:50:03.792793.6/1947-03-26 06:18:19.792793.6/')" ] && \
echo " 32-bit time_t!" >&2 || exit 1
}
timemax='encode: STR: ffffffff-ffff-1fff-bfc1-efc8990bbfa4
SIV: 340282366920937405648653289334120365988
decode: variant: DCE 1.1, ISO/IEC 11578:1996
version: 1 (time and node based)
content: time: 5236-03-31 21:21:00.684697.5 UTC
clock: 16321 (usually random)
node: ef:c8:99:0b:bf:a4 (local multicast)'
[ "$($uuid -d FFFFFFFF-FFFF-1FFF-bfc1-efc8990bbfa4)" = "$timemax" ] || {
echo "uuid: -d FFFFFFFF-FFFF-1FFF-bfc1-efc8990bbfa4 wrong" >&2
[ "$($uuid -d FFFFFFFF-FFFF-1FFF-bfc1-efc8990bbfa4)" = "$(printf '%s\n' "$timemax" | sed 's/5236-03-31 21:21:00.684697.5/1969-10-19 10:02:36.684697.5/')" ] && \
echo " 32-bit time_t!" >&2 || exit 1
}
# https://bugs.debian.org/864530
# TODO: joey@darkstar:~>perl -le 'use OSSP::uuid; my $uuid = OSSP::uuid->new; $uuid->import("str", "4eb841ca-ce98-4590-8ea2-c4643bfa537bad"); print $uuid->export("str")'
$uuid -d 4eb841ca-ce98-4590-8ea2-c4643bfa537bad >&2 2>/dev/null && { echo "uuid: -d 4eb841ca-ce98-4590-8ea2-c4643bfa537bad was accepted (\"bad\" trailer)" >&2; exit 1; }
variant() {
[ "$($uuid -d "00000000-0000-0000-${1}00-000000000001" | sed -n '/variant/s/.*: //p')" = "$2" ] || { echo "uuid: -d 00000000-0000-0000-${1}00-000000000001 variant != $2" >&2; exit 1; }
}
variant 00 "reserved (NCS backward compatible)" # 0
variant 80 "DCE 1.1, ISO/IEC 11578:1996" # 1
variant C0 "reserved (Microsoft GUID)" # 2
variant E0 "reserved (future use)" # 3
variant F0 "unknown" # 4
variant F8 "unknown" # 5
variant FC "unknown" # 6
variant FE "unknown" # 7
variant FF "unknown" # 8
version() {
[ "$($uuid -d "00000000-0000-${1}000-0000-000000000001" | sed -n '/ version/s/.*: //p')" = "$2" ] || { echo "uuid: -d 00000000-0000-${1}000-0000-000000000001 version != $2" >&2; exit 1; }
}
version 0 "0 (unknown)"
version 1 "1 (time and node based)"
version 2 "2 (unknown)"
version 3 "3 (name based, MD5)"
version 4 "4 (random data based)"
version 5 "5 (name based, SHA-1)"
version 6 "6 (time and node based (time in reverse order))"
version 7 "7 (UNIX time + random data)"
for i in "8 8" "9 9" "a 10" "b 11" "c 12" "d 13" "e 14" "f 15"; do
version ${i% *} "${i#* } (unknown)"
done
# https://datatracker.ietf.org/doc/html/rfc9562#appendix-A.1
$uuid -d C232AB00-9414-11EC-B3C8-9F6BDECED846 | grep -qF '2022-02-22 19:22:22.000000.0' || { echo "uuid: v1 vector C232AB00-9414-11EC-B3C8-9F6BDECED846 wrong" >&2; exit 1; }
[ "$($uuid -v3 6ba7b810-9dad-11d1-80b4-00c04fd430c8 www.example.com)" = "5df41881-3aed-3515-88a7-2f4a814cf09e" ] || { echo "uuid: v3 vector 6ba7b810-9dad-11d1-80b4-00c04fd430c8 www.example.com wrong" >&2; exit 1; }
[ "$($uuid -v5 6ba7b810-9dad-11d1-80b4-00c04fd430c8 www.example.com)" = "2ed6657d-e927-568b-95e1-2665a8aea6a2" ] || { echo "uuid: v5 vector 6ba7b810-9dad-11d1-80b4-00c04fd430c8 www.example.com wrong" >&2; exit 1; }
$uuid -d 1EC9414C-232A-6B00-B3C8-9F6BDECED846 | grep -qF '2022-02-22 19:22:22.000000.0' || { echo "uuid: v6 vector 1EC9414C-232A-6B00-B3C8-9F6BDECED846 wrong" >&2; exit 1; }
$uuid -d 017F22E2-79B0-7CC3-98C4-DC0C0C07398F | grep -qF '2022-02-22 19:22:22.000' || { echo "uuid: v7 vector 017F22E2-79B0-7CC3-98C4-DC0C0C07398F wrong" >&2; exit 1; }
[ "$($uuid -v3 ns:URL https://hinfo.network/)" = c7f3eb3b-e7c8-3b6f-9b26-5a627478c57c ] || { echo "uuid: -v3 ns:URL https://hinfo.network/ != c7f3eb3b-e7c8-3b6f-9b26-5a627478c57c" >&2; exit 1; }
[ "$($uuid -v3 nil https://hinfo.network/)" = 22f64d2e-f513-3e3b-bb47-aff88457bfff ] || { echo "uuid: -v3 nil https://hinfo.network/ != 22f64d2e-f513-3e3b-bb47-aff88457bfff" >&2; exit 1; }
[ "$($uuid -v5 ns:URL https://hinfo.network/)" = a09c8ed6-09ed-5e3e-92b4-50352f02076f ] || { echo "uuid: -v5 ns:URL https://hinfo.network/ != a09c8ed6-09ed-5e3e-92b4-50352f02076f" >&2; exit 1; }
[ "$($uuid -v5 nil https://hinfo.network/)" = 40b5012d-2428-5f89-925c-fe1a8d2a7a6c ] || { echo "uuid: -v5 nil https://hinfo.network/ != 40b5012d-2428-5f89-925c-fe1a8d2a7a6c" >&2; exit 1; }
[ "$($uuid -d 0191c41a-9de1-7f96-b8cb-88e4348ee74c)" = \
'encode: STR: 0191c41a-9de1-7f96-b8cb-88e4348ee74c
SIV: 2086088501348764349551890213853128524
decode: variant: DCE 1.1, ISO/IEC 11578:1996
version: 7 (UNIX time + random data)
content: time: 2024-09-05 21:32:44.385 UTC
random: 0F:96:38:CB:88:E4:34:8E:E7:4C' ] || { echo "uuid: -d 0191c41a-9de1-7f96-b8cb-88e4348ee74c wrong" >&2; exit 1; }
timemax='encode: STR: ffffffff-ffff-7fff-bfff-ffffffffffff
SIV: 340282366920937858995853114098753470463
decode: variant: DCE 1.1, ISO/IEC 11578:1996
version: 7 (UNIX time + random data)
content: time: 10889-08-02 05:31:50.655 UTC
random: 0F:FF:3F:FF:FF:FF:FF:FF:FF:FF'
[ "$($uuid -d ffffffff-ffff-7fff-bfff-ffffffffffff)" = "$timemax" ] || {
echo "uuid: -d ffffffff-ffff-7fff-bfff-ffffffffffff wrong" >&2
[ "$($uuid -d ffffffff-ffff-7fff-bfff-ffffffffffff)" = "$(printf '%s\n' "$timemax" | sed 's/10889-08-02 05:31:50.655/1906-11-07 10:26:14.655/')" ] && \
echo " 32-bit time_t!" >&2 || exit 1
}
[ "$($uuid -dFSIV 0)" = \
'encode: STR: 00000000-0000-0000-0000-000000000000
SIV: 0
decode: variant: n.a.
version: 0 (n.a.)
content: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
(special case: DCE 1.1 Nil UUID)' ] || { echo "uuid: -d 00000000-0000-0000-0000-000000000000 wrong" >&2; exit 1; }
[ "$($uuid -d ffffffff-ffff-ffff-ffff-ffffffffffff)" = \
'encode: STR: ffffffff-ffff-ffff-ffff-ffffffffffff
SIV: 340282366920938463463374607431768211455
decode: variant: n.a.
version: 15 (n.a.)
content: FF:FF:FF:FF:FF:FF:0F:FF:3F:FF:FF:FF:FF:FF:FF:FF
(special case: RFC 9562 Max UUID)' ] || { echo "uuid: -d ffffffff-ffff-ffff-ffff-ffffffffffff wrong" >&2; exit 1; }
|