-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Intermediate language for static code analysis -- -- The intermediate language / intermediate representation / -- bitcode (IL / IR / bitcode) is a data structure able to represent -- code originating from multiple programming languages. Its main -- purpose is to enable an efficient and uniform static code -- analysis, as part of the dhscanner framework for -- CI/CD container security checks. As part of that framework, it -- targets mostly languages used for cloud native applications: -- Python, Ruby, Php, Javascript, -- Typescript, Java, C# and Golang. -- Typically, a collection of files are first parsed using relevant -- parsers, then, the resulting collection of abstract syntax -- trees is sent to code generation, where it is translated into a -- collection of callables. A callable is a sequence of commands -- corresponding to either a function, a method or (in languages like -- python) a script. The design of commands was done with simplicity in -- mind. The commands resemble an abstract RISC-style assembley, -- motivated by keeping later-phases analyses as simple as possible. @package dhscanner-bitcode @version 0.1.0.0 module Fqn -- | Fully qualified name data Fqn Fqn :: String -> Fqn [content] :: Fqn -> String any :: Fqn nativeInt :: Fqn nativeStr :: Fqn instance Data.Aeson.Types.FromJSON.FromJSON Fqn.Fqn instance Data.Aeson.Types.ToJSON.ToJSON Fqn.Fqn instance GHC.Generics.Generic Fqn.Fqn instance GHC.Classes.Ord Fqn.Fqn instance GHC.Classes.Eq Fqn.Fqn instance GHC.Show.Show Fqn.Fqn module Bitcode -- | data Instruction Instruction :: Location -> InstructionContent -> Instruction [location] :: Instruction -> Location [instructionContent] :: Instruction -> InstructionContent -- | A minimal instruction set to translate any programming language -- to an intermediate langauge ready for static analysis data InstructionContent Nop :: InstructionContent Call :: CallContent -> InstructionContent Unop :: UnopContent -> InstructionContent Binop :: BinopContent -> InstructionContent Assume :: AssumeContent -> InstructionContent Return :: ReturnContent -> InstructionContent Assign :: AssignContent -> InstructionContent LoadImmStr :: StrContent -> InstructionContent LoadImmInt :: IntContent -> InstructionContent LoadImmBool :: BoolContent -> InstructionContent ParamDecl :: ParamDeclContent -> InstructionContent FieldRead :: FieldReadContent -> InstructionContent FieldWrite :: FieldWriteContent -> InstructionContent SubscriptRead :: SubscriptReadContent -> InstructionContent SubscriptWrite :: SubscriptWriteContent -> InstructionContent mkNopInstruction :: Location -> Instruction data TmpVariable TmpVariable :: Fqn -> Location -> TmpVariable [tmpVariableFqn] :: TmpVariable -> Fqn [tmpVariableLocation] :: TmpVariable -> Location data SrcVariable SrcVariable :: Fqn -> VarName -> SrcVariable [srcVariableFqn] :: SrcVariable -> Fqn [srcVariableToken] :: SrcVariable -> VarName data ArgContent ArgContent :: Fqn -> Word -> Location -> ArgContent [argVariableFqn] :: ArgContent -> Fqn [argVariableSerialIdx] :: ArgContent -> Word [argVariableMyAwesomeCallContext] :: ArgContent -> Location data ParamVariable ParamVariable :: Fqn -> Word -> ParamName -> ParamVariable [paramVariableFqn] :: ParamVariable -> Fqn [paramVariableSerialIdx] :: ParamVariable -> Word [paramVariableToken] :: ParamVariable -> ParamName data Variable TmpVariableCtor :: TmpVariable -> Variable SrcVariableCtor :: SrcVariable -> Variable ParamVariableCtor :: ParamVariable -> Variable Arg :: ArgContent -> Variable variableFqn :: Variable -> Fqn -- | Can not be serialized to JSON data Variables Variables :: Set Variable -> Variables [actualVariables] :: Variables -> Set Variable data SrcVariables SrcVariables :: Set SrcVariable -> SrcVariables [actualSrcVariables] :: SrcVariables -> Set SrcVariable -- | Creating an empty collection of global variables createEmptyCollectionOfGlobalVariables :: SrcVariables -- | Can not be serialized to JSON data TmpVariables TmpVariables :: Set TmpVariable -> TmpVariables [actualTmpVariables] :: TmpVariables -> Set TmpVariable locationVariable :: Variable -> Location data CallContent CallContent :: Variable -> Variable -> [Variable] -> Location -> CallContent [callOutput] :: CallContent -> Variable [callee] :: CallContent -> Variable [args] :: CallContent -> [Variable] [callLocation] :: CallContent -> Location callInputs :: CallContent -> [TmpVariable] data BinopContent BinopContent :: Variable -> Variable -> Variable -> BinopContent [binopOutput] :: BinopContent -> Variable [binopLhs] :: BinopContent -> Variable [binopRhs] :: BinopContent -> Variable data UnopContent UnopContent :: TmpVariable -> TmpVariable -> UnopContent [unopOutput] :: UnopContent -> TmpVariable [unopLhs] :: UnopContent -> TmpVariable data AssumeContent AssumeContent :: Variable -> Bool -> AssumeContent [assumeVariable] :: AssumeContent -> Variable [assumedValue] :: AssumeContent -> Bool mkAssumeInstruction :: Variable -> Bool -> Instruction data ReturnContent ReturnContent :: Maybe TmpVariable -> ReturnContent [returnValue] :: ReturnContent -> Maybe TmpVariable data AssignContent AssignContent :: Variable -> Variable -> AssignContent [assignOutput] :: AssignContent -> Variable [assignInput] :: AssignContent -> Variable data IntContent IntContent :: TmpVariable -> ConstInt -> IntContent [loadImmIntOutput] :: IntContent -> TmpVariable [loadImmIntValue] :: IntContent -> ConstInt data StrContent StrContent :: TmpVariable -> ConstStr -> StrContent [loadImmStrOutput] :: StrContent -> TmpVariable [loadImmStrValue] :: StrContent -> ConstStr data BoolContent BoolContent :: TmpVariable -> ConstBool -> BoolContent [loadImmBoolOutput] :: BoolContent -> TmpVariable [loadImmBoolValue] :: BoolContent -> ConstBool data FieldReadContent FieldReadContent :: Variable -> Variable -> FieldName -> FieldReadContent [fieldReadOutput] :: FieldReadContent -> Variable [fieldReadInput] :: FieldReadContent -> Variable [fieldReadName] :: FieldReadContent -> FieldName data FieldWriteContent FieldWriteContent :: Variable -> FieldName -> Variable -> FieldWriteContent [fieldWriteOutput] :: FieldWriteContent -> Variable [fieldWriteName] :: FieldWriteContent -> FieldName [fieldWriteInput] :: FieldWriteContent -> Variable data SubscriptReadContent SubscriptReadContent :: Variable -> Variable -> Variable -> SubscriptReadContent [subscriptReadOutput] :: SubscriptReadContent -> Variable [subscriptReadInput] :: SubscriptReadContent -> Variable [subscriptReadIdx] :: SubscriptReadContent -> Variable data SubscriptWriteContent SubscriptWriteContent :: Variable -> Variable -> Variable -> SubscriptWriteContent [subscriptWriteOutput] :: SubscriptWriteContent -> Variable [subscriptWriteIdx] :: SubscriptWriteContent -> Variable [subscriptWriteInput] :: SubscriptWriteContent -> Variable data ParamDeclContent ParamDeclContent :: ParamVariable -> ParamDeclContent [paramVariable] :: ParamDeclContent -> ParamVariable output :: InstructionContent -> Maybe Variable inputs :: InstructionContent -> Set TmpVariable inputs' :: InstructionContent -> Set Variable variables :: InstructionContent -> Set Variable instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.TmpVariable instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.TmpVariable instance GHC.Generics.Generic Bitcode.TmpVariable instance GHC.Classes.Ord Bitcode.TmpVariable instance GHC.Classes.Eq Bitcode.TmpVariable instance GHC.Show.Show Bitcode.TmpVariable instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.SrcVariable instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.SrcVariable instance GHC.Generics.Generic Bitcode.SrcVariable instance GHC.Classes.Ord Bitcode.SrcVariable instance GHC.Classes.Eq Bitcode.SrcVariable instance GHC.Show.Show Bitcode.SrcVariable instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.ArgContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.ArgContent instance GHC.Generics.Generic Bitcode.ArgContent instance GHC.Classes.Ord Bitcode.ArgContent instance GHC.Classes.Eq Bitcode.ArgContent instance GHC.Show.Show Bitcode.ArgContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.ParamVariable instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.ParamVariable instance GHC.Generics.Generic Bitcode.ParamVariable instance GHC.Classes.Ord Bitcode.ParamVariable instance GHC.Classes.Eq Bitcode.ParamVariable instance GHC.Show.Show Bitcode.ParamVariable instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.Variable instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.Variable instance GHC.Generics.Generic Bitcode.Variable instance GHC.Classes.Ord Bitcode.Variable instance GHC.Classes.Eq Bitcode.Variable instance GHC.Show.Show Bitcode.Variable instance GHC.Classes.Ord Bitcode.Variables instance GHC.Classes.Eq Bitcode.Variables instance GHC.Show.Show Bitcode.Variables instance GHC.Classes.Ord Bitcode.SrcVariables instance GHC.Classes.Eq Bitcode.SrcVariables instance GHC.Show.Show Bitcode.SrcVariables instance GHC.Classes.Ord Bitcode.TmpVariables instance GHC.Classes.Eq Bitcode.TmpVariables instance GHC.Show.Show Bitcode.TmpVariables instance GHC.Classes.Ord Bitcode.CallContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.CallContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.CallContent instance GHC.Generics.Generic Bitcode.CallContent instance GHC.Classes.Eq Bitcode.CallContent instance GHC.Show.Show Bitcode.CallContent instance GHC.Classes.Ord Bitcode.BinopContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.BinopContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.BinopContent instance GHC.Generics.Generic Bitcode.BinopContent instance GHC.Classes.Eq Bitcode.BinopContent instance GHC.Show.Show Bitcode.BinopContent instance GHC.Classes.Ord Bitcode.UnopContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.UnopContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.UnopContent instance GHC.Generics.Generic Bitcode.UnopContent instance GHC.Classes.Eq Bitcode.UnopContent instance GHC.Show.Show Bitcode.UnopContent instance GHC.Classes.Ord Bitcode.AssumeContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.AssumeContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.AssumeContent instance GHC.Generics.Generic Bitcode.AssumeContent instance GHC.Classes.Eq Bitcode.AssumeContent instance GHC.Show.Show Bitcode.AssumeContent instance GHC.Classes.Ord Bitcode.ReturnContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.ReturnContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.ReturnContent instance GHC.Generics.Generic Bitcode.ReturnContent instance GHC.Classes.Eq Bitcode.ReturnContent instance GHC.Show.Show Bitcode.ReturnContent instance GHC.Classes.Ord Bitcode.AssignContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.AssignContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.AssignContent instance GHC.Generics.Generic Bitcode.AssignContent instance GHC.Classes.Eq Bitcode.AssignContent instance GHC.Show.Show Bitcode.AssignContent instance GHC.Classes.Ord Bitcode.IntContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.IntContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.IntContent instance GHC.Generics.Generic Bitcode.IntContent instance GHC.Classes.Eq Bitcode.IntContent instance GHC.Show.Show Bitcode.IntContent instance GHC.Classes.Ord Bitcode.StrContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.StrContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.StrContent instance GHC.Generics.Generic Bitcode.StrContent instance GHC.Classes.Eq Bitcode.StrContent instance GHC.Show.Show Bitcode.StrContent instance GHC.Classes.Ord Bitcode.BoolContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.BoolContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.BoolContent instance GHC.Generics.Generic Bitcode.BoolContent instance GHC.Classes.Eq Bitcode.BoolContent instance GHC.Show.Show Bitcode.BoolContent instance GHC.Classes.Ord Bitcode.FieldReadContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.FieldReadContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.FieldReadContent instance GHC.Generics.Generic Bitcode.FieldReadContent instance GHC.Classes.Eq Bitcode.FieldReadContent instance GHC.Show.Show Bitcode.FieldReadContent instance GHC.Classes.Ord Bitcode.FieldWriteContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.FieldWriteContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.FieldWriteContent instance GHC.Generics.Generic Bitcode.FieldWriteContent instance GHC.Classes.Eq Bitcode.FieldWriteContent instance GHC.Show.Show Bitcode.FieldWriteContent instance GHC.Classes.Ord Bitcode.SubscriptReadContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.SubscriptReadContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.SubscriptReadContent instance GHC.Generics.Generic Bitcode.SubscriptReadContent instance GHC.Classes.Eq Bitcode.SubscriptReadContent instance GHC.Show.Show Bitcode.SubscriptReadContent instance GHC.Classes.Ord Bitcode.SubscriptWriteContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.SubscriptWriteContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.SubscriptWriteContent instance GHC.Generics.Generic Bitcode.SubscriptWriteContent instance GHC.Classes.Eq Bitcode.SubscriptWriteContent instance GHC.Show.Show Bitcode.SubscriptWriteContent instance GHC.Classes.Ord Bitcode.ParamDeclContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.ParamDeclContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.ParamDeclContent instance GHC.Generics.Generic Bitcode.ParamDeclContent instance GHC.Classes.Eq Bitcode.ParamDeclContent instance GHC.Show.Show Bitcode.ParamDeclContent instance GHC.Classes.Ord Bitcode.InstructionContent instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.InstructionContent instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.InstructionContent instance GHC.Generics.Generic Bitcode.InstructionContent instance GHC.Classes.Eq Bitcode.InstructionContent instance GHC.Show.Show Bitcode.InstructionContent instance GHC.Classes.Ord Bitcode.Instruction instance Data.Aeson.Types.FromJSON.FromJSON Bitcode.Instruction instance Data.Aeson.Types.ToJSON.ToJSON Bitcode.Instruction instance GHC.Generics.Generic Bitcode.Instruction instance GHC.Classes.Eq Bitcode.Instruction instance GHC.Show.Show Bitcode.Instruction module Cfg data Node Node :: Instruction -> Node [theInstructionInside] :: Node -> Instruction data Nodes Nodes :: Set Node -> Nodes [actualNodes] :: Nodes -> Set Node data Edge Edge :: Node -> Node -> Edge [from] :: Edge -> Node [to] :: Edge -> Node data Edges Edges :: Set Edge -> Edges [actualEdges] :: Edges -> Set Edge mkEmptyCollectionOfEdges :: Edges data Cfg Cfg :: Node -> Node -> Edges -> Cfg [entry] :: Cfg -> Node [exit] :: Cfg -> Node [edges] :: Cfg -> Edges location :: Cfg -> Location nodes :: Cfg -> Nodes preds :: Node -> Cfg -> Nodes empty :: Location -> Cfg atom :: Node -> Cfg concat :: Cfg -> Cfg -> Cfg parallel :: Cfg -> Cfg -> Cfg -- | create a loop from condition and body loopify :: Cfg -> Cfg -> Variable -> Cfg instance Data.Aeson.Types.FromJSON.FromJSON Cfg.Node instance Data.Aeson.Types.ToJSON.ToJSON Cfg.Node instance GHC.Generics.Generic Cfg.Node instance GHC.Classes.Ord Cfg.Node instance GHC.Classes.Eq Cfg.Node instance GHC.Show.Show Cfg.Node instance GHC.Classes.Ord Cfg.Nodes instance GHC.Classes.Eq Cfg.Nodes instance GHC.Show.Show Cfg.Nodes instance Data.Aeson.Types.FromJSON.FromJSON Cfg.Edge instance Data.Aeson.Types.ToJSON.ToJSON Cfg.Edge instance GHC.Generics.Generic Cfg.Edge instance GHC.Classes.Ord Cfg.Edge instance GHC.Classes.Eq Cfg.Edge instance GHC.Show.Show Cfg.Edge instance Data.Aeson.Types.FromJSON.FromJSON Cfg.Edges instance Data.Aeson.Types.ToJSON.ToJSON Cfg.Edges instance GHC.Generics.Generic Cfg.Edges instance GHC.Classes.Ord Cfg.Edges instance GHC.Classes.Eq Cfg.Edges instance GHC.Show.Show Cfg.Edges instance Data.Aeson.Types.FromJSON.FromJSON Cfg.Cfg instance Data.Aeson.Types.ToJSON.ToJSON Cfg.Cfg instance GHC.Generics.Generic Cfg.Cfg instance GHC.Classes.Ord Cfg.Cfg instance GHC.Classes.Eq Cfg.Cfg instance GHC.Show.Show Cfg.Cfg -- | module Callable data Callables Callables :: [Callable] -> Callables [actualCallables] :: Callables -> [Callable] -- | Four kinds of callables. data Callable Method :: MethodContent -> Callable Lambda :: LambdaContent -> Callable Script :: ScriptContent -> Callable Function :: FunctionContent -> Callable data MethodContent MethodContent :: MethdName -> ClassName -> [SuperName] -> Cfg -> Location -> MethodContent [methodName] :: MethodContent -> MethdName [hostingClassName] :: MethodContent -> ClassName [hostingClassSupers] :: MethodContent -> [SuperName] [methodBody] :: MethodContent -> Cfg [methodLocation] :: MethodContent -> Location data LambdaContent LambdaContent :: Cfg -> Location -> LambdaContent [lambdaBody] :: LambdaContent -> Cfg [lambdaLocation] :: LambdaContent -> Location data ScriptContent ScriptContent :: String -> Cfg -> ScriptContent [filename] :: ScriptContent -> String [scriptBody] :: ScriptContent -> Cfg data Annotation Annotation :: String -> [String] -> Annotation [annotationFqn] :: Annotation -> String [annotationConstantStrings] :: Annotation -> [String] data FunctionContent FunctionContent :: FuncName -> Cfg -> [Annotation] -> Location -> FunctionContent [funcName] :: FunctionContent -> FuncName [funcBody] :: FunctionContent -> Cfg [funcAnnotations] :: FunctionContent -> [Annotation] [funcLocation] :: FunctionContent -> Location instance Data.Aeson.Types.FromJSON.FromJSON Callable.MethodContent instance Data.Aeson.Types.ToJSON.ToJSON Callable.MethodContent instance GHC.Generics.Generic Callable.MethodContent instance GHC.Classes.Ord Callable.MethodContent instance GHC.Classes.Eq Callable.MethodContent instance GHC.Show.Show Callable.MethodContent instance Data.Aeson.Types.FromJSON.FromJSON Callable.LambdaContent instance Data.Aeson.Types.ToJSON.ToJSON Callable.LambdaContent instance GHC.Generics.Generic Callable.LambdaContent instance GHC.Classes.Ord Callable.LambdaContent instance GHC.Classes.Eq Callable.LambdaContent instance GHC.Show.Show Callable.LambdaContent instance Data.Aeson.Types.FromJSON.FromJSON Callable.ScriptContent instance Data.Aeson.Types.ToJSON.ToJSON Callable.ScriptContent instance GHC.Generics.Generic Callable.ScriptContent instance GHC.Classes.Ord Callable.ScriptContent instance GHC.Classes.Eq Callable.ScriptContent instance GHC.Show.Show Callable.ScriptContent instance Data.Aeson.Types.FromJSON.FromJSON Callable.Annotation instance Data.Aeson.Types.ToJSON.ToJSON Callable.Annotation instance GHC.Generics.Generic Callable.Annotation instance GHC.Classes.Ord Callable.Annotation instance GHC.Classes.Eq Callable.Annotation instance GHC.Show.Show Callable.Annotation instance Data.Aeson.Types.FromJSON.FromJSON Callable.FunctionContent instance Data.Aeson.Types.ToJSON.ToJSON Callable.FunctionContent instance GHC.Generics.Generic Callable.FunctionContent instance GHC.Classes.Ord Callable.FunctionContent instance GHC.Classes.Eq Callable.FunctionContent instance GHC.Show.Show Callable.FunctionContent instance Data.Aeson.Types.FromJSON.FromJSON Callable.Callable instance Data.Aeson.Types.ToJSON.ToJSON Callable.Callable instance GHC.Generics.Generic Callable.Callable instance GHC.Classes.Ord Callable.Callable instance GHC.Classes.Eq Callable.Callable instance GHC.Show.Show Callable.Callable instance Data.Aeson.Types.FromJSON.FromJSON Callable.Callables instance Data.Aeson.Types.ToJSON.ToJSON Callable.Callables instance GHC.Generics.Generic Callable.Callables instance GHC.Classes.Ord Callable.Callables instance GHC.Classes.Eq Callable.Callables instance GHC.Show.Show Callable.Callables