blob: 75eae952e22d737c0fff12d45a5bbbf2c004497b [file] [log] [blame]
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ENTD_CRYPTO_OPENSSL_H_
#define ENTD_CRYPTO_OPENSSL_H_
#include <string>
#include <map>
#include <openssl/engine.h>
#include <openssl/x509.h>
#include "base/basictypes.h"
#include "v8.h"
#include "entd/scriptable.h"
namespace entd {
namespace crypto {
class OpenSSL : public Scriptable<OpenSSL> {
public:
static const std::string class_name() {
return "entd.crypto.OpenSSL";
};
static bool InitializeTemplate(v8::Handle<v8::FunctionTemplate> ctor_t);
static bool StaticInitialize(const char* config_name);
static bool StaticFinalize();
v8::Handle<v8::Value> Construct(const v8::Arguments& args) {
return ThrowNoScriptableConstructor();
}
class Engine : public Scriptable<Engine> {
public:
static const std::string class_name() {
return "entd.crypto.OpenSSL.Engine";
};
Engine() : engine_id_(""), engine_(NULL) {}
~Engine() {}
static bool InitializeTemplate(v8::Handle<v8::FunctionTemplate> ctor_t);
v8::Handle<v8::Value> Construct(const v8::Arguments& args);
bool Initialize(const char* engine_id);
v8::Handle<v8::Value> CreateCSR(const v8::Arguments& args);
v8::Handle<v8::Value> Dispose(const v8::Arguments& args);
private:
std::string engine_id_;
ENGINE* engine_;
};
class CSR : public Scriptable<CSR> {
public:
static const std::string class_name() {
return "entd.crypto.OpenSSL.CSR";
};
// Request type.
typedef enum {
CSR_FORMAT_UNKNOWN,
CSR_FORMAT_PEM_TEXT,
} RequestType;
CSR() : request_(NULL) {}
bool Initialize(X509_REQ* request);
static bool InitializeTemplate(v8::Handle<v8::FunctionTemplate> ctor_t);
v8::Handle<v8::Value> Construct(const v8::Arguments& args) {
return ThrowNoScriptableConstructor();
}
v8::Handle<v8::Value> ToFormat(const v8::Arguments& args);
v8::Handle<v8::Value> Dispose(const v8::Arguments& args);
private:
X509_REQ* request_;
};
class X509 : public Scriptable<X509> {
public:
static const std::string class_name() {
return "entd.crypto.OpenSSL.X509";
};
// Certificate type.
//
// A certificate can be encoded in either DER or PEM. As PEM is already
// a text representation and other functions might require a binary
// representation, X509_FORMAT_PEM_TEXT can be used to input or output
// the certificate in the original textual representation instead of
// default binary hexadecimal text form.
typedef enum {
X509_FORMAT_UNKNOWN,
X509_FORMAT_PEM,
X509_FORMAT_PEM_TEXT,
X509_FORMAT_DER,
} CertificateType;
X509() : certificate_(NULL) {}
bool Initialize(::X509* certificate);
static bool InitializeTemplate(v8::Handle<v8::FunctionTemplate> ctor_t);
v8::Handle<v8::Value> Construct(const v8::Arguments& args);
v8::Handle<v8::Value> ToFormat(const v8::Arguments& args);
v8::Handle<v8::Value> Dispose(const v8::Arguments& args);
private:
CertificateType certificate_type_;
::X509* certificate_;
};
};
} // namespace crypto
} // namespace entd
#endif // ENTD_CRYPTO_OPENSSL_H_