I'm trying to benchmark how mlspp performs with large groups. Unfortunately I cannot perform any group operation on groups with a number of members greater than 312. With such a group size, creating an Update proposal fails for instance. I tried debugging the error myself and located it but can't really see what more I can do. Is this something fixable or is it my use case that is not intended to be supported?
(gdb) bt
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007ffff7915859 in __GI_abort () at abort.c:79
#2 0x00007ffff7b9b951 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff7ba747c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff7ba74e7 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff7ba7799 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00005555555644ae in tls::vector<2ul, 18446744073709551615ul, 18446744073709551615ul>::encode<unsigned char> (str=..., data=std::vector of length 65615, capacity 65615 = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:329
#7 0x00005555555712fa in tls::write_tuple_traits<std::tuple<tls::pass, tls::vector<2ul, 18446744073709551615ul, 18446744073709551615ul> >, 1ul, unsigned short const&, std::vector<unsigned char, std::allocator<unsigned char> > const&> (str=..., t=std::tuple containing = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:498
#8 0x0000555555571264 in tls::write_tuple_traits<std::tuple<tls::pass, tls::vector<2ul, 18446744073709551615ul, 18446744073709551615ul> >, 0ul, unsigned short const&, std::vector<unsigned char, std::allocator<unsigned char> > const&> (str=..., t=std::tuple containing = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:499
#9 0x00005555555711d2 in tls::operator<< <mls::Extension> (str=..., obj=...)
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:508
#10 0x0000555555571014 in tls::vector<4ul, 18446744073709551615ul, 18446744073709551615ul>::encode<mls::Extension> (str=..., data=std::vector of length 1, capacity 1 = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:323
#11 0x0000555555570ed4 in tls::write_tuple_traits<std::tuple<tls::vector<4ul, 18446744073709551615ul, 18446744073709551615ul> >, 0ul, std::vector<mls::Extension, std::allocator<mls::Extension> > const&> (
str=..., t=std::tuple containing = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:498
#12 0x0000555555570da1 in tls::operator<< <mls::ExtensionList> (str=..., obj=...)
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:508
#13 0x00005555555709fc in tls::pass::encode<mls::ExtensionList> (str=..., val=...)
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:277
#14 0x00005555556004f2 in tls::write_tuple_traits<std::tuple<tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::pass, tls::pass, tls::vector<2ul, 18446744073709551615ul, 18446744073709551615ul> >, 4ul, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned long const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, mls::ExtensionList const&, mls::MAC const&, mls::LeafIndex const&, std::vector<unsigned char, std::allocator<unsigned char> > const&> (str=..., t=std::tuple containing = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:498
#15 0x000055555560017c in tls::write_tuple_traits<std::tuple<tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::pass, tls::pass, tls::vector<2ul, 18446744073709551615ul, 18446744073709551615ul> >, 3ul, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned long const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, mls::ExtensionList const&, mls::MAC const&, mls::LeafIndex const&, std::vector<unsigned char, std::allocator<unsigned char> > const&> (str=..., t=std::tuple containing = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:499
#16 0x00005555555ffe45 in tls::write_tuple_traits<std::tuple<tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::pass, tls::pass, tls::vector<2ul, 18446744073709551615ul, 18446744073709551615ul> >, 2ul, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned long const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, mls::ExtensionList --Type <R--Type <RET> for more, q to quit, c to continue without paging--
const&, mls::MAC const&, mls::LeafIndex const&, std::vector<unsigned char, std::allocator<unsigned char> > const&> (str=..., t=std::tuple containing = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:499
#17 0x00005555555ffae4 in tls::write_tuple_traits<std::tuple<tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::pass, tls::pass, tls::vector<2ul, 18446744073709551615ul, 18446744073709551615ul> >, 1ul, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned long const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, mls::ExtensionList const&, mls::MAC const&, mls::LeafIndex const&, std::vector<unsigned char, std::allocator<unsigned char> > const&> (str=..., t=std::tuple containing = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:499
#18 0x00005555555ff074 in tls::write_tuple_traits<std::tuple<tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::vector<1ul, 18446744073709551615ul, 18446744073709551615ul>, tls::pass, tls::pass, tls::pass, tls::vector<2ul, 18446744073709551615ul, 18446744073709551615ul> >, 0ul, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned long const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, mls::ExtensionList const&, mls::MAC const&, mls::LeafIndex const&, std::vector<unsigned char, std::allocator<unsigned char> > const&> (str=..., t=std::tuple containing = {...})
at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:499
#19 0x00005555555fe544 in tls::operator<< <mls::GroupInfo> (str=..., obj=...) at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:508
#20 0x00005555555fd3c4 in tls::marshal<mls::GroupInfo> (value=...) at /home/olivier/Documents/mlspp/lib/tls_syntax/include/tls/tls_syntax.h:199
#21 0x00005555555fa9e7 in mls::Welcome::Welcome (this=0x7fffffffcd40, suite=..., joiner_secret=std::vector of length 32, capacity 32 = {...}, psk_secret=std::vector of length 0, capacity 0, group_info=...)
at /home/olivier/Documents/mlspp/src/messages.cpp:163
#22 0x00005555555ba6ac in mls::State::commit (this=0x5555556f72b0, leaf_secret=std::vector of length 32, capacity 32 = {...}, opts=std::optional<struct mls::CommitOpts> = {...},
joiner_key_package=std::optional<struct mls::KeyPackage> [no contained value], external_pub=std::optional<struct mls::HPKEPublicKey> [no contained value])
at /home/olivier/Documents/mlspp/src/state.cpp:399
#23 0x00005555555b9901 in mls::State::commit (this=0x5555556f72b0, leaf_secret=std::vector of length 32, capacity 32 = {...}, opts=std::optional<struct mls::CommitOpts> = {...})
at /home/olivier/Documents/mlspp/src/state.cpp:277
#24 0x000055555557e109 in mls::Session::commit (this=0x5555556f6300) at /home/olivier/Documents/mlspp/src/session.cpp:290
#25 0x000055555557dfca in mls::Session::commit (this=0x5555556f6300, proposals=std::vector of length 311, capacity 512 = {...}) at /home/olivier/Documents/mlspp/src/session.cpp:282
#26 0x000055555555e11c in create_group (N=312) at /home/olivier/Documents/mls-benchmark/src/test.cpp:40
#27 0x000055555555e46f in main () at /home/olivier/Documents/mls-benchmark/src/test.cpp:52