📄 ssl.cpp
字号:
} 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* ctx, void* userdata){ ctx->SetUserData(userdata);}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* 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);}int RAND_bytes(unsigned char* buf, int num){ RandomPool ran; if (ran.GetError()) return 0; ran.Fill(buf, num); return 1;}int SSL_peek(SSL* ssl, void* buffer, int sz){ Data data(min(sz, MAX_RECORD_SIZE), static_cast<opaque*>(buffer)); return receiveData(*ssl, data, true);}int SSL_pending(SSL* ssl){ // Just in case there's pending data that hasn't been processed yet... char c; SSL_peek(ssl, &c, 1); return ssl->bufferedData();}void SSL_CTX_set_default_passwd_cb(SSL_CTX* ctx, pem_password_cb cb){ ctx->SetPasswordCb(cb);}int SSLeay_add_ssl_algorithms() // compatibility only{ return 1;}void ERR_remove_state(unsigned long){ GetErrors().Remove();}int ERR_GET_REASON(int l){ return l & 0xfff;}unsigned long err_helper(bool peek = false){ int ysError = GetErrors().Lookup(peek); // translate cert error for libcurl, it uses OpenSSL hex code switch (ysError) { case TaoCrypt::SIG_OTHER_E: return CERTFICATE_ERROR; break; default : return 0; }}unsigned long ERR_peek_error(){ return err_helper(true);}unsigned long ERR_get_error(){ return err_helper();} // 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_timeout(SSL_CTX*, long) { // TDOD: return SSL_SUCCESS; } int SSL_CTX_use_certificate_chain_file(SSL_CTX*, const char*) { // TDOD: return SSL_SUCCESS; } 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_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; } // end stunnel needs} // extern "C"} // namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -