Full MatrixSpace of 1 by 4 dense matrices over Finite Field of size 2' and 'Symbolic Ring' !!! can anyone know how to resolve this ?
hello , i'm trying to implement mc_eliece ( case of goppa code ) on sage math and then i got this error : unsupported operand parent(s) for +: 'Full MatrixSpace of 1 by 4 dense matrices over Finite Field of size 2' and 'Symbolic Ring'
can anyone know how to solve this problem ? thanks
import numpy as np # generation du code de copa
def initialisation() :
global n;
global G;
global k;
global P;
global S
global Gp;
t=int(input("nombre maximal d'erreur"));
n=int (input("longueur du message chiffree "));
p=(ln(n)/ln(2));
F=GF(2^p);
R.<x>=F[];
g=(x^t +x +1)^2 ;
L=[a for a in F.list() if g(a)!=0];
C=codes.GoppaCode(g,L) ;
print ( "caracteristique code de copa generer");
print(C) ;
G=C.generator_matrix() ; # nous venons de generer la matrice generatrice de nombre de colone n
print( "matrice generatrice G");
print(G);
k=G.nrows(); # on recupere le nombre de ligne de la matrice G
# generons la matrice de permutation de dimension qui est une matrice de identite dont les lignes ont ete permute
print();
P=matrix.identity(n); # generons la matrice de permuation ,
# nous devons toujours trouver un moyen pour permuter quelques lignes de facon aleatoire
print("matrice de permutation P");
print(P);
S=random_matrix(GF(2),k);
print("matrice brouilleur S");
print(S);
#generons la cle public Gp=SGP
Gp1=S*G;
Gp=Gp1*P;
print("cle public");
print(Gp);
print("l'erreur introduit doit etre de longeur",n,"et de poid <= ",t);
e2=list(map(int, list(input("enter l'erreur ")))); # convertion de chaine de caractere liste d'entiers
e=matrix(GF(2),1,n); # convertion liste en matrix vecteur // ici on impose que la longueur de e a n
for i in range(0,n,1) :
e[0,i]=e2[i];
print(e);
def mc_eliece():
print(Gp.nrows());
print(Gp.ncols());
print("votre message a envoye doit etre de longueur",k);
m2=list(map(int, list(input("entrer votre message"))));
print(m2);
m=matrix(GF(2),1,k); # convertion liste en matrix vecteur , sa longueur correspond au nombre de ligne de la generatrice
# vector([v[i]/w[i] for i in range(len(v))])
for i in range(0,k,1) :
m[0,i]=m2[i];
print(m); # on a reussi a recuperer le message m sous forme de matrice . codons le maintenant .
print(m.nrows());
m1=matrix(GF(2),1,n);
m1=(m*Gp); #ensuite en fait m1+e , juste ici pour un soucis de conflit , on va preciser le corps de chaque variable
print(m1);
mc=matrix(GF(2),1,n);
mc= m1+e;# here i'm suppose to do the addition of m1 and e to get mc ; but the error occure
initialisation();
mc_eliece();
What values are you using for the various inputs (so that others can try to reproduce the problem)?
What is the point in defining a variable and then re-defining it right away?
My guess, by the way, is that
e
is being treated as the number 2.71828..., which in Sage is an element of the symbolic ring. You should addglobal e
toinitialisation
.