-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | A library providing types representing the Abstract Syntax Notation
--   One (ASN.1) standard.
@package crypton-asn1-types
@version 0.4.1


module Data.ASN1.BitArray

-- | Represent a bitarray / bitmap.
--   
--   The memory representation starts at bit 0.
data BitArray
BitArray :: Word64 -> ByteString -> BitArray

-- | Thrown in case of out of bounds in the bitarray.
newtype BitArrayOutOfBound
BitArrayOutOfBound :: Word64 -> BitArrayOutOfBound

-- | Returns the length of bits in this bitarray.
bitArrayLength :: BitArray -> Word64

-- | Get the nth bits.
bitArrayGetBit :: BitArray -> Word64 -> Bool

-- | Set the nth bit to the value specified.
bitArraySetBitValue :: BitArray -> Word64 -> Bool -> BitArray

-- | Set the nth bit.
bitArraySetBit :: BitArray -> Word64 -> BitArray

-- | Clear the nth bit.
bitArrayClearBit :: BitArray -> Word64 -> BitArray

-- | Get padded bytestring from the bitarray.
bitArrayGetData :: BitArray -> ByteString

-- | Number of bits to skip at the end (padding).
toBitArray :: ByteString -> Int -> BitArray
instance GHC.Internal.Classes.Eq Data.ASN1.BitArray.BitArray
instance GHC.Internal.Classes.Eq Data.ASN1.BitArray.BitArrayOutOfBound
instance GHC.Internal.Exception.Type.Exception Data.ASN1.BitArray.BitArrayOutOfBound
instance GHC.Internal.Show.Show Data.ASN1.BitArray.BitArray
instance GHC.Internal.Show.Show Data.ASN1.BitArray.BitArrayOutOfBound


module Data.ASN1.OID

-- | Standard ASN.1 Object ID (OID).
type OID = [Integer]

-- | Class of things that have an Object ID.
class OIDable a

-- | Return the object ID of an Object from the ObjectIdentifiable class.
getObjectID :: OIDable a => a -> OID

-- | Class of things that can be named by Object ID.
class OIDNameable a

-- | Try to convert an OID into an Object.
fromObjectID :: OIDNameable a => OID -> Maybe a


module Data.ASN1.Types.Lowlevel

-- | Element class.
data ASN1Class
Universal :: ASN1Class
Application :: ASN1Class
Context :: ASN1Class
Private :: ASN1Class

-- | ASN.1 Tag.
type ASN1Tag = Int

-- | ASN.1 Length with all different formats.
data ASN1Length

-- | Short form with only one byte. Length has to be &lt; 127.
LenShort :: Int -> ASN1Length

-- | Long form of N bytes.
LenLong :: Int -> Int -> ASN1Length

-- | Length is indefinite. Expect an EOC in the stream to finish the type.
LenIndefinite :: ASN1Length

-- | ASN.1 Header with the class, tag, constructed flag and length.
data ASN1Header
ASN1Header :: ASN1Class -> ASN1Tag -> Bool -> ASN1Length -> ASN1Header

-- | Represent one event from an ASN.1 data stream.
data ASN1Event

-- | ASN.1 Header.
Header :: ASN1Header -> ASN1Event

-- | Primitive
Primitive :: ByteString -> ASN1Event

-- | Constructed value start.
ConstructionBegin :: ASN1Event

-- | Constructed value end.
ConstructionEnd :: ASN1Event
instance GHC.Internal.Enum.Enum Data.ASN1.Types.Lowlevel.ASN1Class
instance GHC.Internal.Classes.Eq Data.ASN1.Types.Lowlevel.ASN1Class
instance GHC.Internal.Classes.Eq Data.ASN1.Types.Lowlevel.ASN1Event
instance GHC.Internal.Classes.Eq Data.ASN1.Types.Lowlevel.ASN1Header
instance GHC.Internal.Classes.Eq Data.ASN1.Types.Lowlevel.ASN1Length
instance GHC.Internal.Classes.Ord Data.ASN1.Types.Lowlevel.ASN1Class
instance GHC.Internal.Show.Show Data.ASN1.Types.Lowlevel.ASN1Class
instance GHC.Internal.Show.Show Data.ASN1.Types.Lowlevel.ASN1Event
instance GHC.Internal.Show.Show Data.ASN1.Types.Lowlevel.ASN1Header
instance GHC.Internal.Show.Show Data.ASN1.Types.Lowlevel.ASN1Length


-- | Different String types available in ASN.1.
module Data.ASN1.Types.String

-- | Define all possible ASN.1 String encodings.
data ASN1StringEncoding

-- | 128 characters equivalent to the ASCII alphabet.
IA5 :: ASN1StringEncoding

-- | UTF8.
UTF8 :: ASN1StringEncoding

-- | All registered graphic and character sets (see ISO 2375) plus SPACE
--   and DELETE.
General :: ASN1StringEncoding

-- | All registered G sets and SPACE.
Graphic :: ASN1StringEncoding

-- | Encoding containing numeric [0-9] and space.
Numeric :: ASN1StringEncoding

-- | Printable [a-z] [A-Z] [()+,-.?:/=] and space.
Printable :: ASN1StringEncoding

-- | CCITT's T.100 and T.101 character sets.
VideoTex :: ASN1StringEncoding

-- | International ASCII printing character sets.
Visible :: ASN1StringEncoding

-- | Teletext.
T61 :: ASN1StringEncoding

-- | UTF32.
UTF32 :: ASN1StringEncoding

-- | Character.
Character :: ASN1StringEncoding

-- | UCS2.
BMP :: ASN1StringEncoding

-- | ASN1 Character String with encoding
data ASN1CharacterString
ASN1CharacterString :: ASN1StringEncoding -> ByteString -> ASN1CharacterString
[characterEncoding] :: ASN1CharacterString -> ASN1StringEncoding
[getCharacterStringRawData] :: ASN1CharacterString -> ByteString

-- | Encode a string into a character string.
asn1CharacterString :: ASN1StringEncoding -> String -> ASN1CharacterString

-- | Try to decode an <a>ASN1CharacterString</a> to a String.
asn1CharacterToString :: ASN1CharacterString -> Maybe String
instance GHC.Internal.Classes.Eq Data.ASN1.Types.String.ASN1CharacterString
instance GHC.Internal.Classes.Eq Data.ASN1.Types.String.ASN1StringEncoding
instance GHC.Internal.Data.String.IsString Data.ASN1.Types.String.ASN1CharacterString
instance GHC.Internal.Classes.Ord Data.ASN1.Types.String.ASN1CharacterString
instance GHC.Internal.Classes.Ord Data.ASN1.Types.String.ASN1StringEncoding
instance GHC.Internal.Show.Show Data.ASN1.Types.String.ASN1CharacterString
instance GHC.Internal.Show.Show Data.ASN1.Types.String.ASN1StringEncoding


module Data.ASN1.Types

-- | Define high level ASN.1 objects.
data ASN1
Boolean :: Bool -> ASN1
IntVal :: Integer -> ASN1
BitString :: BitArray -> ASN1
OctetString :: ByteString -> ASN1
Null :: ASN1
OID :: OID -> ASN1
Real :: Double -> ASN1
Enumerated :: Integer -> ASN1
ASN1String :: ASN1CharacterString -> ASN1
ASN1Time :: ASN1TimeType -> DateTime -> Maybe TimezoneOffset -> ASN1
Other :: ASN1Class -> ASN1Tag -> ByteString -> ASN1
Start :: ASN1ConstructionType -> ASN1
End :: ASN1ConstructionType -> ASN1

-- | Represent a chunk of ASN.1 Stream. This is equivalent to ShowS but for
--   an ASN.1 Stream.
type ASN1S = [ASN1] -> [ASN1]

-- | Element class.
data ASN1Class
Universal :: ASN1Class
Application :: ASN1Class
Context :: ASN1Class
Private :: ASN1Class

-- | ASN.1 Tag.
type ASN1Tag = Int

-- | Define the types of container.
data ASN1ConstructionType
Sequence :: ASN1ConstructionType
Set :: ASN1ConstructionType
Container :: ASN1Class -> ASN1Tag -> ASN1ConstructionType

-- | Define all possible ASN.1 String encodings.
data ASN1StringEncoding

-- | 128 characters equivalent to the ASCII alphabet.
IA5 :: ASN1StringEncoding

-- | UTF8.
UTF8 :: ASN1StringEncoding

-- | All registered graphic and character sets (see ISO 2375) plus SPACE
--   and DELETE.
General :: ASN1StringEncoding

-- | All registered G sets and SPACE.
Graphic :: ASN1StringEncoding

-- | Encoding containing numeric [0-9] and space.
Numeric :: ASN1StringEncoding

-- | Printable [a-z] [A-Z] [()+,-.?:/=] and space.
Printable :: ASN1StringEncoding

-- | CCITT's T.100 and T.101 character sets.
VideoTex :: ASN1StringEncoding

-- | International ASCII printing character sets.
Visible :: ASN1StringEncoding

-- | Teletext.
T61 :: ASN1StringEncoding

-- | UTF32.
UTF32 :: ASN1StringEncoding

-- | Character.
Character :: ASN1StringEncoding

-- | UCS2.
BMP :: ASN1StringEncoding

-- | Different ASN.1 time representations.
data ASN1TimeType

-- | ASN.1 UTCTime Type: limited between 1950-2050.
TimeUTC :: ASN1TimeType

-- | ASN.1 GeneralizedTime Type.
TimeGeneralized :: ASN1TimeType

-- | Define an object that can be converted to and from ASN.1.
class ASN1Object a

-- | Transform an object into a chunk of ASN.1 stream.
toASN1 :: ASN1Object a => a -> ASN1S

-- | Returns either an object along the remaining ASN.1 stream, or an
--   error.
fromASN1 :: ASN1Object a => [ASN1] -> Either String (a, [ASN1])

-- | ASN1 Character String with encoding
data ASN1CharacterString
ASN1CharacterString :: ASN1StringEncoding -> ByteString -> ASN1CharacterString
[characterEncoding] :: ASN1CharacterString -> ASN1StringEncoding
[getCharacterStringRawData] :: ASN1CharacterString -> ByteString

-- | Encode a string into a character string.
asn1CharacterString :: ASN1StringEncoding -> String -> ASN1CharacterString

-- | Try to decode an <a>ASN1CharacterString</a> to a String.
asn1CharacterToString :: ASN1CharacterString -> Maybe String
instance GHC.Internal.Classes.Eq Data.ASN1.Types.ASN1
instance GHC.Internal.Classes.Eq Data.ASN1.Types.ASN1ConstructionType
instance GHC.Internal.Classes.Eq Data.ASN1.Types.ASN1TimeType
instance GHC.Internal.Classes.Ord Data.ASN1.Types.ASN1TimeType
instance GHC.Internal.Show.Show Data.ASN1.Types.ASN1
instance GHC.Internal.Show.Show Data.ASN1.Types.ASN1ConstructionType
instance GHC.Internal.Show.Show Data.ASN1.Types.ASN1TimeType


module Data.ASN1.Stream

-- | Type synonym representing pairs of a ASN.1 value and a list of ASN.1
--   events.
--   
--   This association is sometimes needed in order to know the exact byte
--   sequence leading to an ASN.1 value. For example, in the case of a
--   cryptographic signature.
type ASN1Repr = (ASN1, [ASN1Event])

-- | For the given list of ASN.1 values, assumed to follow a <a>Start</a>
--   value:
--   
--   If the list is empty, return a pair of empty lists.
--   
--   Otherwise, return a list of values up to (but excluding) the
--   corresponding <a>End</a> value (if any), and a list of the remaining
--   ASN.1 values.
getConstructedEnd :: Int -> [ASN1] -> ([ASN1], [ASN1])

-- | For the given list of <a>ASN1Repr</a> pairs:
--   
--   If the list is empty, return a pair of empty lists.
--   
--   If the first item represents a <a>Start</a> value, return a list of
--   pairs up to the corresponding <a>End</a> value (if any) (including the
--   <a>Start</a> and any <a>End</a>) and a list of the remaining
--   <a>ASN1Repr</a> pairs.
--   
--   Otherwise, return a list of that first item and a list of the
--   remaining pairs.
getConstructedEndRepr :: [ASN1Repr] -> ([ASN1Repr], [ASN1Repr])


-- | Types and functions to pretty print ASN.1 elements.
module Data.ASN1.Pretty

-- | Pretty print a list of ASN.1 elements.
pretty :: PrettyType -> [ASN1] -> String

-- | Type representing approaches to formatting.
data PrettyType

-- | Increase indentation following each <a>Start</a> object and decrease
--   following each <a>End</a> object. The <a>Int</a> is the initial
--   indentation.
Multiline :: Int -> PrettyType

-- | No indentation.
SingleLine :: PrettyType
instance GHC.Internal.Classes.Eq Data.ASN1.Pretty.PrettyType
instance GHC.Internal.Show.Show Data.ASN1.Pretty.PrettyType
