diff --git a/stream/stream.h b/stream/stream.h
index 950f9bc5ae4f6a5b22ecbe3d7320aeac91752867..4c0708bd3d3bb3eef05a319ec38094df150c27a4 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -45,7 +45,7 @@ struct dap_http_client;
 struct dap_http;
 struct stream;
 struct stream_pkt;
-#define STREAM_BUF_SIZE_MAX 20480
+#define STREAM_BUF_SIZE_MAX 500000
 #define STREAM_KEEPALIVE_TIMEOUT 3   // How  often send keeplive messages (seconds)
 #define STREAM_KEEPALIVE_PASSES 3    // How many messagges without answers need for disconnect client and close session
 
diff --git a/stream/stream_ctl.c b/stream/stream_ctl.c
index fcc96046e684f45ddd1c8f8619db5a7a7068b4a8..18118e16b942d634a49b7f91c9067e95d815b166 100644
--- a/stream/stream_ctl.c
+++ b/stream/stream_ctl.c
@@ -45,16 +45,27 @@ const char* connection_type_str[] =
 		[STREAM_SESSION_UDP] = "udp"
 };
 
+static struct {
+    size_t size;
+    dap_enc_key_type_t type;
+} _socket_forward_key;
+
+
 #define DAPMP_VERSION 13
 bool stream_check_proto_version(unsigned int ver);
 void stream_ctl_proc(struct dap_http_simple *cl_st, void * arg);
 
 /**
- * @brief stream_ctl_init Initialize stream control module
- * @return Zero if ok others if not
+ * @brief stream_ctl_init
+ * @param socket_forward_key_type
+ * @param socket_forward_key_size - Can be null for some alghoritms
+ * @return
  */
-int stream_ctl_init()
+int stream_ctl_init(dap_enc_key_type_t socket_forward_key_type,
+                    size_t socket_forward_key_size)
 {
+    _socket_forward_key.type = socket_forward_key_type;
+    _socket_forward_key.size = socket_forward_key_size;
     log_it(L_NOTICE,"Initialized stream control module");
     return 0;
 }
@@ -116,7 +127,7 @@ void stream_ctl_proc(struct dap_http_simple *cl_st, void * arg)
 
             char *key_str = calloc(1, KEX_KEY_STR_SIZE);
             dap_random_string_fill(key_str, KEX_KEY_STR_SIZE);
-            ss->key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_IAES, key_str, strlen(key_str), NULL, 0, 0);
+            ss->key = dap_enc_key_new_generate(_socket_forward_key.type, key_str, strlen(key_str), NULL, 0, _socket_forward_key.size);
             enc_http_reply_f(dg,"%u %s",ss->id,key_str);
             *return_code = Http_Status_OK;
 
diff --git a/stream/stream_ctl.h b/stream/stream_ctl.h
index 58eed79384b5aba7b028155c9d39697b4db7eda0..2b44efd282b992cffaf66e78d17c9077f4abd700 100644
--- a/stream/stream_ctl.h
+++ b/stream/stream_ctl.h
@@ -24,7 +24,10 @@
 struct dap_http;
 
 #define KEX_KEY_STR_SIZE 128
-extern int stream_ctl_init();
+
+int stream_ctl_init(dap_enc_key_type_t socket_forward_key_type,
+                    size_t socket_forward_key_size);
+
 extern void stream_ctl_deinit();
 extern void stream_ctl_add_proc(struct dap_http * sh, const char * url);
 
diff --git a/stream/stream_pkt.c b/stream/stream_pkt.c
index 7b377d998a9639fcb9a270fad05437e639ed5771..555f1c88f65d109a3ea8799102d1a4ec014bb128 100644
--- a/stream/stream_pkt.c
+++ b/stream/stream_pkt.c
@@ -83,7 +83,7 @@ size_t encode_dummy(const void * buf, const size_t buf_size, void * buf_out){
  */
 size_t stream_pkt_read(struct stream * sid,struct stream_pkt * pkt, void * buf_out, size_t buf_out_size)
 {
-    size_t ds = dap_enc_iaes256_cbc_decrypt_fast(sid->session->key,pkt->data,pkt->hdr.size,buf_out, buf_out_size);
+    size_t ds = sid->session->key->dec_na(sid->session->key,pkt->data,pkt->hdr.size,buf_out, buf_out_size);
 //    log_it(L_DEBUG,"Stream decoded %lu bytes ( last bytes 0x%02x 0x%02x 0x%02x 0x%02x ) ", ds,
 //           *((uint8_t *)buf_out+ds-4),*((uint8_t *)buf_out+ds-3),*((uint8_t *)buf_out+ds-2),*((uint8_t *)buf_out+ds-1)
 //           );
@@ -117,7 +117,7 @@ size_t stream_pkt_write(struct stream * sid, const void * data, uint32_t data_si
     memset(&pkt_hdr,0,sizeof(pkt_hdr));
     memcpy(pkt_hdr.sig,dap_sig,sizeof(pkt_hdr.sig));
 
-    pkt_hdr.size = dap_enc_iaes256_cbc_encrypt_fast(sid->session->key, data,data_size,sid->buf, STREAM_BUF_SIZE_MAX);
+    pkt_hdr.size = sid->session->key->enc_na(sid->session->key, data,data_size,sid->buf, STREAM_BUF_SIZE_MAX);
 
     if(sid->conn_udp){
         ret+=dap_udp_client_write(sid->conn,&pkt_hdr,sizeof(pkt_hdr));
@@ -127,6 +127,7 @@ size_t stream_pkt_write(struct stream * sid, const void * data, uint32_t data_si
         ret+=dap_client_remote_write(sid->conn,&pkt_hdr,sizeof(pkt_hdr));
         ret+=dap_client_remote_write(sid->conn,sid->buf,pkt_hdr.size);
     }
+
     return ret;
 }