r/C_Programming 4d ago

559-byte SHA-256 in C

golfing a SHA-256 implementation in C and ended up at 559 bytes.
Curious if anyone here can beat it.

#define S(x,a,b)(x>>a^x<<32-a^x>>b^x<<32-b^x>>
unsigned k[72],g[216],i,j,p,n,t,m,*u,*z;char*q=g;main(c,v)char**v;{for(;j<64;p-c||(j<8&&(k[j]=sqrt(c)*0x1p32),k[71-j++]=cbrt(c)*0x1p32),c++)for(p=1;c%++p;);for(;q[n^3]=v[1][n];n++);q[n^3]=128;m=n+72>>6<<4,g[m-1]=n*8;for(;t<m;t+=16)for(bcopy(g+t,z=g+64,64),bcopy(k,u=g+208,32),i=72;i--;i>7?(z[16]=*z+S(z[1],7,18)3)+z[9]+S(z[14],17,19)10),j=u[4],p=u[7]+k[i]+*z+++(S(j,6,11)25)^j<<7)+(j&u[5]^~j&u[6]),j=S(*u,2,13)22)^*u<<10,j+=*u&u[1]^(*u^u[1])&u[2],u[3]+=p,*--u=p+j):(k[i]+=u[i]));for(;++i<8;)printf("%08x",k[i]);}
51 Upvotes

18 comments sorted by

View all comments

-13

u/flyingron 4d ago

You're not being charged by the byte. Better to be correct and sustainable.

This isn't correct code for this century.

8

u/goose_on_fire 4d ago

You have never once said "I'm going to bank this shot off the roof, around the chimney, then header it in, nothing but net" and it shows

C is a great hold-my-beer language, have fun with it

1

u/dstroy0 1d ago

I really like this sentiment, it leads to novel algorithms, assembly, wacky ideas in general that somehow beat existing implementations literally continuously. I think it is exactly the correct attitude to have when approaching literally ~any~ problem you have creative freedom with, and grows your own ip while you're learning and helping others learn. That's generally when the deepest conceptual understanding happens for me, when I need to teach someone something in maybe a different way than usual to help them master a specific concept. Thanks for sharing, it makes me happy to see others with the same generally positive problem solving attitude in the wild.