Crypt-OpenBSD-Blowfish

 view release on metacpan or  search on metacpan

Blowfish.xs  view on Meta::CPAN

	SV *sv_data
	SV *sv_rounds
CODE:
	{
		STRLEN datalen;
		unsigned char *data = (unsigned char *) SvPVbyte(sv_mortalcopy(sv_data),datalen);
		if (datalen % 8)
			croak("data must be in 8-byte chunks");
		
		uint16_t words = datalen / 4;
		uint32_t cdata[words];
		uint16_t j = 0;
		int i;
		int rounds = SvIVx(sv_rounds);

		for (i=0; i<words; i++)
			cdata[i] = Blowfish_stream2word(data, datalen, &j);
		for (i=0; i<rounds; i++)
			blf_enc(self, cdata, sizeof(cdata) / sizeof(uint64_t));

		for (i=0; i<words; i++) {
			data[4 * i + 3] = (cdata[i] >> 24) & 0xff;
			data[4 * i + 2] = (cdata[i] >> 16) & 0xff;
			data[4 * i + 1] = (cdata[i] >>  8) & 0xff;
			data[4 * i ] = cdata[i] & 0xff;
		}
		RETVAL = newSVpvn ((char *) data, datalen);
	}
OUTPUT:
	RETVAL

SV *
encrypt(self,sv_data)
	Crypt::OpenBSD::Blowfish self
	SV *sv_data



( run in 0.602 second using v1.01-cache-2.11-cpan-454fe037f31 )