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