aes_encryptor.h
Go to the documentation of this file.
1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2017, Open Source Robotics Foundation
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of Willow Garage, Inc. nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34 
35 #ifndef ROSBAG_AES_ENCRYPTION_H
36 #define ROSBAG_AES_ENCRYPTION_H
37 
38 #include "rosbag/encryptor.h"
39 
40 #ifndef _WIN32
41  #include <openssl/aes.h>
42 
43 namespace rosbag {
44 
45 class AesCbcEncryptor : public EncryptorBase
46 {
47 public:
48  static const std::string GPG_USER_FIELD_NAME;
49  static const std::string ENCRYPTED_KEY_FIELD_NAME;
50 
51 public:
52  AesCbcEncryptor() { }
53  ~AesCbcEncryptor() { }
54 
55  void initialize(Bag const& bag, std::string const& gpg_key_user);
56  uint32_t encryptChunk(const uint32_t chunk_size, const uint64_t chunk_data_pos, ChunkedFile& file);
57  void decryptChunk(ChunkHeader const& chunk_header, Buffer& decrypted_chunk, ChunkedFile& file) const;
58  void addFieldsToFileHeader(ros::M_string& header_fields) const;
59  void readFieldsFromFileHeader(ros::M_string const& header_fields);
60  void writeEncryptedHeader(boost::function<void(ros::M_string const&)>, ros::M_string const& header_fields, ChunkedFile&);
61  bool readEncryptedHeader(boost::function<bool(ros::Header&)>, ros::Header& header, Buffer& header_buffer, ChunkedFile&);
62 
63 private:
64  void buildSymmetricKey();
65 
66 private:
67  // User name of GPG key used for symmetric key encryption
68  std::string gpg_key_user_;
69  // Symmetric key for encryption/decryption
70  std::basic_string<unsigned char> symmetric_key_;
71  // Encrypted symmetric key
72  std::string encrypted_symmetric_key_;
73  // AES keys for encryption/decryption
74  AES_KEY aes_encrypt_key_;
75  AES_KEY aes_decrypt_key_;
76 };
77 }
78 #endif
79 
80 #endif
rosbag::ChunkedFile
ChunkedFile reads and writes files which contain interleaved chunks of compressed and uncompressed da...
Definition: chunked_file.h:83
rosbag::AesCbcEncryptor::decryptChunk
void decryptChunk(ChunkHeader const &chunk_header, Buffer &decrypted_chunk, ChunkedFile &file) const
Decrypt chunk.
Definition: aes_encryptor.cpp:251
rosbag::Bag
Definition: bag.h:131
rosbag::AesCbcEncryptor::aes_decrypt_key_
AES_KEY aes_decrypt_key_
Definition: aes_encryptor.h:139
rosbag::EncryptorBase
Definition: encryptor.h:86
ros::Header
rosbag::AesCbcEncryptor::AesCbcEncryptor
AesCbcEncryptor()
Definition: aes_encryptor.h:116
rosbag::Buffer
Definition: buffer.h:75
rosbag::AesCbcEncryptor::~AesCbcEncryptor
~AesCbcEncryptor()
Definition: aes_encryptor.h:117
rosbag::ChunkHeader
Definition: structures.h:101
rosbag::AesCbcEncryptor::GPG_USER_FIELD_NAME
static const std::string GPG_USER_FIELD_NAME
Definition: aes_encryptor.h:112
rosbag::AesCbcEncryptor::buildSymmetricKey
void buildSymmetricKey()
Definition: aes_encryptor.cpp:345
rosbag::AesCbcEncryptor::encryptChunk
uint32_t encryptChunk(const uint32_t chunk_size, const uint64_t chunk_data_pos, ChunkedFile &file)
Encrypt chunk.
Definition: aes_encryptor.cpp:228
rosbag::AesCbcEncryptor::ENCRYPTED_KEY_FIELD_NAME
static const std::string ENCRYPTED_KEY_FIELD_NAME
Definition: aes_encryptor.h:113
rosbag::AesCbcEncryptor::initialize
void initialize(Bag const &bag, std::string const &gpg_key_user)
Initialize encryptor.
Definition: aes_encryptor.cpp:207
rosbag::AesCbcEncryptor::readEncryptedHeader
bool readEncryptedHeader(boost::function< bool(ros::Header &)>, ros::Header &header, Buffer &header_buffer, ChunkedFile &)
Read encrypted header from bag file.
Definition: aes_encryptor.cpp:317
rosbag::AesCbcEncryptor::symmetric_key_
std::basic_string< unsigned char > symmetric_key_
Definition: aes_encryptor.h:134
rosbag::AesCbcEncryptor
Definition: aes_encryptor.h:77
rosbag::AesCbcEncryptor::addFieldsToFileHeader
void addFieldsToFileHeader(ros::M_string &header_fields) const
Add encryptor information to bag file header.
Definition: aes_encryptor.cpp:274
rosbag::AesCbcEncryptor::gpg_key_user_
std::string gpg_key_user_
Definition: aes_encryptor.h:132
rosbag::AesCbcEncryptor::readFieldsFromFileHeader
void readFieldsFromFileHeader(ros::M_string const &header_fields)
Read encryptor information from bag file header.
Definition: aes_encryptor.cpp:280
rosbag
Definition: aes_encryptor.h:43
rosbag::AesCbcEncryptor::encrypted_symmetric_key_
std::string encrypted_symmetric_key_
Definition: aes_encryptor.h:136
header
const std::string header
rosbag::AesCbcEncryptor::aes_encrypt_key_
AES_KEY aes_encrypt_key_
Definition: aes_encryptor.h:138
encryptor.h
rosbag::AesCbcEncryptor::writeEncryptedHeader
void writeEncryptedHeader(boost::function< void(ros::M_string const &)>, ros::M_string const &header_fields, ChunkedFile &)
Write encrypted header to bag file.
Definition: aes_encryptor.cpp:293
ros::M_string
std::map< std::string, std::string > M_string


rosbag_storage
Author(s): Dirk Thomas , Jacob Perron
autogenerated on Sat Sep 14 2024 02:59:52