Low* buffer libraries¶
In addition to mutable buffers, we provide libraries for immutable buffers, const pointers and uninitializer buffers.
Immutable buffers¶
Immutable buffers are in LowStar.ImmutableBuffer
and enjoy a recall
axiom that allows bringing into scope the fact that the buffer still has the
same contents as when it was created.
This is particularly useful for top-level constants. There are numerous examples
of this in HACL*. Note that owing to some design choices, immutable buffers do
NOT generate a const
pointer in C.
Uninitialized buffers¶
In LowStar.UninitializedBuffer
.
Const pointers¶
In order to manipulate const pointers, you can use LowStar.ConstPointer
. It
is represented as an abstract type distinct from regular, immutable, or unitialized
buffers (all instances of the base monotonic buffer type). Having a separate
abstract type allows identifiying const pointers as a separate, disjoint type at
extraction, without requiring the built-in Low* checker in KaRaMeL to insert
casts.
Injecting buffer
or ibuffer
into a const_buffer
generates no casts
in C, as the conversion from t*
to const t*
is implicit.
Projecting const_buffer
to either buffer
or ibuffer
generates a
cast.