Признак rand_core :: CryptoRng не реализован для OsRng.

Я пытался реализовать пример, приведенный в следующем документе: https://docs.rs/ed25519-dalek/1.0.1/ed25519_dalek/

Мой код прост:

extern crate rand;
extern crate ed25519_dalek;


use rand::rngs::OsRng;
use ed25519_dalek::Keypair;


fn main() {
    let mut csprng = OsRng{};
    let keypair: Keypair = Keypair::generate(&mut csprng);
}

Но когда я пытаюсь запустить, я получаю сообщение об ошибке, что признак CryptoRng не реализован в OsRng

11  |     let keypair: Keypair = Keypair::generate(&mut csprng);
    |                                              ^^^^^^^^^^^ the trait `rand_core::CryptoRng` is not implemented for `OsRng`

Однако CryptoRng - это просто признак-маркер, и я видел, что у него действительно есть пустой имплант для _6 _...

Так в чем может быть проблема?


person whomaniac    schedule 04.01.2021    source источник
comment
Какую версию rand вы используете?   -  person Aplet123    schedule 04.01.2021
comment
rand = 0.8.0 :-)   -  person whomaniac    schedule 04.01.2021
comment
Я думаю, что ed25519-dalek зависит от более старой версии rand ... Может быть, это как-то вызывает проблемы   -  person whomaniac    schedule 04.01.2021


Ответы (1)


Обычно, когда вы получаете эти сбивающие с толку сообщения о том, что привязка признака не соблюдается, если она явно соблюдается, или неправильный тип, когда это явно правильный тип, вы всегда должны проверять версии пакетов. На данный момент (ed25519-dalek v1.0.1), это зависит от rand 0.7.0 (вы также можете найти это на crates.io). Вы используете более новую версию rand с более новой версией трейта, и он ищет трейт 0.7.0, а вы предоставляете трейт 0.8.0.

Решение? Либо понизьте версию rand до 0.7.0, либо используйте переименование зависимостей в иметь 2 версии rand и использовать старую версию для ec25519-dalek.

person Aplet123    schedule 04.01.2021