Crypt-OpenBSD-Blowfish
view release on metacpan or search on metacpan
Blowfish.xs view on Meta::CPAN
Newxz(RETVAL, 1, blf_ctx);
Blowfish_initstate(RETVAL);
}
OUTPUT:
RETVAL
Crypt::OpenBSD::Blowfish
init_key(sv_key)
SV *sv_key
CODE:
{
Newxz(RETVAL, 1, blf_ctx);
STRLEN keylen; unsigned char *key = (unsigned char *) SvPVbyte(sv_key,keylen);
blf_key(RETVAL,key,keylen);
}
OUTPUT:
RETVAL
void
DESTROY(self)
Crypt::OpenBSD::Blowfish self
CODE:
Safefree(self);
void
expandstate(self,sv_data,sv_key)
Crypt::OpenBSD::Blowfish self
SV *sv_data
SV *sv_key
CODE:
{
STRLEN datalen; unsigned char *data = (unsigned char *) SvPVbyte(sv_data,datalen);
STRLEN keylen; unsigned char *key = (unsigned char *) SvPVbyte(sv_key,keylen);
Blowfish_expandstate(self, data, datalen, key, keylen);
}
void
expand0state(self,sv_key)
Crypt::OpenBSD::Blowfish self
SV *sv_key
CODE:
{
STRLEN keylen;
unsigned char *key = (unsigned char *) SvPVbyte(sv_key,keylen);
Blowfish_expand0state(self,key,keylen);
}
SV *
encrypt_iterate(self,sv_data,sv_rounds)
Crypt::OpenBSD::Blowfish self
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
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");
blf_ecb_encrypt(self,data,datalen);
RETVAL = newSVpvn ((char *) data, datalen);
}
OUTPUT:
RETVAL
SV *
decrypt(self,sv_data)
Crypt::OpenBSD::Blowfish self
SV *sv_data
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");
blf_ecb_decrypt(self,data,datalen);
RETVAL = newSVpvn ((char *) data, datalen);
}
OUTPUT:
RETVAL
( run in 0.509 second using v1.01-cache-2.11-cpan-5a3173703d6 )