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

📄 ssl.cpp

📁 mysql-5.0.24源码包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{    // 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){    using mySTL::auto_ptr;    bool created = false;    auto_ptr<BIGNUM> bn(ysDelete);    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 = "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;    // only support DES_EDE3_CBC for now    if (strncmp(type, "DES_EDE3_CBC", 12)) return 0;     yaSSL::MD5 myMD;    uint digestSz = myMD.get_digestSize();    byte digest[SHA_LEN];                   // max size    yaSSL::DES_EDE cipher;    int keyLen    = cipher.get_keySize();    int ivLen     = cipher.get_ivSize();    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, 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);    }    else {        des.set_decryptKey(key, *ivec);        des.decrypt(output, input, sz);    }}// functions for libcurlint RAND_status(){    return 1;  /* TaoCrypt provides enough seed */}int DES_set_key(const_DES_cblock* key, DES_key_schedule* schedule){    memcpy(schedule, key, sizeof(const_DES_cblock));    return 1;}void DES_set_odd_parity(DES_cblock* key){    // not needed now for TaoCrypt}void DES_ecb_encrypt(DES_cblock* input, DES_cblock* output,                     DES_key_schedule* key, int enc){    DES  des;    if (enc) {        des.set_encryptKey(*key, 0);        des.encrypt(*output, *input, DES_BLOCK);    }    else {        des.set_decryptKey(*key, 0);        des.decrypt(*output, *input, DES_BLOCK);    }}void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX*, void* userdata){    // yaSSL doesn't support yet, unencrypt your PEM file with userdata    // before handing off to yaSSL}X509* SSL_get_certificate(SSL* ssl){    // only used to pass to get_privatekey which isn't used    return 0;}EVP_PKEY* SSL_get_privatekey(SSL* ssl){    // only called, not used    return 0;}void SSL_SESSION_free(SSL_SESSION* session){    // managed by singleton}EVP_PKEY* X509_get_pubkey(X509* x){    // called, not used though    return 0;}int EVP_PKEY_copy_parameters(EVP_PKEY* to, const EVP_PKEY* from){    // called, not used though    return 0;}void EVP_PKEY_free(EVP_PKEY* pkey){    // never allocated from above}void ERR_error_string_n(unsigned long e, char *buf, size_t len){    if (len) ERR_error_string(e, buf);}void ERR_free_strings(void){    // handled internally}void EVP_cleanup(void){    // nothing to do yet}ASN1_TIME* X509_get_notBefore(X509* x){    if (x) return x->GetBefore();    return 0;}ASN1_TIME* X509_get_notAfter(X509* x){    if (x) return x->GetAfter();    return 0;}SSL_METHOD* SSLv23_client_method(void)  /* doesn't actually roll back */{    return SSLv3_client_method();}SSL_METHOD* SSLv2_client_method(void)   /* will never work, no v 2    */{    return 0;}SSL_SESSION* SSL_get1_session(SSL* ssl)  /* what's ref count */{    return SSL_get_session(ssl);}void GENERAL_NAMES_free(STACK_OF(GENERAL_NAME) *x){    // no extension names supported yet}int sk_GENERAL_NAME_num(STACK_OF(GENERAL_NAME) *x){    // no extension names supported yet    return 0;}GENERAL_NAME* sk_GENERAL_NAME_value(STACK_OF(GENERAL_NAME) *x, int i){    // no extension names supported yet    return 0;}unsigned char* ASN1_STRING_data(ASN1_STRING* x){    if (x) return x->data;    return 0;}int ASN1_STRING_length(ASN1_STRING* x){    if (x) return x->length;    return 0;}int ASN1_STRING_type(ASN1_STRING *x){    if (x) return x->type;    return 0;}int X509_NAME_get_index_by_NID(X509_NAME* name,int nid, int lastpos){    int idx = -1;  // not found    const char* start = &name->GetName()[lastpos + 1];    switch (nid) {    case NID_commonName:        const char* found = strstr(start, "/CN=");        if (found) {            found += 4;  // advance to str            idx = found - start + lastpos + 1;        }        break;    }    return idx;}ASN1_STRING* X509_NAME_ENTRY_get_data(X509_NAME_ENTRY* ne){    // the same in yaSSL    return ne;}X509_NAME_ENTRY* X509_NAME_get_entry(X509_NAME* name, int loc){    return name->GetEntry(loc);}// already formatted, caller responsible for freeing *outint ASN1_STRING_to_UTF8(unsigned char** out, ASN1_STRING* in){    if (!in) return 0;    *out = (unsigned char*)malloc(in->length + 1);    if (*out) {        memcpy(*out, in->data, in->length);        (*out)[in->length] = 0;    }    return in->length;}void* X509_get_ext_d2i(X509* x, int nid, int* crit, int* idx){    // no extensions supported yet    return 0;}void MD4_Init(MD4_CTX* md4){    // make sure we have a big enough buffer    typedef char ok[sizeof(md4->buffer) >= sizeof(TaoCrypt::MD4) ? 1 : -1];    (void) sizeof(ok);    // using TaoCrypt since no dynamic memory allocated    // and no destructor will be called    new (reinterpret_cast<yassl_pointer>(md4->buffer)) TaoCrypt::MD4();}void MD4_Update(MD4_CTX* md4, const void* data, unsigned long sz){    reinterpret_cast<TaoCrypt::MD4*>(md4->buffer)->Update(                static_cast<const byte*>(data), static_cast<unsigned int>(sz));}void MD4_Final(unsigned char* hash, MD4_CTX* md4){    reinterpret_cast<TaoCrypt::MD4*>(md4->buffer)->Final(hash);}void MD5_Init(MD5_CTX* md5){    // make sure we have a big enough buffer    typedef char ok[sizeof(md5->buffer) >= sizeof(TaoCrypt::MD5) ? 1 : -1];    (void) sizeof(ok);    // using TaoCrypt since no dynamic memory allocated    // and no destructor will be called    new (reinterpret_cast<yassl_pointer>(md5->buffer)) TaoCrypt::MD5();}void MD5_Update(MD5_CTX* md5, const void* data, unsigned long sz){    reinterpret_cast<TaoCrypt::MD5*>(md5->buffer)->Update(                static_cast<const byte*>(data), static_cast<unsigned int>(sz));}void MD5_Final(unsigned char* hash, MD5_CTX* md5){    reinterpret_cast<TaoCrypt::MD5*>(md5->buffer)->Final(hash);}    // functions for stunnel    void RAND_screen()    {        // TODO:    }    const char* RAND_file_name(char*, size_t)    {        // TODO:        return 0;    }    int RAND_write_file(const char*)    {        // TODO:        return 0;    }    int RAND_load_file(const char*, long)    {        // TODO:        return 0;    }    void RSA_free(RSA*)    {        // TODO:    }    RSA* RSA_generate_key(int, unsigned long, void(*)(int, int, void*), void*)    {        //  TODO:        return 0;    }    int X509_LOOKUP_add_dir(X509_LOOKUP*, const char*, long)    {        // TODO:        return SSL_SUCCESS;    }    int X509_LOOKUP_load_file(X509_LOOKUP*, const char*, long)    {        // TODO:        return SSL_SUCCESS;    }    X509_LOOKUP_METHOD* X509_LOOKUP_hash_dir(void)    {        // TODO:        return 0;    }    X509_LOOKUP_METHOD* X509_LOOKUP_file(void)    {        // TODO:        return 0;    }    X509_LOOKUP* X509_STORE_add_lookup(X509_STORE*, X509_LOOKUP_METHOD*)    {        // TODO:        return 0;    }    int X509_STORE_get_by_subject(X509_STORE_CTX*, int, X509_NAME*, X509_OBJECT*)    {        // TODO:        return SSL_SUCCESS;    }    X509_STORE* X509_STORE_new(void)    {        // TODO:        return 0;    }    char* SSL_alert_type_string_long(int)    {        // TODO:        return 0;    }    char* SSL_alert_desc_string_long(int)    {        // TODO:        return 0;    }    char* SSL_state_string_long(SSL*)    {        // TODO:        return 0;    }    void SSL_CTX_set_tmp_rsa_callback(SSL_CTX*, RSA*(*)(SSL*, int, int))    {        // TDOD:    }    long SSL_CTX_set_session_cache_mode(SSL_CTX*, long)    {        // TDOD:        return SSL_SUCCESS;    }    long SSL_CTX_set_timeout(SSL_CTX*, long)    {        // TDOD:        return SSL_SUCCESS;    }    int SSL_CTX_use_certificate_chain_file(SSL_CTX*, const char*)    {        // TDOD:        return SSL_SUCCESS;    }    void SSL_CTX_set_default_passwd_cb(SSL_CTX*, pem_password_cb)    {        // TDOD:    }    int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX*, const char*, int)    {        // TDOD:        return SSL_SUCCESS;    }    int SSL_set_rfd(SSL*, int)    {        return SSL_SUCCESS; // TODO:    }    int SSL_set_wfd(SSL*, int)    {        return SSL_SUCCESS; // TODO:    }    int SSL_pending(SSL*)    {        return SSL_SUCCESS; // TODO:    }    int SSL_want_read(SSL*)    {        return 0; // TODO:    }    int SSL_want_write(SSL*)    {        return 0; // TODO:    }    void SSL_set_shutdown(SSL*, int)    {        // TODO:    }    SSL_CIPHER* SSL_get_current_cipher(SSL*)    {        // TODO:        return 0;    }    char* SSL_CIPHER_description(SSL_CIPHER*, char*, int)    {        // TODO:        return 0;    }    int SSLeay_add_ssl_algorithms()  // compatibility only    {        return 1;    }    void ERR_remove_state(unsigned long)    {        // TODO:    }    int ERR_GET_REASON(int l)    {        return l & 0xfff;    }    unsigned long ERR_peek_error()    {        return 0;  // TODO:    }    unsigned long ERR_get_error()    {        return ERR_peek_error();    }    // end stunnel needs} // extern "C"} // namespace

⌨️ 快捷键说明

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