Как я могу использовать new_type! макрос, чтобы задать более общий тип для общедоступной клавиши оксида натрия и секретного ключа?

#rust #libsodium

#Ржавчина #libsodium

Вопрос:

Я пытаюсь установить более общий тип для окиси натрия PublicKey и SecretKey .

Это зависит от того, используем ли мы box_ или sign :

 type PubCryptoSecretKey = sodiumoxide::crypto::box_::curve25519xsalsa20poly1305::SecretKey;
  

Я хотел бы установить PublicKey тип или структуру, которая совместима с типом ключа оксида натрия, что-то вроде struct PubKey(pub [u8; ?]) .

Источником SecretKey (или любого ключа) является:

 new_type! {
    /// `SecretKey` for asymmetric authenticated encryption
    ///
    /// When a `SecretKey` goes out of scope its contents
    /// will be zeroed out
    secret SecretKey(SECRETKEYBYTES);
}
  

где SECRETKEYBYTES имеет тип usize

Я не могу найти никакой информации об этом new_type! макросе. Что здесь происходит и как я могу пойти дальше?

Ответ №1:

Вот как макрос определяет структуру, но я не вижу хорошего способа легко определить общие типы для них обоих.

Возможное решение — определить новый признак в вашем ящике, а затем реализовать его для обоих PublicKey и SecretKey . Функция должна предоставлять вам достаточную функциональность для взаимодействия с каждой структурой.