3.4 KiB
Типы данных
Сия спецификация, помимо всего прочего, также определяет некоторые необходимые типы и структуры данных. В данном файле вы найдёте их описание и декларации.
CryptoAlgoType
Перечисление всех допустимых к использованию в базовом протоколе алгоритмов вычисления хэшей, контрольных сумм, симметричного и ассиметричного шифрования.
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
. Размерность опускается для контрольных сумм и не-криптографических функций.
struct CryptoAlgo {
CryptoAlgoType Type;
uint8_t Size;
};
ServerDescriptor
Дескриптор сервера, представляющий из себя хэш открытого ключа серверной подписи и использующийся алгоритм. Длинна хэша может варьироваться, но всегда не более 512 бит.
struct ServerDescriptor {
char[64] Hash;
CryptoAlgo Type;
};
LocID
Идентификатор локального для конкретного сервера объекта.
typedef uint64_t LocID;
GlobID
Идентификатор глобального объекта.
struct GlobID {
uint64_t Object;
ServerDescriptor Server;
};
Power
Права доступа к какому-либо объекту. Представляет из себя набор следующих флагов:
0b00000000000000000000000000000001
: чтение0b00000000000000000000000000000010
: запись0b00000000000000000000000000000100
: удаление0b10000000000000000000000000000000
: изменение прав доступа0b01111111111111111111111111111000
: нераспределено
Нераспределённые флаги могут быть использованы в расширениях протокола.
typedef uint32_t Power;