📄 yassl_int.hpp
字号:
};// SSL statsstruct Stats { long accept_; long connect_; long acceptGood_; long connectGood_; long acceptRenegotiate_; long connectRenegotiate_; long hits_; long cbHits_; long cacheFull_; long misses_; long timeouts_; long number_; long getCacheSize_; int verifyMode_; int verifyDepth_;public: Stats() : accept_(0), connect_(0), acceptGood_(0), connectGood_(0), acceptRenegotiate_(0), connectRenegotiate_(0), hits_(0), cbHits_(0), cacheFull_(0), misses_(0), timeouts_(0), number_(0), getCacheSize_(0), verifyMode_(0), verifyDepth_(0) {}private: Stats(const Stats&); // hide copy Stats& operator=(const Stats&); // and assign};// the SSL contextclass SSL_CTX {public: typedef mySTL::list<x509*> CertList;private: SSL_METHOD* method_; x509* certificate_; x509* privateKey_; CertList caList_; Ciphers ciphers_; DH_Parms dhParms_; Stats stats_; Mutex mutex_; // for Statspublic: explicit SSL_CTX(SSL_METHOD* meth); ~SSL_CTX(); const x509* getCert() const; const x509* getKey() const; const SSL_METHOD* getMethod() const; const Ciphers& GetCiphers() const; const DH_Parms& GetDH_Parms() const; const Stats& GetStats() const; void setVerifyPeer(); void setFailNoCert(); bool SetCipherList(const char*); bool SetDH(const DH&); void IncrementStats(StatsField); void AddCA(x509* ca); const CertList& GetCA_List() const; friend int read_file(SSL_CTX*, const char*, int, CertType);private: SSL_CTX(const SSL_CTX&); // hide copy SSL_CTX& operator=(const SSL_CTX&); // and assign};// holds all cryptographic typesclass Crypto { Digest* digest_; // agreed upon digest BulkCipher* cipher_; // agreed upon cipher DiffieHellman* dh_; // dh parms RandomPool random_; // random number generator CertManager cert_; // manages certificatespublic: explicit Crypto(); ~Crypto(); const Digest& get_digest() const; const BulkCipher& get_cipher() const; const DiffieHellman& get_dh() const; const RandomPool& get_random() const; const CertManager& get_certManager() const; Digest& use_digest(); BulkCipher& use_cipher(); DiffieHellman& use_dh(); RandomPool& use_random(); CertManager& use_certManager(); void SetDH(DiffieHellman*); void SetDH(const DH_Parms&); void setDigest(Digest*); void setCipher(BulkCipher*); bool DhSet();private: Crypto(const Crypto&); // hide copy Crypto& operator=(const Crypto&); // and assign};// holds all handshake and verify hashesclass sslHashes { MD5 md5HandShake_; // md5 handshake hash SHA shaHandShake_; // sha handshake hash Finished verify_; // peer's verify hash Hashes certVerify_; // peer's cert verify hashpublic: sslHashes() {} const MD5& get_MD5() const; const SHA& get_SHA() const; const Finished& get_verify() const; const Hashes& get_certVerify() const; MD5& use_MD5(); SHA& use_SHA(); Finished& use_verify(); Hashes& use_certVerify();private: sslHashes(const sslHashes&); // hide copy sslHashes& operator=(const sslHashes&); // and assign};// holds input and output buffersclass Buffers { typedef mySTL::list<input_buffer*> inputList; typedef mySTL::list<output_buffer*> outputList; inputList dataList_; // list of users app data / handshake outputList handShakeList_; // buffered handshake msgspublic: Buffers() {} ~Buffers(); const inputList& getData() const; const outputList& getHandShake() const; inputList& useData(); outputList& useHandShake();private: Buffers(const Buffers&); // hide copy Buffers& operator=(const Buffers&); // and assign };// wraps security parametersclass Security { Connection conn_; // connection information Parameters parms_; // may be pending SSL_SESSION resumeSession_; // if resuming SSL_CTX* ctx_; // context used to init bool resuming_; // trying to resumepublic: Security(ProtocolVersion, RandomPool&, ConnectionEnd, const Ciphers&, SSL_CTX*); const SSL_CTX* GetContext() const; const Connection& get_connection() const; const Parameters& get_parms() const; const SSL_SESSION& get_resume() const; bool get_resuming() const; Connection& use_connection(); Parameters& use_parms(); SSL_SESSION& use_resume(); void set_resuming(bool b);private: Security(const Security&); // hide copy Security& operator=(const Security&); // and assign};// THE SSL typeclass SSL { Crypto crypto_; // agreed crypto agents Security secure_; // Connection and Session parms States states_; // Record and HandShake states sslHashes hashes_; // handshake, finished hashes Socket socket_; // socket wrapper Buffers buffers_; // buffered handshakes and data Log log_; // loggerpublic: SSL(SSL_CTX* ctx); // gets and uses const Crypto& getCrypto() const; const Security& getSecurity() const; const States& getStates() const; const sslHashes& getHashes() const; const sslFactory& getFactory() const; const Socket& getSocket() const; YasslError GetError() const; Crypto& useCrypto(); Security& useSecurity(); States& useStates(); sslHashes& useHashes(); Socket& useSocket(); Log& useLog(); // sets void set_pending(Cipher suite); void set_random(const opaque*, ConnectionEnd); void set_sessionID(const opaque*); void set_session(SSL_SESSION*); void set_preMaster(const opaque*, uint); void set_masterSecret(const opaque*); void SetError(YasslError); // helpers bool isTLS() const; void order_error(); void makeMasterSecret(); void makeTLSMasterSecret(); void addData(input_buffer* data); void fillData(Data&); void addBuffer(output_buffer* b); void flushBuffer(); void verifyState(const RecordLayerHeader&); void verifyState(const HandShakeHeader&); void verifyState(ClientState); void verifyState(ServerState); void verfiyHandShakeComplete(); void matchSuite(const opaque*, uint length); void deriveKeys(); void deriveTLSKeys(); void Send(const byte*, uint); uint bufferedData(); uint get_SEQIncrement(bool); const byte* get_macSecret(bool);private: void storeKeys(const opaque*); void setKeys(); void verifyClientState(HandShakeType); void verifyServerState(HandShakeType); SSL(const SSL&); // hide copy const SSL& operator=(const SSL&); // and assign};// conversion functionsvoid c32to24(uint32, uint24&);void c24to32(const uint24, uint32&);uint32 c24to32(const uint24);void ato16(const opaque*, uint16&);void ato24(const opaque*, uint24&);void c16toa(uint16, opaque*);void c24toa(const uint24, opaque*);void c32toa(uint32 u32, opaque*);} // naemspace#endif // yaSSL_INT_HPP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -