Commit graph

104 commits

Author SHA1 Message Date
Thomas Waldmann
e647360a0e crypto: better raise NotImplementedError if we have no id_hash 2022-03-22 20:07:33 +01:00
Thomas Waldmann
aff626119a crypto: cleanup, remove references to AES-GCM
A lot of people have concerns about AES-GCM.

Considering we can use AES-OCB, I guess we will
not use AES-GCM anyway, thus no need to talk
about it.
2022-03-22 20:07:33 +01:00
Thomas Waldmann
d3f069cb3b crypto: fix/update borg version comments
new AEAD crypto can be used with borg >= 1.3.
old crypto is used by attic and borg < 1.3.
2022-03-22 20:07:33 +01:00
Thomas Waldmann
cc3b5c062c remove algorithms package, move checksums module to borg package 2022-03-17 00:24:49 +01:00
Thomas Waldmann
0b3b78e139 dedup code: assert_type 2022-03-11 23:05:32 +01:00
Thomas Waldmann
b3e7e90c29 improve storage type handling, dedup code 2022-03-11 23:05:32 +01:00
Thomas Waldmann
a63614e35b move key type/storage constants to borg.constants 2022-03-11 23:05:32 +01:00
Thomas Waldmann
2e536bcbe2 borg key change-location 2022-03-11 23:05:32 +01:00
Thomas Waldmann
766d976f46 move passphrase related stuff to borg.helpers.passphrase 2022-03-11 21:05:42 +01:00
Thomas Waldmann
8011fade91 move key loading/saving code to FlexiKey 2022-03-11 21:05:42 +01:00
Thomas Waldmann
ad405892ca rename KeyfileKeyBase -> FlexiKeyBase
it is used as direct base class for both:
- RepoKey
- KeyfileKey
2022-03-11 21:05:42 +01:00
Thomas Waldmann
d42e6f2c41 key: uses key_cls.TYPES_ACCEPTABLE to dispatch
for now only a quite simple change, replacing the hardcoded PassphraseKey -> RepoKey dispatching.
2022-03-11 21:05:42 +01:00
Thomas Waldmann
37f237d3e0 remove PassphraseKey code and borg key migrate-to-repokey command
"passphrase" encryption mode repos can not be created since borg 1.0.
back then, users were advised to switch existing repos of that type
to repokey mode using the "borg key migrate-to-repokey" command.
that command is still available in borg 1.0, 1.1 and 1.2, but not
any more in borg >= 1.3.

while we still might see the PassphraseKey.TYPE byte in old repos,
it is handled by the RepoKey code since borg 1.0.
2022-03-06 15:26:18 +01:00
Thomas Waldmann
c63bd36a6c hmac.digest: some more minor optimizations
also some cosmetic changes:
- import hmac module
- use hmac.compare_digest
2022-03-05 21:29:42 +01:00
Thomas Waldmann
8317698f9b hmac_sha256: replace own cython wrapper code by hmac.digest python stdlib (since py38)
i measured performance of both: pretty much the same.
2022-03-05 21:22:24 +01:00
Thomas Waldmann
cbeef56454 pyupgrade --py38-plus ./**/*.py 2022-02-27 20:11:56 +01:00
Björn Ketelaars
73c426497f Fix build with LibreSSL
#6338 introduces regression when building with LibreSSL (3.5.0).

```
cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe -g -fPIC -O2 -pipe -g -O2 -pipe -g -O2 -pipe -fPIC -Isrc/borg/crypto -I/usr/local/include/python3.9 -c src/borg/crypto/low_level.c -o /tmp/ports/pobj/borgbackup-1.2.1/borg-eec359cf228caf00d9c72bde07bf939872e9d3fa/temp.openbsd-7.1-amd64-3.9/src/borg/crypto/low_level.o
src/borg/crypto/low_level.c:12439:48: error: use of undeclared identifier 'EVP_chacha20_poly1305'; did you mean 'EVP_aead_chacha20_poly1305'?
  __pyx_v_self->__pyx_base.__pyx_base.cipher = EVP_chacha20_poly1305;
                                               ^~~~~~~~~~~~~~~~~~~~~
                                               EVP_aead_chacha20_poly1305
/usr/include/openssl/evp.h:1161:17: note: 'EVP_aead_chacha20_poly1305' declared here
const EVP_AEAD *EVP_aead_chacha20_poly1305(void);
                ^
1 error generated.
```

Unfortunately `EVP_aead_chacha20_poly1305`, offered by LibreSSL, is not
a drop in replacement for `EVP_chacha20_poly1305`. More info on the
first can be found at https://man.openbsd.org/EVP_AEAD_CTX_init.3.
2022-02-26 22:03:00 +01:00
Thomas Waldmann
0f2a45b474 crypto: get rid of deprecated HMAC_* functions
These were deprecated in OpenSSL 3.0.
2022-02-26 20:20:11 +01:00
TW
8f945ea252
Merge pull request #6338 from ThomasWaldmann/drop-openssl10
drop openssl 1.0.x support
2022-02-26 20:18:56 +01:00
Thomas Waldmann
d1d3d1dfa4 crypto: remove support for: OpenSSL < 1.1.1, LibreSSL < 2.7.0
All these are unsupported since long.

Newer versions of LibreSSL have gained chacha20-poly1305 support,
but still lack aes256-ocb support.
Also they have the HMAC_CTX_new/free api now.

docs: openssl >= 1.1.1 is required now
anything older is out of support anyway.
2022-02-26 00:55:19 +01:00
James Buren
0d2fae6e7b src/borg/crypto/low_level.pyx: fix compiler warning
The generated source code was producing a compiler warning due to
the pointers differing in constness. The called function expects
a non-const pointer while the generated code produces a const pointer
via a cast. This changes the cast to drop 'const' to make the compiler
happy.
2022-02-25 16:42:24 -06:00
Thomas Waldmann
7edba854b2 use create=True when creating new keys, fixes #6036 2022-02-04 19:33:45 +01:00
Thomas Waldmann
d299b8bc9c KeyfileKeyBase: add create=False param to save method
If we create a new repo (and a new keyfile key, create=True),
there must not already exist a keyfile at the path/filename
where we want to write the new one.

In other use cases (e.g. if we overwrite a keyfile due
to the user changing their passphrase, create=False),
of course overwriting at the same path/fname is desired.
2022-02-04 19:33:45 +01:00
Graham Stockton
0724d4be4e
key export: print key if path is '-' or not given, fixes #6092 (#6093)
key export: print key if path is '-' or not given, fixes #6092

"borg key export [REPOSITORY]" now displays the key.
2022-01-20 02:55:52 +01:00
Thomas Waldmann
1dbe86a14e use blake2b from hashlib 2021-01-28 18:00:00 +01:00
Matthew Glazar
5a32de918e allow key-import+BORG_KEY_FILE to create key files
Running 'borg key import' on a keyfile repository with the BORG_KEY_FILE
environment variable set works correctly if the BORG_KEY_FILE file
already exists. However, the command crashes if the BORG_KEY_FILE file
does not exist:

    $ BORG_KEY_FILE=newborgkey borg key import /home/strager/borg-backups/straglum borgkey
    Local Exception
    Traceback (most recent call last):
      [snip]
      File "[snip]/borg/crypto/key.py", line 713, in sanity_check
        with open(filename, 'rb') as fd:
    FileNotFoundError: [Errno 2] No such file or directory: '[snip]/newborgkey'

    Platform: Linux straglum 5.0.0-25-generic #26~18.04.1-Ubuntu SMP Thu Aug 1 13:51:02 UTC 2019 x86_64
    Linux: debian buster/sid
    Borg: 1.1.11  Python: CPython 3.7.7 msgpack: 0.5.6
    PID: 15306  CWD: /home/strager/Projects/borg
    sys.argv: ['[snip]/borg', 'key', 'import', '/home/strager/borg-backups/straglum', 'borgkey']
    SSH_ORIGINAL_COMMAND: None

Make 'borg key import' not require the BORG_KEY_FILE file to already
exist.

This commit does not change the behavior of 'borg key import' without
BORG_KEY_FILE. This commit also does not change the behavior of 'borg
key import' on a repokey repository.
2020-06-04 19:29:15 -07:00
Matthew Glazar
538d3245cd refactor key file searching functions
I want to change the key lookup logic for the 'borg key import' command.
Extract methods out of the KeyfileKey.find_key and
KeyfileKey.get_new_target to make this future change possible without
duplicating code.

This commit should not change behavior.
2020-06-03 19:02:33 -07:00
Björn Ketelaars
a87f38e35f crypto: LibreSSL has HMAC_CTX_free and *HMAC_CTX_new
While here improve indentation (use 4 spaces instead of 3).
2019-02-28 07:06:45 +01:00
Björn Ketelaars
9278920bd5 1.2.0a: fix LibreSSL support, see #4403 2019-02-26 21:24:28 +01:00
Thomas Waldmann
a65cefb7bb bump API_VERSIONs to 1.2_xx 2019-02-24 19:45:41 +01:00
motwok
6fde90b7f8
Merge pull request #1 from borgbackup/master
Update form upstream to fork
2018-10-29 21:39:01 +01:00
Thomas Waldmann
10cdadb2f8 flake8: fix F841 2018-10-29 12:36:03 +01:00
Emmo Emminghaus
f8ef6af454 hashindex: clean void* arithmetic up #2677
lowlevel: clean void* arithmetic up
unpack: repalce nonstandard false with 0
2018-10-24 21:40:05 +02:00
Łukasz Stelmach
548355125e read a passphrase from a file descriptor
Read a passpharase from a file descriptor specified in the
BORG_PASSPHRASE_FD environment variable.
2018-09-21 09:11:39 +02:00
Thomas Waldmann
3c173cc03b wrap msgpack, fixes #3632, fixes #2738
wrap msgpack to avoid future upstream api changes making troubles
or that we would have to globally spoil our code with extra params.

make sure the packing is always with use_bin_type=False,
thus generating "old" msgpack format (as borg always did) from
bytes objects.

make sure the unpacking is always with raw=True,
thus generating bytes objects.

note:

safe unicode encoding/decoding for some kinds of data types is done in Item
class (see item.pyx), so it is enough if we care for bytes objects on the
msgpack level.

also wrap exception handling, so borg code can catch msgpack specific
exceptions even if the upstream msgpack code raises way too generic
exceptions typed Exception, TypeError or ValueError.
We use own Exception classes for this, upstream classes are deprecated
2018-08-06 17:32:55 +02:00
Thomas Waldmann
dc78fcf193 improve getpass user experience, see #3689
if interactive passphrase query fails and the env vars are not set,
show a clear error message about this.

users often do 'BORG_PASSPHRASE=secret', forgetting the 'export'.
or they use sudo (and not sudo -E).
in both cases, the env vars won't be available for the borg process.
2018-03-20 21:21:23 +01:00
Thomas Waldmann
b2ffb8bd65 make the C compiler happy, fixes #3490
fix a false positive compiler warning about olen being referenced
before assignment (which is not true, see comments in #3490).
2018-03-03 04:07:25 +01:00
Niels Ole Salscheider
cb3b38ee7f Fix build with LibreSSL 2017-11-05 16:29:37 +01:00
Thomas Waldmann
7136e2c93c fix crash with relative BORG_KEY_FILE, fixes #3197 2017-10-20 21:13:11 +02:00
Marian Beermann
b00179ff78 init: fix wrong encryption choices in command line parser 2017-10-08 12:29:03 +02:00
Thomas Waldmann
6a6fd31804 use prepared env for calling BORG_PASSCOMMAND, fixes #3050 2017-09-25 04:36:06 +02:00
Marian Beermann
b8793d9577 keymanager: don't depend on optional readline module 2017-08-28 10:15:38 +02:00
Marian Beermann
e57dd4bc9e crypto: avoid bad prototype codegen from cython
(-Wstrict-prototypes, Cyton forgets a "void")
2017-07-29 12:28:33 +02:00
Marian Beermann
630e45b742 crypto: fix wrong use of const 2017-07-29 12:28:06 +02:00
Marian Beermann
d5ee16d676 crypto: remove AES-GCM 2017-07-29 12:22:11 +02:00
Thomas Waldmann
dc4abffbc0 remove unused bytes16 conversions 2017-07-27 23:48:30 +02:00
Thomas Waldmann
63ebfc140b remove unused extract_nonce method 2017-07-27 23:48:30 +02:00
Thomas Waldmann
e7228fa3a4 cosmetic: move some lines 2017-07-27 23:48:30 +02:00
Thomas Waldmann
68ef5e8a4b allow different MACs, implement blake2b MAC 2017-07-27 23:48:30 +02:00
Thomas Waldmann
945b5e25e2 dispatch to dummy blake2b ciphersuite 2017-07-27 23:48:30 +02:00