Yes, I agree with this statement. However, this is not useful. Suppose I (as an user) want to find an annihilator of "f" (only "f"). I alway must write a cycle to find degree and corresponding function.
I propose to add an option to "annihilator" which will allow return the function with smallest degree. And one more option, which returns all annihilators instead of one function. On Wednesday, August 21, 2013 7:57:17 AM UTC+2, Yann wrote: > > From the doc of .algebraic_immunity : > > Returns the algebraic immunity of the Boolean function. This is the > smallest integer i such that there exists a non trivial annihilator > for self or ~self. > > The annihilator you get is for ~f1 (or if you prefer 1+f1) > > You can check that: (1+f1)*annihilator_f1 == 0 > > Best regards > > Le mardi 20 août 2013 20:01:03 UTC+2, Martin Albrecht a écrit : >> >> Hi Yann, >> >> I believe you are the original author of this code? >> >> Cheers, >> Martin >> >> ---------- Forwarded Message ---------- >> >> Subject: [sage-support] Re: Possible bug in algebraic_immunity( ) >> function in >> crypto toolbox >> Date: Tuesday 20 August 2013, 08:54:18 >> From: Oleksandr Kazymyrov <[email protected]> >> To: [email protected] >> >> I have the same problem. >> >> My output (Mac OS 10.8.4 with sage 5.11) for >> #!/usr/bin/env sage >> >> from sage.crypto.boolean_function import BooleanFunction >> >> P = BooleanPolynomialRing(4,'x') >> P.inject_variables() >> f = BooleanFunction(x0*x2 + x2*x3 + 1) >> >> print "f.algebraic_immunity() = {0}".format(f.algebraic_immunity()) >> print "f.annihilator(f.algebraic_immunity()) = >> {0}".format(f.annihilator(f.algebraic_immunity())) >> print "f.algebraic_immunity(annihilator=True) = >> {0}".format(f.algebraic_immunity(annihilator=True)) >> >> g = BooleanFunction(f.algebraic_immunity(annihilator=True)[1]) >> >> print "f = {0}".format(f.algebraic_normal_form()) >> print "g = {0}".format(g.algebraic_normal_form()) >> print "g*f = >> {0}".format(g.algebraic_normal_form()*f.algebraic_normal_form()) >> >> is >> Defining x0, x1, x2, x3 >> f.algebraic_immunity() = 1 >> f.annihilator(f.algebraic_immunity()) = None >> f.algebraic_immunity(annihilator=True) = (1, x2 + 1) >> f = x0*x2 + x2*x3 + 1 >> g = x2 + 1 >> g*f = x2 + 1 >> >> Therefore algebraic_immunity returns wrong degree. g*f = 0 for degree 2, >> which is the correct answer. >> >> On Tuesday, February 12, 2013 6:35:05 PM UTC+1, akhil wrote: >> > >> > Hello, >> > >> > SAGE returns an incorrect annihilator when >> algebraic_immunity(annihilator >> > = True) is used in the following code: >> > >> > from sage.crypto.boolean_function import BooleanFunction >> > R = BooleanPolynomialRing(4,'x') >> > f1 = R.gen(0)*R.gen(1)*R.gen(2) + R.gen(0)*R.gen(1)*R.gen(3) + >> > R.gen(0)*R.gen(2)*R.gen(3) + R.gen(1)*R.gen(2)*R.gen(3) + 1 >> > annihilator_f1 = BooleanFunction(f1).algebraic_immunity(annihilator = >> > True)[1] >> > print (annihilator_f1 * f1) >> > >> > annihilator_f1 is incorrect, because the response comes as: >> > >> > x0 + x1 + x2 + x3 + 1 >> > >> > >> > and not 0 as expected. >> > >> > The annihilator( ) function however, returns the correct answer, as >> > checked with the following code: >> > >> > for i in range(1,f1.total_degree() + 1): >> > if BooleanFunction(f1).annihilator(i) == None: >> > continue >> > else: >> > p = BooleanFunction(f1).annihilator(i) >> > print p >> > print (p*f1 == 0) >> > break >> > >> > Output: >> > >> > x0*x1*x2 + x1*x2*x3 >> > True >> > >> > >> > The above code was written in online notebook version of SAGE. >> > >> > Thanks, >> > AKHIL. >> > >> > >> > >> > >> > >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sage-support" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/sage-support. >> For more options, visit https://groups.google.com/groups/opt_out. >> ----------------------------------------- >> >> -- >> name: Martin Albrecht >> _pgp: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x6532AFB4 >> _otr: 47F43D1A 5D68C36F 468BAEBA 640E8856 D7951CCF >> _www: http://martinralbrecht.wordpress.com/ >> _jab: [email protected] > > -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/groups/opt_out.
