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 <vrona.aka.ham...@gmail.com>
To: sage-support@googlegroups.com

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 sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
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: martinralbre...@jabber.ccc.de

Attachment: Main.sage
Description: Binary data

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to