110 lines
3.1 KiB
C
110 lines
3.1 KiB
C
|
/**
|
||
|
* 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."
|
||
|
*
|
||
|
* @file encryptStream.h
|
||
|
* @author drose
|
||
|
* @date 2004-09-01
|
||
|
*/
|
||
|
|
||
|
#ifndef ENCRYPTSTREAM_H
|
||
|
#define ENCRYPTSTREAM_H
|
||
|
|
||
|
#include "dtoolbase.h"
|
||
|
|
||
|
// This module is not compiled if OpenSSL is not available.
|
||
|
#ifdef HAVE_OPENSSL
|
||
|
|
||
|
#include "encryptStreamBuf.h"
|
||
|
|
||
|
/**
|
||
|
* An input stream object that uses OpenSSL to decrypt the input from another
|
||
|
* source stream on-the-fly.
|
||
|
*
|
||
|
* Attach an IDecryptStream to an existing istream that provides encrypted
|
||
|
* data, as generated by an OEncryptStream, and read the corresponding
|
||
|
* unencrypted data from the IDecryptStream.
|
||
|
*
|
||
|
* Seeking is not supported.
|
||
|
*/
|
||
|
class EXPCL_DTOOL_PRC IDecryptStream : public std::istream {
|
||
|
PUBLISHED:
|
||
|
INLINE IDecryptStream();
|
||
|
INLINE explicit IDecryptStream(std::istream *source, bool owns_source,
|
||
|
const std::string &password);
|
||
|
|
||
|
#if _MSC_VER >= 1800
|
||
|
INLINE IDecryptStream(const IDecryptStream ©) = delete;
|
||
|
#endif
|
||
|
|
||
|
INLINE IDecryptStream &open(std::istream *source, bool owns_source,
|
||
|
const std::string &password);
|
||
|
INLINE IDecryptStream &close();
|
||
|
|
||
|
INLINE const std::string &get_algorithm() const;
|
||
|
INLINE int get_key_length() const;
|
||
|
INLINE int get_iteration_count() const;
|
||
|
|
||
|
MAKE_PROPERTY(algorithm, get_algorithm);
|
||
|
MAKE_PROPERTY(key_length, get_key_length);
|
||
|
MAKE_PROPERTY(iteration_count, get_iteration_count);
|
||
|
|
||
|
public:
|
||
|
bool read_magic(const char *magic, size_t size);
|
||
|
|
||
|
private:
|
||
|
EncryptStreamBuf _buf;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* An input stream object that uses OpenSSL to encrypt data to another
|
||
|
* destination stream on-the-fly.
|
||
|
*
|
||
|
* Attach an OEncryptStream to an existing ostream that will accept encrypted
|
||
|
* data, and write your unencrypted source data to the OEncryptStream.
|
||
|
*
|
||
|
* Seeking is not supported.
|
||
|
*/
|
||
|
class EXPCL_DTOOL_PRC OEncryptStream : public std::ostream {
|
||
|
PUBLISHED:
|
||
|
INLINE OEncryptStream();
|
||
|
INLINE explicit OEncryptStream(std::ostream *dest, bool owns_dest,
|
||
|
const std::string &password);
|
||
|
|
||
|
#if _MSC_VER >= 1800
|
||
|
INLINE OEncryptStream(const OEncryptStream ©) = delete;
|
||
|
#endif
|
||
|
|
||
|
INLINE OEncryptStream &open(std::ostream *dest, bool owns_dest,
|
||
|
const std::string &password);
|
||
|
INLINE OEncryptStream &close();
|
||
|
|
||
|
public:
|
||
|
INLINE const std::string &get_algorithm() const;
|
||
|
INLINE int get_key_length() const;
|
||
|
INLINE int get_iteration_count() const;
|
||
|
|
||
|
PUBLISHED:
|
||
|
INLINE void set_algorithm(const std::string &algorithm);
|
||
|
INLINE void set_key_length(int key_length);
|
||
|
INLINE void set_iteration_count(int iteration_count);
|
||
|
|
||
|
MAKE_PROPERTY(algorithm, get_algorithm, set_algorithm);
|
||
|
MAKE_PROPERTY(key_length, get_key_length, set_key_length);
|
||
|
MAKE_PROPERTY(iteration_count, get_iteration_count, set_iteration_count);
|
||
|
|
||
|
private:
|
||
|
EncryptStreamBuf _buf;
|
||
|
};
|
||
|
|
||
|
#include "encryptStream.I"
|
||
|
|
||
|
#endif // HAVE_OPENSSL
|
||
|
|
||
|
|
||
|
#endif
|