3.6 KiB
Типы данных
Сия спецификация, помимо всего прочего, также определяет некоторые необходимые типы и структуры данных. В данном файле вы найдёте их описание и декларации.
CryptoAlgoType
Перечисление всех допустимых к использованию в базовом протоколе алгоритмов вычисления хэшей, контрольных сумм, симметричного и ассиметричного шифрования.
enum CryptoAlgoType: uint8_t {
Reserved = 0,
// Checksums
CRC_16 = 10,
CRC_32 = 11,
CRC_64 = 12,
fletcher_8 = 13,
fletcher_16 = 14,
fletcher_32 = 15,
Adler_32 = 16,
// Non-crypto hashes
Pearson_8 = 30,
Murmur64A = 31,
Murmur3_32 = 32,
Murmur3_128 = 33,
Spooky_128 = 34,
// Cryptographic hashes
BLAKE2b = 60,
BLAKE3 = 61,
GOST = 62,
HAS160 = 63,
HAVAL = 64,
MD2 = 65,
MD5 = 66,
RIPEMD = 67,
SHA1 = 68,
SHA2 = 69,
SHAKE128 = 70,
SHAKE256 = 71,
Skein = 72,
Snefru = 73,
Streebog = 74,
Tiger = 75,
Whirlpool = 76,
// Symmetric key block ciphers
Blowfish = 130,
Twofish = 131,
TripleDES_CBC = 132,
AES_GCM = 133, // AKA Rijndael
AES_CBC = 134,
AES_CTR = 135,
Camellia = 136,
Salsa20 = 137,
CAST5 = 138,
CAST6 = 139,
Kuznyechik = 140,
MESH = 141,
Akelarre = 142,
RC6 = 143,
// 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;