Tom G. Christensen
2024-Oct-29 20:34 UTC
FYI: fix for big-endian systems pushed to V_9_9 branch
On 27/10/2024 05:45, Damien Miller wrote:> If you distribute OpenSSH to big-endian systems and have packaged > OpenSSH 9.9 already, then I recommend you include these fixes as the > next release of OpenSSH will make this key exchange algorithm the > default. >I tried to update my Solaris builds but ran into a build error. In file included from kexmlkem768x25519.c:50: libcrux_mlkem768_sha3.h: In function 'core_num__u64_9__to_le_bytes': libcrux_mlkem768_sha3.h:164: error: '__uint64_t' undeclared (first use in this function) libcrux_mlkem768_sha3.h:164: error: (Each undeclared identifier is reported only once libcrux_mlkem768_sha3.h:164: error: for each function it appears in.) libcrux_mlkem768_sha3.h: In function 'core_num__u64_9__from_le_bytes': libcrux_mlkem768_sha3.h:170: error: '__uint64_t' undeclared (first use in this function) gmake: *** [kexmlkem768x25519.o] Error 1 AFAICT __uint64_t is not available on at least Solaris 10 and older. -tgc
Damien Miller
2024-Oct-29 20:54 UTC
FYI: fix for big-endian systems pushed to V_9_9 branch
On Tue, 29 Oct 2024, Tom G. Christensen wrote:> On 27/10/2024 05:45, Damien Miller wrote: > > If you distribute OpenSSH to big-endian systems and have packaged > > OpenSSH 9.9 already, then I recommend you include these fixes as the > > next release of OpenSSH will make this key exchange algorithm the > > default. > > > > I tried to update my Solaris builds but ran into a build error. > > In file included from kexmlkem768x25519.c:50: > libcrux_mlkem768_sha3.h: In function 'core_num__u64_9__to_le_bytes': > libcrux_mlkem768_sha3.h:164: error: '__uint64_t' undeclared (first use in this > function) > libcrux_mlkem768_sha3.h:164: error: (Each undeclared identifier is reported > only once > libcrux_mlkem768_sha3.h:164: error: for each function it appears in.) > libcrux_mlkem768_sha3.h: In function 'core_num__u64_9__from_le_bytes': > libcrux_mlkem768_sha3.h:170: error: '__uint64_t' undeclared (first use in this > function) > gmake: *** [kexmlkem768x25519.o] Error 1 > > AFAICT __uint64_t is not available on at least Solaris 10 and older.oops, I think this should fix it: diff --git a/defines.h b/defines.h index b02f2942a..c1c21aba6 100644 --- a/defines.h +++ b/defines.h @@ -653,14 +653,14 @@ struct winsize { ((uint32_t)(v) & 0xff0000) >> 8 | \ ((uint32_t)(v) & 0xff000000) >> 24) # define openssh_swap64(v) \ - (__uint64_t)((((__uint64_t)(v) & 0xff) << 56) | \ - ((__uint64_t)(v) & 0xff00ULL) << 40 | \ - ((__uint64_t)(v) & 0xff0000ULL) << 24 | \ - ((__uint64_t)(v) & 0xff000000ULL) << 8 | \ - ((__uint64_t)(v) & 0xff00000000ULL) >> 8 | \ - ((__uint64_t)(v) & 0xff0000000000ULL) >> 24 | \ - ((__uint64_t)(v) & 0xff000000000000ULL) >> 40 | \ - ((__uint64_t)(v) & 0xff00000000000000ULL) >> 56) + (uint64_t)((((uint64_t)(v) & 0xff) << 56) | \ + ((uint64_t)(v) & 0xff00ULL) << 40 | \ + ((uint64_t)(v) & 0xff0000ULL) << 24 | \ + ((uint64_t)(v) & 0xff000000ULL) << 8 | \ + ((uint64_t)(v) & 0xff00000000ULL) >> 8 | \ + ((uint64_t)(v) & 0xff0000000000ULL) >> 24 | \ + ((uint64_t)(v) & 0xff000000000000ULL) >> 40 | \ + ((uint64_t)(v) & 0xff00000000000000ULL) >> 56) # ifdef WORDS_BIGENDIAN # define le32toh(v) (openssh_swap32(v)) # define le64toh(v) (openssh_swap64(v))