open_toontown_panda3d/direct/src/plugin/p3dCert.h

125 lines
3.4 KiB
C++

// Filename: p3dCert.h
// Created by: rdb (08Mar11)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) Carnegie Mellon University. All rights reserved.
//
// All use of this software is subject to the terms of the revised BSD
// license. You should have received a copy of this license along
// with this source code in a file named "LICENSE."
//
////////////////////////////////////////////////////////////////////
#ifndef P3DCERT_H
#define P3DCERT_H
#include <Fl/Fl.H>
#include <Fl/Fl_Window.H>
#define OPENSSL_NO_KRB5
#include "openssl/x509.h"
#include "openssl/x509_vfy.h"
#include "openssl/pem.h"
#include <string>
#include <iostream>
#include <stdio.h>
using namespace std;
class ViewCertDialog;
#ifndef STACK_OF
// At some point, presumably in 1.0.0, openssl went to the
// STACK_OF() macro system to typedef the contents of a stack.
// Unfortunately, that new API is different. We define some macros
// here here for backward compatiblity.
#define STACK_OF(type) STACK
#define sk_X509_push(stack, item) sk_push((stack), (char *)(item))
#define sk_X509_free(stack) sk_free(stack)
#define sk_X509_new(cmp) sk_new(cmp)
#endif
////////////////////////////////////////////////////////////////////
// Class : AuthDialog
// Description : This is the primary dialog of this application.
//
// This dialog is presented to the user when he/she
// clicks on the red authorization button on the splash
// window. It tells the user the status of the
// application's signature, and invites the user to
// approve the signature or cancel.
////////////////////////////////////////////////////////////////////
class AuthDialog : public Fl_Window {
public:
#ifdef _WIN32
AuthDialog(const wstring &cert_filename, const wstring &cert_dir);
#else
AuthDialog(const string &cert_filename, const string &cert_dir);
#endif
virtual ~AuthDialog();
static void run_clicked(Fl_Widget *w, void *data);
static void view_cert_clicked(Fl_Widget *w, void *data);
static void cancel_clicked(Fl_Widget *w, void *data);
void approve_cert();
private:
#ifdef _WIN32
void read_cert_file(const wstring &cert_filename);
#else
void read_cert_file(const string &cert_filename);
#endif
void get_friendly_name();
void verify_cert();
int load_certificates_from_der_ram(X509_STORE *store,
const char *data, size_t data_size);
void layout();
void get_text(char *header, size_t hlen, char *text, size_t tlen);
public:
ViewCertDialog *_view_cert_dialog;
private:
#ifdef _WIN32
wstring _cert_dir;
#else
string _cert_dir;
#endif
X509 *_cert;
STACK_OF(X509) *_stack;
char _header[32];
char _text[512];
char _text_clean[1024];
string _friendly_name;
int _verify_result;
};
////////////////////////////////////////////////////////////////////
// Class : ViewCertDialog
// Description : This is the detailed view of the particular
// certificate.
////////////////////////////////////////////////////////////////////
class ViewCertDialog : public Fl_Window {
public:
ViewCertDialog(AuthDialog *auth_dialog, X509 *cert);
virtual ~ViewCertDialog();
static void run_clicked(Fl_Widget *w, void *data);
static void cancel_clicked(Fl_Widget *w, void *data);
private:
void layout();
private:
AuthDialog *_auth_dialog;
X509 *_cert;
};
#endif