File: init.cc

package info (click to toggle)
signalbackup-tools 20250313.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 3,752 kB
  • sloc: cpp: 47,042; sh: 477; ansic: 399; ruby: 19; makefile: 3
file content (63 lines) | stat: -rw-r--r-- 2,215 bytes parent folder | download
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
/*
  Copyright (C) 2019-2024  Selwin van Dijk

  This file is part of signalbackup-tools.

  signalbackup-tools is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  signalbackup-tools is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with signalbackup-tools.  If not, see <https://www.gnu.org/licenses/>.
*/

#include "fileencryptor.ih"

bool FileEncryptor::init(unsigned char const *salt, uint64_t salt_size, unsigned char const *iv, uint64_t iv_size)
{
  // set salt;
  d_salt_size = salt_size;
  d_salt = new unsigned char[d_salt_size];
  std::memcpy(d_salt, salt, d_salt_size);

  // set iv;
  d_iv_size = iv_size;
  d_iv = new unsigned char[d_iv_size];
  std::memcpy(d_iv, iv, d_iv_size);

  d_counter = fourBytesToUint(d_iv);

  // std::cout << "IV  : " << bepaald::bytesToHexString(d_iv, d_iv_size) << std::endl;
  // std::cout << "SALT: " << bepaald::bytesToHexString(d_salt, d_salt_size) << std::endl;

  // generate backup key from salt and passphrase
  if (!getBackupKey(d_passphrase))
  {
    Logger::error("Failed to generate backup key from passphrase");
    return false;
  }

  // generate mackey and cipher from backupkey
  if (!getCipherAndMac(32, 64))
  {
    Logger::error("Failed to generate mackey and cipher from backupkey");
    return false;
  }

  DEBUGOUT("IV: ", bepaald::bytesToHexString(d_iv, d_iv_size));
  DEBUGOUT("SALT: ", bepaald::bytesToHexString(d_salt, d_salt_size));
  DEBUGOUT("BACKUPKEY: ", bepaald::bytesToHexString(d_backupkey, d_backupkey_size));
  DEBUGOUT("CIPHERKEY: ", bepaald::bytesToHexString(d_cipherkey, d_cipherkey_size));
  DEBUGOUT("MACKEY: ", bepaald::bytesToHexString(d_mackey, d_mackey_size));
  DEBUGOUT("BACKUPFILE VERSION: ", d_backupfileversion);
  DEBUGOUT("COUNTER: ", d_counter);

  d_ok = true;
  return d_ok;
}