172 похожих чатов

Enum Scheme<const BytesNum: usize> { Sha256, //

BytesNum = 32
Sha512, // BytesNum = 64
}

let example = Scheme::Sha256::<32>; // ручное создание

Кто знает, возможно ли в раст создание enum с уже захардкоженным константным дженериком?

К примеру я могу написать Scheme::Sha512::<50> и смысла от этого не будет, так как длина хэша Sha512 должна быть 64 байта

24 ответов

40 просмотров

Нельзя, возможно тебе хватит const fn bytes_num() -> usize { } в impl Scheme

wagner- Автор вопроса
Пух
Нельзя, возможно тебе хватит const fn bytes_num() ...

Блин, у меня просто идея сделать impl Scheme, в котором хочу сделать `fn get_hash_fn() -> &fn(&[u8]) -> [u8; N]

trait SchemeDispatch { type Type: Scheme; } enum Sha<const SIZE: usize> {} impl SchemeDispatch for Sha<256> { type Type = Sha256; } Но зачем?

wagner- Автор вопроса
Пух
Нельзя, возможно тебе хватит const fn bytes_num() ...

Проще говоря, функция get_hash_fn() енама Scheme должна вернуть ссылку на функцию, которая возвращает массив с хэшем той длины, которая специфична для енама

Sha256 и md5

Пух
Sha256 и md5

Ну так был бы енам Md5

Александр Ф. 🇷🇺
Ну так был бы енам Md5

Но нельзя в один тип упихать и мд5 и sha256

А надо?

wagner- Автор вопроса
Александр Ф. 🇷🇺
А надо?

Да Есть енам, в котором перечислены хеш функции (могут быть любыми). Функция этого енама должна вернуть ссылку на static функцию, которая возвращает массив N байт, где N - столько байт должна выдать выбранная хэш-функция

wagner
Да Есть енам, в котором перечислены хеш функции (...

Энумом такое сделать не получится, кажется

Можно сделать в Scheme конструкторы, которые возвращают типы с нужной длиной и приватное поле, чтобы никто не мог создать его руками

wagner- Автор вопроса
Пух
Можно сделать в Scheme конструкторы, которые возвр...

Но всё равно у тебя везде будет статика в плане длины хеша, не уверен, что есть смысл в энаме тогда

wagner- Автор вопроса
Пух
Но всё равно у тебя везде будет статика в плане дл...

Да, но это разная статика Sha256 - 32 байта Sha512 - 64 байта

wagner
Да, но это разная статика Sha256 - 32 байта Sha512...

Та я к тому что в типах особо разницы не будет между Sha256 как отдельная структура и как Scheme::Sha

wagner- Автор вопроса
Пух
Та я к тому что в типах особо разницы не будет меж...

Ладно, начну заново У меня есть строка: SCRAM-SHA-256$<iterations>:<salt>$<storedkey>:<serverkey> Она парсится структурой ScramHash: struct ScramHash { scheme: ScramScheme, iterations: usize, ... } Затем уже есть енам ScramScheme enum ScramScheme { Sha256, Sha512, Sha1, MD5 } Смысл енама ScramScheme - в том, что он отображает разные схемы строки SCRAM-SHA-256$<iterations>:<salt>$<storedkey>:<serverkey> И этот же енам, при необходимости, должен предоставить ссылку на функцию, которая возвращает выбранный хэш N длины. Длина специфична для выбранного варианта енама

wagner
Ладно, начну заново У меня есть строка: SCRAM-SH...

С дженерик параметром у тебя не получится получить из такой строки Scheme для рандомной длины хеша

Пух
С дженерик параметром у тебя не получится получить...

Или нужно только из Hash строку получить, а не наоборот?

wagner- Автор вопроса
Пух
Или нужно только из Hash строку получить, а не нао...

Всё перепуталось... Какой Hash? Какая строка? И как длина хэша может быть рандомной? Она строго регламентирована для каждой хэш функции

wagner
Всё перепуталось... Какой Hash? Какая строка? И к...

Тебе нужно строку SCRAM-SHA-256 парсить или создавать?

wagner- Автор вопроса

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта