⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yassl_imp.cpp

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 CPP
📖 第 1 页 / 共 4 页
字号:
{    hdr.type_ = ContentType(input[AUTO]);    hdr.version_.major_ = input[AUTO];    hdr.version_.minor_ = input[AUTO];    // length    byte tmp[2];    tmp[0] = input[AUTO];    tmp[1] = input[AUTO];    ato16(tmp, hdr.length_);    return input;}// output operator for RecordLayerHeaderoutput_buffer& operator<<(output_buffer& output, const RecordLayerHeader& hdr){    output[AUTO] = hdr.type_;    output[AUTO] = hdr.version_.major_;    output[AUTO] = hdr.version_.minor_;        // length    byte tmp[2];    c16toa(hdr.length_, tmp);    output[AUTO] = tmp[0];    output[AUTO] = tmp[1];    return output;}// virtual input operator for Messagesinput_buffer& operator>>(input_buffer& input, Message& msg){    return msg.set(input);}// virtual output operator for Messagesoutput_buffer& operator<<(output_buffer& output, const Message& msg){    return msg.get(output);}// input operator for HandShakeHeaderinput_buffer& operator>>(input_buffer& input, HandShakeHeader& hs){    hs.type_ = HandShakeType(input[AUTO]);    hs.length_[0] = input[AUTO];    hs.length_[1] = input[AUTO];    hs.length_[2] = input[AUTO];        return input;}// output operator for HandShakeHeaderoutput_buffer& operator<<(output_buffer& output, const HandShakeHeader& hdr){    output[AUTO] = hdr.type_;    output.write(hdr.length_, sizeof(hdr.length_));    return output;}// HandShake Header Processing functionvoid HandShakeHeader::Process(input_buffer& input, SSL& ssl){    ssl.verifyState(*this);    const HandShakeFactory& hsf = ssl.getFactory().getHandShake();    mySTL::auto_ptr<HandShakeBase> hs(hsf.CreateObject(type_), ysDelete);    if (!hs.get()) {        ssl.SetError(factory_error);        return;    }    hashHandShake(ssl, input, c24to32(length_));    input >> *hs;    hs->Process(input, ssl);}ContentType HandShakeHeader::get_type() const{    return handshake;}uint16 HandShakeHeader::get_length() const{    return c24to32(length_);}HandShakeType HandShakeHeader::get_handshakeType() const{    return type_;}void HandShakeHeader::set_type(HandShakeType hst){    type_ = hst;}void HandShakeHeader::set_length(uint32 u32){    c32to24(u32, length_);}input_buffer& HandShakeHeader::set(input_buffer& in){    return in >> *this;}output_buffer& HandShakeHeader::get(output_buffer& out) const{    return out << *this;}int HandShakeBase::get_length() const{    return length_;}void HandShakeBase::set_length(int l){    length_ = l;}// for building buffer's type fieldHandShakeType HandShakeBase::get_type() const{    return no_shake;}input_buffer& HandShakeBase::set(input_buffer& in){    return in;} output_buffer& HandShakeBase::get(output_buffer& out) const{    return out;}void HandShakeBase::Process(input_buffer&, SSL&) {}input_buffer& HelloRequest::set(input_buffer& in){    return in;}output_buffer& HelloRequest::get(output_buffer& out) const{    return out;}void HelloRequest::Process(input_buffer&, SSL&){}HandShakeType HelloRequest::get_type() const{    return hello_request;}// input operator for CipherSpecinput_buffer& operator>>(input_buffer& input, ChangeCipherSpec& cs){    cs.type_ = CipherChoice(input[AUTO]);    return input; }// output operator for CipherSpecoutput_buffer& operator<<(output_buffer& output, const ChangeCipherSpec& cs){    output[AUTO] = cs.type_;    return output;}ChangeCipherSpec::ChangeCipherSpec()     : type_(change_cipher_spec_choice){}input_buffer& ChangeCipherSpec::set(input_buffer& in){    return in >> *this;}output_buffer& ChangeCipherSpec::get(output_buffer& out) const{    return out << *this;}ContentType ChangeCipherSpec::get_type() const{    return change_cipher_spec;}uint16 ChangeCipherSpec::get_length() const{    return SIZEOF_ENUM;}// CipherSpec processing handlervoid ChangeCipherSpec::Process(input_buffer&, SSL& ssl){    ssl.useSecurity().use_parms().pending_ = false;    if (ssl.getSecurity().get_resuming()) {        if (ssl.getSecurity().get_parms().entity_ == client_end)            buildFinished(ssl, ssl.useHashes().use_verify(), server); // server    }    else if (ssl.getSecurity().get_parms().entity_ == server_end)        buildFinished(ssl, ssl.useHashes().use_verify(), client);     // client}Alert::Alert(AlertLevel al, AlertDescription ad)    : level_(al), description_(ad){}ContentType Alert::get_type() const{    return alert;}uint16 Alert::get_length() const{    return SIZEOF_ENUM * 2;}input_buffer& Alert::set(input_buffer& in){    return in >> *this;}output_buffer& Alert::get(output_buffer& out) const{    return out << *this;}// input operator for Alertinput_buffer& operator>>(input_buffer& input, Alert& a){    a.level_ = AlertLevel(input[AUTO]);    a.description_ = AlertDescription(input[AUTO]);     return input;}// output operator for Alertoutput_buffer& operator<<(output_buffer& output, const Alert& a){    output[AUTO] = a.level_;    output[AUTO] = a.description_;    return output;}// Alert processing handlervoid Alert::Process(input_buffer& input, SSL& ssl){    if (ssl.getSecurity().get_parms().pending_ == false)  { // encrypted alert        int            aSz = get_length();  // alert size already read on input        opaque         verify[SHA_LEN];        const  opaque* data = input.get_buffer() + input.get_current() - aSz;        if (ssl.isTLS())            TLS_hmac(ssl, verify, data, aSz, alert, true);        else            hmac(ssl, verify, data, aSz, alert, true);        // read mac and fill        int    digestSz = ssl.getCrypto().get_digest().get_digestSize();        opaque mac[SHA_LEN];        input.read(mac, digestSz);        opaque fill;        int    padSz = ssl.getSecurity().get_parms().encrypt_size_ - aSz -                       digestSz;        for (int i = 0; i < padSz; i++)             fill = input[AUTO];        // verify        if (memcmp(mac, verify, digestSz)) {            ssl.SetError(verify_error);            return;        }    }    if (level_ == fatal) {        ssl.useStates().useRecord()    = recordNotReady;        ssl.useStates().useHandShake() = handShakeNotReady;        ssl.SetError(YasslError(description_));    }}Data::Data()    : length_(0), buffer_(0), write_buffer_(0){}Data::Data(uint16 len, opaque* b)    : length_(len), buffer_(b), write_buffer_(0){}Data::Data(uint16 len, const opaque* w)    : length_(len), buffer_(0), write_buffer_(w){}input_buffer& Data::set(input_buffer& in){    return in;}output_buffer& Data::get(output_buffer& out) const{    return out << *this;}ContentType Data::get_type() const{    return application_data;}uint16 Data::get_length() const{    return length_;}const opaque* Data::get_buffer() const{    return write_buffer_;}void Data::set_length(uint16 l){    length_ = l;}opaque* Data::set_buffer(){    return buffer_;}// output operator for Dataoutput_buffer& operator<<(output_buffer& output, const Data& data){    output.write(data.write_buffer_, data.length_);    return output;}// Process handler for Datavoid Data::Process(input_buffer& input, SSL& ssl){    int msgSz = ssl.getSecurity().get_parms().encrypt_size_;    int pad   = 0, padByte = 0;    if (ssl.getSecurity().get_parms().cipher_type_ == block) {        pad = *(input.get_buffer() + input.get_current() + msgSz - 1);        padByte = 1;    }    int digestSz = ssl.getCrypto().get_digest().get_digestSize();    int dataSz = msgSz - digestSz - pad - padByte;       opaque verify[SHA_LEN];    // read data    if (dataSz) {        input_buffer* data;        ssl.addData(data = new (ys) input_buffer(dataSz));        input.read(data->get_buffer(), dataSz);        data->add_size(dataSz);        if (ssl.isTLS())            TLS_hmac(ssl, verify, data->get_buffer(), dataSz, application_data,                     true);        else            hmac(ssl, verify, data->get_buffer(), dataSz, application_data,                 true);    }    // read mac and fill    opaque mac[SHA_LEN];    opaque fill;    input.read(mac, digestSz);    for (int i = 0; i < pad; i++)         fill = input[AUTO];    if (padByte)        fill = input[AUTO];        // verify    if (dataSz) {        if (memcmp(mac, verify, digestSz)) {            ssl.SetError(verify_error);            return;        }    }    else         ssl.get_SEQIncrement(true);  // even though no data, increment verify}// virtual input operator for HandShakesinput_buffer& operator>>(input_buffer& input, HandShakeBase& hs){    return hs.set(input);}// virtual output operator for HandShakesoutput_buffer& operator<<(output_buffer& output, const HandShakeBase& hs){    return hs.get(output);}Certificate::Certificate(const x509* cert) : cert_(cert) {    set_length(cert_->get_length() + 2 * CERT_HEADER); // list and cert size}const opaque* Certificate::get_buffer() const{    return cert_->get_buffer(); }// output operator for Certificateoutput_buffer& operator<<(output_buffer& output, const Certificate& cert){    uint sz = cert.get_length() - 2 * CERT_HEADER;    opaque tmp[CERT_HEADER];    c32to24(sz + CERT_HEADER, tmp);    output.write(tmp, CERT_HEADER);    c32to24(sz, tmp);    output.write(tmp, CERT_HEADER);    output.write(cert.get_buffer(), sz);    return output;}// certificate processing handlervoid Certificate::Process(input_buffer& input, SSL& ssl){    CertManager& cm = ssl.useCrypto().use_certManager();      uint32 list_sz;    byte   tmp[3];    tmp[0] = input[AUTO];    tmp[1] = input[AUTO];    tmp[2] = input[AUTO];    c24to32(tmp, list_sz);        while (list_sz) {        // cert size        uint32 cert_sz;        tmp[0] = input[AUTO];        tmp[1] = input[AUTO];        tmp[2] = input[AUTO];        c24to32(tmp, cert_sz);                x509* myCert;        cm.AddPeerCert(myCert = new (ys) x509(cert_sz));        input.read(myCert->use_buffer(), myCert->get_length());        list_sz -= cert_sz + CERT_HEADER;    }    if (int err = cm.Validate())        ssl.SetError(YasslError(err));    else if (ssl.getSecurity().get_parms().entity_ == client_end)        ssl.useStates().useClient() = serverCertComplete;}Certificate::Certificate()    : cert_(0){}input_buffer& Certificate::set(input_buffer& in){    return in;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -