SAGEMATH FAILS to compute Difference Distribution Table for rectangular SBOX of logical AND, I don't know why

asked 2023-12-12 15:20:20 +0200

0xdeadbeef gravatar image

I was being paranoid about some calculations I did so I started review one by one with the aid of software.

Considere the rectangular SBOX = [0,0,0,1], as you may see this is the SBOX for AND or at least I wanted it to be so. I computed its LAT (linear approximation table) and DDT(difference distribution table) and I wanted to check the results with Sagemath.

For the LAT, response is coherent and adequate with what I had and what I expected:

sage: S = SBox(0,0,0,1)
sage: S.linear_approximation_table(scale="correlation")
[   1  1/2]
[   0  1/2]
[   0  1/2]
[   0 -1/2]

For DDT the system breaks as you see here:

sage: S = SBox(0,0,0,1)
sage: S.difference_distribution_table()
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[84], line 1
----> 1 S.difference_distribution_table()

File /usr/lib64/python3.11/site-packages/sage/misc/cachefunc.pyx:2297, in sage.misc.cachefunc.CachedMethodCallerNoArgs.__call__()
   2295 if self.cache is None:
   2296     f = self.f
-> 2297     self.cache = f(self._instance)
   2298 return self.cache
   2299 

File /usr/lib64/python3.11/site-packages/sage/crypto/sbox.pyx:652, in sage.crypto.sbox.SBox.difference_distribution_table()
    650     si = self._S_list[i]
    651     for di in range(nrows):
--> 652         L[di*nrows + si ^ self._S_list[i ^ di]] += 1
    653 
    654 A = matrix(ZZ, nrows, ncols, L)

IndexError: list index out of range
sage:

What is happening? I personally can't make sense of it.

ps I tried this workaround that I think it will do the job:

sage: S = SBox(0,0,0,2)
sage: S.difference_distribution_table()
[4 0 0 0]
[2 0 2 0]
[2 0 2 0]
[2 0 2 0]
sage:

But I really don't like it at all. Thank you in advance for answers.

edit retag flag offensive close merge delete