PDF-Make
view release on metacpan or search on metacpan
xs/signature.xs view on Meta::CPAN
RETVAL = newSVpvn((const char *)digest, digest_len);
OUTPUT:
RETVAL
##############################################################################
# SigningIdentity - PKCS#12 and PEM parsing
##############################################################################
MODULE = PDF::Make PACKAGE = PDF::Make::SigningIdentity
PROTOTYPES: ENABLE
pdfmake_signing_identity_t *
_from_pkcs12(class, data_sv, password)
const char *class
SV *data_sv
const char *password
PREINIT:
STRLEN len;
const uint8_t *data;
pdfmake_arena_t *arena;
CODE:
PERL_UNUSED_VAR(class);
data = (const uint8_t *)SvPVbyte(data_sv, len);
arena = pdfmake_arena_new();
if (!arena)
croak("PDF::Make::SigningIdentity: out of memory");
RETVAL = pdfmake_pkcs12_parse(arena, data, len, password);
if (!RETVAL) {
pdfmake_arena_free(arena);
croak("PDF::Make::SigningIdentity: failed to parse PKCS#12 data");
}
/* Note: arena is now owned by the identity */
OUTPUT:
RETVAL
void
DESTROY(self_sv)
SV *self_sv
PREINIT:
SV *inner;
pdfmake_signing_identity_t *self;
CODE:
/* The PDF::Make::SigningIdentity package has two constructors:
* - XS: _from_pkcs12() blesses a scalar holding a native pointer
* - pure-Perl: ::new() in lib/PDF/Make/Signature.pm blesses a HASH
* Only the XS-created variant owns a pdfmake_signing_identity_t
* that must be freed here. Without this guard, calling SvIV on a
* blessed HASH at global destruction emits a spurious
* "Use of uninitialized value in subroutine entry" warning. */
if (sv_isobject(self_sv) && SvROK(self_sv)) {
inner = SvRV(self_sv);
if (inner && SvTYPE(inner) < SVt_PVAV) {
self = INT2PTR(pdfmake_signing_identity_t *, SvIV(inner));
if (self) pdfmake_signing_identity_free(self);
}
}
int
has_private_key(self)
pdfmake_signing_identity_t *self
CODE:
RETVAL = (self && self->privkey != NULL);
OUTPUT:
RETVAL
int
has_certificate(self)
pdfmake_signing_identity_t *self
CODE:
RETVAL = (self && self->cert != NULL);
OUTPUT:
RETVAL
int
chain_length(self)
pdfmake_signing_identity_t *self
CODE:
if (!self || !self->chain)
RETVAL = 0;
else
RETVAL = self->chain->count;
OUTPUT:
RETVAL
SV *
subject(self)
pdfmake_signing_identity_t *self
CODE:
if (!self || !self->cert || !self->cert->subject.dn)
XSRETURN_UNDEF;
RETVAL = newSVpv(self->cert->subject.dn, 0);
OUTPUT:
RETVAL
SV *
issuer(self)
pdfmake_signing_identity_t *self
CODE:
if (!self || !self->cert || !self->cert->issuer.dn)
XSRETURN_UNDEF;
RETVAL = newSVpv(self->cert->issuer.dn, 0);
OUTPUT:
RETVAL
SV *
serial(self)
pdfmake_signing_identity_t *self
CODE:
if (!self || !self->cert || !self->cert->serial_hex)
XSRETURN_UNDEF;
RETVAL = newSVpv(self->cert->serial_hex, 0);
OUTPUT:
RETVAL
IV
not_before(self)
pdfmake_signing_identity_t *self
CODE:
if (!self || !self->cert)
( run in 0.999 second using v1.01-cache-2.11-cpan-8dfa8b56332 )