```
+# 13-1
+
+```c
+ // do serve listens from PF_PACKET socket
+void do_serve();
+ |
+ | // process rx actually captures the packet
+ |
+void* process_rx(const int fd, char* rx_ring, int* len);
+ |
+ | // sniff packet lets sniff action handles the packet,
+ | // if it's TCP
+ |
+void sniff_packet(void* packet);
+ |
+ | // by examining TLS flag, it gathers data from Client Hello, Server Hello,
+ | // etc untils it hits Client Key Exchange
+ |
+void sniff_action(uint8_t* dataraw);
+ |
+ | // if it's Client Key Exchange, it runs the process of
+ | // hijacking master secret
+ ------> int hijack_key();
+ |
+ | // if it successfully hijacked master secret
+ | // it's time to decrypt the client message!
+ ------> int cbc256_decrypt(uint8_t* enc_msg, int enclen, uint8_t* cbc_key, uint8_t* cbc_iv, uint8_t* plain_msg);
+
+```
+
# 13