File: crypto.hpp

package info (click to toggle)
sleuthkit 4.12.1%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 18,608 kB
  • sloc: ansic: 143,795; cpp: 52,225; java: 37,892; xml: 2,416; python: 1,076; perl: 874; makefile: 439; sh: 184
file content (64 lines) | stat: -rw-r--r-- 1,798 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#pragma once

/*
 * The Sleuth Kit
 *
 * Brian Carrier [carrier <at> sleuthkit [dot] org]
 * Copyright (c) 2018-2019 BlackBag Technologies.  All Rights reserved
 *
 * This software is distributed under the Common Public License 1.0
 */

/**
 * This is currently being used only by APFS
 */

#include "../base/tsk_base.h"

#ifdef HAVE_LIBOPENSSL
#include <openssl/evp.h>


#include <memory>
#include <mutex>

class aes_xts_decryptor {
  EVP_CIPHER_CTX *_ctx{};
  size_t _block_size{};

#ifdef TSK_MULTITHREAD_LIB
  std::mutex _ctx_lock{};
#endif

 public:
  enum AES_MODE { AES_128, AES_256 };

  aes_xts_decryptor(AES_MODE mode, const uint8_t *key1, const uint8_t *key2,
                    size_t block_size) noexcept;

  // Not copyable
  aes_xts_decryptor(const aes_xts_decryptor &) noexcept = delete;
  aes_xts_decryptor &operator=(const aes_xts_decryptor) noexcept = delete;

  ~aes_xts_decryptor() noexcept;

  int decrypt_buffer(void *buffer, size_t length, uint64_t position) noexcept;
  int decrypt_block(void *buffer, size_t length, uint64_t block) noexcept;
};

std::unique_ptr<uint8_t[]> pbkdf2_hmac_sha256(const std::string &password,
                                              const void *salt, size_t salt_len,
                                              int iterations,
                                              size_t key_len) noexcept;

std::unique_ptr<uint8_t[]> rfc3394_key_unwrap(
    const uint8_t *key, size_t key_len, const void *input, size_t input_len,
    const void *iv = nullptr) noexcept;

std::unique_ptr<uint8_t[]> hash_buffer_md5(const void *input,
                                           size_t len) noexcept;

std::unique_ptr<uint8_t[]> hash_buffer_sha256(const void *input,
                                              size_t len) noexcept;

#endif