stadium-proto/DATA TYPES.md

123 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Типы данных
Сия спецификация, помимо всего прочего, также определяет некоторые необходимые типы и структуры данных. В данном файле вы найдёте их описание и декларации.
#### CryptoAlgoType
Перечисление всех допустимых к использованию в базовом протоколе алгоритмов вычисления хэшей, контрольных сумм, симметричного и ассиметричного шифрования.
```C++
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
};
```
<!-- TODO: RSA, YAK, CramerShoup system, Paillier cryptosystem, curves (25519 & 448), ElGamal, etc. -->
#### 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;
```