Skip to content

Commit 6f8621e

Browse files
authored
docs(readme): fix encoding helpers wording
Clarify Base32 pad option; rebuild and test to keep translations in sync.
1 parent 87c1291 commit 6f8621e

1 file changed

Lines changed: 64 additions & 11 deletions

File tree

README-RU.md

Lines changed: 64 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,20 @@ CI охватывает Linux/Windows/macOS. Тестировалась с GCC,
3131

3232
---
3333

34+
## 📈 Версионирование / политика SemVer
35+
36+
* Следуем [Semantic Versioning](https://semver.org).
37+
* MAJOR: изменения, ломающие заголовки или экспортируемые символы.
38+
* MINOR: обратно совместимые добавления.
39+
* PATCH: исправления ошибок и внутренние изменения.
40+
41+
Макросы версии находятся в `<hmac_cpp/version.hpp>`:
42+
`HMAC_CPP_VERSION_MAJOR`, `HMAC_CPP_VERSION_MINOR`,
43+
`HMAC_CPP_VERSION_PATCH` и `HMAC_CPP_VERSION`.
44+
История — в [CHANGELOG.md](CHANGELOG.md).
45+
46+
---
47+
3448
## 🔧 Сборка и установка
3549

3650
Примеры, тесты и бенчмарки по умолчанию отключены. Включаются опциями:
@@ -39,6 +53,10 @@ CI охватывает Linux/Windows/macOS. Тестировалась с GCC,
3953
* `HMACCPP_BUILD_TESTS`
4054
* `HMACCPP_BUILD_BENCH`
4155

56+
Библиотека по умолчанию собирается **статически**. Чтобы получить динамическую,
57+
используйте `-DHMACCPP_BUILD_SHARED=ON`. Макрос `HMAC_CPP_API` пуст для статической
58+
сборки и управляет экспортом/импортом символов в динамической.
59+
4260
### Сборка
4361

4462
```bash
@@ -50,23 +68,21 @@ cmake --build build
5068

5169
```bash
5270
cmake --install build --prefix _install
71+
# MSVC
72+
cmake --install build --config Release --prefix _install
5373
```
5474

5575
Структура установки:
5676

5777
```
5878
_install/
59-
├─ include/hmac_cpp/
60-
│ ├─ hmac.hpp
61-
│ ├─ hmac_utils.hpp
62-
│ ├─ sha1.hpp
63-
│ ├─ sha256.hpp
64-
│ ├─ sha512.hpp
65-
│ └─ secure_buffer.hpp # если включён в сборку
79+
├─ include/hmac_cpp/...
6680
└─ lib/
6781
└─ libhmac_cpp.a
6882
```
6983

84+
Файл `hmac_cpp.pc` устанавливается для `pkg-config`.
85+
7086
### Использование с CMake
7187

7288
```cmake
@@ -79,6 +95,10 @@ target_link_libraries(my_app PRIVATE hmac_cpp::hmac_cpp)
7995
```bash
8096
# подберите пути под свой префикс
8197
g++ example.cpp -std=c++11 -I_install/include -L_install/lib -lhmac_cpp
98+
# MSVC
99+
cl /EHsc example.cpp /I _install\\include /link /LIBPATH:_install\\lib hmac_cpp.lib
100+
# pkg-config
101+
c++ example.cpp $(pkg-config --cflags --libs hmac_cpp)
82102
```
83103

84104
Предусмотрены скрипты сборки для MinGW: `build_*.bat`.
@@ -117,6 +137,26 @@ secure_buffer key(std::move(secret_string)); // обнуляет перемещ
117137
auto mac = hmac::get_hmac(key, payload, hmac::TypeHash::SHA256);
118138
```
119139
140+
### HMAC (сырой буфер)
141+
142+
```cpp
143+
std::vector<uint8_t> get_hmac(
144+
const void* key_ptr, size_t key_len,
145+
const void* msg_ptr, size_t msg_len,
146+
TypeHash type);
147+
```
148+
149+
### HMAC (векторы)
150+
151+
```cpp
152+
template<typename T>
153+
std::vector<uint8_t> get_hmac(
154+
const std::vector<T>& key,
155+
const std::vector<T>& msg,
156+
TypeHash type);
157+
// T должен быть char или uint8_t
158+
```
159+
120160
### PBKDF2 (RFC 8018)
121161
122162
Вывод ключа из пароля.
@@ -133,6 +173,8 @@ auto key = hmac::pbkdf2_hmac_sha256(password, salt, iters, 32); // 32 = AES-256
133173
* **Итерации**: подберите ~100–250 мс на целевой платформе (настольный ≈ 600k, ноутбук ≈ 300k, мобильный ≈ 150k).
134174
* **Длина ключа**: 32 байта; **PRF**: HMAC-SHA256.
135175

176+
> PBKDF2 в основном нагружает CPU; для пользовательских паролей по возможности предпочтительны KDF с высокой требовательностью к памяти, например Argon2 или scrypt.
177+
136178
**Пример сериализации** (бинарный):
137179

138180
```
@@ -208,6 +250,16 @@ bool v2 = hmac::is_token_valid(t2, secret_key, fingerprint, 60);
208250

209251
---
210252

253+
### Помощники кодирования
254+
255+
`hmac_cpp::encoding` предоставляет простые преобразования:
256+
257+
* **Base64** — стандартный `+/` и URL-безопасный `-_` алфавиты; `pad=true/false` включает или отключает `=`. `strict=true` отклоняет пробелы, смешанный паддинг и `+`/`/` при URL-алфавите; `strict=false` игнорирует ASCII-пробелы, допускает эти символы и добавляет недостающий паддинг.
258+
* **Base32**`pad=true/false` управляет `=`; `strict=true/false` работает аналогично.
259+
* **Base36** — кодирует сырые байты в ASCII-цифры/буквы; при декодировании требуется полный ввод.
260+
261+
---
262+
211263
## 📦 Совместимость с MQL5
212264

213265
Репозиторий предоставляет `sha256.mqh`, `sha512.mqh`, `hmac.mqh`, `hmac_utils.mqh` (MetaTrader 5).
@@ -281,18 +333,19 @@ g++ example.cpp -std=c++11 -I_install/include -L_install/lib -lhmac_cpp
281333
MSVC:
282334

283335
```bat
284-
cl /EHsc example.cpp /I _install\\include /link /LIBPATH:_install\\lib hmach_cpp.lib
336+
cl /EHsc example.cpp /I _install\\include /link /LIBPATH:_install\\lib hmac_cpp.lib
285337
```
286338

287339
---
288340

289341
## ⚠️ Исключения и контракты
290342

291-
* Функции могут бросать `std::invalid_argument` (неверные параметры) и `std::runtime_error` (внутренние ошибки).
292-
* `constant_time_equal` предполагает публичность длин; сравнивайте размеры заранее.
343+
* `pbkdf2`, `hkdf_*`, HOTP/TOTP и временные токены проверяют параметры и бросают `std::invalid_argument`; функции временных токенов также могут бросать `std::runtime_error`, если системные часы недоступны.
344+
* `base64_decode` и `base32_decode` помечены `noexcept` и возвращают `false` при некорректном вводе.
345+
* `constant_time_equal``noexcept`; перед сравнением проверьте совпадение размеров.
293346
* Ограничения PBKDF2: `dkLen ≤ (2^32−1)·hLen`; итераций ≥ 1; рекомендуемая длина соли ≥ 16 байт.
294347
* Ограничения HKDF: `L ≤ 255·HashLen`.
295-
* Потокобезопасность: функции статичны и потокобезопасны при раздельных буферах.
348+
* Потокобезопасность: функции не имеют состояния и потокобезопасны при раздельных буферах.
296349

297350
---
298351

0 commit comments

Comments
 (0)