Please see the following thread for more debugging: https://github.com/pyca/cryptography/issues/4078
I discovered that cffi’s mechanism to zero- or sign-extend values smaller than the CPU register size (ffi_arg) was only applied to signed or unsigned integer values but not pointers, whereas the x86-64 (amd64 and x32) ELF psABI specifies that 32-bit pointers passed in 64-bit registers must be zero-padded.
Some architectures might require sign-padding them instead, but considering that x32 appears to be the first one actually running into this issue I’d default to zero-pad them on all architectures. The extra code path will only ever be triggered on 64-bit ILP32 architectures, which are basically all new (unless MIPS n32 was one of them, but I don’t think so, or they’d have been hit from this bug).
Please apply the patch in your next releases, to make packages that use cffi work reliably on x32.