5 # Interface to crypto algorithms
7 # (c) 2001 Straylight/Edgeware
10 #----- Licensing notice -----------------------------------------------------
12 # This file is part of the Perl interface to Catacomb.
14 # Catacomb/Perl is free software; you can redistribute it and/or modify
15 # it under the terms of the GNU General Public License as published by
16 # the Free Software Foundation; either version 2 of the License, or
17 # (at your option) any later version.
19 # Catacomb/Perl is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 # GNU General Public License for more details.
24 # You should have received a copy of the GNU General Public License
25 # along with Catacomb/Perl; if not, write to the Free Software Foundation,
26 # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 MODULE = Catacomb PACKAGE = Catacomb::CipherClass
37 RETVAL = (gccipher *)gcipher_byname(name);
45 const gccipher *const *cc;
48 for (cc = gciphertab; *cc; cc++)
49 XPUSHs(RET((gccipher *)*cc, "Catacomb::CipherClass"));
63 RETVAL = (char *)cc->name;
84 if (keysz(len, cc->keysz) != len) {
85 croak("bad key size %lu for cipher `%s'",
86 (unsigned long)len, cc->name);
88 RETVAL = cc->init(p, len);
92 MODULE = Catacomb PACKAGE = Catacomb::Cipher
109 p = SvPV(plain, len);
110 RETVAL = NEWSV(0, len ? len : 1);
111 c->ops->encrypt(c, p, SvPVX(RETVAL), len);
112 SvCUR_set(RETVAL, len);
125 p = SvPV(cipher, len);
126 RETVAL = NEWSV(0, len ? len : 1);
127 c->ops->decrypt(c, p, SvPVX(RETVAL), len);
128 SvCUR_set(RETVAL, len);
142 if (c->ops->c->blksz && len != c->ops->c->blksz) {
143 croak("IV for block cipher `%s' must be %lu",
144 c->ops->c->name, (unsigned long)c->ops->c->blksz);
160 RETVAL = (gccipher *)c->ops->c;
164 MODULE = Catacomb PACKAGE = Catacomb::HashClass
171 RETVAL = (gchash *)ghash_byname(name);
179 const gchash *const *hc;
182 for (hc = ghashtab; *hc; hc++)
183 XPUSHs(RET((gchash *)*hc, "Catacomb::HashClass"));
197 RETVAL = (char *)hc->name;
209 MODULE = Catacomb PACKAGE = Catacomb::Hash
227 h->ops->hash(h, p, len);
234 RETVAL = NEWSV(0, h->ops->c->hashsz);
235 h->ops->done(h, SvPVX(RETVAL));
236 SvCUR_set(RETVAL, h->ops->c->hashsz);
245 RETVAL = h->ops->copy(h);
253 RETVAL = (gchash *)h->ops->c;
257 MODULE = Catacomb PACKAGE = Catacomb::MACClass
264 RETVAL = (gcMAC *)gmac_byname(name);
272 const gcMAC *const *mc;
275 for (mc = gmactab; *mc; mc++)
276 XPUSHs(RET((gcMAC *)*mc, "Catacomb::MACClass"));
298 RETVAL = (char *)mc->name;
311 if (keysz(len, mc->keysz) != len) {
312 croak("bad key size %lu for mac `%s'",
313 (unsigned long)len, mc->name);
315 RETVAL = mc->key(p, len);
319 MODULE = Catacomb PACKAGE = Catacomb::MAC
332 RETVAL = m->ops->init(m);
340 RETVAL = (gcMAC *)m->ops->c;
344 MODULE = Catacomb PACKAGE = Catacomb::Rand
351 if (!r->ops->misc(r, GRAND_CHECK, GRAND_SEEDUINT32))
352 croak("rng `%s' doesn't support `seedint'", r->ops->name);
353 r->ops->misc(r, GRAND_SEEDUINT32, seed);
364 if (!r->ops->misc(r, GRAND_CHECK, GRAND_SEEDBLOCK))
365 croak("rng `%s' doesn't support `seedblock'", r->ops->name);
367 r->ops->misc(r, GRAND_SEEDBLOCK, p, len);
375 if (!r->ops->misc(r, GRAND_CHECK, GRAND_SEEDMP))
376 croak("rng `%s' doesn't support `seedmp'", r->ops->name);
377 r->ops->misc(r, GRAND_SEEDMP, seed);
385 if (!r->ops->misc(r, GRAND_CHECK, GRAND_SEEDRAND))
386 croak("rng `%s' doesn't support `seedrand'", r->ops->name);
387 r->ops->misc(r, GRAND_SEEDRAND, seed);
394 RETVAL = r->ops->raw(r);
402 RETVAL = r->ops->word(r);
410 RETVAL = r->ops->byte(r);
418 RETVAL = r->ops->byte(r);
427 RETVAL = r->ops->range(r, limit);
437 RETVAL = mprand(MP_NEW, bits, r, or);
446 RETVAL = mprand_range(MP_NEW, limit, r, 0);
455 RETVAL = NEWSV(0, n ? n : 1);
456 r->ops->fill(r, SvPVX(RETVAL), n);
457 SvCUR_set(RETVAL, n);
466 RETVAL = (char *)r->ops->name;
482 RETVAL = r->ops->max;
486 MODULE = Catacomb PACKAGE = Catacomb::Rand::True
492 RETVAL = &rand_global;
500 RETVAL = rand_create();
508 r->ops->misc(r, RAND_GATE);
515 r->ops->misc(r, RAND_STRETCH);
527 r->ops->misc(r, RAND_KEY, p, len);
534 r->ops->misc(r, RAND_NOISESRC, &noise_source);
542 r->ops->misc(r, RAND_SEED, bits);
545 MODULE = Catacomb PACKAGE = Catacomb::Rand::Fib
552 RETVAL = MAKE(fibrand_create(seed), "Catacomb::Rand::Fib");
556 MODULE = Catacomb PACKAGE = Catacomb::Rand::LC
563 RETVAL = MAKE(lcrand_create(seed), "Catacomb::Rand::LC");
567 MODULE = Catacomb PACKAGE = Catacomb::Rand::DSA
578 RETVAL = dsarand_create(p, len);
587 r->ops->misc(r, DSARAND_PASSES, n);
596 sz = r->ops->misc(r, DSARAND_SEEDSZ);
597 RETVAL = NEWSV(0, sz ? sz : 1);
598 r->ops->misc(r, DSARAND_GETSEED, SvPVX(RETVAL));
599 SvCUR_set(RETVAL, sz);
604 MODULE = Catacomb PACKAGE = Catacomb::Rand::RC4
615 RETVAL = MAKE(rc4_rand(p, len), "Catacomb::Rand::RC4");
619 MODULE = Catacomb PACKAGE = Catacomb::Rand::SEAL
631 RETVAL = MAKE(seal_rand(p, len, n), "Catacomb::Rand::SEAL");
635 MODULE = Catacomb PACKAGE = Catacomb::Rand::MGF
642 RETVAL = findrand(mgftab, "Catacomb::Rand::MGF", name, k);
652 MODULE = Catacomb PACKAGE = Catacomb::Rand::Counter
659 RETVAL = findrand(ctrtab, "Catacomb::Rand::Counter", name, k);
669 MODULE = Catacomb PACKAGE = Catacomb::Rand::OFB
676 RETVAL = findrand(ofbtab, "Catacomb::Rand::OFB", name, k);
686 MODULE = Catacomb PACKAGE = Catacomb::Rand::Magic
694 #----- That's all, folks ----------------------------------------------------