Esempio n. 1
0
void calculateAddress(const uint8_t* data, size_t size, char* nemAddress)
{
	unsigned char sha3result[32];

	Keccak_HashInstance _hctx, *hctx = &_hctx;
	Keccak_HashInitialize_SHA3_256(hctx);
	Keccak_HashUpdate(hctx, data, size * 8);
	Keccak_HashSqueeze(hctx, sha3result, 256);

	unsigned char r160result[25];
	computeRIPEMD160(sha3result, 32, r160result + 1);
	r160result[0] = 0x68;

	Keccak_HashInitialize_SHA3_256(hctx);
	Keccak_HashUpdate(hctx, r160result, 21 * 8);
	Keccak_HashSqueeze(hctx, sha3result, 256);

	*(uint32_t*)(r160result + 21) = *(uint32_t*)(sha3result);

	base32_encode(r160result, 25, (unsigned char*)nemAddress);
	nemAddress[40] = 0;
}
Esempio n. 2
0
int SHAKE80(const unsigned char *dataIn, size_t nBitsIn, unsigned char *md, int nOutBytes)
{
    Keccak_HashInstance h;

    if (md == NULL || nOutBytes == 0) {
        return 0;
    }
    if (nOutBytes > SHAKE_MAX_BITS / 8) {
        nOutBytes = SHAKE_MAX_BITS / 8;
    }
    Keccak_HashInitialize(&h, SHAKE80_R, SHAKE80_C, 0, SHAKE80_P);
    Keccak_HashUpdate(&h, dataIn, (DataLength)nBitsIn);
    Keccak_HashFinal(&h, NULL);
    Keccak_HashSqueeze(&h, md, nOutBytes * 8);

    return nOutBytes;
}
Esempio n. 3
0
static PyObject *
SHA3_digest(SHAobject *self, PyObject *unused)
{
    unsigned char *digest = malloc(self->outputlen / 8 + 1); //[MAX_DIGEST_SIZE];
    SHAobject temp;

    SHAcopy(self, &temp);

    Keccak_HashFinal(&temp.state, digest);

    if (self->hashbitlen > 512) { // SHAKE
        Keccak_HashSqueeze(&temp.state, digest, self->outputlen);
    }

    PyObject *ret = PyBytes_FromStringAndSize((const char *)digest, self->outputlen / 8);
    free(digest);
    return ret;
}