libzypp
10.5.0
|
00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00012 #ifndef ZYPP_KEYRING_H 00013 #define ZYPP_KEYRING_H 00014 00015 #include <iosfwd> 00016 #include <map> 00017 #include <list> 00018 #include <set> 00019 #include <string> 00020 00021 #include "zypp/base/ReferenceCounted.h" 00022 #include "zypp/base/Flags.h" 00023 #include "zypp/Callback.h" 00024 #include "zypp/base/PtrTypes.h" 00025 #include "zypp/Locale.h" 00026 #include "zypp/PublicKey.h" 00027 #include "zypp/KeyContext.h" 00028 00030 namespace zypp 00031 { 00032 00033 DEFINE_PTR_TYPE(KeyRing); 00034 00044 struct KeyRingReport : public callback::ReportBase 00045 { 00051 enum KeyTrust 00052 { 00056 KEY_DONT_TRUST = 0, 00061 KEY_TRUST_TEMPORARILY, 00070 KEY_TRUST_AND_IMPORT 00071 }; 00072 00077 virtual KeyTrust askUserToAcceptKey( const PublicKey &key, const KeyContext &keycontext = KeyContext() ); 00078 00079 virtual bool askUserToAcceptUnsignedFile( const std::string &file, const KeyContext &keycontext = KeyContext() ); 00080 00087 virtual bool askUserToAcceptUnknownKey( const std::string &file, const std::string &id, const KeyContext &keycontext = KeyContext() ); 00088 00094 virtual bool askUserToAcceptVerificationFailed( const std::string &file, const PublicKey &key, const KeyContext &keycontext = KeyContext() ); 00095 00096 }; 00097 00098 struct KeyRingSignals : public callback::ReportBase 00099 { 00100 virtual void trustedKeyAdded( const PublicKey &/*key*/ ) 00101 {} 00102 virtual void trustedKeyRemoved( const PublicKey &/*key*/ ) 00103 {} 00104 }; 00105 00106 class KeyRingException : public Exception 00107 { 00108 public: 00112 KeyRingException() 00113 : Exception( "Bad Key Exception" ) 00114 {} 00118 KeyRingException( const std::string & msg_r ) 00119 : Exception( msg_r ) 00120 {} 00122 virtual ~KeyRingException() throw() {}; 00123 }; 00124 00126 // 00127 // CLASS NAME : KeyRing 00128 // 00132 class KeyRing : public base::ReferenceCounted, private base::NonCopyable 00133 { 00134 friend std::ostream & operator<<( std::ostream & str, const KeyRing & obj ); 00135 00136 public: 00148 enum DefaultAcceptBits 00149 { 00150 ACCEPT_NOTHING = 0x0000, 00151 ACCEPT_UNSIGNED_FILE = 0x0001, 00152 ACCEPT_UNKNOWNKEY = 0x0002, 00153 TRUST_KEY_TEMPORARILY = 0x0004, 00154 TRUST_AND_IMPORT_KEY = 0x0008, 00155 ACCEPT_VERIFICATION_FAILED = 0x0010, 00156 }; 00157 ZYPP_DECLARE_FLAGS( DefaultAccept, DefaultAcceptBits ); 00158 00160 static DefaultAccept defaultAccept(); 00161 00163 static void setDefaultAccept( DefaultAccept value_r ); 00165 00166 public: 00168 class Impl; 00169 00170 public: 00172 KeyRing(const Pathname &baseTmpDir); 00173 00178 void importKey( const PublicKey &key, bool trusted = false); 00179 00181 void multiKeyImport( const Pathname & keyfile_r, bool trusted_r = false ); 00182 00183 void dumpTrustedPublicKey( const std::string &id, std::ostream &stream ) 00184 { dumpPublicKey(id, true, stream); } 00185 00186 void dumpUntrustedPublicKey( const std::string &id, std::ostream &stream ) 00187 { dumpPublicKey(id, false, stream); } 00188 00189 void dumpPublicKey( const std::string &id, bool trusted, std::ostream &stream ); 00190 00194 std::string readSignatureKeyId( const Pathname &signature ); 00195 00199 bool isKeyTrusted( const std::string &id); 00200 00205 bool isKeyKnown( const std::string &id ); 00206 00211 void deleteKey( const std::string &id, bool trusted = false); 00212 00216 std::list<PublicKey> publicKeys(); 00217 00221 std::list<PublicKey> trustedPublicKeys(); 00222 00226 std::list<std::string> publicKeyIds(); 00227 00231 std::list<std::string> trustedPublicKeyIds(); 00232 00257 bool verifyFileSignatureWorkflow( 00258 const Pathname &file, 00259 const std::string filedesc, 00260 const Pathname &signature, 00261 const KeyContext &keycontext = KeyContext()); 00262 00263 00270 bool verifyFileSignature( const Pathname &file, const Pathname &signature); 00271 00272 bool verifyFileTrustedSignature( const Pathname &file, const Pathname &signature); 00273 00275 ~KeyRing(); 00276 00277 private: 00279 RWCOW_pointer<Impl> _pimpl; 00280 }; 00282 00284 inline std::ostream & operator<<( std::ostream & str, const KeyRing & /*obj*/ ) 00285 { 00286 //return str << obj.asString(); 00287 return str; 00288 } 00289 00291 ZYPP_DECLARE_OPERATORS_FOR_FLAGS( KeyRing::DefaultAccept ); 00292 00294 00295 namespace target 00296 { 00297 namespace rpm 00298 { 00300 struct KeyRingSignals : public ::zypp::KeyRingSignals 00301 {}; 00302 } 00303 } 00304 00306 } // namespace zypp 00308 #endif // ZYPP_KEYRING_H