Crypt-NSS-X509
view release on metacpan or search on metacpan
void
verify(crl, cert, timedouble = NO_INIT)
Crypt::NSS::X509::CRL crl
Crypt::NSS::X509::Certificate cert
SV* timedouble
PREINIT:
SECStatus rv;
PRTime time = 0;
PPCODE:
if ( items < 3 || SvIV(timedouble) == 0 ) {
time = PR_Now();
} else {
double tmptime = SvNV(timedouble);
// time contains seconds since epoch - netscape expects microseconds
tmptime = tmptime * 1000000;
LL_D2L(time, tmptime); // and convert to 64-bit int
}
rv = CERT_VerifySignedData(&crl->signatureWrap, cert, time, NULL);
RETVAL = cert;
OUTPUT:
RETVAL
void
DESTROY(crl)
Crypt::NSS::X509::CRL crl
PPCODE:
if ( crl ) {
SEC_DestroyCrl(crl);
crl = 0;
}
void
entries(crl)
Crypt::NSS::X509::CRL crl
PREINIT:
CERTCrlEntry *entry;
int iv;
PPCODE:
if ( crl->crl.entries != NULL ) {
iv = 0;
while( (entry = crl->crl.entries[iv++]) != NULL) {
HV* h = newHV();
hv_store(h, "serial", 6, item_to_hhex(&entry->serialNumber), 0) ? : croak("Could not store data in hv");
{
// TODO: factor out to time_to_sv
int64 time;
CERT_AddCertToListTail(certlist, addcert);
void
dump(certlist)
Crypt::NSS::X509::CertList certlist;
PREINIT:
CERTCertListNode *node;
PPCODE:
node = CERT_LIST_HEAD(certlist);
while ( !CERT_LIST_END(node, certlist) ) {
if ( node->cert ) {
CERTCertificate* currcert = CERT_DupCertificate(node->cert);
SV* cert = newSV(0);
sv_setref_pv(cert, "Crypt::NSS::X509::Certificate", currcert); // the beauty of this is that it should be cleaned by perl refcounting now
mXPUSHs(cert);
}
node = CERT_LIST_NEXT(node);
}
void
DESTROY(certlist)
Crypt::NSS::X509::CertList certlist;
PPCODE:
if ( certlist ) {
CERT_DestroyCertList(certlist);
certlist = 0;
}
MODULE = Crypt::NSS::X509 PACKAGE = Crypt::NSS::X509::Certificate
verify_certificate_log = 3
verify_certificate_pkix_log = 4
verify_cert_log = 5
PREINIT:
SECStatus secStatus;
PRTime time = 0;
CERTVerifyLog log;
CERTCertDBHandle *defaultDB;
PPCODE:
defaultDB = CERT_GetDefaultCertDB();
if ( items == 1 || SvIV(timedouble) == 0 ) {
time = PR_Now();
} else {
double tmptime = SvNV(timedouble);
// time contains seconds since epoch - netscape expects microseconds
tmptime = tmptime * 1000000;
LL_D2L(time, tmptime); // and convert to 64-bit int
}
XSRETURN_UNDEF;
OUTPUT:
RETVAL
void DESTROY(cert)
Crypt::NSS::X509::Certificate cert;
PPCODE:
if ( cert ) {
if ( cert->nssCertificate ) {
//printf("Is nsscertificate\n");
//printf("Refcount: %d\n", cert->nssCertificate->object.refCount);
}
//printf("Certificate %s destroyed\n", cert->subjectName);
CERT_DestroyCertificate(cert);
cert = 0;
}
( run in 0.772 second using v1.01-cache-2.11-cpan-71847e10f99 )