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 
46 {
47 public:
48  static const std::string GPG_USER_FIELD_NAME;
49  static const std::string ENCRYPTED_KEY_FIELD_NAME;
50 
51 public:
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
73  // AES keys for encryption/decryption
76 };
77 }
78 #endif
79 
80 #endif
ChunkedFile reads and writes files which contain interleaved chunks of compressed and uncompressed da...
Definition: chunked_file.h:51
void initialize(Bag const &bag, std::string const &gpg_key_user)
Initialize encryptor.
static const std::string GPG_USER_FIELD_NAME
Definition: aes_encryptor.h:48
std::basic_string< unsigned char > symmetric_key_
Definition: aes_encryptor.h:70
std::map< std::string, std::string > M_string
bool readEncryptedHeader(boost::function< bool(ros::Header &)>, ros::Header &header, Buffer &header_buffer, ChunkedFile &)
Read encrypted header from bag file.
void decryptChunk(ChunkHeader const &chunk_header, Buffer &decrypted_chunk, ChunkedFile &file) const
Decrypt chunk.
uint32_t encryptChunk(const uint32_t chunk_size, const uint64_t chunk_data_pos, ChunkedFile &file)
Encrypt chunk.
std::string encrypted_symmetric_key_
Definition: aes_encryptor.h:72
static const std::string ENCRYPTED_KEY_FIELD_NAME
Definition: aes_encryptor.h:49
const std::string header
void writeEncryptedHeader(boost::function< void(ros::M_string const &)>, ros::M_string const &header_fields, ChunkedFile &)
Write encrypted header to bag file.
void addFieldsToFileHeader(ros::M_string &header_fields) const
Add encryptor information to bag file header.
void readFieldsFromFileHeader(ros::M_string const &header_fields)
Read encryptor information from bag file header.


rosbag_storage
Author(s): Dirk Thomas
autogenerated on Mon Feb 28 2022 23:33:55