Safe Haskell | None |
---|---|
Language | Haskell2010 |
Module define byte sources.
- class ByteSource src where
- class ByteSource src => PureByteSource src
- data FillResult a
- fill :: (LengthUnit len, ByteSource src) => len -> src -> Pointer -> IO (FillResult src)
- processChunks :: (MonadIO m, LengthUnit chunkSize, ByteSource src) => m a -> (BYTES Int -> m b) -> src -> chunkSize -> Pointer -> m b
- withFillResult :: (a -> b) -> (BYTES Int -> b) -> FillResult a -> b
Byte sources.
Cryptographic input come from various sources; they can come from
network sockets or might be just a string in the Haskell. To give a
uniform interfaces for all such inputs, we define the abstract
concept of a byte source. Essentially a byte source is one from
which we can fill a buffer with bytes. Depending on the nature of
the source we have two classes: ByteSource
which captures bounded
sources and InfiniteSource
that captures never ending source of
bytes.
Among instances of ByteSource
, some like for example
ByteString
are pure in the sense filling a buffer with bytes
from such a source has no other side-effects. This is in contrast
to a source like a sockets. The type class PureByteSource
captures such byte sources.
class ByteSource src where Source #
Abstract byte sources. A bytesource is something that you can use to fill a buffer.
fillBytes :: BYTES Int -> src -> Pointer -> IO (FillResult src) Source #
Fills a buffer from the source.
ByteSource Handle Source # | |
ByteSource ByteString Source # | |
ByteSource ByteString Source # | |
ByteSource src => ByteSource [src] Source # | |
ByteSource src => ByteSource (Maybe src) Source # | |
class ByteSource src => PureByteSource src Source #
A byte source src is pure if filling from it does not have any
other side effect on the state of the byte source. Formally, two
different fills form the same source should fill the buffer with
the same bytes. This additional constraint on the source helps to
purify certain crypto computations like computing the hash or mac
of the source. Usualy sources like ByteString
etc are pure byte
sources. A file handle is a byte source that is not a pure
source.
PureByteSource ByteString Source # | |
PureByteSource ByteString Source # | |
PureByteSource src => PureByteSource [src] Source # | |
PureByteSource src => PureByteSource (Maybe src) Source # | |
data FillResult a Source #
This type captures the result of a fill operation.
fill :: (LengthUnit len, ByteSource src) => len -> src -> Pointer -> IO (FillResult src) Source #
A version of fillBytes that takes type safe lengths as input.
processChunks :: (MonadIO m, LengthUnit chunkSize, ByteSource src) => m a -> (BYTES Int -> m b) -> src -> chunkSize -> Pointer -> m b Source #
Process data from a source in chunks of a particular size.
:: (a -> b) | stuff to do when filled |
-> (BYTES Int -> b) | stuff to do when exhausted |
-> FillResult a | the fill result to process |
-> b |
Combinator to handle a fill result.