Path: blob/master/sage/crypto/mq/mpolynomialsystemgenerator.py
4069 views
"""1Abstract base class for generators of MPolynomialSystems.23AUTHOR:4Martin Albrecht <[email protected]>5"""67from sage.structure.sage_object import SageObject89class MPolynomialSystemGenerator(SageObject):10"""11Abstract base class for generators of MPolynomialSystems.12"""1314def __getattr__(self, attr):15"""16EXAMPLE::1718sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator19sage: msg = MPolynomialSystemGenerator()20sage: msg.R21Traceback (most recent call last):22...23NotImplementedError24"""25if attr == "R":26self.R = self.ring()27return self.R28else:29raise AttributeError("'%s' object has no attribute '%s'"%(self.__class__,attr))3031def varformatstr(self, name):32"""33Return format string for a given name 'name' which is34understood by print et al.3536Such a format string is used to construct variable37names. Typically those format strings are somewhat like38'name%02d%02d' such that rounds and offset in a block can be39encoded.4041INPUT:42name -- string4344EXAMPLE::4546sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator47sage: msg = MPolynomialSystemGenerator()48sage: msg.varformatstr('K')49Traceback (most recent call last):50...51NotImplementedError52"""53raise NotImplementedError5455def varstrs(self, name, round):56"""57Return a list of variable names given a name 'name' and an58index 'round'.5960This function is typically used by self._vars.6162INPUT:63name -- string64round -- integer index6566EXAMPLE::6768sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator69sage: msg = MPolynomialSystemGenerator()70sage: msg.varstrs('K', i)71Traceback (most recent call last):72...73NotImplementedError74"""75raise NotImplementedError7677def vars(self, name, round):78"""79Return a list of variables given a name 'name' and an80index 'round'.8182INPUT:83name -- string84round -- integer index8586EXAMPLE::8788sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator89sage: msg = MPolynomialSystemGenerator()90sage: msg.vars('K',0)91Traceback (most recent call last):92...93NotImplementedError94"""95raise NotImplementedError9697def ring(self):98"""99Return the ring in which the system is defined.100101EXAMPLE::102103sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator104sage: msg = MPolynomialSystemGenerator()105sage: msg.ring()106Traceback (most recent call last):107...108NotImplementedError109"""110raise NotImplementedError111112def block_order(self):113"""114Return a block term ordering for the equation systems115generated by self.116117EXAMPLE::118119sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator120sage: msg = MPolynomialSystemGenerator()121sage: msg.block_order()122Traceback (most recent call last):123...124NotImplementedError125"""126raise NotImplementedError127128def __call__(self, P, K):129"""130Encrypt plaintext P using the key K.131132INPUT:133P -- plaintext (vector, list)134K -- key (vector, list)135136EXAMPLE::137138sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator139sage: msg = MPolynomialSystemGenerator()140sage: msg(None, None)141Traceback (most recent call last):142...143NotImplementedError144"""145raise NotImplementedError146147def sbox(self):148"""149Return SBox object for self.150151EXAMPLE::152153sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator154sage: msg = MPolynomialSystemGenerator()155sage: msg.sbox()156Traceback (most recent call last):157...158AttributeError: '<class 'sage.crypto.mq.mpolynomialsystemgenerator.MPolynomialSystemGenerator'>' object has no attribute '_sbox'159"""160return self._sbox161162def polynomial_system(self, P=None, K=None):163"""164Return a tuple F,s for plaintext P and key K where F is an165MPolynomialSystem and s a dictionary which maps key variables166to their solutions.167168INPUT:169P -- plaintext (vector, list)170K -- key (vector, list)171172EXAMPLE::173174sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator175sage: msg = MPolynomialSystemGenerator()176sage: msg.polynomial_system()177Traceback (most recent call last):178...179NotImplementedError180"""181raise NotImplementedError182183def random_element(self):184"""185Return random element. Usually this is a list of elements in186the base field of length 'blocksize'.187188EXAMPLE::189190sage: from sage.crypto.mq.mpolynomialsystemgenerator import MPolynomialSystemGenerator191sage: msg = MPolynomialSystemGenerator()192sage: msg.random_element()193Traceback (most recent call last):194...195NotImplementedError196"""197raise NotImplementedError198199200201