1 /*
2 * EAC1_1 CVC
3 * (C) 2008 Falko Strenzke
4 *     2008 Jack Lloyd
5 *
6 * Distributed under the terms of the Botan license
7 */
8 
9 #ifndef BOTAN_CVC_EAC_H__
10 #define BOTAN_CVC_EAC_H__
11 
12 #include <botan/cvc_gen_cert.h>
13 #include <botan/ecdsa.h>
14 #include <string>
15 
16 namespace Botan {
17 
18 /**
19 * This class represents TR03110 (EAC) v1.1 CV Certificates
20 */
21 class BOTAN_DLL EAC1_1_CVC : public EAC1_1_gen_CVC<EAC1_1_CVC>//Signed_Object
22     {
23     public:
24        friend class EAC1_1_obj<EAC1_1_CVC>;
25 
26        /**
27        * Get the CAR of the certificate.
28        * @result the CAR of the certificate
29        */
30        ASN1_Car get_car() const;
31 
32        /**
33        * Get the CED of this certificate.
34        * @result the CED this certificate
35        */
36        ASN1_Ced get_ced() const;
37 
38        /**
39        * Get the CEX of this certificate.
40        * @result the CEX this certificate
41        */
42        ASN1_Cex get_cex() const;
43 
44        /**
45        * Get the CHAT value.
46        * @result the CHAT value
47        */
48        u32bit get_chat_value() const;
49 
50        bool operator==(const EAC1_1_CVC&) const;
51 
52        /**
53        * Construct a CVC from a data source
54        * @param source the data source
55        */
56        EAC1_1_CVC(DataSource& source);
57 
58        /**
59        * Construct a CVC from a file
60        * @param str the path to the certificate file
61        */
62        EAC1_1_CVC(const std::string& str);
63 
~EAC1_1_CVC()64        virtual ~EAC1_1_CVC() {}
65     private:
66        void force_decode();
EAC1_1_CVC()67        EAC1_1_CVC() {}
68 
69        ASN1_Car m_car;
70        ASN1_Ced m_ced;
71        ASN1_Cex m_cex;
72        byte m_chat_val;
73        OID m_chat_oid;
74     };
75 
76 /*
77 * Comparison
78 */
79 inline bool operator!=(EAC1_1_CVC const& lhs, EAC1_1_CVC const& rhs)
80    {
81    return !(lhs == rhs);
82    }
83 
84 /**
85 * Create an arbitrary EAC 1.1 CVC.
86 * The desired key encoding must be set within the key (if applicable).
87 * @param signer the signer used to sign the certificate
88 * @param public_key the DER encoded public key to appear in
89 * the certificate
90 * @param car the CAR of the certificate
91 * @param chr the CHR of the certificate
92 * @param holder_auth_templ the holder authorization value byte to
93 * appear in the CHAT of the certificate
94 * @param ced the CED to appear in the certificate
95 * @param cex the CEX to appear in the certificate
96 * @param rng a random number generator
97 */
98 EAC1_1_CVC BOTAN_DLL make_cvc_cert(PK_Signer& signer,
99                                    const MemoryRegion<byte>& public_key,
100                                    ASN1_Car const& car,
101                                    ASN1_Chr const& chr,
102                                    byte holder_auth_templ,
103                                    ASN1_Ced ced,
104                                    ASN1_Cex cex,
105                                    RandomNumberGenerator& rng);
106 
107 /**
108 * Decode an EAC encoding ECDSA key
109 */
110 BOTAN_DLL ECDSA_PublicKey* decode_eac1_1_key(const MemoryRegion<byte>& enc_key,
111                                              AlgorithmIdentifier& sig_algo);
112 
113 }
114 
115 #endif
116 
117