1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/********************************************************************************
 *   yggdrasil-keys-rs, a library for handling yggdrasil keys in rust           *
 *                                                                              *
 *   Copyright (C) 2020 Famedly GmbH                                            *
 *                                                                              *
 *   This program is free software: you can redistribute it and/or modify       *
 *   it under the terms of the GNU Affero General Public License as             *
 *   published by the Free Software Foundation, either version 3 of the         *
 *   License, or (at your option) any later version.                            *
 *                                                                              *
 *   This program is distributed in the hope that it will be useful,            *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of             *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the               *
 *   GNU Affero General Public License for more details.                        *
 *                                                                              *
 *   You should have received a copy of the GNU Affero General Public License   *
 *   along with this program.  If not, see <https://www.gnu.org/licenses/>.     *
 ********************************************************************************/

use thiserror::Error;

/// Describe error for trying to decode yggdrasil keys from hex strings.
#[derive(Error, Debug)]
pub enum FromHexError {
    /// The `sec_hex` parameters can be either 64 hex encoded bytes,
    /// if they are a keypair,
    /// or 32 hex encoded bytes if they are just the private key.
    /// The `pub_hex` parameters have to be 32 hex encoded bytes.
    #[error("key has wrong length")]
    WrongKeyLength,
    /// The strings have to be valid hex.
    #[error("string is not valid hex: {0}")]
    Hex(#[from] hex::FromHexError),
    /// If `pub_hex` is `Some` and `sec_hex` contains a keypair,
    /// both supplied public keys have to be the same.
    #[error("pub keys in optional argument and included with secret key differ")]
    ConflictingPubKeys,
    /// The signing keys are checked by the ed25519 implementation after parsing.
    /// If something doesn't add up, this error will be returned.
    #[error("the signature keys are invalid: {0}")]
    InvalidSigKey(#[from] ed25519_dalek::SignatureError),
}