stadium-proto/DATA TYPES.md

3.4 KiB
Raw Blame History

Типы данных

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

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;