stadium-proto/DATA TYPES.md

3.6 KiB
Raw Blame History

Типы данных

Сия спецификация, помимо всего прочего, также определяет некоторые необходимые типы и структуры данных. В данном файле вы найдёте их описание и декларации.

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;