BytesNum = 32
Sha512, // BytesNum = 64
}
let example = Scheme::Sha256::<32>; // ручное создание
Кто знает, возможно ли в раст создание enum с уже захардкоженным константным дженериком?
К примеру я могу написать Scheme::Sha512::<50> и смысла от этого не будет, так как длина хэша Sha512 должна быть 64 байта
Нельзя, возможно тебе хватит const fn bytes_num() -> usize { } в impl Scheme
Блин, у меня просто идея сделать 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; } Но зачем?
Проще говоря, функция get_hash_fn() енама Scheme должна вернуть ссылку на функцию, которая возвращает массив с хэшем той длины, которая специфична для енама
Тут struct, а не enum
Ну потом обращаешься как Sha<256>::Type
Sha256 и md5
Ну так был бы енам Md5
Но нельзя в один тип упихать и мд5 и sha256
А надо?
Да Есть енам, в котором перечислены хеш функции (могут быть любыми). Функция этого енама должна вернуть ссылку на static функцию, которая возвращает массив N байт, где N - столько байт должна выдать выбранная хэш-функция
Энумом такое сделать не получится, кажется
Можно сделать в Scheme конструкторы, которые возвращают типы с нужной длиной и приватное поле, чтобы никто не мог создать его руками
Ну кстати как вариант
Но всё равно у тебя везде будет статика в плане длины хеша, не уверен, что есть смысл в энаме тогда
Да, но это разная статика Sha256 - 32 байта Sha512 - 64 байта
Та я к тому что в типах особо разницы не будет между Sha256 как отдельная структура и как Scheme::Sha
Ладно, начну заново У меня есть строка: 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 длины. Длина специфична для выбранного варианта енама
С дженерик параметром у тебя не получится получить из такой строки Scheme для рандомной длины хеша
Или нужно только из Hash строку получить, а не наоборот?
Всё перепуталось... Какой Hash? Какая строка? И как длина хэша может быть рандомной? Она строго регламентирована для каждой хэш функции
Тебе нужно строку SCRAM-SHA-256 парсить или создавать?
Пока что нужда только в парсинге
Так не получится
Обсуждают сегодня