Problema no cálculo da soma de verificação: converter int para assinado int32

Eu preciso converter o seguinte código c (para calcular a soma de verificação de um arquivo) para python. Eu tinha escrito, o código correspondente em python, mas o resultado não correspondia à versão c. O problema era que o python promove automaticamente int por muito tempo sempre que ocorre um estouro e isso resulta em somas de verificação incorretas.

Alguma idéia de como superar esse problema? ou existe uma função python que converte muito tempo em int32 assinado?

obrigado

int calcChecksum(const guchar *data, gsize len)
{ 

    const guchar *p = data;
    int checksum = 0, g, i = len;

    while(i--) {
            checksum = (checksum << 4) + *p++;

            if((g = (checksum & 0xf0000000)) != 0)
                    checksum ^= g >> 23;

            checksum &= ~g;
    }
    return checksum;
}

Solução:

Obrigado por toda a ajuda. Aqui está a função que funcionou para mim -

 def int32(x):
    x = 0xffffffff & x
    if x > 0x7fffffff :
        return - ( ~(x - 1) & 0xffffffff )
    else : return x