pyecsca.ec.formula.fliparoo module

class pyecsca.ec.formula.fliparoo.Fliparoo(chain, graph)[source]

Bases: object

Fliparoo is a chain of nodes N1->N2->…->Nk in FormulaGraph for k>=2 such that:
  • All Ni are * or All Ni are +/-

  • For every Ni, except for Nk, the only outgoing node is Ni+1

  • Neither of N1,…,Nk-1 is an output node

nodes: List[CodeOpNode]
graph: FormulaGraph
operator: Optional[OpType]
verify_chain(nodes)[source]
property first
property last
previous(node)[source]
Return type:

Optional[CodeOpNode]

deepcopy()[source]
input_nodes()[source]
Return type:

List[Node]

slice(i, j)[source]
class pyecsca.ec.formula.fliparoo.MulFliparoo(chain, graph)[source]

Bases: Fliparoo

operator: Optional[OpType]
deepcopy()
property first
input_nodes()
Return type:

List[Node]

property last
previous(node)
Return type:

Optional[CodeOpNode]

slice(i, j)
verify_chain(nodes)
nodes: List[CodeOpNode]
graph: FormulaGraph
class pyecsca.ec.formula.fliparoo.AddSubFliparoo(chain, graph)[source]

Bases: Fliparoo

deepcopy()
property first
input_nodes()
Return type:

List[Node]

property last
previous(node)
Return type:

Optional[CodeOpNode]

slice(i, j)
verify_chain(nodes)
nodes: List[CodeOpNode]
graph: FormulaGraph
operator: Optional[OpType]
class pyecsca.ec.formula.fliparoo.AddFliparoo(chain, graph)[source]

Bases: Fliparoo

operator: Optional[OpType]
deepcopy()
property first
input_nodes()
Return type:

List[Node]

property last
previous(node)
Return type:

Optional[CodeOpNode]

slice(i, j)
verify_chain(nodes)
nodes: List[CodeOpNode]
graph: FormulaGraph
exception pyecsca.ec.formula.fliparoo.BadFliparoo[source]

Bases: Exception

add_note()

Exception.add_note(note) – add a note to the exception

args
with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

pyecsca.ec.formula.fliparoo.find_fliparoos(graph, fliparoo_type=None)[source]

Finds a list of Fliparoos in a graph

Return type:

List[Fliparoo]

pyecsca.ec.formula.fliparoo.is_subfliparoo(fliparoo, longest_fliparoos)[source]

Returns true if fliparoo is a part of any fliparoo in longest_fliparoos

Return type:

bool

pyecsca.ec.formula.fliparoo.largest_fliparoo(chain, graph, fliparoo_type=None)[source]

Finds the largest fliparoo in a list of Nodes

Return type:

Optional[Fliparoo]

class pyecsca.ec.formula.fliparoo.SignedNode(node)[source]

Bases: object

Represents a summand in an expression X1-X2+X3+X4-X5… Used for creating +/- Fliparoos

node: CodeOpNode
sign: int
class pyecsca.ec.formula.fliparoo.SignedSubGraph(nodes, graph)[source]

Bases: object

Subgraph of an EFDFormula graph with signed nodes

add_node(node)[source]
remove_node(node)[source]
change_signs()[source]
property components
deepcopy()[source]
pyecsca.ec.formula.fliparoo.mirror_node(node, graph, graph_copy)[source]

Finds the corresponding node in a copy of the graph

class pyecsca.ec.formula.fliparoo.DummyNode[source]

Bases: Node

property label
property result
property is_add: bool
property is_div: bool
property is_id: bool
property is_inv: bool
property is_mul: bool
property is_neg: bool
property is_pow: bool
property is_sqr: bool
property is_sub: bool
reconnect_outgoing_nodes(destination)
pyecsca.ec.formula.fliparoo.generate_fliparood_formulas(formula, rename=True)[source]
Return type:

Iterator[CodeFormula]

pyecsca.ec.formula.fliparoo.generate_fliparood_graphs(fliparoo)[source]
Return type:

Iterator[FormulaGraph]

pyecsca.ec.formula.fliparoo.extract_fliparoo_signed_inputs(fliparoo)[source]
Return type:

SignedSubGraph

pyecsca.ec.formula.fliparoo.disconnect_fliparoo_outputs(fliparoo)[source]
pyecsca.ec.formula.fliparoo.reconnect_fliparoo_outputs(graph, last_node)[source]
pyecsca.ec.formula.fliparoo.combine_all_pairs_signed_nodes(signed_subgraph, fliparoo)[source]
Return type:

List[SignedSubGraph]

pyecsca.ec.formula.fliparoo.combine_signed_nodes(subgraph, left_signed_node, right_signed_node, fliparoo)[source]
pyecsca.ec.formula.fliparoo.recursive_fliparoo(formula, depth=2)[source]
Return type:

Set[Formula]