📄 ssl.cpp
字号:
// 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{}void SSL_library_init() // compatibility only{}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 /*err*/, char* buffer){ // TODO: static char* msg = "Not Implemented"; if (buffer) return strncpy(buffer, msg, strlen(msg)); 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){ // TODO: FIX add to some list for destruction return new (ys) MD5;}const EVP_CIPHER* EVP_des_ede3_cbc(void){ // TODO: FIX add to some list for destruction return new (ys) DES_EDE;}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){ EVP_MD* myMD = const_cast<EVP_MD*>(md); uint digestSz = myMD->get_digestSize(); byte digest[SHA_LEN]; // max size int keyLen = type->get_keySize(); int ivLen = type->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 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; } void SSLeay_add_ssl_algorithms() // compatibility only {} 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} // namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -