{-# LANGUAGE ForeignFunctionInterface #-}
module Crypto.OpenSSL.ASN1
( Nid(..)
, asn1Description
) where
import Foreign.Ptr
import Foreign.C.Types
import Foreign.C.String
import Crypto.OpenSSL.Misc
import Control.Applicative
-- | openssl ASN1 unique identifier
newtype Nid = Nid Int
foreign import ccall unsafe "OBJ_txt2nid"
_obj_txt2nid :: Ptr CChar -> IO CInt
asn1Description :: String -> Maybe Nid
asn1Description s = doIO $
(mnid <$> withCString s (_obj_txt2nid))
where mnid 0 = Nothing
mnid i = Just $ Nid (fromIntegral i)