Class NonInterference
- java.lang.Object
-
- it.unive.lisa.analysis.nonInterference.NonInterference
-
- All Implemented Interfaces:
it.unive.lisa.analysis.BaseLattice<NonInterference>,it.unive.lisa.analysis.Lattice<NonInterference>,it.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>,it.unive.lisa.analysis.nonrelational.inference.InferredValue<NonInterference>,it.unive.lisa.analysis.nonrelational.NonRelationalElement<NonInterference,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference>>,it.unive.lisa.analysis.SemanticEvaluator,it.unive.lisa.util.representation.StructuredObject
public class NonInterference extends java.lang.Object implements it.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>
The type-system based implementation of the non interference analysis.- See Also:
- Non-interference
-
-
Field Summary
Fields Modifier and Type Field Description static it.unive.lisa.program.annotations.AnnotationHIGH_INT_ANNOTATIONThe annotation used to mark high integrity variables.static it.unive.lisa.program.annotations.matcher.AnnotationMatcherHIGH_INT_MATCHERAnnotationMatcherforHIGH_INT_ANNOTATION.static it.unive.lisa.program.annotations.AnnotationLOW_CONF_ANNOTATIONThe annotation used to mark low confidentiality variables.static it.unive.lisa.program.annotations.matcher.AnnotationMatcherLOW_CONF_MATCHERAnnotationMatcherforLOW_CONF_ANNOTATION.static byteNI_BOTTOMThe value to use for bottom non interference levels.static byteNI_HIGHThe value to use for high non interference levels.static byteNI_LOWThe value to use for low non interference levels.
-
Constructor Summary
Constructors Constructor Description NonInterference()Builds a new instance of non interference, referring to the top element of the lattice.NonInterference(byte confidentiality, byte integrity)Builds the abstract value for the given confidentiality and integrity values.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference>assume(it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference> environment, it.unive.lisa.symbolic.value.ValueExpression expression, it.unive.lisa.program.cfg.ProgramPoint src, it.unive.lisa.program.cfg.ProgramPoint dest, it.unive.lisa.analysis.SemanticOracle oracle)NonInterferencebottom()booleanequals(java.lang.Object obj)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, NonInterference left, NonInterference right, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalIdentifier(it.unive.lisa.symbolic.value.Identifier id, it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference> environment, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalNullConstant(NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalPushAny(it.unive.lisa.symbolic.value.PushAny pushAny, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalSkip(it.unive.lisa.symbolic.value.Skip skip, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, NonInterference left, NonInterference middle, NonInterference right, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalTypeCast(it.unive.lisa.symbolic.value.BinaryExpression cast, NonInterference left, NonInterference right, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalTypeConv(it.unive.lisa.symbolic.value.BinaryExpression conv, NonInterference left, NonInterference right, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference>evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, NonInterference arg, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)NonInterferencefixedVariable(it.unive.lisa.symbolic.value.Identifier id, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)inthashCode()booleanisBottom()booleanisHighConfidentiality()Yieldstrueif and only if this instance represents ahighvalue for the confidentiality non interference analysis.booleanisHighIntegrity()Yieldstrueif and only if this instance represents ahighvalue for the integrity non interference analysis.booleanisLowConfidentiality()Yieldstrueif and only if this instance represents alowvalue for the confidentiality non interference analysis.booleanisLowIntegrity()Yieldstrueif and only if this instance represents alowvalue for the integrity non interference analysis.booleanisTop()booleanlessOrEqualAux(NonInterference other)NonInterferencelubAux(NonInterference other)it.unive.lisa.util.representation.StructuredRepresentationrepresentation()NonInterferencetop()java.lang.StringtoString()-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface it.unive.lisa.analysis.nonrelational.inference.BaseInferredValue
canProcess, eval, evalPushInv, satisfies, satisfiesAbstractValue, satisfiesBinaryExpression, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesPushAny, satisfiesTernaryExpression, satisfiesUnaryExpression
-
-
-
-
Field Detail
-
LOW_CONF_ANNOTATION
public static final it.unive.lisa.program.annotations.Annotation LOW_CONF_ANNOTATION
The annotation used to mark low confidentiality variables.
-
LOW_CONF_MATCHER
public static final it.unive.lisa.program.annotations.matcher.AnnotationMatcher LOW_CONF_MATCHER
AnnotationMatcherforLOW_CONF_ANNOTATION.
-
HIGH_INT_ANNOTATION
public static final it.unive.lisa.program.annotations.Annotation HIGH_INT_ANNOTATION
The annotation used to mark high integrity variables.
-
HIGH_INT_MATCHER
public static final it.unive.lisa.program.annotations.matcher.AnnotationMatcher HIGH_INT_MATCHER
AnnotationMatcherforHIGH_INT_ANNOTATION.
-
NI_BOTTOM
public static final byte NI_BOTTOM
The value to use for bottom non interference levels.- See Also:
- Constant Field Values
-
NI_LOW
public static final byte NI_LOW
The value to use for low non interference levels.- See Also:
- Constant Field Values
-
NI_HIGH
public static final byte NI_HIGH
The value to use for high non interference levels.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
NonInterference
public NonInterference()
Builds a new instance of non interference, referring to the top element of the lattice.
-
NonInterference
public NonInterference(byte confidentiality, byte integrity)Builds the abstract value for the given confidentiality and integrity values. Each of those can be either 0 for bottom (NI_BOTTOM), 1 for low (NI_LOW), or 2 for high (NI_HIGH).- Parameters:
confidentiality- the confidentiality valueintegrity- the integrity value
-
-
Method Detail
-
top
public NonInterference top()
- Specified by:
topin interfaceit.unive.lisa.analysis.Lattice<NonInterference>
-
isTop
public boolean isTop()
- Specified by:
isTopin interfaceit.unive.lisa.analysis.Lattice<NonInterference>
-
bottom
public NonInterference bottom()
- Specified by:
bottomin interfaceit.unive.lisa.analysis.Lattice<NonInterference>
-
isBottom
public boolean isBottom()
- Specified by:
isBottomin interfaceit.unive.lisa.analysis.Lattice<NonInterference>
-
isHighConfidentiality
public boolean isHighConfidentiality()
Yieldstrueif and only if this instance represents ahighvalue for the confidentiality non interference analysis.- Returns:
trueif this is a high confidentiality element
-
isLowConfidentiality
public boolean isLowConfidentiality()
Yieldstrueif and only if this instance represents alowvalue for the confidentiality non interference analysis.- Returns:
trueif this is a low confidentiality element
-
isHighIntegrity
public boolean isHighIntegrity()
Yieldstrueif and only if this instance represents ahighvalue for the integrity non interference analysis.- Returns:
trueif this is a high integrity element
-
isLowIntegrity
public boolean isLowIntegrity()
Yieldstrueif and only if this instance represents alowvalue for the integrity non interference analysis.- Returns:
trueif this is a low integrity element
-
lubAux
public NonInterference lubAux(NonInterference other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAuxin interfaceit.unive.lisa.analysis.BaseLattice<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
lessOrEqualAux
public boolean lessOrEqualAux(NonInterference other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lessOrEqualAuxin interfaceit.unive.lisa.analysis.BaseLattice<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
hashCode
public int hashCode()
- Specified by:
hashCodein interfaceit.unive.lisa.analysis.BaseLattice<NonInterference>- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equalsin interfaceit.unive.lisa.analysis.BaseLattice<NonInterference>- Overrides:
equalsin classjava.lang.Object
-
toString
public java.lang.String toString()
- Specified by:
toStringin interfaceit.unive.lisa.analysis.BaseLattice<NonInterference>- Overrides:
toStringin classjava.lang.Object
-
representation
public it.unive.lisa.util.representation.StructuredRepresentation representation()
- Specified by:
representationin interfaceit.unive.lisa.util.representation.StructuredObject
-
evalSkip
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalSkip(it.unive.lisa.symbolic.value.Skip skip, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalSkipin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalPushAny
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalPushAny(it.unive.lisa.symbolic.value.PushAny pushAny, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalPushAnyin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalTypeConv
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalTypeConv(it.unive.lisa.symbolic.value.BinaryExpression conv, NonInterference left, NonInterference right, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalTypeConvin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalTypeCast
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalTypeCast(it.unive.lisa.symbolic.value.BinaryExpression cast, NonInterference left, NonInterference right, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalTypeCastin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalNullConstant
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalNullConstant(NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalNullConstantin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalNonNullConstant
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalNonNullConstantin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalUnaryExpression
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, NonInterference arg, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalUnaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalBinaryExpression
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, NonInterference left, NonInterference right, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalBinaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalTernaryExpression
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, NonInterference left, NonInterference middle, NonInterference right, NonInterference state, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalTernaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
evalIdentifier
public it.unive.lisa.analysis.nonrelational.inference.InferredValue.InferredPair<NonInterference> evalIdentifier(it.unive.lisa.symbolic.value.Identifier id, it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference> environment, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
evalIdentifierin interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Throws:
it.unive.lisa.analysis.SemanticException
-
fixedVariable
public NonInterference fixedVariable(it.unive.lisa.symbolic.value.Identifier id, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
fixedVariablein interfaceit.unive.lisa.analysis.nonrelational.NonRelationalElement<NonInterference,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference>>
-
assume
public it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference> assume(it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference> environment, it.unive.lisa.symbolic.value.ValueExpression expression, it.unive.lisa.program.cfg.ProgramPoint src, it.unive.lisa.program.cfg.ProgramPoint dest, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
assumein interfaceit.unive.lisa.analysis.nonrelational.inference.BaseInferredValue<NonInterference>- Specified by:
assumein interfaceit.unive.lisa.analysis.nonrelational.NonRelationalElement<NonInterference,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.inference.InferenceSystem<NonInterference>>- Throws:
it.unive.lisa.analysis.SemanticException
-
-