# Типы данных Сия спецификация, помимо всего прочего, также определяет некоторые необходимые типы и структуры данных. В данном файле вы найдёте их описание и декларации. #### CryptoAlgoType Перечисление всех допустимых к использованию в базовом протоколе алгоритмов вычисления хэшей, контрольных сумм, симметричного и ассиметричного шифрования. ```C++ enum CryptoAlgoType: uint8_t { Reserved = 0, // Checksums CRC_16 = 11, CRC_32, CRC_64, fletcher_8, fletcher_16, fletcher_32, Adler_32, // Non-crypto hashes Murmur64A = 31, Murmur3_32, Murmur3_128, Spooky_128, // Cryptographic hashes BLAKE2b = 61, BLAKE3, GOST, HAS160, HAVAL, MD2, MD5, RIPEMD, SHA1, SHA2, SHAKE128, SHAKE256, Skein, Snefru, Streebog, Tiger, Whirlpool, // Symmetric key block ciphers Blowfish = 131, Twofish, TripleDES_CBC, AES_GCM, // AKA Rijndael AES_CBC, AES_CTR, Camellia, Salsa20, CAST5, CAST6, Kuznyechik, MESH, Akelarre, RC6, // TODO }; ``` #### CryptoAlgo Структура, определяющая криптографический алгоритм и размерность. Для шифров это размер ключа, а для хэшей - размер выходных данных (если применимо). Для хэш-функций и симметричных шифров размер ключа вычисляется по формуле `Size << 4`, а для ассиметричных по формуле `Size << 8`. Размерность опускается для контрольных сумм и не-криптографических функций. ```C++ struct CryptoAlgo { CryptoAlgoType Type; uint8_t Size; }; ``` #### ServerDescriptor Дескриптор сервера, представляющий из себя хэш открытого ключа серверной подписи и использующийся алгоритм. Длинна хэша может варьироваться, но всегда не более 512 бит. ```C++ struct ServerDescriptor { char[64] Hash; CryptoAlgo Type; }; ``` #### LocID Идентификатор локального для конкретного сервера объекта. ```C++ typedef uint64_t LocID; ``` #### GlobID Идентификатор глобального объекта. ```C++ struct GlobID { uint64_t Object; ServerDescriptor Server; }; ``` #### Power Права доступа к какому-либо объекту. Представляет из себя набор следующих флагов: - `0b00000000000000000000000000000001`: чтение - `0b00000000000000000000000000000010`: запись - `0b00000000000000000000000000000100`: удаление - `0b10000000000000000000000000000000`: изменение прав доступа - `0b01111111111111111111111111111000`: нераспределено Нераспределённые флаги могут быть использованы в расширениях протокола. ```C++ typedef uint32_t Power; ```