]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
master key nonce
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 22 Aug 2016 06:16:27 +0000 (22:16 -0800)
committerKent Overstreet <kent.overstreet@gmail.com>
Mon, 22 Aug 2016 06:16:27 +0000 (22:16 -0800)
crypto.c
crypto.h
libbcache.c

index 3f68835f696816187a0fd344b1116747571de020..5bf569de3d37f43ad93bbd20faf8aabaee05a862 100644 (file)
--- a/crypto.c
+++ b/crypto.c
@@ -56,14 +56,18 @@ void derive_passphrase(struct bcache_key *key, const char *passphrase)
                die("scrypt error: %i", ret);
 }
 
-void disk_key_encrypt(struct bcache_disk_key *disk_key,
+void disk_key_encrypt(struct cache_sb *sb,
+                     struct bcache_disk_key *disk_key,
                      struct bcache_key *key)
 {
+       __le32 nonce[2];
        int ret;
 
+       memcpy(nonce, &sb->set_magic, sizeof(sb->set_magic));
+
        ret = crypto_stream_chacha20_xor((void *) disk_key,
                                         (void *) disk_key, sizeof(*disk_key),
-                                        (void *) &bch_master_key_nonce,
+                                        (void *) nonce,
                                         (void *) key);
        if (ret)
                die("chacha20 error: %i", ret);
index 335d63df777fdd9c759fe9cf3cc4a2228948e7ca..f4f7ff8e31b07dbbde4083b248e70e0ce271dc72 100644 (file)
--- a/crypto.h
+++ b/crypto.h
@@ -17,7 +17,8 @@ static const struct nonce bch_master_key_nonce        = BCACHE_MASTER_KEY_NONCE;
 
 char *read_passphrase(const char *);
 void derive_passphrase(struct bcache_key *, const char *);
-void disk_key_encrypt(struct bcache_disk_key *, struct bcache_key *);
+void disk_key_encrypt(struct cache_sb *sb, struct bcache_disk_key *,
+                     struct bcache_key *);
 void disk_key_init(struct bcache_disk_key *);
 
 #endif /* _CRYPTO_H */
index d57f26ae1f0c932c6fa384652ca4f563a5f1495f..81d70d1bc0fe790a7a64067a2af1c4cb25934918 100644 (file)
@@ -126,13 +126,15 @@ void bcache_format(struct dev_opts *devs, size_t nr_devs,
        SET_CACHE_SET_DATA_REPLICAS_HAVE(sb,    data_replicas);
        SET_CACHE_SET_ERROR_ACTION(sb,          on_error_action);
 
+       SET_CACHE_SET_STR_HASH_TYPE(sb, BCH_STR_HASH_SIPHASH);
+
        if (passphrase) {
                struct bcache_key key;
                struct bcache_disk_key disk_key;
 
                derive_passphrase(&key, passphrase);
                disk_key_init(&disk_key);
-               disk_key_encrypt(&disk_key, &key);
+               disk_key_encrypt(sb, &disk_key, &key);
 
                memcpy(sb->encryption_key, &disk_key, sizeof(disk_key));
                SET_CACHE_SET_ENCRYPTION_TYPE(sb, 1);