The Fenrir Project

Transport, encryption, authentication protocol

This project is maintained by Luca Fulchir

RSS feed
Posted:

Status Update

A lot of time passed, what happened?

I have not been slacking, but I have not been working much on Fenrir lately.
That’s because a lot of work has been done in libRaptorQ, that Fenrir will use.

If you don’t remember, libRaptorQ is a C++11 implementation of the RaptorQ Forward Error Correcting algorithm, and implements RFC6330, too.

I am developing the project in order to use it into Fenrir for error correction.

libRaptorQ status

So what happened?

This happened:
Branch v0.1.X:

$ cd src
$ cloc .
      22 text files.
      21 unique files.                              
       2 files ignored.

github.com/AlDanial/cloc v 1.70  T=0.06 s (330.8 files/s, 78425.7 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C/C++ Header                    14            308            488           1922
C++                              7            177            396           1688
-------------------------------------------------------------------------------
SUM:                            21            485            884           3610
-------------------------------------------------------------------------------

Branch master (v1.0.X):

$ cd src
$ cloc .
      52 text files.
      52 unique files.                              
       1 file ignored.

github.com/AlDanial/cloc v 1.70  T=0.15 s (338.5 files/s, 118503.8 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C/C++ Header                    43           1128           1557           9100
C++                              8            320            350           5397
-------------------------------------------------------------------------------
SUM:                            51           1448           1907          14497
-------------------------------------------------------------------------------

So yeah, the library got bigger.
That is mainly wrappers around the core, which should be around 3k lines by itself.

The RFC API was needlessly complex, and gave headaches to a lot of people.
It’s not gone, but a new RAW API was developed for a more low-level approach.
I have said it multiple times, but RFC6330 sucks. Use the new API!

libRaptorQ can now be used in C++11 as a header-only library. But the linked library exports the C,C++98 and C++11 interface, too!

The header-only and linked library provide exactly the same interface, so you can switch between them really easily by changing an include.

Finally, we have precomputation caching. Since it makes little sense to compute the same symbol dependency matrix every time, we cache an incomplete version that we can easily use with different input data.

If all of this is not enough for you, there is also a new tool to easily split some input in multiple symbols and repair symbols, and then recombine it all back to the original file.

So, what about Fenrir?

libRaptorQ is almost ready for v1.0.0.
There are still some quirks to iron out, but it should be finished in not much time.
The documentation is also lacking.

Meanwhile, a complete rewrite of the Fenrir code has started.

What was wrong with the old code? A lot. But since I decided to rewrite the whole things, I decided to use the Foonathan’s type_safe library. That should give us much more stability and safety than before, while taking away some headaches that implicit conversion gave me.

I promise more updates from now on, and I will soon switch my full attention back to the Fenrir code.

-Luker