kyber icon indicating copy to clipboard operation
kyber copied to clipboard

Use fixed-length integers to improve cross-platform compatibility

Open pierluca opened this issue 2 years ago • 5 comments

As discussed in the review of https://github.com/dedis/kyber/pull/490 with @ineiti and @howjmay , Kyber uses structures with Go int-typed fields, which are unsized. This can lead to differences in serialization and hash computations across different processor architectures.

It would be preferable to switch to sized types (int32 and int64), which would provide consistent behaviours across platforms.

pierluca avatar Aug 24 '23 13:08 pierluca

Additional notes: this probably needs a major version change, as the fields are involved in the hashes. So if a 64-bit machine stored the fields as int, it would store them as 64-bit fields. Then if we change the int to int32, it would be incompatible. The same thing would happen with a 32-bit system and changing the int to int64.

However, #493 suggests that this never worked on a 32-bit system. So I think if we change every int to int64, it should work.

ineiti avatar Nov 15 '23 06:11 ineiti

Following #529 , Kyber now compiles and works in both 32-bit and 64-bit architectures. This effectively makes this issue more problematic.

pierluca avatar Jul 15 '24 06:07 pierluca

I've added you (@AnomalRoil and @K1li4nL) and me as assignees so that we can discuss this and decide together the best way forward ahead of the v4 release.

pierluca avatar Jul 15 '24 08:07 pierluca