#include <yassl_imp.hpp>
Inheritance diagram for yaSSL::Finished:


Public Member Functions | |
| Finished () | |
| uint8 * | set_md5 () |
| uint8 * | set_sha () |
| input_buffer & | set (input_buffer &in) |
| output_buffer & | get (output_buffer &out) const |
| void | Process (input_buffer &, SSL &) |
| HandShakeType | get_type () const |
Private Member Functions | |
| Finished (const Finished &) | |
| Finished & | operator= (const Finished &) |
Private Attributes | |
| Hashes | hashes_ |
Friends | |
| input_buffer & | operator>> (input_buffer &, Finished &) |
| output_buffer & | operator<< (output_buffer &, const Finished &) |
Definition at line 584 of file yassl_imp.hpp.
| yaSSL::Finished::Finished | ( | ) |
Definition at line 1939 of file yassl_imp.cpp.
References yaSSL::FINISHED_SZ, and yaSSL::HandShakeBase::set_length().
01940 { 01941 set_length(FINISHED_SZ); 01942 }
Here is the call graph for this function:

| yaSSL::Finished::Finished | ( | const Finished & | ) | [private] |
| output_buffer & yaSSL::Finished::get | ( | output_buffer & | out | ) | const [virtual] |
| HandShakeType yaSSL::Finished::get_type | ( | ) | const [virtual] |
Implements yaSSL::HandShakeBase.
Definition at line 1969 of file yassl_imp.cpp.
References yaSSL::finished.
01970 { 01971 return finished; 01972 }
| void yaSSL::Finished::Process | ( | input_buffer & | , | |
| SSL & | ||||
| ) | [virtual] |
Implements yaSSL::HandShakeBase.
Definition at line 1889 of file yassl_imp.cpp.
References yaSSL::AUTO, yaSSL::client_end, yaSSL::clientFinishedComplete, yaSSL::Parameters::encrypt_size_, yaSSL::Parameters::entity_, mySTL::fill(), yaSSL::FINISHED_SZ, yaSSL::input_buffer::get_buffer(), yaSSL::input_buffer::get_current(), yaSSL::Crypto::get_digest(), yaSSL::Digest::get_digestSize(), yaSSL::Security::get_parms(), yaSSL::sslHashes::get_verify(), yaSSL::SSL::getCrypto(), yaSSL::SSL::getHashes(), yaSSL::SSL::getSecurity(), yaSSL::handshake, yaSSL::HANDSHAKE_HEADER, yaSSL::handShakeReady, hashes_, yaSSL::hmac(), yaSSL::SSL::isTLS(), yaSSL::Hashes::md5_, memcmp(), yaSSL::input_buffer::read(), yaSSL::serverFinishedComplete, yaSSL::SSL::SetError(), yaSSL::SHA_LEN, yaSSL::TLS_FINISHED_SZ, yaSSL::TLS_hmac(), yaSSL::States::useClient(), yaSSL::States::useHandShake(), yaSSL::States::useServer(), yaSSL::SSL::useStates(), and yaSSL::verify_error.
01890 { 01891 // verify hashes 01892 const Finished& verify = ssl.getHashes().get_verify(); 01893 uint finishedSz = ssl.isTLS() ? TLS_FINISHED_SZ : FINISHED_SZ; 01894 01895 input.read(hashes_.md5_, finishedSz); 01896 01897 if (memcmp(&hashes_, &verify.hashes_, finishedSz)) { 01898 ssl.SetError(verify_error); 01899 return; 01900 } 01901 01902 // read verify mac 01903 opaque verifyMAC[SHA_LEN]; 01904 uint macSz = finishedSz + HANDSHAKE_HEADER; 01905 01906 if (ssl.isTLS()) 01907 TLS_hmac(ssl, verifyMAC, input.get_buffer() + input.get_current() 01908 - macSz, macSz, handshake, true); 01909 else 01910 hmac(ssl, verifyMAC, input.get_buffer() + input.get_current() - macSz, 01911 macSz, handshake, true); 01912 01913 // read mac and fill 01914 opaque mac[SHA_LEN]; // max size 01915 int digestSz = ssl.getCrypto().get_digest().get_digestSize(); 01916 input.read(mac, digestSz); 01917 01918 opaque fill; 01919 int padSz = ssl.getSecurity().get_parms().encrypt_size_ - 01920 HANDSHAKE_HEADER - finishedSz - digestSz; 01921 for (int i = 0; i < padSz; i++) 01922 fill = input[AUTO]; 01923 01924 // verify mac 01925 if (memcmp(mac, verifyMAC, digestSz)) { 01926 ssl.SetError(verify_error); 01927 return; 01928 } 01929 01930 // update states 01931 ssl.useStates().useHandShake() = handShakeReady; 01932 if (ssl.getSecurity().get_parms().entity_ == client_end) 01933 ssl.useStates().useClient() = serverFinishedComplete; 01934 else 01935 ssl.useStates().useServer() = clientFinishedComplete; 01936 }
Here is the call graph for this function:

| input_buffer & yaSSL::Finished::set | ( | input_buffer & | in | ) | [virtual] |
| uint8 * yaSSL::Finished::set_md5 | ( | ) |
Definition at line 1945 of file yassl_imp.cpp.
References hashes_, and yaSSL::Hashes::md5_.
Referenced by yaSSL::buildFinishedTLS(), and yaSSL::buildMD5().
01946 { 01947 return hashes_.md5_; 01948 }
Here is the caller graph for this function:

| uint8 * yaSSL::Finished::set_sha | ( | ) |
Definition at line 1951 of file yassl_imp.cpp.
References hashes_, and yaSSL::Hashes::sha_.
Referenced by yaSSL::buildSHA().
01952 { 01953 return hashes_.sha_; 01954 }
Here is the caller graph for this function:

| output_buffer& operator<< | ( | output_buffer & | output, | |
| const Finished & | fin | |||
| ) | [friend] |
Definition at line 1875 of file yassl_imp.cpp.
01876 { 01877 if (fin.get_length() == FINISHED_SZ) { 01878 output.write(fin.hashes_.md5_, MD5_LEN); 01879 output.write(fin.hashes_.sha_, SHA_LEN); 01880 } 01881 else // TLS_FINISHED_SZ 01882 output.write(fin.hashes_.md5_, TLS_FINISHED_SZ); 01883 01884 return output; 01885 }
| input_buffer& operator>> | ( | input_buffer & | input, | |
| Finished & | ||||
| ) | [friend] |
Hashes yaSSL::Finished::hashes_ [private] |
Definition at line 585 of file yassl_imp.hpp.
Referenced by yaSSL::operator<<(), Process(), set_md5(), and set_sha().
1.4.7

