sha512

マクロが複雑すぎて、out of fixed registersが出て、sha512はポートできない。
とりあえず、除外しておく。

とおもったら、import shaでこけた。

/* Various logical functions */
#define ROR64(x, y) ?
( ((((x) & Py_ULL(0xFFFFFFFFFFFFFFFF))>>( (unsigned PY_LONG_LONG)(y) & 63)) | ?
*1
#define Ch(x,y,z) (z ^ (x & (y ^ z)))
#define Maj(x,y,z) (((x | y) & z) | (x & y))
#define S(x, n) ROR64( (x),(n))
#define R(x, n) (((x) & Py_ULL(0xFFFFFFFFFFFFFFFF)) >> ( (unsigned PY_LONG_LONG)n))
#define Sigma0(x) (S(x, 28) ^ S(x, 34) ^ S(x, 39))
#define Sigma1(x) (S(x, 14) ^ S(x, 18) ^ S(x, 41))
#define Gamma0(x) (S(x, 1) ^ S(x, 8) ^ R(x, 7))
#define Gamma1(x) (S(x, 19) ^ S(x, 61) ^ R(x, 6))


static void
sha512_transform(SHAobject *sha_info)
{
int i;
SHA_INT64 S[8], W[80], t0, t1;

/* Compress */
#define RND(a,b,c,d,e,f,g,h,i,ki) ?
t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i]; ?
t1 = Sigma0(a) + Maj(a, b, c); ?
d += t0; ?
h = t0 + t1;

RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,Py_ULL(0x428a2f98d728ae22));

*1:x)<<((unsigned PY_LONG_LONG)(64-((y) & 63))))) & Py_ULL(0xFFFFFFFFFFFFFFFF