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

📄 yassl_imp.cpp

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        request.certificate_types_[i] = ClientCertificateType(input[AUTO]);    byte tmp[REQUEST_HEADER];    input.read(tmp, sizeof(tmp));    uint16 sz;    ato16(tmp, sz);    // authorities    while (sz) {        uint16 dnSz;        input.read(tmp, sizeof(tmp));        ato16(tmp, dnSz);                DistinguishedName dn;        request.certificate_authorities_.push_back(dn = new (ys)                                                   byte[REQUEST_HEADER + dnSz]);        memcpy(dn, tmp, REQUEST_HEADER);        input.read(&dn[REQUEST_HEADER], dnSz);        sz -= dnSz + REQUEST_HEADER;    }    return input;}// output operator for CertificateRequestoutput_buffer& operator<<(output_buffer& output,                          const CertificateRequest& request){    // types    output[AUTO] = request.typeTotal_;    for (int i = 0; i < request.typeTotal_; i++)        output[AUTO] = request.certificate_types_[i];    // authorities    opaque tmp[REQUEST_HEADER];    c16toa(request.get_length() - SIZEOF_ENUM -           request.typeTotal_ - REQUEST_HEADER, tmp);    output.write(tmp, sizeof(tmp));    mySTL::list<DistinguishedName>::const_iterator first =                                    request.certificate_authorities_.begin();    mySTL::list<DistinguishedName>::const_iterator last =                                    request.certificate_authorities_.end();    while (first != last) {        uint16 sz;        ato16(*first, sz);        output.write(*first, sz + REQUEST_HEADER);        ++first;    }    return output;}// CertificateRequest processing handlervoid CertificateRequest::Process(input_buffer&, SSL& ssl){    ssl.useCrypto().use_certManager().setSendVerify();}HandShakeType CertificateRequest::get_type() const{    return certificate_request;}// CertificateVerify CertificateVerify::CertificateVerify() : signature_(0){}CertificateVerify::~CertificateVerify(){    ysArrayDelete(signature_);}void CertificateVerify::Build(SSL& ssl){    build_certHashes(ssl, hashes_);    uint16 sz = 0;    byte   len[VERIFY_HEADER];    mySTL::auto_ptr<byte> sig(ysArrayDelete);    // sign    const CertManager& cert = ssl.getCrypto().get_certManager();    if (cert.get_keyType() == rsa_sa_algo) {        RSA rsa(cert.get_privateKey(), cert.get_privateKeyLength(), false);        sz = rsa.get_cipherLength() + VERIFY_HEADER;        sig.reset(new (ys) byte[sz]);        c16toa(sz - VERIFY_HEADER, len);        memcpy(sig.get(), len, VERIFY_HEADER);        rsa.sign(sig.get() + VERIFY_HEADER, hashes_.md5_, sizeof(Hashes),                 ssl.getCrypto().get_random());    }    else {  // DSA        DSS dss(cert.get_privateKey(), cert.get_privateKeyLength(), false);        sz = DSS_SIG_SZ + DSS_ENCODED_EXTRA + VERIFY_HEADER;        sig.reset(new (ys) byte[sz]);        c16toa(sz - VERIFY_HEADER, len);        memcpy(sig.get(), len, VERIFY_HEADER);        dss.sign(sig.get() + VERIFY_HEADER, hashes_.sha_, SHA_LEN,                 ssl.getCrypto().get_random());        byte encoded[DSS_SIG_SZ + DSS_ENCODED_EXTRA];        TaoCrypt::EncodeDSA_Signature(sig.get() + VERIFY_HEADER, encoded);        memcpy(sig.get() + VERIFY_HEADER, encoded, sizeof(encoded));    }    set_length(sz);    signature_ = sig.release();}input_buffer& CertificateVerify::set(input_buffer& in){    return in >> *this;}output_buffer& CertificateVerify::get(output_buffer& out) const{    return out << *this;}// input operator for CertificateVerifyinput_buffer& operator>>(input_buffer& input, CertificateVerify& request){    byte tmp[VERIFY_HEADER];    input.read(tmp, sizeof(tmp));    uint16 sz = 0;    ato16(tmp, sz);    request.set_length(sz);    request.signature_ = new (ys) byte[sz];    input.read(request.signature_, sz);    return input;}// output operator for CertificateVerifyoutput_buffer& operator<<(output_buffer& output,                          const CertificateVerify& verify){    output.write(verify.signature_, verify.get_length());    return output;}// CertificateVerify processing handlervoid CertificateVerify::Process(input_buffer&, SSL& ssl){    const Hashes&      hashVerify = ssl.getHashes().get_certVerify();    const CertManager& cert       = ssl.getCrypto().get_certManager();    if (cert.get_peerKeyType() == rsa_sa_algo) {        RSA rsa(cert.get_peerKey(), cert.get_peerKeyLength());        if (!rsa.verify(hashVerify.md5_, sizeof(hashVerify), signature_,                        get_length()))            ssl.SetError(verify_error);    }    else { // DSA        byte decodedSig[DSS_SIG_SZ];        TaoCrypt::DecodeDSA_Signature(decodedSig, signature_, get_length());                DSS dss(cert.get_peerKey(), cert.get_peerKeyLength());        if (!dss.verify(hashVerify.sha_, SHA_LEN, decodedSig, get_length()))            ssl.SetError(verify_error);    }}HandShakeType CertificateVerify::get_type() const{    return certificate_verify;}// output operator for ClientKeyExchangeoutput_buffer& operator<<(output_buffer& output, const ClientKeyExchange& ck){    output.write(ck.getKey(), ck.getKeyLength());    return output;}// Client Key Exchange processing handlervoid ClientKeyExchange::Process(input_buffer& input, SSL& ssl){    createKey(ssl);    if (ssl.GetError()) return;    client_key_->read(ssl, input);    if (ssl.getCrypto().get_certManager().verifyPeer())        build_certHashes(ssl, ssl.useHashes().use_certVerify());    ssl.useStates().useServer() = clientKeyExchangeComplete;}ClientKeyExchange::ClientKeyExchange(SSL& ssl){    createKey(ssl);}ClientKeyExchange::ClientKeyExchange()    : client_key_(0){}ClientKeyExchange::~ClientKeyExchange(){    ysDelete(client_key_);}void ClientKeyExchange::build(SSL& ssl) {     client_key_->build(ssl);     set_length(client_key_->get_length());}const opaque* ClientKeyExchange::getKey() const{    return client_key_->get_clientKey();}int ClientKeyExchange::getKeyLength() const{    return client_key_->get_length();}input_buffer& ClientKeyExchange::set(input_buffer& in){    return in;}output_buffer& ClientKeyExchange::get(output_buffer& out) const{    return out << *this;}HandShakeType ClientKeyExchange::get_type() const{    return client_key_exchange;}// input operator for Finishedinput_buffer& operator>>(input_buffer& input, Finished&){    /*  do in process */    return input; }// output operator for Finishedoutput_buffer& operator<<(output_buffer& output, const Finished& fin){    if (fin.get_length() == FINISHED_SZ) {        output.write(fin.hashes_.md5_, MD5_LEN);        output.write(fin.hashes_.sha_, SHA_LEN);    }    else    // TLS_FINISHED_SZ        output.write(fin.hashes_.md5_, TLS_FINISHED_SZ);    return output;}// Finished processing handlervoid Finished::Process(input_buffer& input, SSL& ssl){    // verify hashes    const  Finished& verify = ssl.getHashes().get_verify();    uint finishedSz = ssl.isTLS() ? TLS_FINISHED_SZ : FINISHED_SZ;    input.read(hashes_.md5_, finishedSz);    if (memcmp(&hashes_, &verify.hashes_, finishedSz)) {        ssl.SetError(verify_error);        return;    }    // read verify mac    opaque verifyMAC[SHA_LEN];    uint macSz = finishedSz + HANDSHAKE_HEADER;    if (ssl.isTLS())        TLS_hmac(ssl, verifyMAC, input.get_buffer() + input.get_current()                 - macSz, macSz, handshake, true);    else        hmac(ssl, verifyMAC, input.get_buffer() + input.get_current() - macSz,             macSz, handshake, true);    // read mac and fill    opaque mac[SHA_LEN];   // max size    int    digestSz = ssl.getCrypto().get_digest().get_digestSize();    input.read(mac, digestSz);    opaque fill;    int    padSz = ssl.getSecurity().get_parms().encrypt_size_ -                     HANDSHAKE_HEADER - finishedSz - digestSz;    for (int i = 0; i < padSz; i++)         fill = input[AUTO];    // verify mac    if (memcmp(mac, verifyMAC, digestSz)) {        ssl.SetError(verify_error);        return;    }    // update states    ssl.useStates().useHandShake() = handShakeReady;    if (ssl.getSecurity().get_parms().entity_ == client_end)        ssl.useStates().useClient() = serverFinishedComplete;    else        ssl.useStates().useServer() = clientFinishedComplete;}Finished::Finished(){    set_length(FINISHED_SZ);}uint8* Finished::set_md5(){    return hashes_.md5_;}uint8* Finished::set_sha(){    return hashes_.sha_;}input_buffer& Finished::set(input_buffer& in){    return in  >> *this;}output_buffer& Finished::get(output_buffer& out) const{    return out << *this;}HandShakeType Finished::get_type() const{    return finished;}void clean(volatile opaque* p, uint sz, RandomPool& ran){    uint i(0);    for (i = 0; i < sz; ++i)        p[i] = 0;    ran.Fill(const_cast<opaque*>(p), sz);    for (i = 0; i < sz; ++i)        p[i] = 0;}Connection::Connection(ProtocolVersion v, RandomPool& ran)    : pre_master_secret_(0), sequence_number_(0), peer_sequence_number_(0),      pre_secret_len_(0), send_server_key_(false), master_clean_(false),      TLS_(v.major_ >= 3 && v.minor_ >= 1), version_(v), random_(ran) {}Connection::~Connection() {     CleanMaster(); CleanPreMaster(); ysArrayDelete(pre_master_secret_);}void Connection::AllocPreSecret(uint sz) {     pre_master_secret_ = new (ys) opaque[pre_secret_len_ = sz];}void Connection::TurnOffTLS(){    TLS_ = false;    version_.minor_ = 0;}// wipeout master secretvoid Connection::CleanMaster(){    if (!master_clean_) {        volatile opaque* p = master_secret_;        clean(p, SECRET_LEN, random_);        master_clean_ = true;    }}// wipeout pre master secretvoid Connection::CleanPreMaster(){    if (pre_master_secret_) {        volatile opaque* p = pre_master_secret_;        clean(p, pre_secret_len_, random_);        ysArrayDelete(pre_master_secret_);        pre_master_secret_ = 0;    }}// Create functions for message factoryMessage* CreateCipherSpec() { return new (ys) ChangeCipherSpec; }Message* CreateAlert()      { return new (ys) Alert; }Message* CreateHandShake()  { return new (ys) HandShakeHeader; }Message* CreateData()       { return new (ys) Data; }// Create functions for handshake factoryHandShakeBase* CreateHelloRequest()       { return new (ys) HelloRequest; }HandShakeBase* CreateClientHello()        { return new (ys) ClientHello; }HandShakeBase* CreateServerHello()        { return new (ys) ServerHello; }HandShakeBase* CreateCertificate()        { return new (ys) Certificate; }HandShakeBase* CreateServerKeyExchange()  { return new (ys) ServerKeyExchange;}HandShakeBase* CreateCertificateRequest() { return new (ys)                                                     CertificateRequest; }HandShakeBase* CreateServerHelloDone()    { return new (ys) ServerHelloDone; }HandShakeBase* CreateCertificateVerify()  { return new (ys) CertificateVerify;}HandShakeBase* CreateClientKeyExchange()  { return new (ys) ClientKeyExchange;}HandShakeBase* CreateFinished()           { return new (ys) Finished; }// Create functions for server key exchange factoryServerKeyBase* CreateRSAServerKEA()       { return new (ys) RSA_Server; }ServerKeyBase* CreateDHServerKEA()        { return new (ys) DH_Server; }ServerKeyBase* CreateFortezzaServerKEA()  { return new (ys) Fortezza_Server; }// Create functions for client key exchange factoryClientKeyBase* CreateRSAClient()      { return new (ys)                                                 EncryptedPreMasterSecret; }ClientKeyBase* CreateDHClient()       { return new (ys)                                                 ClientDiffieHellmanPublic; }ClientKeyBase* CreateFortezzaClient() { return new (ys) FortezzaKeys; }// Constructor calls this to Register compile time callbacksvoid InitMessageFactory(MessageFactory& mf){    mf.Reserve(4);    mf.Register(alert, CreateAlert);    mf.Register(change_cipher_spec, CreateCipherSpec);    mf.Register(handshake, CreateHandShake);    mf.Register(application_data, CreateData);}// Constructor calls this to Register compile time callbacksvoid InitHandShakeFactory(HandShakeFactory& hsf){    hsf.Reserve(10);    hsf.Register(hello_request, CreateHelloRequest);    hsf.Register(client_hello, CreateClientHello);    hsf.Register(server_hello, CreateServerHello);    hsf.Register(certificate, CreateCertificate);    hsf.Register(server_key_exchange, CreateServerKeyExchange);    hsf.Register(certificate_request, CreateCertificateRequest);    hsf.Register(server_hello_done, CreateServerHelloDone);    hsf.Register(certificate_verify, CreateCertificateVerify);    hsf.Register(client_key_exchange, CreateClientKeyExchange);    hsf.Register(finished, CreateFinished);}// Constructor calls this to Register compile time callbacksvoid InitServerKeyFactory(ServerKeyFactory& skf){    skf.Reserve(3);    skf.Register(rsa_kea, CreateRSAServerKEA);    skf.Register(diffie_hellman_kea, CreateDHServerKEA);    skf.Register(fortezza_kea, CreateFortezzaServerKEA);}// Constructor calls this to Register compile time callbacksvoid InitClientKeyFactory(ClientKeyFactory& ckf){    ckf.Reserve(3);    ckf.Register(rsa_kea, CreateRSAClient);    ckf.Register(diffie_hellman_kea, CreateDHClient);    ckf.Register(fortezza_kea, CreateFortezzaClient);}} // namespace

⌨️ 快捷键说明

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