Hey there! This is my first blog post, and in this article I’ll describe my experience of the IETF 102 hackathon which was held from July 14 to July 20, 2018 in Montreal, Canada.
If you haven’t heard about the IETF (Internet Engineering Task Force) before, it is “the premier Internet standards body, developing open standards through open processes to make the Internet work better.” (ISOC – Internet Society). Based on the belief that open standards are crucial and central to the Internet, the IETF organizes hackathons every year to give developers a chance to experiment with new technologies and implement new web standards.
IETF 102 was the third IETF hackathon that I participated in remotely from Mauritius. I woke up early on Thursday, July 12, 2018 and took the bus to Reduit where Logan & Nitin picked me up. From there, we headed to Pointe-aux-Piments – a nice coastal village in the north of Mauritius, where we stayed for 4 days. Once there, we setup our equipment like laptops, chargers, cables, and made ourselves comfy in the new environment.
After setting everything up, Logan explained that we’ll be having 2 teams: Implementation and Inter-operability.
1) Inter-Operability Team
The inter-operability team consisted of Kifah Meeran and some first-timers, namely: Nathan Mangar, Jagveer Loky, Avishai Poorun, and Jeremie Daniel. Their task was to test how well the various SSL/TLS libraries like nss, TLS lite, mbed TLS, WolfSSL, BoringSSL, OpenSSL inter-operate with each other by doing a TLS 1.3 Full Handshake, Session Resumption, and 0-RTT. The idea is to take each one of the above libraries, one at a time as client and server, and perform an inter-operability testing with another library in the list.
2) Implementation Team
The implementation team consisted of Loganaden Velvindron, Nitin Mutkawoa, Codarren Velvindron, Nigel Yong, Rahul Golam, and myself. Another first-timer of the implementation team was Veegish Ramdani, who managed to write a Drupal module to detect HTTP 451. (See RFC 7725). Hats off man!
Allocation of tasks for the implementation team:
Logan: Implement TLS 1.3 in Git & CURL
Nitin: Implement TLS 1.3 in PHP-CURL
Codarren: Implement TLS 1.3 in Mercurial
Nigel & Rahul: Implement TLS 1.3 in NRPE
Veegish: Write a HTTP 451 Drupal module
Muzaffar: Implement TLS 1.3 in Socat
What is Socat?
As part of the implementation team, my task was to add support for TLS 1.3 in Socat – an open-source utility that “establishes two bidirectional byte streams and transfers data between them.”
I ran into some difficulties in trying to get Socat to use the TLS 1.3 protocol. Although my code seemed completely fine, for some unknown reason, Socat was still using TLS 1.2, even after having specified the newly added TLS 1.3 option in the program’s command-line arguments.
After hours of debugging, Logan and I found out that it was due to a pointer indirection issue. To fix it, I simply had to change the order of my code so that the
SSL_CTX_set_options function is called after ctx, the SSL_CTX object, has been created and on *ctx, instead of ctx, which is just a pointer to the actual SSL context! That was a silly bug that had us scratching our heads for hours. Fortunately, we got it to work as expected in the end 🙂
After the TLS 1.3 implementation in Socat was complete, Kifah and I locked down on a bug in httperf – another open-source tool in which I had already implemented TLS 1.3 during the IETF 101 hackathon back in March 2018. I also seized the opportunity to make some more improvements in httperf.
Outcome of the IETF 102 Hackathon
At the end of the hackathon, everyone on the implementation team had a working implementation of TLS 1.3 in their respective projects, and Veegish had a working Drupal module that was able to detect the HTTP 451 error code.
As for the inter-op team, they managed to find a case in which one library couldn’t interface well with another one. They’re going to file bug reports about this issue, and hopefully this will be fixed in the next release of the libraries concerned.
The pull requests for httperf (PR #60 & PR #61) were merged on the very same day. As for Socat, I received an email from the Socat Project a few days later informing me that the changes will be integrated in the next release of Socat. Yay!
Apart from sitting in front of our laptops and delving into code for long hours, we also took the time to relax in between coding sessions to have pizza, listen to music, eat more food, go for walks along the beach, and swim in the pool!
Overall, IETF 102 was a very fun and challenging experience in which we got to improve our programming and debugging skills, and contribute to real-world projects that are used by millions of people. I’m really excited for the next IETF hackathon and I’m looking forward to make useful contributions to more open-source projects in the future.
Bottom (Right to left): Rahul Golam, Kifah Meeran, Muzaffar Auhammud (Me), Veegish Ramdani, Nitin Mutkawoa
Top (Right to left): Nigel Yong, Nathan Mangar, Avishai Poorun, Loganaden Velvindron, Jagveer Loky, Jeremie Daniel
You might also be interested in reading the other participants’ thoughts and experiences about the IETF 102 hackathon: