RustCrypto: Hybrid Const Generic / Typenum Arrays
Hybrid array type combining const generics with the expressiveness of
typenum
-based constraints, providing an alternative to generic-array
and a incremental transition path to const generics.
This crate uses typenum
to enable the following features which aren't yet
possible with the stable implementation of const generics:
- #60551: Associated constants in traits can not be used in const generics
- #76560: Complex generic constants:
feature(generic_const_exprs)
Internally the crate is built on const generics and provides traits which make
it possible to convert between const generic types and typenum
types.
This crate exposes the following feature flags. The default is NO features.
zeroize
- ImplementsZeroize
forArray<T: Zeroize, U>
NOTE: this guide assumes a migration from generic-array
v0.14
hybrid-array
has been designed to largely be a drop-in replacement for
generic-array
, albeit with a public inner array type and significantly less
unsafe
code.
Migrating should hopefully be relatively painless with the following
substitutions in your .rs
files:
- Replace
generic_array
withhybrid_array
- Replace
GenericArray<T, U>
withArray<T, U>
- Replace
ArrayLength<T>
withArraySize
- Replace
<U as ArrayLength<T>>::ArrayType
with<U as ArraySize>::ArrayType<T>
- Replace usages of the
arr![N; A, B, C]
macro withArray([A, B, C])
If you have any questions, please start a discussion.
Licensed under either of:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.