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

📄 ssl.cpp

📁 mysql-5.0.33源码包
💻 CPP
📖 第 1 页 / 共 3 页
字号:
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);    memcpy(&key[DES_BLOCK * 2], *ks3, DES_BLOCK);    if (enc) {        des.set_encryptKey(key, *ivec);        des.encrypt(output, input, sz);

⌨️ 快捷键说明

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