Here is a simple PARI/GP program to calculate singer type difference sets [notice my handle :-)]. It doesn't use the trace since that is unnecessarily complicated. The trick is if you have the prime power order $q$ construct $\mathbb{F}_{q}^{3}=\mathbb{F}_{q^3}$ and think of it both as a three-dimensional vector space over $\mathbb{F}_{q}$ (the left side of the equation) and as the finite field with $q^3$ elements. In the latter find a primitive element x (actually any element of order $\geq q^2+q+1$ suffices but let's make it a primitive one) and look at the sequence $(x^0,x^1,x^3,\ldots x^{q^2+q})$. These elements are also elements of the vector space. Take any two dimensional subspace of it and check whether the element $x^i$ is also an element of the subspace. I chose the subspace $ax^2+bx+c$ with $a=0$. If it is then $i$ is a member of your difference set.
diffset=m-> {
if (type(m)!="t_INT" || m<2 ,error(concat(m," is not an integer≥2")));
if (omega(m)>1,error(concat(m," is not a prime power")));
my(fc=factorint(m));
my(p=fc[1,1]);
my(n=fc[1,2]);
my(ff=(ffinit(p,3*n))); \\ Generator for field F_{p^{3n}}
my(lambda=ffprimroot(ffgen(ff))); \\ Generator for field F_{p^{3n}}
my(v=p^(2*n)+p^n+1);
my(lambda_sf=lambda^v); \\ Generator for subfield F_{p^n}
my(s=Set([]));
my(elem=lambda);
for(i=0,fforder(lambda_sf),
for(j=0,fforder(lambda_sf),
if (i+j==0,next);
elem=if(i==0,0,(lambda_sf^i)*lambda)+if(j==0,0,lambda_sf^j);
\\elem=(lambda_sf^i)*lambda+lambda_sf^j;
s=setunion(s,Set([fflog(elem,lambda)]%v));
if(length(s)==m+1,break(2));
)
);
return(s);
}
? diffset(4)
%6 = [0, 1, 6, 8, 18] \\possibly another answer: %7 = [0, 1, 4, 14, 16]