5 # Key-management interface
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::Key PREFIX = key_
126 key_fulltag(k->k, &d);
127 RETVAL = newSVpv(d.buf, d.len);
154 for (key_mkattriter(&i, k->k); key_nextattr(&i, &a, &v); )
155 XPUSHs(sv_2mortal(newSVpv((char *)a, strlen(a))));
161 RETVAL = key_expired(k->k);
179 fingerprint(k, h, kfiltstr)
188 kfilt.f = kfilt.m = 0;
189 else if (key_readflags(kfiltstr, 0, &kfilt.f, &kfilt.m))
190 croak("bad filter string `%s'", kfiltstr);
191 RETVAL = key_fingerprint(k->k, h, &kfilt);
196 key_strerror(me, err)
202 MODULE = Catacomb PACKAGE = Catacomb::Key::Data PREFIX = key_
208 RETVAL = CREATE(key_data);
231 key_binary(kd, p, len);
243 key_encrypted(kd, p, len);
282 if ((kd->e & KF_ENCMASK) != KENC_BINARY)
283 croak("key is not binary");
284 RETVAL = newSVpv(kd->u.k.k, kd->u.k.sz);
292 if ((kd->e & KF_ENCMASK) != KENC_ENCRYPT)
293 croak("key is not encrypted");
294 RETVAL = newSVpv(kd->u.k.k, kd->u.k.sz);
302 if ((kd->e & KF_ENCMASK) != KENC_MP)
303 croak("key is not bignum");
312 if ((kd->e & KF_ENCMASK) != KENC_EC)
313 croak("key is not a curve point");
316 EC_COPY(RETVAL, &kd->u.e);
324 if ((kd->e & KF_ENCMASK) != KENC_STRING)
325 croak("key is not string");
338 key_structfind(kd, tag)
343 key_structcreate(kd, tag)
354 if ((kd->e & KF_ENCMASK) != KENC_STRUCT)
355 croak("key is not structured");
356 for (sym_mkiter(&i, &kd->u.s); ks = sym_next(&i); )
357 XPUSHs(RET(&ks->k, "Catacomb::Key::Data"));
366 if ((kd->e & KF_ENCMASK) != KENC_STRUCT)
367 croak("key is not structured");
368 if ((ks = sym_find(&kd->u.s, tag, -1, 0, 0)) == 0)
370 sym_remove(&kd->u.s, ks);
380 if (key_readflags(p, &p, &f, &m) || *p)
381 croak("bad flags string");
382 XPUSHs(sv_2mortal(newSVuv(m)));
383 XPUSHs(sv_2mortal(newSVuv(f)));
392 key_writeflags(f, &d);
393 RETVAL = newSVpv(d.buf, d.len);
399 copy(kd, kfiltstr = 0)
406 kfilt.f = kfilt.m = 0;
407 else if (key_readflags(kfiltstr, 0, &kfilt.f, &kfilt.m))
408 croak("bad filter string `%s'", kfiltstr);
409 RETVAL = CREATE(key_data);
410 if (!key_copy(RETVAL, kd, &kfilt)) {
422 RETVAL = CREATE(Key_Data);
423 if (key_plock(tag, kd, RETVAL)) {
435 RETVAL = CREATE(Key_Data);
436 if (key_punlock(tag, kd, RETVAL)) {
448 RETVAL = CREATE(key_data);
449 if (key_read(p, RETVAL, 0)) {
457 write(kd, kfiltstr = 0)
465 kfilt.f = kfilt.m = 0;
466 else if (key_readflags(kfiltstr, 0, &kfilt.f, &kfilt.m))
467 croak("bad filter string `%s'", kfiltstr);
468 if (key_write(kd, &d, &kfilt))
469 RETVAL = newSVpv(d.buf, d.len);
471 RETVAL = &PL_sv_undef;
485 RETVAL = CREATE(key_data);
486 if (key_decode(p, len, RETVAL)) {
494 encode(kd, kfiltstr = 0)
502 kfilt.f = kfilt.m = 0;
503 else if (key_readflags(kfiltstr, 0, &kfilt.f, &kfilt.m))
504 croak("bad filter string `%s'", kfiltstr);
505 if (key_encode(kd, &d, &kfilt))
506 RETVAL = newSVpv(d.buf, d.len);
508 RETVAL = &PL_sv_undef;
513 MODULE = Catacomb PACKAGE = Catacomb::Key::File PREFIX = key_
521 RETVAL = CREATE(key_file);
522 if (key_open(RETVAL, file, how, warn_keyreporter, 0)) {
543 RETVAL = key_merge(kf, name, fp, warn_keyreporter, 0);
548 extract(kf, k, fp, kfiltstr = 0)
557 kfilt.f = kfilt.m = 0;
558 else if (key_readflags(kfiltstr, 0, &kfilt.f, &kfilt.m))
559 croak("bad filter string `%s'", kfiltstr);
560 RETVAL = key_extract(kf, k->k, fp, &kfilt);
578 kd = CREATE(key_data);
579 if (key_qtag(kf, tag, &d, &k->k, &kd)) {
582 XPUSHs(&PL_sv_undef);
583 XPUSHs(&PL_sv_undef);
584 XPUSHs(&PL_sv_undef);
587 XPUSHs(sv_2mortal(newSVpv(d.buf, d.len)));
588 XPUSHs(RET(k, "Catacomb::Key"));
589 XPUSHs(RET(k, "Catacomb::Key::Data"));
598 RETVAL = CREATE(Key);
599 if ((RETVAL->k = key_bytype(kf, type)) != 0)
613 RETVAL = CREATE(Key);
614 if ((RETVAL->k = key_byid(kf, id)) != 0)
628 RETVAL = CREATE(Key);
629 if ((RETVAL->k = key_bytag(kf, tag)) != 0)
646 for (key_mkiter(&i, kf); k = key_next(&i); ) {
650 XPUSHs(RET(kk, "Catacomb::Key"));
653 #----- That's all, folks ----------------------------------------------------