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

📄 yassl_int.cpp

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        parms.cipher_type_ = block;        secure_.use_connection().send_server_key_  = true; // eph        crypto_.setDigest(new (ys) SHA);        crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));        strncpy(parms.cipher_name_,               cipher_names[TLS_DHE_DSS_WITH_AES_256_CBC_SHA], MAX_SUITE_NAME);        break;    case TLS_DHE_DSS_WITH_AES_128_CBC_SHA:        parms.bulk_cipher_algorithm_ = aes;        parms.mac_algorithm_         = sha;        parms.kea_                   = diffie_hellman_kea;        parms.sig_algo_              = dsa_sa_algo;        parms.hash_size_ = SHA_LEN;        parms.key_size_  = AES_128_KEY_SZ;        parms.iv_size_   = AES_BLOCK_SZ;        parms.cipher_type_ = block;        secure_.use_connection().send_server_key_  = true; // eph        crypto_.setDigest(new (ys) SHA);        crypto_.setCipher(new (ys) AES);        strncpy(parms.cipher_name_,               cipher_names[TLS_DHE_DSS_WITH_AES_128_CBC_SHA], MAX_SUITE_NAME);        break;    case TLS_RSA_WITH_AES_256_CBC_RMD160:        parms.bulk_cipher_algorithm_ = aes;        parms.mac_algorithm_         = rmd;        parms.kea_                   = rsa_kea;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = AES_256_KEY_SZ;        parms.iv_size_   = AES_BLOCK_SZ;        parms.cipher_type_ = block;        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));        strncpy(parms.cipher_name_,                cipher_names[TLS_RSA_WITH_AES_256_CBC_RMD160], MAX_SUITE_NAME);        break;    case TLS_RSA_WITH_AES_128_CBC_RMD160:        parms.bulk_cipher_algorithm_ = aes;        parms.mac_algorithm_         = rmd;        parms.kea_                   = rsa_kea;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = AES_128_KEY_SZ;        parms.iv_size_   = AES_BLOCK_SZ;        parms.cipher_type_ = block;        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) AES);        strncpy(parms.cipher_name_,                cipher_names[TLS_RSA_WITH_AES_128_CBC_RMD160], MAX_SUITE_NAME);        break;    case TLS_RSA_WITH_3DES_EDE_CBC_RMD160:        parms.bulk_cipher_algorithm_ = triple_des;        parms.mac_algorithm_         = rmd;        parms.kea_                   = rsa_kea;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = DES_EDE_KEY_SZ;        parms.iv_size_   = DES_IV_SZ;        parms.cipher_type_ = block;        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) DES_EDE);        strncpy(parms.cipher_name_,               cipher_names[TLS_RSA_WITH_3DES_EDE_CBC_RMD160], MAX_SUITE_NAME);        break;    case TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD160:        parms.bulk_cipher_algorithm_ = triple_des;        parms.mac_algorithm_         = rmd;        parms.kea_                   = diffie_hellman_kea;        parms.sig_algo_              = rsa_sa_algo;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = DES_EDE_KEY_SZ;        parms.iv_size_   = DES_IV_SZ;        parms.cipher_type_ = block;        secure_.use_connection().send_server_key_  = true; // eph        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) DES_EDE);        strncpy(parms.cipher_name_,                cipher_names[TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD160],                MAX_SUITE_NAME);        break;    case TLS_DHE_RSA_WITH_AES_256_CBC_RMD160:        parms.bulk_cipher_algorithm_ = aes;        parms.mac_algorithm_         = rmd;        parms.kea_                   = diffie_hellman_kea;        parms.sig_algo_              = rsa_sa_algo;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = AES_256_KEY_SZ;        parms.iv_size_   = AES_BLOCK_SZ;        parms.cipher_type_ = block;        secure_.use_connection().send_server_key_  = true; // eph        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));        strncpy(parms.cipher_name_,                cipher_names[TLS_DHE_RSA_WITH_AES_256_CBC_RMD160],                MAX_SUITE_NAME);        break;    case TLS_DHE_RSA_WITH_AES_128_CBC_RMD160:        parms.bulk_cipher_algorithm_ = aes;        parms.mac_algorithm_         = rmd;        parms.kea_                   = diffie_hellman_kea;        parms.sig_algo_              = rsa_sa_algo;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = AES_128_KEY_SZ;        parms.iv_size_   = AES_BLOCK_SZ;        parms.cipher_type_ = block;        secure_.use_connection().send_server_key_  = true; // eph        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) AES);        strncpy(parms.cipher_name_,                cipher_names[TLS_DHE_RSA_WITH_AES_128_CBC_RMD160],                MAX_SUITE_NAME);        break;    case TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD160:        parms.bulk_cipher_algorithm_ = triple_des;        parms.mac_algorithm_         = rmd;        parms.kea_                   = diffie_hellman_kea;        parms.sig_algo_              = dsa_sa_algo;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = DES_EDE_KEY_SZ;        parms.iv_size_   = DES_IV_SZ;        parms.cipher_type_ = block;        secure_.use_connection().send_server_key_  = true; // eph        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) DES_EDE);        strncpy(parms.cipher_name_,                cipher_names[TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD160],                MAX_SUITE_NAME);        break;    case TLS_DHE_DSS_WITH_AES_256_CBC_RMD160:        parms.bulk_cipher_algorithm_ = aes;        parms.mac_algorithm_         = rmd;        parms.kea_                   = diffie_hellman_kea;        parms.sig_algo_              = dsa_sa_algo;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = AES_256_KEY_SZ;        parms.iv_size_   = AES_BLOCK_SZ;        parms.cipher_type_ = block;        secure_.use_connection().send_server_key_  = true; // eph        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));        strncpy(parms.cipher_name_,                cipher_names[TLS_DHE_DSS_WITH_AES_256_CBC_RMD160],                MAX_SUITE_NAME);        break;    case TLS_DHE_DSS_WITH_AES_128_CBC_RMD160:        parms.bulk_cipher_algorithm_ = aes;        parms.mac_algorithm_         = rmd;        parms.kea_                   = diffie_hellman_kea;        parms.sig_algo_              = dsa_sa_algo;        parms.hash_size_ = RMD_LEN;        parms.key_size_  = AES_128_KEY_SZ;        parms.iv_size_   = AES_BLOCK_SZ;        parms.cipher_type_ = block;        secure_.use_connection().send_server_key_  = true; // eph        crypto_.setDigest(new (ys) RMD);        crypto_.setCipher(new (ys) AES);        strncpy(parms.cipher_name_,                cipher_names[TLS_DHE_DSS_WITH_AES_128_CBC_RMD160],                MAX_SUITE_NAME);        break;    default:        SetError(unknown_cipher);    }}// store peer's randomvoid SSL::set_random(const opaque* random, ConnectionEnd sender){    if (sender == client_end)        memcpy(secure_.use_connection().client_random_, random, RAN_LEN);    else        memcpy(secure_.use_connection().server_random_, random, RAN_LEN);}// store client pre master secretvoid SSL::set_preMaster(const opaque* pre, uint sz){    secure_.use_connection().AllocPreSecret(sz);    memcpy(secure_.use_connection().pre_master_secret_, pre, sz);}// store master secretvoid SSL::set_masterSecret(const opaque* sec){    memcpy(secure_.use_connection().master_secret_, sec, SECRET_LEN);}// store server issued idvoid SSL::set_sessionID(const opaque* sessionID){    memcpy(secure_.use_connection().sessionID_, sessionID, ID_LEN);}// store error void SSL::SetError(YasslError ye){    states_.SetError(ye);    //strncpy(states_.useString(), e.what(), mySTL::named_exception::NAME_SIZE);    // TODO: add string here}// localsnamespace {// DeriveKeys and MasterSecret helper sets prefix lettersstatic bool setPrefix(opaque* sha_input, int i){    switch (i) {    case 0:        memcpy(sha_input, "A", 1);        break;    case 1:        memcpy(sha_input, "BB", 2);        break;    case 2:        memcpy(sha_input, "CCC", 3);        break;    case 3:        memcpy(sha_input, "DDDD", 4);        break;    case 4:        memcpy(sha_input, "EEEEE", 5);        break;    case 5:        memcpy(sha_input, "FFFFFF", 6);        break;    case 6:        memcpy(sha_input, "GGGGGGG", 7);        break;    default:        return false;  // prefix_error    }    return true;}const char handshake_order[] = "Out of order HandShake Message!";} // namespcae for localsvoid SSL::order_error(){    SetError(out_of_order);}// Create and store the master secret see page 32, 6.1void SSL::makeMasterSecret(){    if (isTLS())        makeTLSMasterSecret();    else {        opaque sha_output[SHA_LEN];        const uint& preSz = secure_.get_connection().pre_secret_len_;        output_buffer md5_input(preSz + SHA_LEN);        output_buffer sha_input(PREFIX + preSz + 2 * RAN_LEN);        MD5 md5;        SHA sha;        md5_input.write(secure_.get_connection().pre_master_secret_, preSz);        for (int i = 0; i < MASTER_ROUNDS; ++i) {            opaque prefix[PREFIX];            if (!setPrefix(prefix, i)) {                SetError(prefix_error);                return;            }            sha_input.set_current(0);            sha_input.write(prefix, i + 1);            sha_input.write(secure_.get_connection().pre_master_secret_,preSz);            sha_input.write(secure_.get_connection().client_random_, RAN_LEN);            sha_input.write(secure_.get_connection().server_random_, RAN_LEN);            sha.get_digest(sha_output, sha_input.get_buffer(),                           sha_input.get_size());            md5_input.set_current(preSz);            md5_input.write(sha_output, SHA_LEN);            md5.get_digest(&secure_.use_connection().master_secret_[i*MD5_LEN],                           md5_input.get_buffer(), md5_input.get_size());        }        deriveKeys();    }    secure_.use_connection().CleanPreMaster();}// create TLSv1 master secretvoid SSL::makeTLSMasterSecret(){    opaque seed[SEED_LEN];        memcpy(seed, secure_.get_connection().client_random_, RAN_LEN);    memcpy(&seed[RAN_LEN], secure_.get_connection().server_random_, RAN_LEN);    PRF(secure_.use_connection().master_secret_, SECRET_LEN,        secure_.get_connection().pre_master_secret_,        secure_.get_connection().pre_secret_len_,        master_label, MASTER_LABEL_SZ,         seed, SEED_LEN);    deriveTLSKeys();}// derive mac, write, and iv keys for server and client, see page 34, 6.2.2void SSL::deriveKeys(){    int length = 2 * secure_.get_parms().hash_size_ +                  2 * secure_.get_parms().key_size_  +                 2 * secure_.get_parms().iv_size_;    int rounds = length / MD5_LEN + ((length % MD5_LEN) ? 1 : 0);    input_buffer key_data(rounds * MD5_LEN);    opaque sha_output[SHA_LEN];    opaque md5_input[SECRET_LEN + SHA_LEN];    opaque sha_input[KEY_PREFIX + SECRET_LEN + 2 * RAN_LEN];      MD5 md5;    SHA sha;    memcpy(md5_input, secure_.get_connection().master_secret_, SECRET_LEN);    for (int i = 0; i < rounds; ++i) {        int j = i + 1;        if (!setPrefix(sha_input, i)) {            SetError(prefix_error);            return;        }        memcpy(&sha_input[j], secure_.get_connection().master_secret_,               SECRET_LEN);        memcpy(&sha_input[j+SECRET_LEN],               secure_.get_connection().server_random_, RAN_LEN);        memcpy(&sha_input[j + SECRET_LEN + RAN_LEN],               secure_.get_connection().client_random_, RAN_LEN);        sha.get_digest(sha_output, sha_input,                       sizeof(sha_input) - KEY_PREFIX + j);        memcpy(&md5_input[SECRET_LEN], sha_output, SHA_LEN);        md5.get_digest(key_data.get_buffer() + i * MD5_LEN,                       md5_input, sizeof(md5_input));    }    storeKeys(key_data.get_buffer());}// derive mac, write, and iv keys for server and clientvoid SSL::deriveTLSKeys(){    int length = 2 * secure_.get_parms().hash_size_ +                  2 * secure_.get_parms().key_size_  +                 2 * secure_.get_parms().iv_size_;    opaque       seed[SEED_LEN];    input_buffer key_data(length);    memcpy(seed, secure_.get_connection().server_random_, RAN_LEN);    memcpy(&seed[RAN_LEN], secure_.get_connection().client_random_, RAN_LEN);    PRF(key_data.get_buffer(), length, secure_.get_connection().master_secret_,        SECRET_LEN, key_label, KEY_LABEL_SZ, seed, SEED_LEN);    storeKeys(key_data.get_buffer());}// store mac, write, and iv keys for client and servervoid SSL::storeKeys(const opaque* key_data){    int sz = secure_.get_parms().hash_size_;    memcpy(secure_.use_connection().client_write_MAC_secret_, key_data, sz);    int i = sz;    memcpy(secure_.use_connection().server_write_MAC_secret_,&key_data[i], sz);    i += sz;    sz = secure_.get_parms().key_size_;    memcpy(secure_.use_connection().client_write_key_, &key_data[i], sz);    i += sz;    memcpy(secure_.use_connection().server_write_key_, &key_data[i], sz);    i += sz;    sz = secure_.get_parms().iv_size_;    memcpy(secure_.use_connection().client_write_IV_, &key_data[i], sz);    i += sz;    memcpy(secure_.use_connection().server_write_IV_, &key_data[i], sz);    setKeys();}// set encrypt/decrypt keys and ivsvoid SSL::setKeys(){    Connection& conn = secure_.use_connection();    if (secure_.get_parms().entity_ == client_end) {        crypto_.use_cipher().set_encryptKey(conn.client_write_key_,                                             conn.client_write_IV_);        crypto_.use_cipher().set_decryptKey(conn.server_write_key_,                                            conn.server_write_IV_);    }    else {        crypto_.use_cipher().set_encryptKey(conn.server_write_key_,                                            conn.server_write_IV_);        crypto_.use_cipher().set_decryptKey(conn.client_write_key_,                                            conn.client_write_IV_);    }}// local functorsnamespace yassl_int_cpp_local1 {  // for explicit templatesstruct SumData {    uint total_;    SumData() : total_(0) {}    void operator()(input_buffer* data) { total_ += data->get_remaining(); }};struct SumBuffer {    uint total_;    SumBuffer() : total_(0) {}    void operator()(output_buffer* buffer) { total_ += buffer->get_size(); }};} // namespace for localsusing namespace yassl_int_cpp_local1;uint SSL::bufferedData(){    return mySTL::for_each(buffers_.getData().begin(),buffers_.getData().end(),                           SumData()).total_;}// use input buffer to fill datavoid SSL::fillData(Data& data){    if (GetError()) return;    uint dataSz   = data.get_length();        // input, data size to fill    uint elements = buffers_.getData().size();    data.set_length(0);                         // output, actual data filled    dataSz = min(dataSz, bufferedData());    for (uint i = 0; i < elements; i++) {        input_buffer* front = buffers_.getData().front();        uint frontSz = front->get_remaining();        uint readSz  = min(dataSz - data.get_length(), frontSz);        front->read(data.set_buffer() + data.get_length(), readSz);        data.set_length(data.get_length() + readSz);        if (readSz == frontSz) {            buffers_.useData().pop_front();            ysDelete(front);        }        if (data.get_length() == dataSz)            break;    }}// flush output buffervoid SSL::flushBuffer(){    if (GetError()) return;    uint sz = mySTL::for_each(buffers_.getHandShake().begin(),                            buffers_.getHandShake().end(),                            SumBuffer()).total_;    output_buffer out(sz);    uint elements = buffers_.getHandShake().size();    for (uint i = 0; i < elements; i++) {        output_buffer* front = buffers_.getHandShake().front();        out.write(front->get_buffer(), front->get_size());        buffers_.useHandShake().pop_front();        ysDelete(front);    }    Send(out.get_buffer(), out.get_size());

⌨️ 快捷键说明

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