diff options
Diffstat (limited to 'notes')
| -rw-r--r-- | notes/fatcat_idents.md | 25 | 
1 files changed, 25 insertions, 0 deletions
| diff --git a/notes/fatcat_idents.md b/notes/fatcat_idents.md new file mode 100644 index 00000000..84322604 --- /dev/null +++ b/notes/fatcat_idents.md @@ -0,0 +1,25 @@ + +## Identifiers + +Fatcat entity identifiers are 128-bit UUIDs encoded in base32 format. Revision +ids are also UUIDs, and encoded in normal UUID fashion, to disambiguate from +edity identifiers. + +Python helpers for conversion: + +    import base64 +    import uuid + +    def fcid2uuid(s): +        s = s.split('_')[-1].upper().encode('utf-8') +        assert len(s) == 26 +        raw = base64.b32decode(s + b"======") +        return str(uuid.UUID(bytes=raw)).lower() + +    def uuid2fcid(s): +        raw = uuid.UUID(s).bytes +        return base64.b32encode(raw)[:26].lower().decode('utf-8') + +    test_uuid = '00000000-0000-0000-3333-000000000001' +    assert test_uuid == fcid2uuid(uuid2fcid(test_uuid)) + | 
