raaz-0.0.1: The raaz cryptographic library.

Safe HaskellNone
LanguageHaskell98

Raaz.Core.ByteSource

Description

Module define byte sources.

Synopsis

Documentation

class ByteSource src where Source #

Abstract byte sources. A bytesource is something that you can use to fill a buffer.

Methods

fillBytes :: BYTES Int -> src -> Pointer -> IO (FillResult src) Source #

Fills a buffer from the source.

fillBytes :: InfiniteSource src => BYTES Int -> src -> Pointer -> IO (FillResult src) Source #

Fills a buffer from the source.

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.

class InfiniteSource src where Source #

Never ending stream of bytes. The reads to the stream might get delayed but it will always return the number of bytes that were asked for.

Minimal complete definition

slurpBytes

Methods

slurpBytes :: BYTES Int -> src -> Pointer -> IO src Source #

slurp :: (LengthUnit len, InfiniteSource src) => len -> src -> Pointer -> IO 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.

data FillResult a Source #

This type captures the result of a fill operation.

Constructors

Remaining a

the buffer is filled completely

Exhausted (BYTES Int)

source exhausted with so much bytes read.

Instances

Functor FillResult Source # 

Methods

fmap :: (a -> b) -> FillResult a -> FillResult b #

(<$) :: a -> FillResult b -> FillResult a #

withFillResult Source #

Arguments

:: (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.