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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
use thiserror::Error;

/// Error returned when handling envelopes.
#[derive(Debug, Error)]
pub enum EnvelopeError {
    //
    // Base Specification
    //

    #[error("envelope was elided, so it cannot be compressed or encrypted")]
    AlreadyElided,

    #[error("more than one assertion matches the predicate")]
    AmbiguousPredicate,

    #[error("digest did not match")]
    InvalidDigest,

    #[error("invalid format")]
    InvalidFormat,

    #[error("a digest was expected but not found")]
    MissingDigest,

    #[error("no assertion matches the predicate")]
    NonexistentPredicate,

    #[error("cannot unwrap an envelope that was not wrapped")]
    NotWrapped,

    #[error("the envelope's subject is not a leaf")]
    NotLeaf,

    #[error("the envelope's subject is not an assertion")]
    NotAssertion,


    //
    // Attachments Extension
    //

    #[cfg(feature = "attachment")]
    #[error("invalid attachment")]
    InvalidAttachment,

    #[cfg(feature = "attachment")]
    #[error("nonexistent attachment")]
    NonexistentAttachment,

    #[cfg(feature = "attachment")]
    #[error("abiguous attachment")]
    AmbiguousAttachment,


    //
    // Compression Extension
    //

    #[cfg(feature = "compress")]
    #[error("envelope was already compressed")]
    AlreadyCompressed,

    #[cfg(feature = "compress")]
    #[error("cannot uncompress an envelope that was not compressed")]
    NotCompressed,


    //
    // Symmetric Encryption Extension
    //

    #[cfg(feature = "encrypt")]
    #[error("envelope was already encrypted or compressed, so it cannot be encrypted")]
    AlreadyEncrypted,

    #[cfg(feature = "encrypt")]
    #[error("cannot decrypt an envelope that was not encrypted")]
    NotEncrypted,


    //
    // Known Values Extension
    //

    #[cfg(feature = "known_value")]
    #[error("the envelope's subject is not a known value")]
    NotKnownValue,


    //
    // Public Key Encryption Extension
    //

    #[cfg(feature = "recipient")]
    #[error("no recipient matches the given key")]
    InvalidRecipient,


    //
    // Public Key Signing Extension
    //

    #[cfg(feature = "signature")]
    #[error("could not verify a signature")]
    UnverifiedSignature,


    //
    // SSKR Extension
    //

    #[cfg(feature = "sskr")]
    #[error("invalid SSKR shares")]
    InvalidShares,


    //
    // Types Extension
    //

    #[cfg(feature = "types")]
    #[error("invalid type")]
    InvalidType,

    #[cfg(feature = "types")]
    #[error("ambiguous type")]
    AmbiguousType,
}