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

📄 ssl.cpp

📁 这个文件是windows mysql源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    return ssl->getStates().What();}/* turn on yaSSL zlib compression   returns 0 for success, else error (not built in)   only need to turn on for client, becuase server on by default if built in   but calling for server will tell you whether it's available or not*/int SSL_set_compression(SSL* ssl){    return ssl->SetCompression();}X509* SSL_get_peer_certificate(SSL* ssl){    return ssl->getCrypto().get_certManager().get_peerX509();}void X509_free(X509* /*x*/){    // peer cert set for deletion during destruction    // no need to delete now}X509* X509_STORE_CTX_get_current_cert(X509_STORE_CTX* ctx){    return ctx->current_cert;}int X509_STORE_CTX_get_error(X509_STORE_CTX* ctx){    return ctx->error;}int X509_STORE_CTX_get_error_depth(X509_STORE_CTX* ctx){    return ctx->error_depth;}// copy name into buffer, at most sz bytes, if buffer is null// will malloc buffer, caller responsible for freeingchar* X509_NAME_oneline(X509_NAME* name, char* buffer, int sz){    if (!name->GetName()) return buffer;    int len    = strlen(name->GetName()) + 1;    int copySz = min(len, sz);    if (!buffer) {        buffer = (char*)malloc(len);        if (!buffer) return buffer;        copySz = len;    }    if (copySz == 0)        return buffer;    memcpy(buffer, name->GetName(), copySz - 1);    buffer[copySz - 1] = 0;    return buffer;}X509_NAME* X509_get_issuer_name(X509* x){    return  x->GetIssuer();}X509_NAME* X509_get_subject_name(X509* x){    return x->GetSubject();}void SSL_load_error_strings()   // compatibility only {}void SSL_set_connect_state(SSL*){    // already a client by default}void SSL_set_accept_state(SSL* ssl){    ssl->useSecurity().use_parms().entity_ = server_end;}long SSL_get_verify_result(SSL*){    // won't get here if not OK    return X509_V_OK;}long SSL_CTX_sess_set_cache_size(SSL_CTX* /*ctx*/, long /*sz*/){    // unlimited size, can't set for now    return 0;}long SSL_CTX_get_session_cache_mode(SSL_CTX*){    // always 0, unlimited size for now    return 0;}long SSL_CTX_set_tmp_dh(SSL_CTX* ctx, DH* dh){    if (ctx->SetDH(*dh))        return SSL_SUCCESS;    else        return SSL_FAILURE;}int SSL_CTX_use_certificate_file(SSL_CTX* ctx, const char* file, int format){    return read_file(ctx, file, format, Cert);}int SSL_CTX_use_PrivateKey_file(SSL_CTX* ctx, const char* file, int format){    return read_file(ctx, file, format, PrivateKey);}void SSL_CTX_set_verify(SSL_CTX* ctx, int mode, VerifyCallback /*vc*/){    if (mode & SSL_VERIFY_PEER)        ctx->setVerifyPeer();    if (mode == SSL_VERIFY_NONE)        ctx->setVerifyNone();    if (mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)        ctx->setFailNoCert();}int SSL_CTX_load_verify_locations(SSL_CTX* ctx, const char* file,                                  const char* path){    int       ret = SSL_SUCCESS;    const int HALF_PATH = 128;    if (file) ret = read_file(ctx, file, SSL_FILETYPE_PEM, CA);    if (ret == SSL_SUCCESS && path) {        // call read_file for each reqular file in path#ifdef _WIN32        WIN32_FIND_DATA FindFileData;        HANDLE hFind;        char name[MAX_PATH + 1];  // directory specification        strncpy(name, path, MAX_PATH - 3);        strncat(name, "\\*", 3);        hFind = FindFirstFile(name, &FindFileData);        if (hFind == INVALID_HANDLE_VALUE) return SSL_BAD_PATH;        do {            if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) {                strncpy(name, path, MAX_PATH - 2 - HALF_PATH);                strncat(name, "\\", 2);                strncat(name, FindFileData.cFileName, HALF_PATH);                ret = read_file(ctx, name, SSL_FILETYPE_PEM, CA);            }        } while (ret == SSL_SUCCESS && FindNextFile(hFind, &FindFileData));        FindClose(hFind);#else   // _WIN32        const int MAX_PATH = 260;        DIR* dir = opendir(path);        if (!dir) return SSL_BAD_PATH;        struct dirent* entry;        struct stat    buf;        char           name[MAX_PATH + 1];        while (ret == SSL_SUCCESS && (entry = readdir(dir))) {            strncpy(name, path, MAX_PATH - 1 - HALF_PATH);            strncat(name, "/", 1);            strncat(name, entry->d_name, HALF_PATH);            if (stat(name, &buf) < 0) return SSL_BAD_STAT;                 if (S_ISREG(buf.st_mode))                ret = read_file(ctx, name, SSL_FILETYPE_PEM, CA);        }        closedir(dir);#endif    }    return ret;}int SSL_CTX_set_default_verify_paths(SSL_CTX* /*ctx*/){    // TODO: figure out way to set/store default path, then call load_verify    return SSL_NOT_IMPLEMENTED;}int SSL_CTX_set_session_id_context(SSL_CTX*, const unsigned char*,                                    unsigned int){    // No application specific context needed for yaSSL    return SSL_SUCCESS;}int SSL_CTX_check_private_key(SSL_CTX* /*ctx*/){    // TODO: check private against public for RSA match    return SSL_NOT_IMPLEMENTED;}// TODO: all session statslong SSL_CTX_sess_accept(SSL_CTX* ctx){    return ctx->GetStats().accept_;}long SSL_CTX_sess_connect(SSL_CTX* ctx){    return ctx->GetStats().connect_;}long SSL_CTX_sess_accept_good(SSL_CTX* ctx){    return ctx->GetStats().acceptGood_;}long SSL_CTX_sess_connect_good(SSL_CTX* ctx){    return ctx->GetStats().connectGood_;}long SSL_CTX_sess_accept_renegotiate(SSL_CTX* ctx){    return ctx->GetStats().acceptRenegotiate_;}long SSL_CTX_sess_connect_renegotiate(SSL_CTX* ctx){    return ctx->GetStats().connectRenegotiate_;}long SSL_CTX_sess_hits(SSL_CTX* ctx){    return ctx->GetStats().hits_;}long SSL_CTX_sess_cb_hits(SSL_CTX* ctx){    return ctx->GetStats().cbHits_;}long SSL_CTX_sess_cache_full(SSL_CTX* ctx){    return ctx->GetStats().cacheFull_;}long SSL_CTX_sess_misses(SSL_CTX* ctx){    return ctx->GetStats().misses_;}long SSL_CTX_sess_timeouts(SSL_CTX* ctx){    return ctx->GetStats().timeouts_;}long SSL_CTX_sess_number(SSL_CTX* ctx){    return ctx->GetStats().number_;}long SSL_CTX_sess_get_cache_size(SSL_CTX* ctx){    return ctx->GetStats().getCacheSize_;}// end session stats TODO:int SSL_CTX_get_verify_mode(SSL_CTX* ctx){    return ctx->GetStats().verifyMode_;}int SSL_get_verify_mode(SSL* ssl){    return ssl->getSecurity().GetContext()->GetStats().verifyMode_;}int SSL_CTX_get_verify_depth(SSL_CTX* ctx){    return ctx->GetStats().verifyDepth_;}int SSL_get_verify_depth(SSL* ssl){    return ssl->getSecurity().GetContext()->GetStats().verifyDepth_;}long SSL_CTX_set_options(SSL_CTX*, long){    // TDOD:    return SSL_SUCCESS;}void SSL_CTX_set_info_callback(SSL_CTX*, void (*)()){    // TDOD:}void OpenSSL_add_all_algorithms()  // compatibility only{}int SSL_library_init()  // compatiblity only{    return 1;}DH* DH_new(void){    DH* dh = NEW_YS DH;    if (dh)        dh->p = dh->g = 0;    return dh;}void DH_free(DH* dh){    ysDelete(dh->g);    ysDelete(dh->p);    ysDelete(dh);}// convert positive big-endian num of length sz into retVal, which may need to // be createdBIGNUM* BN_bin2bn(const unsigned char* num, int sz, BIGNUM* retVal){    bool created = false;    mySTL::auto_ptr<BIGNUM> bn;    if (!retVal) {        created = true;        bn.reset(NEW_YS BIGNUM);        retVal = bn.get();    }    retVal->assign(num, sz);    if (created)        return bn.release();    else        return retVal;}unsigned long ERR_get_error_line_data(const char**, int*, const char**, int *){    //return SSL_NOT_IMPLEMENTED;    return 0;}void ERR_print_errors_fp(FILE* /*fp*/){    // need ssl access to implement TODO:    //fprintf(fp, "%s", ssl.get_states().errorString_.c_str());}char* ERR_error_string(unsigned long errNumber, char* buffer){  static char* msg = (char*)"Please supply a buffer for error string";    if (buffer) {        SetErrorString(YasslError(errNumber), buffer);        return buffer;    }    return msg;}const char* X509_verify_cert_error_string(long /* error */){    // TODO:    static const char* msg = "Not Implemented";    return msg;}const EVP_MD* EVP_md5(void){    static const char* type = "MD5";    return type;}const EVP_CIPHER* EVP_des_ede3_cbc(void){    static const char* type = "DES-EDE3-CBC";    return type;}int EVP_BytesToKey(const EVP_CIPHER* type, const EVP_MD* md, const byte* salt,                   const byte* data, int sz, int count, byte* key, byte* iv){    // only support MD5 for now    if (strncmp(md, "MD5", 3)) return 0;    int keyLen = 0;    int ivLen  = 0;    // only support CBC DES and AES for now    if (strncmp(type, "DES-CBC", 7) == 0) {        keyLen = DES_KEY_SZ;        ivLen  = DES_IV_SZ;    }    else if (strncmp(type, "DES-EDE3-CBC", 12) == 0) {        keyLen = DES_EDE_KEY_SZ;        ivLen  = DES_IV_SZ;    }    else if (strncmp(type, "AES-128-CBC", 11) == 0) {        keyLen = AES_128_KEY_SZ;        ivLen  = AES_IV_SZ;    }    else if (strncmp(type, "AES-192-CBC", 11) == 0) {        keyLen = AES_192_KEY_SZ;        ivLen  = AES_IV_SZ;    }    else if (strncmp(type, "AES-256-CBC", 11) == 0) {        keyLen = AES_256_KEY_SZ;        ivLen  = AES_IV_SZ;    }    else        return 0;    yaSSL::MD5 myMD;    uint digestSz = myMD.get_digestSize();    byte digest[SHA_LEN];                   // max size    int keyLeft   = keyLen;    int ivLeft    = ivLen;    int keyOutput = 0;    while (keyOutput < (keyLen + ivLen)) {        int digestLeft = digestSz;        // D_(i - 1)        if (keyOutput)                      // first time D_0 is empty            myMD.update(digest, digestSz);        // data        myMD.update(data, sz);        // salt        if (salt)            myMD.update(salt, EVP_SALT_SZ);        myMD.get_digest(digest);        // count        for (int j = 1; j < count; j++) {            myMD.update(digest, digestSz);            myMD.get_digest(digest);        }        if (keyLeft) {            int store = min(keyLeft, static_cast<int>(digestSz));            memcpy(&key[keyLen - keyLeft], digest, store);            keyOutput  += store;            keyLeft    -= store;            digestLeft -= store;        }        if (ivLeft && digestLeft) {            int store = min(ivLeft, digestLeft);            memcpy(&iv[ivLen - ivLeft], &digest[digestSz - digestLeft], store);            keyOutput += store;            ivLeft    -= store;        }    }    assert(keyOutput == (keyLen + ivLen));    return keyOutput;}void DES_set_key_unchecked(const_DES_cblock* key, DES_key_schedule* schedule){    memcpy(schedule, key, sizeof(const_DES_cblock));}void DES_ede3_cbc_encrypt(const byte* input, byte* output, long sz,                          DES_key_schedule* ks1, DES_key_schedule* ks2,                          DES_key_schedule* ks3, DES_cblock* ivec, int enc){    DES_EDE des;    byte key[DES_EDE_KEY_SZ];    memcpy(key, *ks1, DES_BLOCK);    memcpy(&key[DES_BLOCK], *ks2, DES_BLOCK);

⌨️ 快捷键说明

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