#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
. Функция должна предоставлять вам достаточную функциональность для взаимодействия с каждой структурой.