📄 yassl_imp.cpp
字号:
output_buffer& Certificate::get(output_buffer& out) const{ return out << *this;}HandShakeType Certificate::get_type() const{ return certificate;}ServerDHParams::ServerDHParams() : pSz_(0), gSz_(0), pubSz_(0), p_(0), g_(0), Ys_(0){}ServerDHParams::~ServerDHParams(){ ysArrayDelete(Ys_); ysArrayDelete(g_); ysArrayDelete(p_);}int ServerDHParams::get_pSize() const{ return pSz_;}int ServerDHParams::get_gSize() const{ return gSz_;}int ServerDHParams::get_pubSize() const{ return pubSz_;}const opaque* ServerDHParams::get_p() const{ return p_;}const opaque* ServerDHParams::get_g() const{ return g_;}const opaque* ServerDHParams::get_pub() const{ return Ys_;}opaque* ServerDHParams::alloc_p(int sz){ p_ = new (ys) opaque[pSz_ = sz]; return p_;}opaque* ServerDHParams::alloc_g(int sz){ g_ = new (ys) opaque[gSz_ = sz]; return g_;}opaque* ServerDHParams::alloc_pub(int sz){ Ys_ = new (ys) opaque[pubSz_ = sz]; return Ys_;}int ServerKeyBase::get_length() const{ return 0;}opaque* ServerKeyBase::get_serverKey() const{ return 0;}// input operator for ServerHelloinput_buffer& operator>>(input_buffer& input, ServerHello& hello){ // Protocol hello.server_version_.major_ = input[AUTO]; hello.server_version_.minor_ = input[AUTO]; // Random input.read(hello.random_, RAN_LEN); // Session hello.id_len_ = input[AUTO]; input.read(hello.session_id_, ID_LEN); // Suites hello.cipher_suite_[0] = input[AUTO]; hello.cipher_suite_[1] = input[AUTO]; // Compression hello.compression_method_ = CompressionMethod(input[AUTO]); return input;}// output operator for ServerHellooutput_buffer& operator<<(output_buffer& output, const ServerHello& hello){ // Protocol output[AUTO] = hello.server_version_.major_; output[AUTO] = hello.server_version_.minor_; // Random output.write(hello.random_, RAN_LEN); // Session output[AUTO] = hello.id_len_; output.write(hello.session_id_, ID_LEN); // Suites output[AUTO] = hello.cipher_suite_[0]; output[AUTO] = hello.cipher_suite_[1]; // Compression output[AUTO] = hello.compression_method_; return output;}// Server Hello processing handlervoid ServerHello::Process(input_buffer&, SSL& ssl){ ssl.set_pending(cipher_suite_[1]); ssl.set_random(random_, server_end); ssl.set_sessionID(session_id_); if (ssl.getSecurity().get_resuming()) if (memcmp(session_id_, ssl.getSecurity().get_resume().GetID(), ID_LEN) == 0) { ssl.set_masterSecret(ssl.getSecurity().get_resume().GetSecret()); if (ssl.isTLS()) ssl.deriveTLSKeys(); else ssl.deriveKeys(); ssl.useStates().useClient() = serverHelloDoneComplete; return; } else { ssl.useSecurity().set_resuming(false); ssl.useLog().Trace("server denied resumption"); } ssl.useStates().useClient() = serverHelloComplete;}ServerHello::ServerHello(){ memset(random_, 0, RAN_LEN); memset(session_id_, 0, ID_LEN);}ServerHello::ServerHello(ProtocolVersion pv) : server_version_(pv){ memset(random_, 0, RAN_LEN); memset(session_id_, 0, ID_LEN);}input_buffer& ServerHello::set(input_buffer& in){ return in >> *this;}output_buffer& ServerHello::get(output_buffer& out) const{ return out << *this;}HandShakeType ServerHello::get_type() const{ return server_hello;}const opaque* ServerHello::get_random() const{ return random_;}// Server Hello Done processing handlervoid ServerHelloDone::Process(input_buffer&, SSL& ssl){ ssl.useStates().useClient() = serverHelloDoneComplete;}ServerHelloDone::ServerHelloDone(){ set_length(0);}input_buffer& ServerHelloDone::set(input_buffer& in){ return in;}output_buffer& ServerHelloDone::get(output_buffer& out) const{ return out;}HandShakeType ServerHelloDone::get_type() const{ return server_hello_done;}int ClientKeyBase::get_length() const{ return 0;}opaque* ClientKeyBase::get_clientKey() const{ return 0;}// input operator for Client Helloinput_buffer& operator>>(input_buffer& input, ClientHello& hello){ // Protocol hello.client_version_.major_ = input[AUTO]; hello.client_version_.minor_ = input[AUTO]; // Random input.read(hello.random_, RAN_LEN); // Session hello.id_len_ = input[AUTO]; if (hello.id_len_) input.read(hello.session_id_, ID_LEN); // Suites byte tmp[2]; tmp[0] = input[AUTO]; tmp[1] = input[AUTO]; ato16(tmp, hello.suite_len_); input.read(hello.cipher_suites_, hello.suite_len_); // Compression hello.comp_len_ = input[AUTO]; hello.compression_methods_ = CompressionMethod(input[AUTO]); return input;}// output operaotr for Client Hellooutput_buffer& operator<<(output_buffer& output, const ClientHello& hello){ // Protocol output[AUTO] = hello.client_version_.major_; output[AUTO] = hello.client_version_.minor_; // Random output.write(hello.random_, RAN_LEN); // Session output[AUTO] = hello.id_len_; if (hello.id_len_) output.write(hello.session_id_, ID_LEN); // Suites byte tmp[2]; c16toa(hello.suite_len_, tmp); output[AUTO] = tmp[0]; output[AUTO] = tmp[1]; output.write(hello.cipher_suites_, hello.suite_len_); // Compression output[AUTO] = hello.comp_len_; output[AUTO] = hello.compression_methods_; return output;}// Client Hello processing handlervoid ClientHello::Process(input_buffer&, SSL& ssl){ if (ssl.isTLS() && client_version_.minor_ == 0) { ssl.useSecurity().use_connection().TurnOffTLS(); ProtocolVersion pv = ssl.getSecurity().get_connection().version_; ssl.useSecurity().use_parms().SetSuites(pv); // reset w/ SSL suites } ssl.set_random(random_, client_end); while (id_len_) { // trying to resume SSL_SESSION* session = GetSessions().lookup(session_id_); if (!session) { ssl.useLog().Trace("session lookup failed"); break; } ssl.set_session(session); ssl.useSecurity().set_resuming(true); ssl.matchSuite(session->GetSuite(), SUITE_LEN); ssl.set_pending(ssl.getSecurity().get_parms().suite_[1]); ssl.set_masterSecret(session->GetSecret()); opaque serverRandom[RAN_LEN]; ssl.getCrypto().get_random().Fill(serverRandom, sizeof(serverRandom)); ssl.set_random(serverRandom, server_end); if (ssl.isTLS()) ssl.deriveTLSKeys(); else ssl.deriveKeys(); ssl.useStates().useServer() = clientKeyExchangeComplete; return; } ssl.matchSuite(cipher_suites_, suite_len_); ssl.set_pending(ssl.getSecurity().get_parms().suite_[1]); ssl.useStates().useServer() = clientHelloComplete;}input_buffer& ClientHello::set(input_buffer& in){ return in >> *this;}output_buffer& ClientHello::get(output_buffer& out) const{ return out << *this;}HandShakeType ClientHello::get_type() const{ return client_hello;}const opaque* ClientHello::get_random() const{ return random_;}ClientHello::ClientHello(){ memset(random_, 0, RAN_LEN);}ClientHello::ClientHello(ProtocolVersion pv) : client_version_(pv){ memset(random_, 0, RAN_LEN);}// output operator for ServerKeyExchangeoutput_buffer& operator<<(output_buffer& output, const ServerKeyExchange& sk){ output.write(sk.getKey(), sk.getKeyLength()); return output;}// Server Key Exchange processing handlervoid ServerKeyExchange::Process(input_buffer& input, SSL& ssl){ createKey(ssl); if (ssl.GetError()) return; server_key_->read(ssl, input); ssl.useStates().useClient() = serverKeyExchangeComplete;}ServerKeyExchange::ServerKeyExchange(SSL& ssl){ createKey(ssl);}ServerKeyExchange::ServerKeyExchange() : server_key_(0){}ServerKeyExchange::~ServerKeyExchange(){ ysDelete(server_key_);}void ServerKeyExchange::build(SSL& ssl) { server_key_->build(ssl); set_length(server_key_->get_length());}const opaque* ServerKeyExchange::getKey() const{ return server_key_->get_serverKey();}int ServerKeyExchange::getKeyLength() const{ return server_key_->get_length();}input_buffer& ServerKeyExchange::set(input_buffer& in){ return in; // process does}output_buffer& ServerKeyExchange::get(output_buffer& out) const{ return out << *this;}HandShakeType ServerKeyExchange::get_type() const{ return server_key_exchange;}// CertificateRequest CertificateRequest::CertificateRequest() : typeTotal_(0){ memset(certificate_types_, 0, sizeof(certificate_types_));}CertificateRequest::~CertificateRequest(){ mySTL::for_each(certificate_authorities_.begin(), certificate_authorities_.end(), del_ptr_zero()) ;}void CertificateRequest::Build(){ certificate_types_[0] = rsa_sign; certificate_types_[1] = dss_sign; typeTotal_ = 2; uint16 authCount = 0; uint16 authSz = 0; for (int j = 0; j < authCount; j++) { int sz = REQUEST_HEADER + MIN_DIS_SIZE; DistinguishedName dn; certificate_authorities_.push_back(dn = new (ys) byte[sz]); opaque tmp[REQUEST_HEADER]; c16toa(MIN_DIS_SIZE, tmp); memcpy(dn, tmp, sizeof(tmp)); // fill w/ junk for now memcpy(dn, tmp, MIN_DIS_SIZE); authSz += sz; } set_length(SIZEOF_ENUM + typeTotal_ + REQUEST_HEADER + authSz);}input_buffer& CertificateRequest::set(input_buffer& in){ return in >> *this;}output_buffer& CertificateRequest::get(output_buffer& out) const{ return out << *this;}// input operator for CertificateRequestinput_buffer& operator>>(input_buffer& input, CertificateRequest& request){ // types request.typeTotal_ = input[AUTO]; for (int i = 0; i < request.typeTotal_; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -