我目前正在用 C 编写一些加密代码,这些代码必须处理大于 uint64_t 能够容纳的数字。(用于HDCP认证,其中一个密码值为84位)
最好的方法是什么?我需要存储的变量之一是 84 位长——我是否应该将 uint64_t 用于低 64 位,将 uint32_t 用于高 20 位?这对我来说似乎是一个 hack,但我不确定是否真的有更好的解决方案,特别是对于存储在结构中。
理想的替代方法是声明一个自定义数据类型,如 uint64_t,但改为 84 位长,其行为方式相同。这甚至可能吗?我不确定 libc 是否可以处理位宽不是 8 倍数的变量,但是 88 位类型可以解决这个问题,尽管我什至不确定声明自定义位宽数据类型的可行性。
编辑:我已经检查了 uint128_t,但这在 clang 的 C99 模式中似乎不存在。我将对此进行标准算术和位运算,这是与加密代码相关的标准shebang。