std.digest.hmac
Этот пакет реализует алгоритм кода аутентификации сообщений на основе хешей (HMAC), как определено в RFC2104. См. также соответствующую статью Википедии.
- Лицензия:
- Boost License 1.0.
- Исходный код
- std/digest/hmac.d
- Примеры:
- Реализация API HMAC для шаблонов. Это реализует HMAC над дайджестом H. Если H не предоставляет информацию о размере блока, его можно явно указать, используя второй перегруз. Этот тип соответствует
std.digest.isDigest. Вычисление HMAC над входной строкойimport std.ascii : LetterCase; import std.digest : toHexString; import std.digest.sha : SHA1; import std.string : representation; auto secret = "secret".representation; assert("The quick brown fox jumps over the lazy dog" .representation .hmac!SHA1(secret) .toHexString!(LetterCase.lower) == "198ea1ea04c435c1246b586a06d5cf11c3ffcda6");
- struct HMAC(H, size_t hashBlockSize) if (hashBlockSize % 8 == 0);
template hmac(H) if (isDigest!H && hasBlockSize!H)
auto hmac(H, size_t blockSize)(scope const(ubyte)[] secret)
Ограничения: if (isDigest!H); -
Перегрузка HMAC для использования, если H не предоставляет информацию о размере своего блока.
- Примеры:
-
import std.digest.sha : SHA1; import std.string : representation; string data1 = "Hello, world", data2 = "Hola mundo"; auto hmac = HMAC!SHA1("My s3cR3T keY".representation); auto digest = hmac.put(data1.representation) .put(data2.representation) .finish(); static immutable expected = [ 197, 57, 52, 3, 13, 194, 13, 36, 117, 228, 8, 11, 111, 51, 165, 3, 123, 31, 251, 113]; writeln(digest); // expected
- this(scope const(ubyte)[] secret);
-
Создает дайджест HMAC, используя указанный секрет.
- Примеры:
-
import std.digest.sha : SHA1; import std.string : representation; auto hmac = HMAC!SHA1("My s3cR3T keY".representation); hmac.put("Hello, world".representation); static immutable expected = [ 130, 32, 235, 44, 208, 141, 150, 232, 211, 214, 162, 195, 188, 127, 52, 89, 100, 68, 90, 216]; writeln(hmac.finish()); // expected
- ref HMAC!(H, blockSize) start() return;
-
Переинициализирует дайджест, подготовив его к повторному использованию.
- Примечание
- Конструктор оставляет дайджест в инициализированном состоянии, поэтому этот метод необходимо вызывать только если необходимо повторно использовать незавершенный дайджест.
- Возвращает:
- Ссылка на дайджест для удобства цепочки вызовов.
- Примеры:
-
import std.digest.sha : SHA1; import std.string : representation; string data1 = "Hello, world", data2 = "Hola mundo"; auto hmac = HMAC!SHA1("My s3cR3T keY".representation); hmac.put(data1.representation); hmac.start(); // reset digest hmac.put(data2.representation); // start over static immutable expected = [ 122, 151, 232, 240, 249, 80, 19, 178, 186, 77, 110, 23, 208, 52, 11, 88, 34, 151, 192, 255]; writeln(hmac.finish()); // expected
- ref HMAC!(H, blockSize) put(in ubyte[] data...) return;
-
Вводит часть данных в вычисление хеша. Этот метод позволяет использовать тип в качестве
std.range.OutputRange.- Возвращает:
- Ссылка на дайджест для удобства цепочки вызовов.
- Примеры:
-
import std.digest.hmac, std.digest.sha; import std.string : representation; string data1 = "Hello, world", data2 = "Hola mundo"; auto hmac = HMAC!SHA1("My s3cR3T keY".representation); hmac.put(data1.representation) .put(data2.representation); static immutable expected = [ 197, 57, 52, 3, 13, 194, 13, 36, 117, 228, 8, 11, 111, 51, 165, 3, 123, 31, 251, 113]; writeln(hmac.finish()); // expected
- DigestType!H finish();
-
Сбрасывает дайджест и возвращает завершённый хеш.
- Примеры:
-
import std.digest.sha : SHA1; import std.string : representation; string data1 = "Hello, world", data2 = "Hola mundo"; auto hmac = HMAC!SHA1("My s3cR3T keY".representation); auto digest = hmac.put(data1.representation) .put(data2.representation) .finish(); static immutable expected = [ 197, 57, 52, 3, 13, 194, 13, 36, 117, 228, 8, 11, 111, 51, 165, 3, 123, 31, 251, 113]; writeln(digest); // expected
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_digest_hmac.html