├── .clang-tidy ├── .cmake-format.py ├── .github └── workflows │ ├── ccpp.yml │ └── release.yml ├── .gitignore ├── CMakeLists.txt ├── LICENSE.md ├── README.md ├── _clang-format ├── build.py ├── cmake-modules ├── GetGitRevisionDescription.cmake └── GetGitRevisionDescription.cmake.in ├── docs ├── design.md ├── long_name.md └── usage.md ├── format.sh ├── main.cpp ├── overlay_triplets ├── arm64-linux.cmake ├── arm64-osx.cmake ├── x64-freebsd.cmake ├── x64-linux.cmake ├── x64-osx.cmake └── x64-windows-static-md.cmake ├── protos └── params.proto ├── securefs.manifest ├── sources ├── apple_xattr_workaround.cpp ├── apple_xattr_workaround.h ├── btree_dir.cpp ├── btree_dir.h ├── commands.cpp ├── commands.h ├── common_platform.cpp ├── constants.h ├── crypto.cpp ├── crypto.h ├── exceptions.cpp ├── exceptions.h ├── file_table_v2.cpp ├── file_table_v2.h ├── files.cpp ├── files.h ├── full_format.cpp ├── full_format.h ├── fuse2_workaround.cpp ├── fuse2_workaround.h ├── fuse_high_level_ops_base.cpp ├── fuse_high_level_ops_base.h ├── fuse_tracer_v2.cpp ├── fuse_tracer_v2.h ├── git-version.cpp.in ├── git-version.h ├── lite_format.cpp ├── lite_format.h ├── lite_long_name_lookup_table.cpp ├── lite_long_name_lookup_table.h ├── lite_stream.cpp ├── lite_stream.h ├── lock_enabled.cpp ├── lock_enabled.h ├── lock_guard.h ├── logger.cpp ├── logger.h ├── mystring.cpp ├── mystring.h ├── myutils.cpp ├── myutils.h ├── object.h ├── params_io.cpp ├── params_io.h ├── platform.h ├── sqlite_helper.cpp ├── sqlite_helper.h ├── stat_workaround.h ├── streams.cpp ├── streams.h ├── tags.h ├── thread_local.cpp ├── thread_local.h ├── unix.cpp ├── win.cpp ├── xattr_name.cpp └── xattr_name.h ├── test ├── main.cpp ├── reference │ ├── 1 │ │ ├── 55 │ │ │ └── 3e6e3d60c3 │ │ │ │ ├── a3584ebf4435785a575b8d69bfaae8f61436db6c8108e86cd74c │ │ │ │ └── a3584ebf4435785a575b8d69bfaae8f61436db6c8108e86cd74c.meta │ │ ├── 64 │ │ │ └── d1cea47bb1 │ │ │ │ ├── a8bbc1cc9aa511044799cc68fd292d239d901356fd5dd6b9beae │ │ │ │ └── a8bbc1cc9aa511044799cc68fd292d239d901356fd5dd6b9beae.meta │ │ ├── 79 │ │ │ └── 9c0e508671 │ │ │ │ ├── bea38900915cf37ec0010ff6bf1686a11458ce890c2db6180dea │ │ │ │ └── bea38900915cf37ec0010ff6bf1686a11458ce890c2db6180dea.meta │ │ ├── 80 │ │ │ └── a8931f7b02 │ │ │ │ ├── 0ebff91b72e3dd6c28ef12bd4ea1d433b6b29493ecba7c5ac708 │ │ │ │ └── 0ebff91b72e3dd6c28ef12bd4ea1d433b6b29493ecba7c5ac708.meta │ │ ├── .securefs.argon2id.KEYFILE.json │ │ ├── .securefs.argon2id.KEYFILE2.json │ │ ├── .securefs.argon2id.PASSWORD.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.scrypt.KEYFILE.json │ │ ├── .securefs.scrypt.KEYFILE2.json │ │ ├── .securefs.scrypt.PASSWORD.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE2.json │ │ ├── 00 │ │ │ └── 0000000000 │ │ │ │ ├── 0000000000000000000000000000000000000000000000000000 │ │ │ │ └── 0000000000000000000000000000000000000000000000000000.meta │ │ ├── 02 │ │ │ └── 973dd64a26 │ │ │ │ ├── f7486fced1b65807597e4a5ae0e81f4dd09659c689e631467e80 │ │ │ │ └── f7486fced1b65807597e4a5ae0e81f4dd09659c689e631467e80.meta │ │ ├── e4 │ │ │ └── 6d47343dae │ │ │ │ ├── 9c204bc07845b55a916d8df0fdeaa39ac1e800377ab44f3347ea │ │ │ │ └── 9c204bc07845b55a916d8df0fdeaa39ac1e800377ab44f3347ea.meta │ │ ├── ea │ │ │ └── 12103e809b │ │ │ │ ├── 7b9c2c484734ad95a792e07eb0707ee5fd429950ea432fdffdf6 │ │ │ │ └── 7b9c2c484734ad95a792e07eb0707ee5fd429950ea432fdffdf6.meta │ │ └── f9 │ │ │ └── 41a1d0a6d4 │ │ │ ├── 11cca6dce3505b141c1bfa9e2c2a647c5dcb3c236ecb07c0153e │ │ │ └── 11cca6dce3505b141c1bfa9e2c2a647c5dcb3c236ecb07c0153e.meta │ ├── 2 │ │ ├── 28 │ │ │ ├── dcac7797555f58496235df82ad988cca7b7427eb2e090dd8cec69122157639 │ │ │ └── dcac7797555f58496235df82ad988cca7b7427eb2e090dd8cec69122157639.meta │ │ ├── 29 │ │ │ ├── 607732f65f8dbbf2a8054906601bd1539f9d1fe0a351f51368f48f6a492323 │ │ │ └── 607732f65f8dbbf2a8054906601bd1539f9d1fe0a351f51368f48f6a492323.meta │ │ ├── 31 │ │ │ ├── 9ad3f2da476c5d0cfa82e2f6b6221ae775ff684af9efaa57c320492fff512d │ │ │ └── 9ad3f2da476c5d0cfa82e2f6b6221ae775ff684af9efaa57c320492fff512d.meta │ │ ├── 52 │ │ │ ├── 4f94d5052bd9e2be2598c396e42eacf72fcdad9f2519446f329f194904bcf2 │ │ │ └── 4f94d5052bd9e2be2598c396e42eacf72fcdad9f2519446f329f194904bcf2.meta │ │ ├── 58 │ │ │ ├── cc1a68d292b31e2102dc2812d12cdfe25f2299de3fd01dd2243121a1589ab2 │ │ │ └── cc1a68d292b31e2102dc2812d12cdfe25f2299de3fd01dd2243121a1589ab2.meta │ │ ├── 60 │ │ │ ├── 68410310f845b7be120a579c3ab3bdc2608b063785e9dda5a0ad6c12218f65 │ │ │ └── 68410310f845b7be120a579c3ab3bdc2608b063785e9dda5a0ad6c12218f65.meta │ │ ├── 86 │ │ │ ├── 431c4b593922269b7077479ae3151180c1e750bfeff7c0e19629cc5a703f24 │ │ │ └── 431c4b593922269b7077479ae3151180c1e750bfeff7c0e19629cc5a703f24.meta │ │ ├── .securefs.argon2id.KEYFILE.json │ │ ├── .securefs.argon2id.KEYFILE2.json │ │ ├── .securefs.argon2id.PASSWORD.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.scrypt.KEYFILE.json │ │ ├── .securefs.scrypt.KEYFILE2.json │ │ ├── .securefs.scrypt.PASSWORD.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE2.json │ │ ├── 00 │ │ │ ├── 00000000000000000000000000000000000000000000000000000000000000 │ │ │ └── 00000000000000000000000000000000000000000000000000000000000000.meta │ │ └── db │ │ │ ├── a9f4fba8fe28d97ff279418fe5b81d16e832761d6868ac7f42880148478701 │ │ │ └── a9f4fba8fe28d97ff279418fe5b81d16e832761d6868ac7f42880148478701.meta │ ├── 3 │ │ ├── 53 │ │ │ ├── d5d60698ea4829f7fbcce68b88fd8c3449057443b9f797116cc984c7b7aaf9 │ │ │ └── d5d60698ea4829f7fbcce68b88fd8c3449057443b9f797116cc984c7b7aaf9.meta │ │ ├── 65 │ │ │ ├── b61d19eee188fed8545a3077be2077b1a65bc1f3cc28e38644b89f46623f8c │ │ │ └── b61d19eee188fed8545a3077be2077b1a65bc1f3cc28e38644b89f46623f8c.meta │ │ ├── 73 │ │ │ ├── 1546106778969180046dff123d936ed498f4a470805a6d147edb253ffff087 │ │ │ └── 1546106778969180046dff123d936ed498f4a470805a6d147edb253ffff087.meta │ │ ├── 86 │ │ │ ├── c5f6df08cd251451207da09c21c7dde98a19e6fb4eeda8e71ca37a44d1fa1a │ │ │ └── c5f6df08cd251451207da09c21c7dde98a19e6fb4eeda8e71ca37a44d1fa1a.meta │ │ ├── .securefs.argon2id.KEYFILE.json │ │ ├── .securefs.argon2id.KEYFILE2.json │ │ ├── .securefs.argon2id.PASSWORD.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.scrypt.KEYFILE.json │ │ ├── .securefs.scrypt.KEYFILE2.json │ │ ├── .securefs.scrypt.PASSWORD.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE2.json │ │ ├── 00 │ │ │ ├── 00000000000000000000000000000000000000000000000000000000000000 │ │ │ └── 00000000000000000000000000000000000000000000000000000000000000.meta │ │ ├── 09 │ │ │ ├── fb9c4a304ed354dcae1aa09edf4359ebf9bf0676dfb4384042c0499c866fdb │ │ │ └── fb9c4a304ed354dcae1aa09edf4359ebf9bf0676dfb4384042c0499c866fdb.meta │ │ ├── 3a │ │ │ ├── 01ce729da045156bbb64f5f3647727d83eff81101d422d09d166b167582c77 │ │ │ ├── 01ce729da045156bbb64f5f3647727d83eff81101d422d09d166b167582c77.meta │ │ │ ├── b0a967253e4495609783b176f8fe0f9190785e3ac7c418bf1514d1d3491891 │ │ │ └── b0a967253e4495609783b176f8fe0f9190785e3ac7c418bf1514d1d3491891.meta │ │ └── 5c │ │ │ ├── a180717a176b82b8dff21b5e0fe5382b38ed9bc6e69a61e9ecc5184e94386d │ │ │ └── a180717a176b82b8dff21b5e0fe5382b38ed9bc6e69a61e9ecc5184e94386d.meta │ ├── 4 │ │ ├── .securefs.argon2id.KEYFILE.json │ │ ├── .securefs.argon2id.KEYFILE2.json │ │ ├── .securefs.argon2id.PASSWORD.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.scrypt.KEYFILE.json │ │ ├── .securefs.scrypt.KEYFILE2.json │ │ ├── .securefs.scrypt.PASSWORD.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE2.json │ │ ├── A2GUH632MZF6S8TQ9RQSSRDZRYT3DS5UDYDN86CM │ │ ├── A8QMWPP32A5PPV7K5PCM52AQ93USB2XVIHVNDNRC9HKN85KJG9WQKDXF7XAA │ │ │ └── QRSZ258MAEE33ZAMKSG7TWZETPK2I627APRS8JA │ │ ├── AVJJUV8EC2NXD9HGCTBVKT9R8V68KZEQVR8UA │ │ └── VGW4SA2UUXC93ER6TQ9AH2T5Q45SF5AGQ5NS │ │ │ ├── 48IN4KXGCMW9N7G7HNHBBQ829YTHM2NJD64AVSVJR62T3D9MU89UZHUTVDKWIAIHVVBS │ │ │ └── 53ZF35HVRFJSWA2KFWTV58FC3PYWPDSNBQCNXJA │ │ │ └── T9DFT2V577BZRS4STS2IDWNW96ZX8QWZSCNAY │ ├── 1-padded │ │ ├── 18 │ │ │ └── b6cfc98e0e │ │ │ │ ├── ed208c1a59ca9450b419d482e44695c01c12ab1755853598d729 │ │ │ │ └── ed208c1a59ca9450b419d482e44695c01c12ab1755853598d729.meta │ │ ├── 45 │ │ │ └── 1fb0a43294 │ │ │ │ ├── a8a12782636708f6d1c08bfb9bcac144803137b469751baae392 │ │ │ │ └── a8a12782636708f6d1c08bfb9bcac144803137b469751baae392.meta │ │ ├── 89 │ │ │ └── c82a556714 │ │ │ │ ├── 7bb29e1841a557fe34cddc17b0d4b136e67106d3556819e15f7a │ │ │ │ └── 7bb29e1841a557fe34cddc17b0d4b136e67106d3556819e15f7a.meta │ │ ├── .securefs.argon2id.KEYFILE.json │ │ ├── .securefs.argon2id.KEYFILE2.json │ │ ├── .securefs.argon2id.PASSWORD.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.scrypt.KEYFILE.json │ │ ├── .securefs.scrypt.KEYFILE2.json │ │ ├── .securefs.scrypt.PASSWORD.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE2.json │ │ ├── 00 │ │ │ └── 0000000000 │ │ │ │ ├── 0000000000000000000000000000000000000000000000000000 │ │ │ │ └── 0000000000000000000000000000000000000000000000000000.meta │ │ ├── 09 │ │ │ └── aa7d29959e │ │ │ │ ├── e43bfa8ed54be77746fafbf0c147d5dcd26eb84e2356015ca91b │ │ │ │ └── e43bfa8ed54be77746fafbf0c147d5dcd26eb84e2356015ca91b.meta │ │ ├── 3a │ │ │ └── 8b5bb07eb1 │ │ │ │ ├── 0d14e937af4ad1812e4709ee5c6b3cca2eb0dc31a89e336d8b8e │ │ │ │ └── 0d14e937af4ad1812e4709ee5c6b3cca2eb0dc31a89e336d8b8e.meta │ │ ├── 4c │ │ │ └── bc6a856542 │ │ │ │ ├── 8b893ac25bdb37dcbd35b5753a977af00d3a6c036acac8897c0f │ │ │ │ └── 8b893ac25bdb37dcbd35b5753a977af00d3a6c036acac8897c0f.meta │ │ ├── 5e │ │ │ └── 8afaf81eb5 │ │ │ │ ├── 39269a1182a5c56950196cbf31df77da294483d4fe33bbcd9320 │ │ │ │ └── 39269a1182a5c56950196cbf31df77da294483d4fe33bbcd9320.meta │ │ └── 8d │ │ │ └── ab5cfaa3a2 │ │ │ ├── ff87cb2d79ba3b77ed01f52711fbf16028dce07f38a86856c299 │ │ │ └── ff87cb2d79ba3b77ed01f52711fbf16028dce07f38a86856c299.meta │ ├── 2-padded │ │ ├── 54 │ │ │ ├── 3e9a31a92783272b8fc47530adb1c9c697653fd25d9852c55af10d6885de05 │ │ │ └── 3e9a31a92783272b8fc47530adb1c9c697653fd25d9852c55af10d6885de05.meta │ │ ├── .securefs.argon2id.KEYFILE.json │ │ ├── .securefs.argon2id.KEYFILE2.json │ │ ├── .securefs.argon2id.PASSWORD.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.scrypt.KEYFILE.json │ │ ├── .securefs.scrypt.KEYFILE2.json │ │ ├── .securefs.scrypt.PASSWORD.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE2.json │ │ ├── 00 │ │ │ ├── 00000000000000000000000000000000000000000000000000000000000000 │ │ │ └── 00000000000000000000000000000000000000000000000000000000000000.meta │ │ ├── 1d │ │ │ ├── e5f2b66f5c6426765d3b8de6e19bf09cb7a3441b16a8322ff520243ec69b3b │ │ │ └── e5f2b66f5c6426765d3b8de6e19bf09cb7a3441b16a8322ff520243ec69b3b.meta │ │ ├── 4b │ │ │ ├── 0317b74d5b5e8f97a9ac81d125edffaa634f03633f29e677367a4db8206ea0 │ │ │ └── 0317b74d5b5e8f97a9ac81d125edffaa634f03633f29e677367a4db8206ea0.meta │ │ ├── 4c │ │ │ ├── 8c3e95d29c797b1fd1c8a2c31540a53fe09d0458bac65138d06127426d936a │ │ │ └── 8c3e95d29c797b1fd1c8a2c31540a53fe09d0458bac65138d06127426d936a.meta │ │ ├── 8c │ │ │ ├── d52ef7ffa4fd6776982588fb1cb0bfca3bd1b37b9faa97d3a2086593ccc84e │ │ │ └── d52ef7ffa4fd6776982588fb1cb0bfca3bd1b37b9faa97d3a2086593ccc84e.meta │ │ ├── 9b │ │ │ ├── 85daea10bbb0b50f9e8d6ac7388329a103b718e8c8755068d7947557f20043 │ │ │ └── 85daea10bbb0b50f9e8d6ac7388329a103b718e8c8755068d7947557f20043.meta │ │ ├── c9 │ │ │ ├── 3ee3c1c7141050c9a8fa2e56e6e2d1b1220c55ddcb4b78ecbfa00ef370d59a │ │ │ └── 3ee3c1c7141050c9a8fa2e56e6e2d1b1220c55ddcb4b78ecbfa00ef370d59a.meta │ │ └── e7 │ │ │ ├── e6f9393bd4ac12d272cf69ee738ef0e1c2ea6d93ce228eac4bb91ac169756c │ │ │ └── e6f9393bd4ac12d272cf69ee738ef0e1c2ea6d93ce228eac4bb91ac169756c.meta │ ├── 3-padded │ │ ├── 55 │ │ │ ├── aea882889d6a2cf8a4954ba62aca318244fea1d6f3a5b6b4523f1cc294aa0d │ │ │ └── aea882889d6a2cf8a4954ba62aca318244fea1d6f3a5b6b4523f1cc294aa0d.meta │ │ ├── 61 │ │ │ ├── df00c83ca67af03afdd285b754a660d678bea05a5cf014c7f970a384d1492a │ │ │ └── df00c83ca67af03afdd285b754a660d678bea05a5cf014c7f970a384d1492a.meta │ │ ├── 94 │ │ │ ├── 164b4ee1a9c7bffa9447858aeb85e52742d357f1500450ccb8c0b41a200415 │ │ │ └── 164b4ee1a9c7bffa9447858aeb85e52742d357f1500450ccb8c0b41a200415.meta │ │ ├── .securefs.argon2id.KEYFILE.json │ │ ├── .securefs.argon2id.KEYFILE2.json │ │ ├── .securefs.argon2id.PASSWORD.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.scrypt.KEYFILE.json │ │ ├── .securefs.scrypt.KEYFILE2.json │ │ ├── .securefs.scrypt.PASSWORD.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE2.json │ │ ├── 00 │ │ │ ├── 00000000000000000000000000000000000000000000000000000000000000 │ │ │ └── 00000000000000000000000000000000000000000000000000000000000000.meta │ │ ├── b1 │ │ │ ├── 92369d6526f986a2114b202bf5bb942b85a7dd76551389e559204c965e68d2 │ │ │ └── 92369d6526f986a2114b202bf5bb942b85a7dd76551389e559204c965e68d2.meta │ │ ├── b6 │ │ │ ├── 9e1c5c87778226655d14ab39a7050be9455eec054e28aa53e99edebad81c7b │ │ │ └── 9e1c5c87778226655d14ab39a7050be9455eec054e28aa53e99edebad81c7b.meta │ │ ├── b7 │ │ │ ├── c78515d8ff91be615f39308ff44f0f01415fe2699171b25c600d11a1ac8ddd │ │ │ └── c78515d8ff91be615f39308ff44f0f01415fe2699171b25c600d11a1ac8ddd.meta │ │ ├── e3 │ │ │ ├── 5e2ae5e2fc05f4cae9dcfc73766764419d16bc5c4f0e8b221ac4683fe3a0fe │ │ │ └── 5e2ae5e2fc05f4cae9dcfc73766764419d16bc5c4f0e8b221ac4683fe3a0fe.meta │ │ └── fc │ │ │ ├── d69806e2242bce1874b73ddbc933cd8420740ea19eacb0235554cfd94f50c0 │ │ │ └── d69806e2242bce1874b73ddbc933cd8420740ea19eacb0235554cfd94f50c0.meta │ ├── 4-padded │ │ ├── .securefs.argon2id.KEYFILE.json │ │ ├── .securefs.argon2id.KEYFILE2.json │ │ ├── .securefs.argon2id.PASSWORD.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.argon2id.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json │ │ ├── .securefs.scrypt.KEYFILE.json │ │ ├── .securefs.scrypt.KEYFILE2.json │ │ ├── .securefs.scrypt.PASSWORD.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE.json │ │ ├── .securefs.scrypt.PASSWORD_WITH_KEYFILE2.json │ │ ├── 35ZQWZ4FMEJR2GZRK3S78H9IB6H9XMTQY39QC │ │ ├── ATVYQRCAGSDKMFQ63FDQ4C7IJMUAX2VCXW3EGCMT │ │ ├── TVGIFJBPT7XCDRQJQ77RGAA5UHYWWUGKY7KAFRU7NDWYVFYTSB8XYNKTQYAS │ │ │ └── EJAG7CFH2JAY5RG6FV6UK8EVPUYHKRGDKPN9WCA │ │ └── U689DZRBFXB7VM8G7CTAFGQT8M6HSAPI3JWA │ │ │ ├── 7CZ36XY8S6KW3WDW99NX8TEXEHGC3TVWKPV4A │ │ │ └── R9ZJ5VUMXZKRRF76PTVDQJV683N5JTEUPG9Z35FMHQHDQ476VYSAI5K6ZG8MY3SRXYPA │ │ │ └── DKWEQYEIVYC73W9M4Y5BU33453NZZR3IQHXWSHS │ ├── 4-plain-text-names │ │ ├── abcdef │ │ │ ├── 364.bin │ │ │ └── 🌱🅾️⛎®️ ♍️ │ │ │ │ └── 8000.bin │ │ ├── ä.bin │ │ ├── empty.txt │ │ └── 加密式文件系统 │ │ │ └── 4096.bin │ ├── chpass_all.py │ ├── keyfile │ └── plain │ │ ├── abcdef │ │ ├── 364.bin │ │ └── 🌱🅾️⛎®️ ♍️ │ │ │ └── 8000.bin │ │ ├── ä.bin │ │ ├── empty.txt │ │ └── 加密式文件系统 │ │ └── 4096.bin ├── simple_test.py ├── test_btree.cpp ├── test_common.cpp ├── test_common.h ├── test_constants.cpp ├── test_crypto.cpp ├── test_full_format.cpp ├── test_io.cpp ├── test_lite_format.cpp ├── test_params_io.cpp ├── test_stat_workaround.cpp ├── test_streams.cpp ├── test_thread_local.cpp ├── test_utils.cpp ├── test_win.cpp └── test_xattr_workaround.cpp └── vcpkg.json /.clang-tidy: -------------------------------------------------------------------------------- 1 | Checks: > 2 | modernize-*,abseil-*,performance-*, 3 | -modernize-use-trailing-return-type, 4 | -performance-no-int-to-ptr, 5 | bugprone-*, 6 | -bugprone-implicit-widening-of-multiplication-result, 7 | -bugprone-narrowing-conversions, 8 | -bugprone-not-null-terminated-result, 9 | -performance-unnecessary-value-param, 10 | -modernize-deprecated-headers, 11 | -modernize-use-nodiscard, 12 | -bugprone-easily-swappable-parameters, 13 | -bugprone-switch-missing-default-case, 14 | bugprone-use-after-move, 15 | clang-analyzer* 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | ._* 3 | build/ 4 | *-build/ 5 | build-*/ 6 | make/ 7 | *.exe 8 | *.obj 9 | .vs 10 | .vscode 11 | out/ 12 | CMakeSettings.json 13 | __pycache__ 14 | .venv/ 15 | .cache/ 16 | vcpkg/ 17 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------ 2 | 3 | # [securefs](https://github.com/netheril96/securefs) 4 | 5 | The MIT License (MIT) 6 | 7 | Copyright (c) 2015~2016 Siyuan Ren (netheril96@gmail.com) 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | -------------------------------------------------------------------------------- /_clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | Language: Cpp 3 | # BasedOnStyle: WebKit 4 | AccessModifierOffset: -4 5 | AlignAfterOpenBracket: true 6 | AlignEscapedNewlinesLeft: false 7 | AlignOperands: false 8 | AlignTrailingComments: true 9 | AllowAllParametersOfDeclarationOnNextLine: true 10 | AllowShortBlocksOnASingleLine: false 11 | AllowShortCaseLabelsOnASingleLine: false 12 | AllowShortIfStatementsOnASingleLine: false 13 | AllowShortLoopsOnASingleLine: false 14 | AllowShortFunctionsOnASingleLine: All 15 | AlwaysBreakAfterDefinitionReturnType: false 16 | AlwaysBreakTemplateDeclarations: true 17 | AlwaysBreakBeforeMultilineStrings: false 18 | BreakBeforeBinaryOperators: All 19 | BreakBeforeTernaryOperators: true 20 | BreakConstructorInitializersBeforeComma: true 21 | BinPackParameters: false 22 | BinPackArguments: false 23 | ColumnLimit: 100 24 | ConstructorInitializerAllOnOneLineOrOnePerLine: true 25 | ConstructorInitializerIndentWidth: 4 26 | DerivePointerAlignment: false 27 | ExperimentalAutoDetectBinPacking: false 28 | IndentCaseLabels: false 29 | IndentWrappedFunctionNames: false 30 | IndentFunctionDeclarationAfterType: false 31 | MaxEmptyLinesToKeep: 1 32 | KeepEmptyLinesAtTheStartOfBlocks: true 33 | NamespaceIndentation: Inner 34 | ObjCBlockIndentWidth: 4 35 | ObjCSpaceAfterProperty: true 36 | ObjCSpaceBeforeProtocolList: true 37 | PenaltyBreakBeforeFirstCallParameter: 19 38 | PenaltyBreakComment: 300 39 | PenaltyBreakString: 1000 40 | PenaltyBreakFirstLessLess: 120 41 | PenaltyExcessCharacter: 1000000 42 | PenaltyReturnTypeOnItsOwnLine: 60 43 | PointerAlignment: Left 44 | SpacesBeforeTrailingComments: 4 45 | Cpp11BracedListStyle: true 46 | Standard: Cpp11 47 | IndentWidth: 4 48 | TabWidth: 8 49 | UseTab: Never 50 | BreakBeforeBraces: Allman 51 | SpacesInParentheses: false 52 | SpacesInSquareBrackets: false 53 | SpacesInAngles: false 54 | SpaceInEmptyParentheses: false 55 | SpacesInCStyleCastParentheses: false 56 | SpaceAfterCStyleCast: false 57 | SpacesInContainerLiterals: true 58 | SpaceBeforeAssignmentOperators: true 59 | ContinuationIndentWidth: 4 60 | CommentPragmas: '^ IWYU pragma:' 61 | ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] 62 | SpaceBeforeParens: ControlStatements 63 | DisableFormat: false 64 | ... 65 | --- 66 | Language: Proto 67 | BasedOnStyle: WebKit 68 | -------------------------------------------------------------------------------- /cmake-modules/GetGitRevisionDescription.cmake.in: -------------------------------------------------------------------------------- 1 | # 2 | # Internal file for GetGitRevisionDescription.cmake 3 | # 4 | # Requires CMake 2.6 or newer (uses the 'function' command) 5 | # 6 | # Original Author: 7 | # 2009-2010 Ryan Pavlik 8 | # http://academic.cleardefinition.com 9 | # Iowa State University HCI Graduate Program/VRAC 10 | # 11 | # Copyright Iowa State University 2009-2010. 12 | # Distributed under the Boost Software License, Version 1.0. 13 | # (See accompanying file LICENSE_1_0.txt or copy at 14 | # http://www.boost.org/LICENSE_1_0.txt) 15 | 16 | set(HEAD_HASH) 17 | 18 | file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) 19 | 20 | string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) 21 | if(HEAD_CONTENTS MATCHES "ref") 22 | # named branch 23 | string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") 24 | if(EXISTS "@GIT_DIR@/${HEAD_REF}") 25 | configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) 26 | else() 27 | configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY) 28 | file(READ "@GIT_DATA@/packed-refs" PACKED_REFS) 29 | if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") 30 | set(HEAD_HASH "${CMAKE_MATCH_1}") 31 | endif() 32 | endif() 33 | else() 34 | # detached HEAD 35 | configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY) 36 | endif() 37 | 38 | if(NOT HEAD_HASH) 39 | file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024) 40 | string(STRIP "${HEAD_HASH}" HEAD_HASH) 41 | endif() 42 | -------------------------------------------------------------------------------- /docs/long_name.md: -------------------------------------------------------------------------------- 1 | # Long file name support 2 | 3 | In full format, each filename can be up to 255 bytes long (in UTF-8 encoding). This is in line with most filesystems. 4 | 5 | In lite format, each filename is encrypted by AES-SIV, and then converted by Base32. This means that a 143 bytes long filename will be transformed into a 255 bytes filename. Beyond that, the encrypted filename will exceed the maximum length on most filesystems. 6 | 7 | Originally this will cause an error, but starting on securefs 1.0.0, we introduce long name support feature. 8 | 9 | When filename length exceeds a predefined threshold (default: 128), it will be converted to an underlying filename by `Base32(Blake2b(name_master_key, filename))` plus three dots. Then this transformed name and the AES-SIV encrypted name will be stored in a per directory SQLite database. The database will be queried during `ls` call, and be updated when files are created, deleted or moved. 10 | 11 | This approach has some performance penalty, but given the rarity of such long filenames, the tradeoff should make sense for most people. 12 | 13 | ## Migration 14 | For lite format repositories created before `securefs` 1.0.0, they do not support long file names, but this can be fixed. 15 | Run `securefs migrate-long-name` to perform the migration. 16 | 17 | With the long file name support, we've also changed how symbolic links are encrypted. As a result, migration can only happen if the repository does not include symbolic links. 18 | -------------------------------------------------------------------------------- /format.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cd `dirname $0` 3 | clang-format -i --style=File sources/*.h sources/*.cpp test/*.cpp 4 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #include "commands.h" 2 | #include "mystring.h" 3 | #include "myutils.h" 4 | #include "platform.h" 5 | #include 6 | 7 | #ifdef _WIN32 8 | 9 | int wmain(int argc, wchar_t** wargv) 10 | { 11 | ::securefs::windows_init(); 12 | auto str_argv = securefs::make_unique_array(argc); 13 | for (int i = 0; i < argc; ++i) 14 | str_argv[i] = securefs::narrow_string(wargv[i]); 15 | auto argv = securefs::make_unique_array(argc + 1); 16 | for (int i = 0; i < argc; ++i) 17 | argv[i] = str_argv[i].c_str(); 18 | argv[argc] = nullptr; 19 | 20 | return securefs::commands_main(argc, argv.get()); 21 | } 22 | 23 | #else 24 | int main(int argc, char** argv) { return securefs::commands_main(argc, argv); } 25 | #endif 26 | -------------------------------------------------------------------------------- /overlay_triplets/arm64-linux.cmake: -------------------------------------------------------------------------------- 1 | set(VCPKG_TARGET_ARCHITECTURE arm64) 2 | set(VCPKG_CRT_LINKAGE dynamic) 3 | set(VCPKG_LIBRARY_LINKAGE static) 4 | 5 | set(VCPKG_BUILD_TYPE release) 6 | 7 | set(VCPKG_CMAKE_SYSTEM_NAME Linux) 8 | 9 | set(VCPKG_C_FLAGS_RELEASE "-flto") 10 | set(VCPKG_CXX_FLAGS_RELEASE "-flto") 11 | -------------------------------------------------------------------------------- /overlay_triplets/arm64-osx.cmake: -------------------------------------------------------------------------------- 1 | set(VCPKG_TARGET_ARCHITECTURE arm64) 2 | set(VCPKG_CRT_LINKAGE dynamic) 3 | set(VCPKG_LIBRARY_LINKAGE static) 4 | 5 | set(VCPKG_BUILD_TYPE release) 6 | 7 | set(VCPKG_CMAKE_SYSTEM_NAME Darwin) 8 | set(VCPKG_OSX_ARCHITECTURES arm64) 9 | 10 | set(VCPKG_C_FLAGS_RELEASE "-flto=thin") 11 | set(VCPKG_CXX_FLAGS_RELEASE "-flto=thin") 12 | -------------------------------------------------------------------------------- /overlay_triplets/x64-freebsd.cmake: -------------------------------------------------------------------------------- 1 | set(VCPKG_TARGET_ARCHITECTURE x64) 2 | set(VCPKG_CRT_LINKAGE dynamic) 3 | set(VCPKG_LIBRARY_LINKAGE static) 4 | 5 | set(VCPKG_BUILD_TYPE release) 6 | 7 | set(VCPKG_CMAKE_SYSTEM_NAME FreeBSD) 8 | 9 | set(VCPKG_C_FLAGS_RELEASE "-flto=thin") 10 | set(VCPKG_CXX_FLAGS_RELEASE "-flto=thin") 11 | -------------------------------------------------------------------------------- /overlay_triplets/x64-linux.cmake: -------------------------------------------------------------------------------- 1 | set(VCPKG_TARGET_ARCHITECTURE x64) 2 | set(VCPKG_CRT_LINKAGE dynamic) 3 | set(VCPKG_LIBRARY_LINKAGE static) 4 | 5 | set(VCPKG_BUILD_TYPE release) 6 | 7 | set(VCPKG_CMAKE_SYSTEM_NAME Linux) 8 | 9 | set(VCPKG_C_FLAGS_RELEASE "-flto") 10 | set(VCPKG_CXX_FLAGS_RELEASE "-flto") 11 | -------------------------------------------------------------------------------- /overlay_triplets/x64-osx.cmake: -------------------------------------------------------------------------------- 1 | set(VCPKG_TARGET_ARCHITECTURE x64) 2 | set(VCPKG_CRT_LINKAGE dynamic) 3 | set(VCPKG_LIBRARY_LINKAGE static) 4 | 5 | set(VCPKG_BUILD_TYPE release) 6 | 7 | set(VCPKG_CMAKE_SYSTEM_NAME Darwin) 8 | set(VCPKG_OSX_ARCHITECTURES x86_64) 9 | 10 | set(VCPKG_C_FLAGS_RELEASE "-flto=thin") 11 | set(VCPKG_CXX_FLAGS_RELEASE "-flto=thin") 12 | -------------------------------------------------------------------------------- /overlay_triplets/x64-windows-static-md.cmake: -------------------------------------------------------------------------------- 1 | set(VCPKG_TARGET_ARCHITECTURE x64) 2 | set(VCPKG_CRT_LINKAGE dynamic) 3 | set(VCPKG_LIBRARY_LINKAGE static) 4 | set(VCPKG_C_FLAGS_RELEASE "/GL") 5 | set(VCPKG_CXX_FLAGS_RELEASE "/GL") 6 | set(VCPKG_LINKER_FLAGS_RELEASE "/LTCG") 7 | set(VCPKG_BUILD_TYPE release) 8 | -------------------------------------------------------------------------------- /protos/params.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package securefs; 4 | 5 | message LegacySecurefsJsonParams 6 | { 7 | uint32 version = 1; 8 | optional uint32 block_size = 2; 9 | optional uint32 iv_size = 3; 10 | string salt = 4; 11 | 12 | message EncryptedMasterKey 13 | { 14 | string iv = 1 [ json_name = "IV" ]; 15 | string mac = 2 [ json_name = "MAC" ]; 16 | string ciphertext = 3 [ json_name = "key" ]; 17 | } 18 | EncryptedMasterKey encrypted_key = 5; 19 | 20 | uint32 iterations = 6; 21 | string pbkdf = 7; 22 | uint32 scrypt_r = 8; 23 | uint32 scrypt_p = 9; 24 | uint32 argon2_m_cost = 10; 25 | uint32 argon2_p = 11; 26 | 27 | uint32 max_padding = 12; 28 | bool long_name_component = 13; 29 | } 30 | 31 | message DecryptedSecurefsParams 32 | { 33 | message SizeParams 34 | { 35 | uint32 block_size = 1; 36 | uint32 iv_size = 2; 37 | uint32 max_padding_size = 3; 38 | } 39 | 40 | SizeParams size_params = 1; 41 | 42 | message LiteFormatParams 43 | { 44 | bytes name_key = 1; 45 | bytes content_key = 2; 46 | bytes xattr_key = 3; 47 | bytes padding_key = 4; 48 | optional uint32 long_name_threshold = 5; 49 | } 50 | 51 | message FullFormatParams 52 | { 53 | bytes master_key = 1; 54 | bool store_time = 2; 55 | bool legacy_file_table_io = 3; 56 | bool case_insensitive = 4; 57 | bool unicode_normalization_agnostic = 5; 58 | } 59 | 60 | oneof format_specific_params 61 | { 62 | LiteFormatParams lite_format_params = 2; 63 | FullFormatParams full_format_params = 3; 64 | } 65 | } 66 | 67 | message EncryptedSecurefsParams 68 | { 69 | bytes salt = 1; 70 | bytes iv = 2; 71 | bytes mac = 3; 72 | bytes ciphertext = 4; 73 | 74 | message Argon2idParams 75 | { 76 | uint32 time_cost = 1; 77 | uint32 memory_cost = 2; 78 | uint32 parallelism = 3; 79 | } 80 | 81 | oneof pbkdf_params 82 | { 83 | Argon2idParams argon2id_params = 5; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /securefs.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | true 6 | UTF-8 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /sources/apple_xattr_workaround.cpp: -------------------------------------------------------------------------------- 1 | #include "apple_xattr_workaround.h" 2 | #include "myutils.h" 3 | 4 | #include 5 | #include 6 | 7 | namespace securefs::apple_xattr 8 | { 9 | static const char APPLE_FINDER_INFO[] = "com.apple.FinderInfo"; 10 | static const char REPLACEMENT_FOR_FINDER_INFO[] = "_securefs.FinderInfo"; 11 | static const char APPLE_QUARANTINE[] = "com.apple.quarantine"; 12 | 13 | static_assert(sizeof(APPLE_FINDER_INFO) == sizeof(REPLACEMENT_FOR_FINDER_INFO), 14 | "The two \"FinderInfo\" attribute names must have the same size"); 15 | 16 | void transform_listxattr_result(char* buffer, size_t size) 17 | { 18 | if (!is_apple()) 19 | { 20 | return; 21 | } 22 | if (size < sizeof(APPLE_FINDER_INFO)) 23 | return; 24 | 25 | for (size_t i = 0; i <= size - sizeof(APPLE_FINDER_INFO); ++i) 26 | { 27 | if (i > 0 && buffer[i - 1] != '\0') 28 | { 29 | continue; // Not a string boundary. 30 | } 31 | // The terminating null must be compared too. 32 | if (memcmp(buffer + i, REPLACEMENT_FOR_FINDER_INFO, sizeof(REPLACEMENT_FOR_FINDER_INFO)) 33 | == 0) 34 | { 35 | memcpy(buffer + i, APPLE_FINDER_INFO, sizeof(APPLE_FINDER_INFO)); 36 | } 37 | } 38 | } 39 | 40 | static int precheck_common(const char** name) 41 | { 42 | if (!is_apple()) 43 | { 44 | return 1; 45 | } 46 | if (strcmp(*name, APPLE_FINDER_INFO) == 0) 47 | { 48 | *name = REPLACEMENT_FOR_FINDER_INFO; 49 | return 1; // No early return. 50 | } 51 | if (strcmp(*name, REPLACEMENT_FOR_FINDER_INFO) == 0) 52 | { 53 | return -EPERM; 54 | } 55 | return 1; 56 | } 57 | 58 | int precheck_getxattr(const char** name) 59 | { 60 | if (!is_apple()) 61 | { 62 | return 1; 63 | } 64 | if (strcmp(*name, APPLE_QUARANTINE) == 0) 65 | { 66 | return -ENOATTR; 67 | } 68 | return precheck_common(name); 69 | } 70 | 71 | int precheck_setxattr(const char** name, int* flags) 72 | { 73 | if (!is_apple()) 74 | { 75 | return 1; 76 | } 77 | if (strcmp(*name, APPLE_QUARANTINE) == 0) 78 | { 79 | return 0; // Fakes success of quarantine to work around "XXX is damaged" bug on macOS. 80 | } 81 | if (strcmp(*name, APPLE_FINDER_INFO) == 0) 82 | { 83 | *name = REPLACEMENT_FOR_FINDER_INFO; 84 | *flags &= ~(unsigned)XATTR_NOSECURITY; 85 | return 1; // No early return. 86 | } 87 | if (strcmp(*name, REPLACEMENT_FOR_FINDER_INFO) == 0) 88 | { 89 | return -EPERM; 90 | } 91 | return 1; 92 | } 93 | 94 | int precheck_removexattr(const char** name) { return precheck_common(name); } 95 | } // namespace securefs::apple_xattr 96 | -------------------------------------------------------------------------------- /sources/apple_xattr_workaround.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #if __has_include() 5 | #include 6 | #endif 7 | 8 | #ifndef ENOATTR 9 | #define ENOATTR 93 10 | #endif 11 | 12 | #ifndef XATTR_NOSECURITY 13 | #define XATTR_NOSECURITY 0x0008 14 | #endif 15 | 16 | #ifndef XATTR_CREATE 17 | #define XATTR_CREATE 0x0002 18 | #endif 19 | 20 | #ifndef XATTR_REPLACE 21 | #define XATTR_REPLACE 0x0004 22 | #endif 23 | 24 | namespace securefs::apple_xattr 25 | { 26 | void transform_listxattr_result(char* buffer, size_t size); 27 | 28 | /// If the return value <=0, the caller should early return with the code. Otherwise, it should 29 | /// continue with the transformed name. 30 | int precheck_getxattr(const char** name); 31 | int precheck_setxattr(const char** name, int* flags); 32 | int precheck_removexattr(const char** name); 33 | } // namespace securefs::apple_xattr 34 | -------------------------------------------------------------------------------- /sources/commands.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "myutils.h" 4 | #include "object.h" 5 | 6 | #include 7 | 8 | #include 9 | #include 10 | 11 | namespace securefs 12 | { 13 | int commands_main(int argc, const char* const* argv); 14 | 15 | class CommandBase : public Object 16 | { 17 | DISABLE_COPY_MOVE(CommandBase) 18 | public: 19 | CommandBase() = default; 20 | 21 | virtual const char* long_name() const noexcept = 0; 22 | virtual char short_name() const noexcept = 0; 23 | virtual const char* help_message() const noexcept = 0; 24 | TCLAP::CmdLine& cmdline() 25 | { 26 | if (!cmdline_) 27 | { 28 | cmdline_ = std::make_unique(help_message()); 29 | } 30 | return *cmdline_; 31 | } 32 | virtual void parse_cmdline(int argc, const char* const* argv); 33 | virtual int execute() = 0; 34 | 35 | private: 36 | std::unique_ptr cmdline_; 37 | }; 38 | } // namespace securefs 39 | -------------------------------------------------------------------------------- /sources/common_platform.cpp: -------------------------------------------------------------------------------- 1 | #include "crypto.h" 2 | #include "exceptions.h" 3 | #include "myutils.h" 4 | #include "platform.h" 5 | #include 6 | 7 | namespace securefs 8 | { 9 | using absl::StrCat; 10 | 11 | const OSService& OSService::get_default() 12 | { 13 | static const OSService service; 14 | return service; 15 | } 16 | 17 | std::string OSService::temp_name(std::string_view prefix, std::string_view suffix) 18 | { 19 | byte random[16]; 20 | generate_random(random, array_length(random)); 21 | std::string result; 22 | result.reserve(prefix.size() + 32 + suffix.size()); 23 | result.append(prefix.data(), prefix.size()); 24 | result.append(hexify(random, array_length(random))); 25 | result.append(suffix.data(), suffix.size()); 26 | return result; 27 | } 28 | 29 | void OSService::recursive_traverse(const std::string& dir, 30 | const recursive_traverse_callback& callback) const 31 | { 32 | auto traverser = create_traverser(dir); 33 | std::string name; 34 | fuse_stat st; 35 | 36 | while (traverser->next(&name, &st)) 37 | { 38 | if (name == "." || name == "..") 39 | continue; 40 | callback(dir, name, S_IFMT & st.st_mode); 41 | if ((S_IFMT & st.st_mode) == S_IFDIR) 42 | { 43 | recursive_traverse(StrCat(dir, "/", name), callback); 44 | } 45 | } 46 | } 47 | 48 | DirectoryTraverser::~DirectoryTraverser() = default; 49 | 50 | ssize_t FileStream::getxattr(const char*, void*, size_t) { throw VFSException(ENOTSUP); } 51 | 52 | void FileStream::setxattr(const char*, void*, size_t, int) { throw VFSException(ENOTSUP); } 53 | 54 | ssize_t FileStream::listxattr(char*, size_t) { throw VFSException(ENOTSUP); } 55 | 56 | void FileStream::removexattr(const char*) { throw VFSException(ENOTSUP); } 57 | 58 | void POSIXColourSetter::use(Colour::Code _colourCode) noexcept 59 | { 60 | switch (_colourCode) 61 | { 62 | case Colour::Default: 63 | return setColour("[0;39m"); 64 | case Colour::White: 65 | return setColour("[0m"); 66 | case Colour::Red: 67 | return setColour("[0;31m"); 68 | case Colour::Green: 69 | return setColour("[0;32m"); 70 | case Colour::Blue: 71 | return setColour("[0:34m"); 72 | case Colour::Cyan: 73 | return setColour("[0;36m"); 74 | case Colour::Yellow: 75 | return setColour("[0;33m"); 76 | case Colour::Grey: 77 | return setColour("[1;30m"); 78 | 79 | case Colour::LightGrey: 80 | return setColour("[0;37m"); 81 | case Colour::BrightRed: 82 | return setColour("[1;31m"); 83 | case Colour::BrightGreen: 84 | return setColour("[1;32m"); 85 | case Colour::BrightWhite: 86 | return setColour("[1;37m"); 87 | 88 | default: 89 | break; 90 | } 91 | } 92 | 93 | void POSIXColourSetter::setColour(const char* _escapeCode) noexcept 94 | { 95 | putc('\033', m_fp); 96 | fputs(_escapeCode, m_fp); 97 | } 98 | } // namespace securefs 99 | -------------------------------------------------------------------------------- /sources/constants.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace securefs 4 | { 5 | const unsigned kOptionNoAuthentication = 0x1, kOptionReadOnly = 0x2, kOptionStoreTime = 0x4, 6 | kOptionCaseFoldFileName = 0x8, kOptionNFCFileName = 0x10, kOptionSkipDotDot = 0x20, 7 | kOptionNoNameTranslation = 0x40, kOptionLongNameComponent = 0x80; 8 | } // namespace securefs 9 | -------------------------------------------------------------------------------- /sources/crypto.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "platform.h" 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | 12 | namespace securefs 13 | { 14 | // Implementation of AES-SIV according to https://tools.ietf.org/html/rfc5297 15 | class AES_SIV 16 | { 17 | private: 18 | Mutex m_mutex; 19 | CryptoPP::CMAC m_cmac ABSL_GUARDED_BY(m_mutex); 20 | CryptoPP::CTR_Mode::Encryption m_ctr ABSL_GUARDED_BY(m_mutex); 21 | 22 | private: 23 | void s2v(const void* plaintext, 24 | size_t text_len, 25 | const void* additional_data, 26 | size_t additional_len, 27 | void* iv) ABSL_EXCLUSIVE_LOCKS_REQUIRED(m_mutex); 28 | 29 | public: 30 | static constexpr size_t IV_SIZE = 16; 31 | 32 | public: 33 | explicit AES_SIV(const void* key, size_t size); 34 | ~AES_SIV(); 35 | 36 | DISABLE_COPY_MOVE(AES_SIV); 37 | 38 | void encrypt_and_authenticate(const void* plaintext, 39 | size_t text_len, 40 | const void* additional_data, 41 | size_t additional_len, 42 | void* ciphertext, 43 | void* siv); 44 | 45 | bool decrypt_and_verify(const void* ciphertext, 46 | size_t text_len, 47 | const void* additional_data, 48 | size_t additional_len, 49 | void* plaintext, 50 | const void* siv); 51 | }; 52 | 53 | void hmac_sha256_calculate(const void* message, 54 | size_t msg_len, 55 | const void* key, 56 | size_t key_len, 57 | void* mac, 58 | size_t mac_len); 59 | 60 | bool hmac_sha256_verify(const void* message, 61 | size_t msg_len, 62 | const void* key, 63 | size_t key_len, 64 | const void* mac, 65 | size_t mac_len); 66 | 67 | // HMAC based key derivation function (https://tools.ietf.org/html/rfc5869) 68 | // This one is not implemented by Crypto++, so we implement it ourselves 69 | void hkdf(const void* key, 70 | size_t key_len, 71 | const void* salt, 72 | size_t salt_len, 73 | const void* info, 74 | size_t info_len, 75 | void* output, 76 | size_t out_len); 77 | 78 | unsigned int pbkdf_hmac_sha256(const void* password, 79 | size_t pass_len, 80 | const void* salt, 81 | size_t salt_len, 82 | unsigned int min_iterations, 83 | double min_seconds, 84 | void* derived, 85 | size_t derive_len); 86 | 87 | void generate_random(void* buffer, size_t size); 88 | } // namespace securefs 89 | -------------------------------------------------------------------------------- /sources/exceptions.cpp: -------------------------------------------------------------------------------- 1 | #include "exceptions.h" 2 | #include "platform.h" 3 | 4 | #include 5 | 6 | securefs::ExceptionBase::ExceptionBase() = default; 7 | 8 | securefs::ExceptionBase::~ExceptionBase() = default; 9 | 10 | void ::securefs::throwVFSException(int errc) { throw VFSException(errc); } 11 | 12 | void ::securefs::throwInvalidArgumentException(const char* why) 13 | { 14 | throw InvalidArgumentException(why); 15 | } 16 | 17 | void ::securefs::throwInvalidArgumentException(std::string why) 18 | { 19 | throw InvalidArgumentException(std::move(why)); 20 | } 21 | 22 | securefs::VFSException::~VFSException() = default; 23 | 24 | securefs::POSIXException::~POSIXException() = default; 25 | 26 | securefs::InvalidArgumentException::~InvalidArgumentException() = default; 27 | 28 | [[noreturn]] void securefs::throwFileTypeInconsistencyException() 29 | { 30 | throw ::securefs::FileTypeInconsistencyException(); 31 | } 32 | 33 | [[noreturn]] void securefs::throwPOSIXExceptionDoNotUseDirectly(int err, std::string msg) 34 | { 35 | throw POSIXException(err, std::move(msg)); 36 | } 37 | 38 | [[noreturn]] void securefs::throw_runtime_error(const char* msg) { throw std::runtime_error(msg); } 39 | 40 | [[noreturn]] void securefs::throw_runtime_error(const std::string& msg) 41 | { 42 | throw std::runtime_error(msg); 43 | } 44 | 45 | std::string securefs::VFSException::message() const 46 | { 47 | return securefs::OSService::stringify_system_error(m_errno); 48 | } 49 | 50 | std::string securefs::POSIXException::message() const 51 | { 52 | return absl::StrFormat("%s (%s)", securefs::OSService::stringify_system_error(m_errno), m_msg); 53 | } 54 | 55 | const char* ::securefs::ExceptionBase::what() const noexcept 56 | { 57 | if (m_cached_msg.empty()) 58 | { 59 | try 60 | { 61 | message().swap(m_cached_msg); 62 | } 63 | catch (...) 64 | { 65 | return "An exception occurred while formatting exception message"; 66 | } 67 | } 68 | return m_cached_msg.c_str(); 69 | } 70 | -------------------------------------------------------------------------------- /sources/file_table_v2.h: -------------------------------------------------------------------------------- 1 | 2 | #include "files.h" 3 | #include "myutils.h" 4 | #include "object.h" 5 | #include "platform.h" 6 | #include "tags.h" 7 | 8 | #include 9 | #include 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | namespace securefs::full_format 22 | { 23 | using FileStreamPtrPair = std::pair, std::shared_ptr>; 24 | 25 | const inline id_type kRootId{}; 26 | 27 | class FileTableIO : public Object 28 | { 29 | public: 30 | virtual FileStreamPtrPair open(const id_type& id) = 0; 31 | virtual FileStreamPtrPair create(const id_type& id) = 0; 32 | virtual void unlink(const id_type& id) noexcept = 0; 33 | }; 34 | 35 | fruit::Component>, FileTableIO> 36 | get_table_io_component(bool legacy); 37 | 38 | class FileTable; 39 | class FileTableCloser; 40 | 41 | using FilePtrHolder = std::unique_ptr; 42 | 43 | class FileTable 44 | { 45 | public: 46 | template 47 | using Factory = std::function( 48 | std::shared_ptr, std::shared_ptr, const id_type&)>; 49 | 50 | public: 51 | INJECT(FileTable(FileTableIO& io, 52 | Factory regular_file_factory, 53 | Factory directory_factory, 54 | Factory symlink_factory)) 55 | : io_(io) 56 | , regular_file_factory_(std::move(regular_file_factory)) 57 | , directory_factory_(std::move(directory_factory)) 58 | , symlink_factory_(std::move(symlink_factory)) 59 | { 60 | init(); 61 | } 62 | ~FileTable(); 63 | FilePtrHolder open_as(const id_type& id, int type); 64 | FilePtrHolder create_as(int type); 65 | void close(const id_type& id); 66 | 67 | private: 68 | struct Shard 69 | { 70 | Mutex mu; 71 | absl::flat_hash_map, id_hash> 72 | live_map ABSL_GUARDED_BY(mu); 73 | std::vector> cache ABSL_GUARDED_BY(mu); 74 | }; 75 | static constexpr inline size_t kNumShards = 32, kMaxCached = 50, kEjectNumber = 10; 76 | 77 | void init(); 78 | Shard& find_shard(const id_type& id); 79 | std::unique_ptr construct(int type, 80 | std::shared_ptr data_stream, 81 | std::shared_ptr meta_stream, 82 | const id_type& id); 83 | void close_internal(const id_type id); 84 | FilePtrHolder create_holder(FileBase* fb); 85 | FilePtrHolder create_holder(std::unique_ptr& fb); 86 | 87 | private: 88 | FileTableIO& io_; 89 | std::unique_ptr root_; 90 | Factory regular_file_factory_; 91 | Factory directory_factory_; 92 | Factory symlink_factory_; 93 | std::array shards{}; 94 | }; 95 | 96 | class FileTableCloser 97 | { 98 | public: 99 | explicit FileTableCloser(FileTable* table) : table_(table) {} 100 | 101 | void operator()(FileBase* fb) const; 102 | 103 | private: 104 | FileTable* table_; 105 | }; 106 | } // namespace securefs::full_format 107 | -------------------------------------------------------------------------------- /sources/fuse2_workaround.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace securefs 6 | { 7 | int my_fuse_main(int argc, char** argv, fuse_operations* op, void* user_data); 8 | } // namespace securefs 9 | -------------------------------------------------------------------------------- /sources/fuse_tracer_v2.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "exceptions.h" 3 | #include "logger.h" 4 | #include "platform.h" // IWYU pragma: keep 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | namespace securefs::trace 11 | { 12 | struct WrappedFuseArg 13 | { 14 | absl::string_view name; 15 | std::variant 26 | value; 27 | }; 28 | 29 | class FuseTracer 30 | { 31 | private: 32 | static void print(FILE* fp, const WrappedFuseArg& arg); 33 | static void print(FILE* fp, const WrappedFuseArg* args, size_t arg_size); 34 | 35 | static void print_function_starts(Logger* logger, 36 | const char* funcsig, 37 | int lineno, 38 | const WrappedFuseArg* args, 39 | size_t arg_size); 40 | 41 | static void print_function_returns(Logger* logger, 42 | const char* funcsig, 43 | int lineno, 44 | const WrappedFuseArg* args, 45 | size_t arg_size, 46 | int rc); 47 | 48 | static void print_function_exception(Logger* logger, 49 | const char* funcsig, 50 | int lineno, 51 | const WrappedFuseArg* args, 52 | size_t arg_size, 53 | const std::exception& e, 54 | int rc); 55 | 56 | public: 57 | template 58 | static inline auto traced_call(ActualFunction&& func, 59 | const char* funcsig, 60 | int lineno, 61 | const std::initializer_list& args, 62 | Logger* logger = global_logger) -> decltype(func()) 63 | { 64 | print_function_starts(logger, funcsig, lineno, args.begin(), args.size()); 65 | try 66 | { 67 | auto rc = func(); 68 | print_function_returns(logger, funcsig, lineno, args.begin(), args.size(), rc); 69 | return rc; 70 | } 71 | catch (const VFSException& e) 72 | { 73 | int rc = -e.error_number(); 74 | print_function_returns(logger, funcsig, lineno, args.begin(), args.size(), rc); 75 | return rc; 76 | } 77 | catch (const ExceptionBase& e) 78 | { 79 | int rc = -e.error_number(); 80 | print_function_exception(logger, funcsig, lineno, args.begin(), args.size(), e, rc); 81 | return rc; 82 | } 83 | catch (const std::exception& e) 84 | { 85 | int rc = -EPERM; 86 | print_function_exception(logger, funcsig, lineno, args.begin(), args.size(), e, rc); 87 | return rc; 88 | } 89 | } 90 | }; 91 | } // namespace securefs::trace 92 | -------------------------------------------------------------------------------- /sources/git-version.cpp.in: -------------------------------------------------------------------------------- 1 | #include "git-version.h" 2 | 3 | namespace securefs { 4 | const char* const GIT_VERSION = "@GIT_VERSION@"; 5 | } -------------------------------------------------------------------------------- /sources/git-version.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace securefs 4 | { 5 | extern const char* const GIT_VERSION; 6 | } -------------------------------------------------------------------------------- /sources/lite_long_name_lookup_table.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "platform.h" 3 | #include "sqlite_helper.h" 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | 12 | namespace securefs 13 | { 14 | 15 | namespace internal 16 | { 17 | class ABSL_LOCKABLE LookupTableBase 18 | { 19 | public: 20 | void lock() ABSL_EXCLUSIVE_LOCK_FUNCTION(*this) ABSL_NO_THREAD_SAFETY_ANALYSIS 21 | { 22 | db_.mutex().Lock(); 23 | begin(); 24 | } 25 | 26 | void unlock() ABSL_UNLOCK_FUNCTION(*this) ABSL_NO_THREAD_SAFETY_ANALYSIS 27 | { 28 | finish(); 29 | db_.mutex().Unlock(); 30 | } 31 | 32 | protected: 33 | SQLiteDB db_ ABSL_GUARDED_BY(*this); 34 | 35 | protected: 36 | void begin() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*this); 37 | void finish() noexcept ABSL_EXCLUSIVE_LOCKS_REQUIRED(*this); 38 | }; 39 | } // namespace internal 40 | 41 | ///@brief Wraps a SQLite database, to store the mapping between the keyed hash and encrypted name. 42 | /// The table is needed when the file name component is so long that its encrypted version no longer 43 | /// fits on most filesystems. 44 | class ABSL_LOCKABLE LongNameLookupTable : public internal::LookupTableBase 45 | { 46 | public: 47 | LongNameLookupTable(const std::string& filename, bool readonly); 48 | ~LongNameLookupTable(); 49 | 50 | std::string lookup(std::string_view keyed_hash) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*this); 51 | void update_mapping(std::string_view keyed_hash, std::string_view encrypted_long_name) 52 | ABSL_EXCLUSIVE_LOCKS_REQUIRED(*this); 53 | void remove_mapping(std::string_view keyed_hash) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*this); 54 | 55 | std::vector list_hashes() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*this); 56 | }; 57 | 58 | ///@brief Only used in `rename` operations, when two operations need to be atomic together. 59 | class ABSL_LOCKABLE DoubleLongNameLookupTable : public internal::LookupTableBase 60 | { 61 | public: 62 | DoubleLongNameLookupTable(const std::string& from_dir_db, const std::string& to_dir_db); 63 | 64 | void remove_mapping_from_from_db(std::string_view keyed_hash) 65 | ABSL_EXCLUSIVE_LOCKS_REQUIRED(*this); 66 | 67 | void update_mapping_to_to_db(std::string_view keyed_hash, std::string_view encrypted_long_name) 68 | ABSL_EXCLUSIVE_LOCKS_REQUIRED(*this); 69 | 70 | private: 71 | bool is_same_db_; 72 | }; 73 | } // namespace securefs 74 | -------------------------------------------------------------------------------- /sources/lock_enabled.cpp: -------------------------------------------------------------------------------- 1 | #include "lock_enabled.h" 2 | #include 3 | 4 | namespace securefs 5 | { 6 | static std::atomic_bool lock_flag{true}; 7 | 8 | bool is_lock_enabled() { return lock_flag.load(); } 9 | void set_lock_enabled(bool value) { return lock_flag.store(value); } 10 | } // namespace securefs 11 | -------------------------------------------------------------------------------- /sources/lock_enabled.h: -------------------------------------------------------------------------------- 1 | namespace securefs 2 | { 3 | bool is_lock_enabled(); 4 | void set_lock_enabled(bool value); 5 | } // namespace securefs 6 | -------------------------------------------------------------------------------- /sources/logger.cpp: -------------------------------------------------------------------------------- 1 | #include "logger.h" 2 | #include "exceptions.h" 3 | #include "myutils.h" 4 | #include "platform.h" 5 | 6 | #include 7 | 8 | #ifdef _WIN32 9 | #include 10 | #include 11 | 12 | static void flockfile(FILE* fp) { _lock_file(fp); } 13 | static void funlockfile(FILE* fp) { _unlock_file(fp); } 14 | 15 | static const void* current_thread_id(void) 16 | { 17 | return reinterpret_cast(static_cast(GetCurrentThreadId())); 18 | } 19 | #else 20 | #include 21 | static const void* current_thread_id(void) { return (void*)(pthread_self()); } 22 | #endif 23 | 24 | namespace securefs 25 | { 26 | Logger::Logger(FILE* fp, bool close_on_exit) 27 | : m_level(LoggingLevel::kLogInfo), m_fp(fp), m_close_on_exit(close_on_exit) 28 | { 29 | m_console_color = ConsoleColourSetter::create_setter(m_fp); 30 | } 31 | 32 | void Logger::prelog(LoggingLevel level, const char* funcsig, int lineno) noexcept 33 | { 34 | if (!m_fp || level < this->get_level()) 35 | return; 36 | 37 | struct tm now; 38 | int now_ns = 0; 39 | OSService::get_current_time_in_tm(&now, &now_ns); 40 | 41 | flockfile(m_fp); 42 | if (m_console_color) 43 | { 44 | switch (level) 45 | { 46 | case LoggingLevel::kLogWarning: 47 | m_console_color->use(Colour::Warning); 48 | break; 49 | case LoggingLevel::kLogError: 50 | m_console_color->use(Colour::Error); 51 | break; 52 | default: 53 | break; 54 | } 55 | } 56 | 57 | fprintf(m_fp, 58 | "[%s] [%p] [%d-%02d-%02d %02d:%02d:%02d.%09d UTC] [%s:%d] ", 59 | stringify(level), 60 | current_thread_id(), 61 | now.tm_year + 1900, 62 | now.tm_mon + 1, 63 | now.tm_mday, 64 | now.tm_hour, 65 | now.tm_min, 66 | now.tm_sec, 67 | now_ns, 68 | funcsig, 69 | lineno); 70 | } 71 | 72 | void Logger::postlog(LoggingLevel level) noexcept 73 | { 74 | if (m_console_color && (level == LoggingLevel::kLogWarning || level == LoggingLevel::kLogError)) 75 | { 76 | m_console_color->use(Colour::Default); 77 | } 78 | 79 | putc('\n', m_fp); 80 | fflush(m_fp); 81 | funlockfile(m_fp); 82 | } 83 | 84 | void Logger::log_v2(LoggingLevel level, 85 | const char* funcsig, 86 | int lineno, 87 | absl::FunctionRef output_fun) 88 | { 89 | if (!m_fp || level < this->get_level()) 90 | return; 91 | prelog(level, funcsig, lineno); 92 | DEFER(postlog(level)); 93 | try 94 | { 95 | output_fun(m_fp); 96 | } 97 | catch (const std::exception& e) 98 | { 99 | absl::FPrintF(m_fp, "Logging itself throws exception: %s", e.what()); 100 | } 101 | } 102 | 103 | Logger::~Logger() 104 | { 105 | if (m_close_on_exit) 106 | fclose(m_fp); 107 | } 108 | 109 | Logger* Logger::create_stderr_logger() { return new Logger(stderr, false); } 110 | 111 | Logger* Logger::create_file_logger(const std::string& path) 112 | { 113 | #ifdef _WIN32 114 | FILE* fp = _wfopen(widen_string(path).c_str(), L"a"); 115 | #else 116 | FILE* fp = fopen(path.c_str(), "a"); 117 | #endif 118 | if (!fp) 119 | THROW_POSIX_EXCEPTION(errno, path); 120 | return new Logger(fp, true); 121 | } 122 | 123 | Logger* global_logger = Logger::create_stderr_logger(); 124 | } // namespace securefs 125 | -------------------------------------------------------------------------------- /sources/logger.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "platform.h" 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | namespace securefs 12 | { 13 | enum class LoggingLevel : unsigned char 14 | { 15 | kLogTrace = 0, 16 | kLogVerbose = 1, 17 | kLogInfo = 2, 18 | kLogWarning = 3, 19 | kLogError = 4 20 | }; 21 | 22 | inline const char* stringify(LoggingLevel lvl) 23 | { 24 | switch (lvl) 25 | { 26 | case LoggingLevel::kLogTrace: 27 | return "Trace"; 28 | case LoggingLevel::kLogVerbose: 29 | return "Verbose"; 30 | case LoggingLevel::kLogInfo: 31 | return "Info"; 32 | case LoggingLevel::kLogWarning: 33 | return "Warning"; 34 | case LoggingLevel::kLogError: 35 | return "Error"; 36 | } 37 | return "UNKNOWN"; 38 | } 39 | 40 | namespace trace 41 | { 42 | class FuseTracer; 43 | } 44 | 45 | class FuseTracer; 46 | 47 | class Logger 48 | { 49 | DISABLE_COPY_MOVE(Logger) 50 | friend class FuseTracer; 51 | friend class trace::FuseTracer; 52 | 53 | private: 54 | LoggingLevel m_level; 55 | FILE* m_fp; 56 | std::unique_ptr m_console_color; 57 | bool m_close_on_exit; 58 | 59 | explicit Logger(FILE* fp, bool close_on_exit); 60 | 61 | void prelog(LoggingLevel level, const char* funcsig, int lineno) noexcept; 62 | void postlog(LoggingLevel level) noexcept; 63 | 64 | void log_v2(LoggingLevel level, 65 | const char* funcsig, 66 | int lineno, 67 | absl::FunctionRef output_fun); 68 | 69 | public: 70 | static Logger* create_stderr_logger(); 71 | static Logger* create_file_logger(const std::string& path); 72 | 73 | template 74 | void log_v2(LoggingLevel level, 75 | const char* funcsig, 76 | int lineno, 77 | const absl::FormatSpec& fms, 78 | Args&&... args) noexcept 79 | { 80 | log_v2(level, 81 | funcsig, 82 | lineno, 83 | [&](std::FILE* fp) { absl::FPrintF(fp, fms, std::forward(args)...); }); 84 | } 85 | 86 | LoggingLevel get_level() const noexcept { return m_level; } 87 | void set_level(LoggingLevel lvl) noexcept { m_level = lvl; } 88 | 89 | ~Logger(); 90 | }; 91 | 92 | extern Logger* global_logger; 93 | 94 | #ifdef _MSC_VER 95 | #define FULL_FUNCTION_NAME __FUNCSIG__ 96 | #else 97 | #define FULL_FUNCTION_NAME __PRETTY_FUNCTION__ 98 | #endif 99 | 100 | #define GENERIC_LOG(log_level, ...) \ 101 | do \ 102 | { \ 103 | using securefs::global_logger; \ 104 | if (global_logger && global_logger->get_level() <= log_level) \ 105 | { \ 106 | global_logger->log_v2(log_level, FULL_FUNCTION_NAME, __LINE__, __VA_ARGS__); \ 107 | } \ 108 | } while (0) 109 | #define TRACE_LOG(...) GENERIC_LOG(securefs::LoggingLevel::kLogTrace, __VA_ARGS__) 110 | #define VERBOSE_LOG(...) GENERIC_LOG(securefs::LoggingLevel::kLogVerbose, __VA_ARGS__) 111 | #define INFO_LOG(...) GENERIC_LOG(securefs::LoggingLevel::kLogInfo, __VA_ARGS__) 112 | #define WARN_LOG(...) GENERIC_LOG(securefs::LoggingLevel::kLogWarning, __VA_ARGS__) 113 | #define ERROR_LOG(...) GENERIC_LOG(securefs::LoggingLevel::kLogError, __VA_ARGS__) 114 | } // namespace securefs 115 | -------------------------------------------------------------------------------- /sources/mystring.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | using byte = unsigned char; 15 | 16 | namespace securefs 17 | { 18 | std::string hexify(const byte* data, size_t length); 19 | void parse_hex(std::string_view hex, byte* output, size_t len); 20 | std::vector parse_hex(std::string_view hex); 21 | 22 | inline absl::Span as_byte_span(std::string_view view) 23 | { 24 | return {reinterpret_cast(view.data()), view.size()}; 25 | } 26 | 27 | template 28 | inline std::string hexify(const ByteContainer& c) 29 | { 30 | return hexify(c.data(), c.size()); 31 | } 32 | 33 | void base32_encode(const byte* input, size_t size, std::string& output); 34 | void base32_decode(const char* input, size_t size, std::string& output); 35 | 36 | bool is_ascii(std::string_view str); 37 | 38 | int binary_compare(std::string_view a, std::string_view b); 39 | int case_insensitive_compare(std::string_view a, std::string_view b); 40 | int uni_norm_insensitive_compare(std::string_view a, std::string_view b); 41 | int case_uni_norm_insensitve_compare(std::string_view a, std::string_view b); 42 | 43 | } // namespace securefs 44 | -------------------------------------------------------------------------------- /sources/object.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace securefs 4 | { 5 | class Object 6 | { 7 | public: 8 | Object() = default; 9 | virtual ~Object() = default; 10 | 11 | Object(Object&&) = delete; 12 | Object& operator=(Object&&) = delete; 13 | }; 14 | } // namespace securefs 15 | -------------------------------------------------------------------------------- /sources/params_io.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "myutils.h" 4 | #include "params.pb.h" 5 | #include "platform.h" 6 | #include "streams.h" 7 | 8 | #include 9 | 10 | #include 11 | #include 12 | #include 13 | 14 | namespace securefs 15 | { 16 | class PasswordOrKeyfileIncorrectException : public std::exception 17 | { 18 | public: 19 | const char* what() const noexcept override { return "Password/keyfile is incorrect"; } 20 | }; 21 | DecryptedSecurefsParams decrypt(const LegacySecurefsJsonParams& legacy, 22 | absl::Span password, 23 | /* nullable */ StreamBase* key_stream); 24 | DecryptedSecurefsParams decrypt(const EncryptedSecurefsParams& encparams, 25 | absl::Span password, 26 | /* nullable */ StreamBase* key_stream); 27 | DecryptedSecurefsParams decrypt(std::string_view content, 28 | absl::Span password, 29 | /* nullable */ StreamBase* key_stream); 30 | EncryptedSecurefsParams encrypt(const DecryptedSecurefsParams& decparams, 31 | const EncryptedSecurefsParams::Argon2idParams& argon2id_params, 32 | absl::Span password, 33 | /* nullable */ StreamBase* key_stream); 34 | 35 | inline std::shared_ptr maybe_open_key_stream(const std::string& keyfile) 36 | { 37 | if (keyfile.empty()) 38 | { 39 | return {}; 40 | } 41 | return OSService::get_default().open_file_stream(keyfile, O_RDONLY, 0); 42 | } 43 | } // namespace securefs 44 | -------------------------------------------------------------------------------- /sources/sqlite_helper.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "exceptions.h" 3 | #include "platform.h" 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | namespace securefs 14 | { 15 | class SQLiteDB 16 | { 17 | public: 18 | SQLiteDB() = default; 19 | SQLiteDB(const char* filename, int flags, const char* vfs); 20 | void set_timeout(int ms); 21 | void exec(const char* sql); 22 | 23 | sqlite3* get() noexcept { return ptr_ ? ptr_->db : nullptr; } 24 | explicit operator bool() const noexcept { return ptr_ && ptr_->db; } 25 | int64_t last_changes() noexcept { return sqlite3_changes64(get()); } 26 | Mutex& mutex() 27 | { 28 | if (!ptr_) 29 | { 30 | throw VFSException(EINVAL); 31 | } 32 | return ptr_->mu_; 33 | } 34 | 35 | private: 36 | struct SQLiteDBWrapper 37 | { 38 | Mutex mu_; 39 | sqlite3* db = nullptr; 40 | SQLiteDBWrapper() {} 41 | SQLiteDBWrapper(SQLiteDBWrapper&&) = delete; 42 | ~SQLiteDBWrapper(); 43 | }; 44 | std::shared_ptr ptr_; 45 | }; 46 | 47 | class SQLiteStatement 48 | { 49 | public: 50 | SQLiteStatement() {} 51 | SQLiteStatement(SQLiteDB db, std::string sql); 52 | 53 | void reset(); 54 | bool step(); 55 | 56 | void bind_int(int column, int64_t value); 57 | void bind_text(int column, std::string_view value); 58 | void bind_blob(int column, absl::Span value); 59 | 60 | int64_t get_int(int column); 61 | std::string_view get_text(int column); 62 | absl::Span get_blob(int column); 63 | bool is_null(int column); 64 | 65 | explicit operator bool() const noexcept { return holder_.get(); } 66 | 67 | private: 68 | SQLiteDB db_; 69 | std::string sql_; 70 | 71 | struct StatementCloser 72 | { 73 | void operator()(sqlite3_stmt* st) const noexcept 74 | { 75 | if (st) 76 | sqlite3_finalize(st); 77 | } 78 | }; 79 | std::unique_ptr holder_; 80 | 81 | void prologue(); 82 | }; 83 | 84 | class SQLiteException : public std::runtime_error 85 | { 86 | public: 87 | explicit SQLiteException(int code); 88 | explicit SQLiteException(sqlite3* db, int code); 89 | }; 90 | 91 | void check_sqlite_call(int code); 92 | void check_sqlite_call(sqlite3* db, int code); 93 | } // namespace securefs 94 | -------------------------------------------------------------------------------- /sources/tags.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace securefs 4 | { 5 | struct tBlockSize 6 | { 7 | }; 8 | struct tIvSize 9 | { 10 | }; 11 | struct tMaxPaddingSize 12 | { 13 | }; 14 | struct tMasterKey 15 | { 16 | }; 17 | struct tNameMasterKey 18 | { 19 | }; 20 | struct tContentMasterKey 21 | { 22 | }; 23 | struct tXattrMasterKey 24 | { 25 | }; 26 | struct tPaddingMasterKey 27 | { 28 | }; 29 | struct tReadOnly 30 | { 31 | }; 32 | struct tVerify 33 | { 34 | }; 35 | struct tStoreTimeWithinFs 36 | { 37 | }; 38 | struct tLongNameThreshold 39 | { 40 | }; 41 | struct tCaseInsensitive 42 | { 43 | }; 44 | struct tEnableXattr 45 | { 46 | }; 47 | } // namespace securefs 48 | -------------------------------------------------------------------------------- /sources/thread_local.cpp: -------------------------------------------------------------------------------- 1 | #include "thread_local.h" 2 | #include "exceptions.h" 3 | #include "lock_guard.h" 4 | #include "platform.h" 5 | #include 6 | 7 | namespace securefs 8 | { 9 | 10 | namespace 11 | { 12 | struct ThreadLocalRegistry 13 | { 14 | public: 15 | Mutex mu; 16 | std::array taken ABSL_GUARDED_BY(mu); 17 | int64_t generation ABSL_GUARDED_BY(mu); 18 | 19 | static ThreadLocalRegistry& get_registry() 20 | { 21 | static ThreadLocalRegistry instance{}; 22 | return instance; 23 | } 24 | 25 | private: 26 | ThreadLocalRegistry() : mu(), taken() {} 27 | DISABLE_COPY_MOVE(ThreadLocalRegistry) 28 | }; 29 | 30 | } // namespace 31 | 32 | ThreadLocalBase::UnderlyingThreadLocalType& ThreadLocalBase::get_local() 33 | { 34 | static thread_local ThreadLocalBase::UnderlyingThreadLocalType locals{}; 35 | return locals; 36 | } 37 | 38 | ThreadLocalBase::ThreadLocalBase() 39 | { 40 | auto& registry = ThreadLocalRegistry::get_registry(); 41 | LockGuard lg(registry.mu); 42 | for (size_t i = 0; i < registry.taken.size(); ++i) 43 | { 44 | if (!registry.taken[i]) 45 | { 46 | registry.taken[i] = true; 47 | index_ = i; 48 | generation_ = ++registry.generation; 49 | return; 50 | } 51 | } 52 | throw_runtime_error("No more slots for thread locals"); 53 | } 54 | 55 | ThreadLocalBase::~ThreadLocalBase() 56 | { 57 | auto& registry = ThreadLocalRegistry::get_registry(); 58 | LockGuard lg(registry.mu); 59 | registry.taken[index_] = false; 60 | } 61 | 62 | } // namespace securefs 63 | -------------------------------------------------------------------------------- /sources/thread_local.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "object.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | namespace securefs 10 | { 11 | 12 | class ThreadLocalBase : public Object 13 | { 14 | public: 15 | inline static constexpr size_t kMaxIndex = 256; 16 | 17 | protected: 18 | using TypeErasedDestructor = void (*)(void*); 19 | struct Holder 20 | { 21 | // To distinguish reuse of a slot. 22 | int64_t generation = -1; 23 | TypeErasedDestructor destructor = nullptr; 24 | void* data = nullptr; 25 | 26 | Holder() = default; 27 | ~Holder() 28 | { 29 | if (data && destructor) 30 | { 31 | destructor(data); 32 | } 33 | } 34 | }; 35 | using UnderlyingThreadLocalType = std::array; 36 | static UnderlyingThreadLocalType& get_local(); 37 | 38 | protected: 39 | size_t index_; 40 | int64_t generation_; 41 | 42 | ThreadLocalBase(); 43 | ~ThreadLocalBase() override; 44 | }; 45 | 46 | template 47 | class ThreadLocal final : public ThreadLocalBase 48 | { 49 | public: 50 | using Initializer = std::function()>; 51 | 52 | private: 53 | Initializer init_; 54 | 55 | public: 56 | explicit ThreadLocal(Initializer init) : init_(std::move(init)) {} 57 | 58 | T& get() 59 | { 60 | Holder& holder = get_local()[index_]; 61 | if (!holder.data || holder.generation != this->generation_) 62 | { 63 | // Either the current slot hasn't been initialized, or it was left over by a previous 64 | // released `ThreadLocal<>` object. 65 | 66 | if (holder.data && holder.destructor) 67 | holder.destructor(holder.data); 68 | 69 | // Because `init()` may throw, we need to set the state of `holder` properly before 70 | // calling `init`. 71 | holder.data = nullptr; 72 | holder.destructor = [](void* p) { delete static_cast(p); }; 73 | holder.generation = this->generation_; 74 | 75 | holder.data = init_().release(); 76 | } 77 | return *static_cast(holder.data); 78 | } 79 | }; 80 | } // namespace securefs 81 | -------------------------------------------------------------------------------- /sources/xattr_name.cpp: -------------------------------------------------------------------------------- 1 | #include "xattr_name.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | namespace securefs::generic_xattr 9 | { 10 | std::string encrypt_xattr_name(AES_SIV& aes_siv, std::string_view name) 11 | { 12 | std::vector buffer(name.size() + AES_SIV::IV_SIZE); 13 | aes_siv.encrypt_and_authenticate( 14 | name.data(), name.size(), nullptr, 0, buffer.data() + AES_SIV::IV_SIZE, buffer.data()); 15 | return absl::StrCat("user.", absl::WebSafeBase64Escape({buffer.data(), buffer.size()})); 16 | } 17 | std::optional decrypt_xattr_name(AES_SIV& aes_siv, std::string_view name) 18 | { 19 | if (!absl::StartsWith(name, "user.")) 20 | { 21 | return std::nullopt; 22 | } 23 | std::string decoded_buffer; 24 | if (!absl::WebSafeBase64Unescape(name.substr(5), &decoded_buffer)) 25 | { 26 | return std::nullopt; 27 | } 28 | if (decoded_buffer.size() <= AES_SIV::IV_SIZE) 29 | { 30 | return std::nullopt; 31 | } 32 | std::string result(decoded_buffer.size() - AES_SIV::IV_SIZE, '\0'); 33 | bool success = aes_siv.decrypt_and_verify(decoded_buffer.data() + AES_SIV::IV_SIZE, 34 | result.size(), 35 | nullptr, 36 | 0, 37 | result.data(), 38 | decoded_buffer.data()); 39 | if (success) 40 | { 41 | return result; 42 | } 43 | return std::nullopt; 44 | } 45 | int wrapped_listxattr(absl::FunctionRef underlying_listxattr, 46 | AES_SIV& aes_siv, 47 | char* buffer, 48 | size_t size) 49 | { 50 | int rc = underlying_listxattr(nullptr, 0); 51 | if (rc <= 0) 52 | { 53 | return rc; 54 | } 55 | std::vector encrypted_name_buffer(static_cast(rc), 0); 56 | rc = underlying_listxattr(encrypted_name_buffer.data(), encrypted_name_buffer.size()); 57 | if (rc <= 0) 58 | { 59 | return rc; 60 | } 61 | encrypted_name_buffer.resize(static_cast(rc)); 62 | std::vector decrypted_names; 63 | 64 | for (std::string_view name : absl::StrSplit( 65 | std::string_view(encrypted_name_buffer.data(), encrypted_name_buffer.size()), '\0')) 66 | { 67 | auto decrypted_name = decrypt_xattr_name(aes_siv, name); 68 | if (!decrypted_name) 69 | continue; 70 | decrypted_names.emplace_back(std::move(*decrypted_name)); 71 | } 72 | 73 | auto total_buffer_size = std::accumulate(decrypted_names.begin(), 74 | decrypted_names.end(), 75 | static_cast(0), 76 | [](size_t sum, const std::string& name) 77 | { return sum + static_cast(name.size()) + 1; }); 78 | if (size == 0 || buffer == nullptr) 79 | { 80 | return static_cast(total_buffer_size); 81 | } 82 | if (size < total_buffer_size) 83 | { 84 | return -ERANGE; 85 | } 86 | std::memset(buffer, 0, size); 87 | for (const auto& name : decrypted_names) 88 | { 89 | size_t name_size = name.size(); 90 | if (name_size > size) 91 | { 92 | return -ERANGE; 93 | } 94 | std::memcpy(buffer, name.data(), name_size); 95 | buffer += name_size + 1; 96 | size -= name_size + 1; 97 | } 98 | return static_cast(total_buffer_size); 99 | } 100 | } // namespace securefs::generic_xattr 101 | -------------------------------------------------------------------------------- /sources/xattr_name.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "crypto.h" 4 | #include "myutils.h" 5 | 6 | #include 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | // Handling extended attribute name encryption/decryption 13 | // on platforms other than Apple. 14 | namespace securefs::generic_xattr 15 | { 16 | 17 | std::string encrypt_xattr_name(AES_SIV& aes_siv, std::string_view name); 18 | std::optional decrypt_xattr_name(AES_SIV& aes_siv, std::string_view name); 19 | int wrapped_listxattr(absl::FunctionRef underlying_listxattr, 20 | AES_SIV& aes_siv, 21 | char* buffer, 22 | size_t size); 23 | 24 | } // namespace securefs::generic_xattr 25 | -------------------------------------------------------------------------------- /test/main.cpp: -------------------------------------------------------------------------------- 1 | #define DOCTEST_CONFIG_IMPLEMENT 2 | #include "platform.h" 3 | #include 4 | #include 5 | #include 6 | 7 | int main(int argc, char** argv) 8 | { 9 | absl::InitializeSymbolizer(argv[0]); 10 | absl::FailureSignalHandlerOptions options; 11 | options.use_alternate_stack = true; 12 | absl::InstallFailureSignalHandler(options); 13 | 14 | #ifdef _WIN32 15 | securefs::windows_init(); 16 | #endif 17 | securefs::OSService::get_default().ensure_directory("tmp", 0755); 18 | 19 | doctest::Context context; 20 | context.applyCommandLine(argc, argv); 21 | return context.run(); 22 | } 23 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.argon2id.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "da7ee57b1ee598be2931d2c21739b975a270548a51f203e1bf275d3a50f8a487", 7 | "MAC" : "14299e59f4e875448ab63e2e88c94584", 8 | "key" : "af12e40594fc42582c45028df45e66c73feafed74effec7f2d056707503ab55f" 9 | }, 10 | "iterations" : 2, 11 | "max_padding" : 256, 12 | "pbkdf" : "argon2id", 13 | "salt" : "0c54fe6442f623c3bb4382394a544dc4f8e93f1dc152cd9514971dc6768a97e5", 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.argon2id.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "3473a58e95dd3dc96516f6ffb2e96bcf94c7ee4733e4ff4229469497a79c797f", 7 | "MAC" : "b678affbcb76a5b0b954f33c4bdc2c8b", 8 | "key" : "89fb64d34ef990d82d6ed82578d4891e84eec2fab9270e1828a75bb3935c6cbf" 9 | }, 10 | "iterations" : 2, 11 | "max_padding" : 256, 12 | "pbkdf" : "argon2id", 13 | "salt" : "cee823640dffa2670c61e75263a4778419897d178374c9cb998869e5d1bc9b74", 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.argon2id.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "7bb40ccd2e8ffa1f8e51ab835c826ae0987625090a1389a63bb281292347579a", 7 | "MAC" : "baba75fd8e72ba12b7cf7c0b1b756a9f", 8 | "key" : "1eec96917c9f3c16eb9799d00a3b4b66faa075e4cbb01b753a493d4743ffe834" 9 | }, 10 | "iterations" : 2, 11 | "max_padding" : 256, 12 | "pbkdf" : "argon2id", 13 | "salt" : "957d0b77370c9e1b819c7bffd06aca87cca3db727cc23ffbfcbf65be82190400", 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.argon2id.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "9713b8c4e2faea89437fda18efc9e6e4d8f798603a9d24f13e43d00dd0bb5977", 7 | "MAC" : "375661d2dd3cd76b00fccd7b8e0317bb", 8 | "key" : "57ef914089262594704f2243e6f40a80f7bdb714deecdf0e7b6346b59c1e34b8" 9 | }, 10 | "iterations" : 2, 11 | "max_padding" : 256, 12 | "pbkdf" : "argon2id", 13 | "salt" : "eb3be13f591f2ec193170e020f8d12533d7ca6d1181e1c160eef936ce9898e96", 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.argon2id.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "6a6034833426e30a2c5446d10e1a7c002bd52d0ce17d25509a5b65136b83ee68", 7 | "MAC" : "7919385f26d6151504ffab76a885d762", 8 | "key" : "e10a5cd9994b4d747ed57f3671cf342f55352c02bf4c8ecf238b474501e3764b" 9 | }, 10 | "iterations" : 2, 11 | "max_padding" : 256, 12 | "pbkdf" : "argon2id", 13 | "salt" : "212c05a158cb3a50014ea427bfe6ba92521f6867127ef1292bca460dba2470f8", 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "d431f4bdaca75e9fa4ab994c938d5618420b153feed08c2ed81338316809181a", 5 | "MAC" : "e446ef92c07220a3f908d51f5bd44848", 6 | "key" : "bc7e8f316db92f938bdcd3d3425a85168f5ce17cac77ad8080292dcb939739bd" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 11 | "salt" : "eadc437d1d45f60a4bb4a5a5f6b62fe369e31a567866f401078684803b8f21fe", 12 | "version" : 1 13 | } 14 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "0cb5c704b7cb0a6dd81ad4d50f3525f0fd9e87f768aa9c9a633f603c908776bf", 5 | "MAC" : "13726bb53b4356dafb0f5dc35a901bc8", 6 | "key" : "63ffaaa935b7f0e310f6214d058b00a795b8cc834983b7210e68186309c3c658" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 11 | "salt" : "064f8926a561767bbfc7c85afc8dba03bf6b6bac7b19dd0acc4fe0b04b71e815", 12 | "version" : 1 13 | } 14 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "54078e70fb6fc231986e47368d7e6f9613334efd5733bc0b1365841de7d2646a", 5 | "MAC" : "d32447e7fe5de2de130f1db140d76e7c", 6 | "key" : "a8d167464c5c876a3d1d7d267bb370d36203f5e814250ae3bc6aa677315ac5bb" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 11 | "salt" : "c415d5ff16fdfb42ad6c999cc2543fda1997af4eacdf083263b77f29475f254e", 12 | "version" : 1 13 | } 14 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "6468d2f5f92a607a68b0905136d6b61996883197d8bef2bba776b95678cce875", 5 | "MAC" : "161222470f786b767c83831fd9ecba0f", 6 | "key" : "774653197691700da69a2fc238b5fdd67faa245c8341aebcf829c7afeba55e4e" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 11 | "salt" : "fd50bd560e2c7b0603c76c62783943fce60746a88bce1e4d64bab05a85545992", 12 | "version" : 1 13 | } 14 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "af331257f464858bab04ecaeb01d1946d2f28b43e29531ec6e547a357962e902", 5 | "MAC" : "0ebea89aaf4c2f4984c9882cfb0c4b04", 6 | "key" : "bd8f975e999e1fd20d438be03c971dd8a1c111015bbeb192af29e71fb0d1b92b" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 11 | "salt" : "fedde996ab55f80d92c4b20ceb79e053fd8b658581c599a006dd5b490c00b32e", 12 | "version" : 1 13 | } 14 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.scrypt.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "303c833dfd7a18c7c70c2fff2db7be2a9735d78b1ef0b08e7d2d6ebe7a9141f4", 5 | "MAC" : "ad5231e0a196c190c9948a397196463e", 6 | "key" : "3417891a74d134ecd607a2271cb3bcb1ccf36f8b1e38215672d9447109fa9428" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "scrypt", 11 | "salt" : "61c37c40e4a70ad391f09efcb3b31f6b31463ed21914381b8cf89816df2e72f5", 12 | "scrypt_p" : 1, 13 | "scrypt_r" : 8, 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.scrypt.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "e9795439273ad3ecba61407f7ff7fcb68e6794c0cc7b67299d19b82e090d8809", 5 | "MAC" : "8905b216d79b5573670810375e4f720e", 6 | "key" : "6021edfeada83adde99f517792b88e6cff4fc6ce36041800e1d9cdef43e5352a" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "scrypt", 11 | "salt" : "f77d93f2b5a1ec7980456ee7e4788e49207b74ba60ee83b4b67a160a319325e9", 12 | "scrypt_p" : 1, 13 | "scrypt_r" : 8, 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.scrypt.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "480bc878e08124d73ff74e09076dd753ba654aa886d71ba8dcad4a771e36038e", 5 | "MAC" : "9ac94e977f3da6be706c7d3f991de768", 6 | "key" : "0725e387ca9744e8650fce2a1acff131dfe34b864ad2551c00ad92aca24224ec" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "scrypt", 11 | "salt" : "468280cf61f842124b89030df04c1a1da835fe44188ac94de6d704a5ce1a7858", 12 | "scrypt_p" : 1, 13 | "scrypt_r" : 8, 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.scrypt.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "aa41b71045b1a2f523f243a755d3fa7f3371f827ec4df537ca6f9291f0667d73", 5 | "MAC" : "06b684b40ec195349f58156ca4ed3039", 6 | "key" : "825588be303faa01cf182723944d76a5e57e214c731be6b2175748e2f04188b4" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "scrypt", 11 | "salt" : "03628f77a682f484dc9a3f0c91d4c1881a624d3f4f70a34eea148b327cd1e63e", 12 | "scrypt_p" : 1, 13 | "scrypt_r" : 8, 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/.securefs.scrypt.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "47ff01cacef04965017e299f95c4203ef986a84fedcdbe31712da47ee0f760e7", 5 | "MAC" : "3f46221c570a9413f315e05d92ea582e", 6 | "key" : "eab141bc11b3a59c305e812a399a69e4c9c9847220e024802e73b8c79b765cd8" 7 | }, 8 | "iterations" : 2, 9 | "max_padding" : 256, 10 | "pbkdf" : "scrypt", 11 | "salt" : "828154f4ac192d5b43336ef10d89586fdb7231c7caf8c80a6d1b00650e93b89a", 12 | "scrypt_p" : 1, 13 | "scrypt_r" : 8, 14 | "version" : 1 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/1-padded/00/0000000000/0000000000000000000000000000000000000000000000000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/00/0000000000/0000000000000000000000000000000000000000000000000000 -------------------------------------------------------------------------------- /test/reference/1-padded/00/0000000000/0000000000000000000000000000000000000000000000000000.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/00/0000000000/0000000000000000000000000000000000000000000000000000.meta -------------------------------------------------------------------------------- /test/reference/1-padded/09/aa7d29959e/e43bfa8ed54be77746fafbf0c147d5dcd26eb84e2356015ca91b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/09/aa7d29959e/e43bfa8ed54be77746fafbf0c147d5dcd26eb84e2356015ca91b -------------------------------------------------------------------------------- /test/reference/1-padded/09/aa7d29959e/e43bfa8ed54be77746fafbf0c147d5dcd26eb84e2356015ca91b.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/09/aa7d29959e/e43bfa8ed54be77746fafbf0c147d5dcd26eb84e2356015ca91b.meta -------------------------------------------------------------------------------- /test/reference/1-padded/18/b6cfc98e0e/ed208c1a59ca9450b419d482e44695c01c12ab1755853598d729: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/18/b6cfc98e0e/ed208c1a59ca9450b419d482e44695c01c12ab1755853598d729 -------------------------------------------------------------------------------- /test/reference/1-padded/18/b6cfc98e0e/ed208c1a59ca9450b419d482e44695c01c12ab1755853598d729.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/18/b6cfc98e0e/ed208c1a59ca9450b419d482e44695c01c12ab1755853598d729.meta -------------------------------------------------------------------------------- /test/reference/1-padded/3a/8b5bb07eb1/0d14e937af4ad1812e4709ee5c6b3cca2eb0dc31a89e336d8b8e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/3a/8b5bb07eb1/0d14e937af4ad1812e4709ee5c6b3cca2eb0dc31a89e336d8b8e -------------------------------------------------------------------------------- /test/reference/1-padded/3a/8b5bb07eb1/0d14e937af4ad1812e4709ee5c6b3cca2eb0dc31a89e336d8b8e.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/3a/8b5bb07eb1/0d14e937af4ad1812e4709ee5c6b3cca2eb0dc31a89e336d8b8e.meta -------------------------------------------------------------------------------- /test/reference/1-padded/45/1fb0a43294/a8a12782636708f6d1c08bfb9bcac144803137b469751baae392: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/45/1fb0a43294/a8a12782636708f6d1c08bfb9bcac144803137b469751baae392 -------------------------------------------------------------------------------- /test/reference/1-padded/45/1fb0a43294/a8a12782636708f6d1c08bfb9bcac144803137b469751baae392.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/45/1fb0a43294/a8a12782636708f6d1c08bfb9bcac144803137b469751baae392.meta -------------------------------------------------------------------------------- /test/reference/1-padded/4c/bc6a856542/8b893ac25bdb37dcbd35b5753a977af00d3a6c036acac8897c0f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/4c/bc6a856542/8b893ac25bdb37dcbd35b5753a977af00d3a6c036acac8897c0f -------------------------------------------------------------------------------- /test/reference/1-padded/4c/bc6a856542/8b893ac25bdb37dcbd35b5753a977af00d3a6c036acac8897c0f.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/4c/bc6a856542/8b893ac25bdb37dcbd35b5753a977af00d3a6c036acac8897c0f.meta -------------------------------------------------------------------------------- /test/reference/1-padded/5e/8afaf81eb5/39269a1182a5c56950196cbf31df77da294483d4fe33bbcd9320: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/5e/8afaf81eb5/39269a1182a5c56950196cbf31df77da294483d4fe33bbcd9320 -------------------------------------------------------------------------------- /test/reference/1-padded/5e/8afaf81eb5/39269a1182a5c56950196cbf31df77da294483d4fe33bbcd9320.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/5e/8afaf81eb5/39269a1182a5c56950196cbf31df77da294483d4fe33bbcd9320.meta -------------------------------------------------------------------------------- /test/reference/1-padded/89/c82a556714/7bb29e1841a557fe34cddc17b0d4b136e67106d3556819e15f7a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/89/c82a556714/7bb29e1841a557fe34cddc17b0d4b136e67106d3556819e15f7a -------------------------------------------------------------------------------- /test/reference/1-padded/89/c82a556714/7bb29e1841a557fe34cddc17b0d4b136e67106d3556819e15f7a.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/89/c82a556714/7bb29e1841a557fe34cddc17b0d4b136e67106d3556819e15f7a.meta -------------------------------------------------------------------------------- /test/reference/1-padded/8d/ab5cfaa3a2/ff87cb2d79ba3b77ed01f52711fbf16028dce07f38a86856c299: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/8d/ab5cfaa3a2/ff87cb2d79ba3b77ed01f52711fbf16028dce07f38a86856c299 -------------------------------------------------------------------------------- /test/reference/1-padded/8d/ab5cfaa3a2/ff87cb2d79ba3b77ed01f52711fbf16028dce07f38a86856c299.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1-padded/8d/ab5cfaa3a2/ff87cb2d79ba3b77ed01f52711fbf16028dce07f38a86856c299.meta -------------------------------------------------------------------------------- /test/reference/1/.securefs.argon2id.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "b7f3dc8622a8b847e8b083dcf2598885dff6f921755438c1d2dc4f5f7b7d2d1d", 7 | "MAC" : "db93f06bda984ab90cd01badb482ec19", 8 | "key" : "8e3e7f39b869a8a13de867d3df2afd28530d1bdbf0f848a2bdb5de4130402f2d" 9 | }, 10 | "iterations" : 2, 11 | "pbkdf" : "argon2id", 12 | "salt" : "91a81dcea607fc87ae80d2ebf26b2c4a1d8850edd5e7674a0a7c0b08f1f1ae84", 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.argon2id.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "59d6eb6f796698889ae9b219501c468cfb569393def17df4868e2f7307016917", 7 | "MAC" : "d827d1b0ab5a9c52174a0e7893054669", 8 | "key" : "01ed274824b9f9c2e1d4e1ffa938010f82771a536e9d7e9a972e948865e56484" 9 | }, 10 | "iterations" : 2, 11 | "pbkdf" : "argon2id", 12 | "salt" : "7f305c99aac6f1e5cf169ad0490c784b0d0dfa330183c6e1b91588b76ae8590a", 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.argon2id.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "6ed9637f706afc59ca4e4ff99aa40f65d3aef69e9e4b32bd4967b7fabca7b302", 7 | "MAC" : "c187c7cdec11bd99feb8d0db21536535", 8 | "key" : "aa827f794a411e23a776a009e1035710d1aedc354600122193dc4e86fd6a4ffd" 9 | }, 10 | "iterations" : 2, 11 | "pbkdf" : "argon2id", 12 | "salt" : "a611dfa8531d37a77b9954a4b8bb391c2aa3114c4ca0cfefbc63e3cd125f0c64", 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.argon2id.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "b35297fb6ff5402f8fac6819f9f0e8460a701d4af3a09e15220e529c4a29a08b", 7 | "MAC" : "9b9981c57b606ccc1b6376d95db3b110", 8 | "key" : "1b4601146360b33b138bcd984d508193e7d942b175e55d0c46c1f4879b216421" 9 | }, 10 | "iterations" : 2, 11 | "pbkdf" : "argon2id", 12 | "salt" : "4871498bbd39140706470c9dcd6953d21047c063fc66033f7ec25506920c222e", 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.argon2id.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "encrypted_key" : 5 | { 6 | "IV" : "0f51315e7db8318b6ab2462be266103e4c9d7a8611089e416e7c5c429315e615", 7 | "MAC" : "b79df105e7431a3e1d5b78c8af9c114e", 8 | "key" : "4d8b20118f6ac5dd0e10539e19463afd9e90305f42c00aa4a8708d852e796618" 9 | }, 10 | "iterations" : 2, 11 | "pbkdf" : "argon2id", 12 | "salt" : "26dc7010a1c0977f82d4cb5a1ab0eedc66b4f5fcafc0ca9fb36b56cbfb22e31c", 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "c79cbe3fc661354477ca23b9758f2e224c6ac27454cf3488a48c9aba754bf76b", 5 | "MAC" : "6b7ef9fa88f34f2f27e5de131b255319", 6 | "key" : "7425ef5479e03f2909884a0abe30145d9166229f78815391a79c1ad608003e98" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 10 | "salt" : "84fd9f9019402af416954a31318f1cae718856870c890e7163784e0501eb98bf", 11 | "version" : 1 12 | } 13 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "26e1fb1676d530e4b312cb014879e8490ebdc648c141f3bb4768b2ac51891fc1", 5 | "MAC" : "a5fab68a856f02a638ba44ba9a11c4ed", 6 | "key" : "ee4892ff486d4c8e2778dd57413779d90c6623a0b8ddf2102c530cefd8e53665" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 10 | "salt" : "c65adc4a4a18ea272d93cc61d6978f744d01f786d97c62c24d7cf2a2a786f54f", 11 | "version" : 1 12 | } 13 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "662242ec5cf7f44878de0f83508c7cefa3dee9347da3f50906d7c25ddea1aa10", 5 | "MAC" : "865e12e73a9d09fb3efe0ebaf086680b", 6 | "key" : "28198c5835eaa76a2cb629407abc74931de34fee90c12afc1668bc8f51d71250" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 10 | "salt" : "ea16fed7af963accc32cce3921af7a0824481e56b462c7dacc25b46df24c1587", 11 | "version" : 1 12 | } 13 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "4c5b6c6aeba12dd127ddebf6b1427aace4d6d27ce2ceb7e90b27760e4480fc1d", 5 | "MAC" : "19f732d4ca9029dc550359bcebd760c5", 6 | "key" : "ade9acbc43e4dd19199b6cdd3d7b4779c15d2249ef382c8f7945e741efc1ecd8" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 10 | "salt" : "8271d4a2e29cb0909daf1e3ea9a0644ee43dd028d7f0fecc90f27d915e6d3fa1", 11 | "version" : 1 12 | } 13 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "a9e10bf5d5fc936936b9d41e47283f13e2fcad58222e6c1947eccadb9696d2dc", 5 | "MAC" : "61f21bbe8d2a58b61e44618f74dfdbd4", 6 | "key" : "6386ff9be67fa7fd7a6beefe2f3034b71889c8ad22a2dea20c5512ecca7eaa1c" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 10 | "salt" : "360d5cd35b82c80e0bb746a560324d2e8a17c1139c443d8013a3b2baff8e8d46", 11 | "version" : 1 12 | } 13 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.scrypt.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "bc8ab97167c9eecef4d9df7cde003c124f6eb652416c01d6f798ea0a57a1b1b7", 5 | "MAC" : "8465d840caa6f23a4ecaf8e604168239", 6 | "key" : "fc616e9a6cc9bde3ddcfa8c43084802d395bd70ad5b5801cb1c5db61a247e0a8" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "scrypt", 10 | "salt" : "57d006a9ec155872ea1f9642e30d082826dbc53620dd190716201069212a517b", 11 | "scrypt_p" : 1, 12 | "scrypt_r" : 8, 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.scrypt.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "c2e28681344bf968ce681b5ccb8f712377c8599f610c2cb2201c745b78a17f6a", 5 | "MAC" : "dd84e978e671cddd1cdc4bb89a2dfc8e", 6 | "key" : "b95cde9f085953e48fc8dd2fe1731833f0022b2fa6696e238f9eb2efab02931e" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "scrypt", 10 | "salt" : "7f4093c84b3d4613f4b0e407d40cc8bd8539fd23430ec0a7632e4d169cf2d65f", 11 | "scrypt_p" : 1, 12 | "scrypt_r" : 8, 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.scrypt.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "2680252c6d8f4291efef1b39556b6c318266e6e0cc1dbdc822056e0d3ed5ed60", 5 | "MAC" : "857eecc3cddee4a111819b1c4de41a41", 6 | "key" : "b9218e93c80e1ff5df48abef12dc3a60a264ba541ca25089b5f7b1b0b7c330b7" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "scrypt", 10 | "salt" : "93d0713d77dff07041220574656a793d3e8235a1f4ed381a3ef0f5e6fb4b3525", 11 | "scrypt_p" : 1, 12 | "scrypt_r" : 8, 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.scrypt.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "48753f30f81c8b6cb86cc55857ea3f1f7bcba3e1c5a13777838680891be88199", 5 | "MAC" : "4df3938f6de52d52153cc5869c5f222f", 6 | "key" : "6b0005fc1eeff062b3782fe3d867b13a7afaa5e30f5a3caf759d01f24be36734" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "scrypt", 10 | "salt" : "2fd7d476065b24ef80f0d6ee8d9f531605307e351612393b3088de304cc84a1b", 11 | "scrypt_p" : 1, 12 | "scrypt_r" : 8, 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/.securefs.scrypt.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "encrypted_key" : 3 | { 4 | "IV" : "b8af4117c2488e1a38925a3ad0d6418042950cba8e66bf33f25c03698e3f693f", 5 | "MAC" : "8b86f2292e127e19416ade4d38b7bd39", 6 | "key" : "aca6803eb41f0514355d1b4912057af7e28f17ccdedcee812e40b649a3aa6a33" 7 | }, 8 | "iterations" : 2, 9 | "pbkdf" : "scrypt", 10 | "salt" : "6069c1b4f1be3c03d8afc0477bcb4d781e5ee8cc599d7cde2e344c1d6b97135c", 11 | "scrypt_p" : 1, 12 | "scrypt_r" : 8, 13 | "version" : 1 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/1/00/0000000000/0000000000000000000000000000000000000000000000000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/00/0000000000/0000000000000000000000000000000000000000000000000000 -------------------------------------------------------------------------------- /test/reference/1/00/0000000000/0000000000000000000000000000000000000000000000000000.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/00/0000000000/0000000000000000000000000000000000000000000000000000.meta -------------------------------------------------------------------------------- /test/reference/1/02/973dd64a26/f7486fced1b65807597e4a5ae0e81f4dd09659c689e631467e80: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/02/973dd64a26/f7486fced1b65807597e4a5ae0e81f4dd09659c689e631467e80 -------------------------------------------------------------------------------- /test/reference/1/02/973dd64a26/f7486fced1b65807597e4a5ae0e81f4dd09659c689e631467e80.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/02/973dd64a26/f7486fced1b65807597e4a5ae0e81f4dd09659c689e631467e80.meta -------------------------------------------------------------------------------- /test/reference/1/55/3e6e3d60c3/a3584ebf4435785a575b8d69bfaae8f61436db6c8108e86cd74c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/55/3e6e3d60c3/a3584ebf4435785a575b8d69bfaae8f61436db6c8108e86cd74c -------------------------------------------------------------------------------- /test/reference/1/55/3e6e3d60c3/a3584ebf4435785a575b8d69bfaae8f61436db6c8108e86cd74c.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/55/3e6e3d60c3/a3584ebf4435785a575b8d69bfaae8f61436db6c8108e86cd74c.meta -------------------------------------------------------------------------------- /test/reference/1/64/d1cea47bb1/a8bbc1cc9aa511044799cc68fd292d239d901356fd5dd6b9beae: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/64/d1cea47bb1/a8bbc1cc9aa511044799cc68fd292d239d901356fd5dd6b9beae -------------------------------------------------------------------------------- /test/reference/1/64/d1cea47bb1/a8bbc1cc9aa511044799cc68fd292d239d901356fd5dd6b9beae.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/64/d1cea47bb1/a8bbc1cc9aa511044799cc68fd292d239d901356fd5dd6b9beae.meta -------------------------------------------------------------------------------- /test/reference/1/79/9c0e508671/bea38900915cf37ec0010ff6bf1686a11458ce890c2db6180dea: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/79/9c0e508671/bea38900915cf37ec0010ff6bf1686a11458ce890c2db6180dea -------------------------------------------------------------------------------- /test/reference/1/79/9c0e508671/bea38900915cf37ec0010ff6bf1686a11458ce890c2db6180dea.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/79/9c0e508671/bea38900915cf37ec0010ff6bf1686a11458ce890c2db6180dea.meta -------------------------------------------------------------------------------- /test/reference/1/80/a8931f7b02/0ebff91b72e3dd6c28ef12bd4ea1d433b6b29493ecba7c5ac708: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/80/a8931f7b02/0ebff91b72e3dd6c28ef12bd4ea1d433b6b29493ecba7c5ac708 -------------------------------------------------------------------------------- /test/reference/1/80/a8931f7b02/0ebff91b72e3dd6c28ef12bd4ea1d433b6b29493ecba7c5ac708.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/80/a8931f7b02/0ebff91b72e3dd6c28ef12bd4ea1d433b6b29493ecba7c5ac708.meta -------------------------------------------------------------------------------- /test/reference/1/e4/6d47343dae/9c204bc07845b55a916d8df0fdeaa39ac1e800377ab44f3347ea: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/e4/6d47343dae/9c204bc07845b55a916d8df0fdeaa39ac1e800377ab44f3347ea -------------------------------------------------------------------------------- /test/reference/1/e4/6d47343dae/9c204bc07845b55a916d8df0fdeaa39ac1e800377ab44f3347ea.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/e4/6d47343dae/9c204bc07845b55a916d8df0fdeaa39ac1e800377ab44f3347ea.meta -------------------------------------------------------------------------------- /test/reference/1/ea/12103e809b/7b9c2c484734ad95a792e07eb0707ee5fd429950ea432fdffdf6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/ea/12103e809b/7b9c2c484734ad95a792e07eb0707ee5fd429950ea432fdffdf6 -------------------------------------------------------------------------------- /test/reference/1/ea/12103e809b/7b9c2c484734ad95a792e07eb0707ee5fd429950ea432fdffdf6.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/ea/12103e809b/7b9c2c484734ad95a792e07eb0707ee5fd429950ea432fdffdf6.meta -------------------------------------------------------------------------------- /test/reference/1/f9/41a1d0a6d4/11cca6dce3505b141c1bfa9e2c2a647c5dcb3c236ecb07c0153e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/f9/41a1d0a6d4/11cca6dce3505b141c1bfa9e2c2a647c5dcb3c236ecb07c0153e -------------------------------------------------------------------------------- /test/reference/1/f9/41a1d0a6d4/11cca6dce3505b141c1bfa9e2c2a647c5dcb3c236ecb07c0153e.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/1/f9/41a1d0a6d4/11cca6dce3505b141c1bfa9e2c2a647c5dcb3c236ecb07c0153e.meta -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.argon2id.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "50df5338214acced850d582e5fc11bc18faa3b883a703597c60a7dd4f2c3b94f", 8 | "MAC" : "14bac47cf6e9e37a31de84329ad723be", 9 | "key" : "8480f7ef305c64277c50975cadcbe00c88ab7b20a0d14260c291567575c2ccfb" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "7049dda88f7dc700b155b748a50187f00240f8cd1c58cfde59b9164b90b61e88", 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.argon2id.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "8e6d4cb2859afcaad1c8f18d99b7444a9021351c1c1e4be74e10b3f4c5d7d90e", 8 | "MAC" : "8d00b9527fca84352a104e5c89529be1", 9 | "key" : "1e67aeddf0ecc3761ff7001fa6dc2acf8ceab89d0909f36468ca24a709772257" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "9e6c919e80c2554922eb892d01e8f240e4c5d7d6380b16513dfadea16ac26cc7", 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.argon2id.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "289cded6ccc7df31e79db54665bd47abb52c88d0548195b122b0b7ecf9db54a1", 8 | "MAC" : "322bb23460d998430ebc864516f107d4", 9 | "key" : "dd732b054fd288f838c13b5a72b12e29720274882195377cf6bcd7f839e8ed77" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "8b266ec0cb309b136843cb152b2732863fa756e7e4a1ae2f124e5670f678fe69", 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.argon2id.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "4d279fbe20ac3380e45baf723c4448be805511dd39c1a6aec7779e92f86dda40", 8 | "MAC" : "32e8ab339091cdcffd2c9148f85d61bb", 9 | "key" : "1d401dcd47ab8a297a0d22305963a5f80a9b3f10e273a59dd6d7a2860a7c0b82" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "e1f954afe1b8443a4114b61031c1af4804808a222e044fbc5f77f157d1fc2a4d", 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.argon2id.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "62b409ac6a4d0e931c0eef580e02771e964bfb98326c5cb5e8abaf56bdd4feb0", 8 | "MAC" : "7a08a5c86ec99fa5ca53f212c2a353ac", 9 | "key" : "b28da391ef973f11d4e6964d0bed3adee5afdd4c01a42c744ae53c7e0ad0282d" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "26c93b2e4059a653b01770c234e6ebaa1d1be0c94f0094fbb6c26fb1e298dbb1", 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "2226540d930090e262d46feba14b67fd89451d3fc541d2f4c1b00e1a2d403b08", 6 | "MAC" : "ac030eb583571f6856f0824bd932335f", 7 | "key" : "287181cab7d4c181d0304d952269588b1c8f9b8b035509a23e1f318b22a9a3b5" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "7e089b422aa10839cb0946a556229267cbd98d66419fd9bb1b64aa495bba13de", 14 | "version" : 2 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "67bb577584d22738ece3a2d8471bae6bb146166a44f42190cf01904e00381816", 6 | "MAC" : "09ccf85377f96a12817e029248936f36", 7 | "key" : "ea9625c39931e483e280fc364d96afa161fd87c1903834fd67ff45b757691dab" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "cc630665a1b34d6265980bea7a3aaa962f270813d42ac38dfca2d9c26d80eb20", 14 | "version" : 2 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "3b68ce7d8b77d539d9489add5b6a12e98c4f173d26a9ea69179ebfb50b28e0b0", 6 | "MAC" : "4102665480ed910ce2074f9c400ab704", 7 | "key" : "ea15b083faf0fccce8860eeec30aeabc2ae719698dbeae98c7297d03a2b82777" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "91ca8984b7ea9f7451fb8ffe940ccdb0d087805a71233dc4cc06cce4574214c7", 14 | "version" : 2 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "7d86aa08ebe2d65d3d6d3e0a35b4a17e8e3def1f61a302393c1dde2a9c068352", 6 | "MAC" : "d2935b9e346f28dad279519b7187b4b4", 7 | "key" : "6eafa464c74837d96f463268618c6dbe29f0b8b9aa15992976433a7e0c68d91d" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "b6b562343cdee7c63698e265a1d9f96dd709d16aa3d627076a4d138f2f7d836a", 14 | "version" : 2 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "dd988df942bcceef3de9e5511d36b691402e551d90617915fab54c8c0a78d5c9", 6 | "MAC" : "d49c05b6aaa1d976d15d9383ca036cb6", 7 | "key" : "4b8711eb11bfb98657275e70aa62932a0d5993b81057d4e1359de092e7ca80f2" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "721a36a0b722809b2bc893aff136933fafbb3ce90a963ad755fbd591cce38512", 14 | "version" : 2 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.scrypt.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "a6dac10a546497fa12335b91342d46a4abf5f5dc3f804dd11832bccf678d022e", 6 | "MAC" : "1070bb0b74c0aa17362b8cc2c8e65dad", 7 | "key" : "56cca0682de7f82fe46b633ed64960b175dfd83307cfd8e0d9d7acc0752b47c0" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "cb32d279925c67e37815ca2595c605af3b806adb8501f6eae7f35b9b83cc1ac9", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.scrypt.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "577a4cce74f0b6b6ab70202c5a23b81a6eb3a9772f228d08d7b4bcfaf47c1f35", 6 | "MAC" : "c2af1ef1d555d9726758cda28ad85dd0", 7 | "key" : "f40ff09d451356fb190b8423cfd7d67a5c1bcdddf4582238e0af425cef9c8417" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "b5194c63d92cb8ac066c8d054390216cc366e6c1d8be5b4111c8260033047797", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.scrypt.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "44c49c5d8db23cd8d7ec5f2095b3035a072f42453af8778a1d18babed10aae3f", 6 | "MAC" : "218cff82ad583cb10863286e3d0c683b", 7 | "key" : "ca5efa9b72a16ce730cb35d91449e62cb26c4b0a07114243bf65ec05f228534c" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "ff47914743a6b6b89459e0a188022824cf4a17becd80aac5dd17437d27b7b319", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.scrypt.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "379653ce34b96c65164a4fa34494361147ad1a52b3ac312c9485578dbeccbfca", 6 | "MAC" : "932105c5c30ca844132fc9d9771144ad", 7 | "key" : "b27290497c3d1cc8d54eff9bf34091dae7f4b6561511f7ecb2681744c07cea09" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "b18ca2262295de223b6902edaba480ec0961bc53fad3ebb005e84dc08c6870f5", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/.securefs.scrypt.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "b59cece25018e4c4dc67b9903382a006b753ad2efb0715ab27ec3f1b4a12e620", 6 | "MAC" : "6310528e86da1cd0c0c798cc50f88797", 7 | "key" : "25490553b91f1d66ed4ca24d31e79f6e268654fb3ba5442a775fbc9067e966b6" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "e9a1ac5b37ee903be841202116634bc105178c6ea309ae46b11ac771dae81337", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 2 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/2-padded/00/00000000000000000000000000000000000000000000000000000000000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/00/00000000000000000000000000000000000000000000000000000000000000 -------------------------------------------------------------------------------- /test/reference/2-padded/00/00000000000000000000000000000000000000000000000000000000000000.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/00/00000000000000000000000000000000000000000000000000000000000000.meta -------------------------------------------------------------------------------- /test/reference/2-padded/1d/e5f2b66f5c6426765d3b8de6e19bf09cb7a3441b16a8322ff520243ec69b3b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/1d/e5f2b66f5c6426765d3b8de6e19bf09cb7a3441b16a8322ff520243ec69b3b -------------------------------------------------------------------------------- /test/reference/2-padded/1d/e5f2b66f5c6426765d3b8de6e19bf09cb7a3441b16a8322ff520243ec69b3b.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/1d/e5f2b66f5c6426765d3b8de6e19bf09cb7a3441b16a8322ff520243ec69b3b.meta -------------------------------------------------------------------------------- /test/reference/2-padded/4b/0317b74d5b5e8f97a9ac81d125edffaa634f03633f29e677367a4db8206ea0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/4b/0317b74d5b5e8f97a9ac81d125edffaa634f03633f29e677367a4db8206ea0 -------------------------------------------------------------------------------- /test/reference/2-padded/4b/0317b74d5b5e8f97a9ac81d125edffaa634f03633f29e677367a4db8206ea0.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/4b/0317b74d5b5e8f97a9ac81d125edffaa634f03633f29e677367a4db8206ea0.meta -------------------------------------------------------------------------------- /test/reference/2-padded/4c/8c3e95d29c797b1fd1c8a2c31540a53fe09d0458bac65138d06127426d936a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/4c/8c3e95d29c797b1fd1c8a2c31540a53fe09d0458bac65138d06127426d936a -------------------------------------------------------------------------------- /test/reference/2-padded/4c/8c3e95d29c797b1fd1c8a2c31540a53fe09d0458bac65138d06127426d936a.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/4c/8c3e95d29c797b1fd1c8a2c31540a53fe09d0458bac65138d06127426d936a.meta -------------------------------------------------------------------------------- /test/reference/2-padded/54/3e9a31a92783272b8fc47530adb1c9c697653fd25d9852c55af10d6885de05: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/54/3e9a31a92783272b8fc47530adb1c9c697653fd25d9852c55af10d6885de05 -------------------------------------------------------------------------------- /test/reference/2-padded/54/3e9a31a92783272b8fc47530adb1c9c697653fd25d9852c55af10d6885de05.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/54/3e9a31a92783272b8fc47530adb1c9c697653fd25d9852c55af10d6885de05.meta -------------------------------------------------------------------------------- /test/reference/2-padded/8c/d52ef7ffa4fd6776982588fb1cb0bfca3bd1b37b9faa97d3a2086593ccc84e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/8c/d52ef7ffa4fd6776982588fb1cb0bfca3bd1b37b9faa97d3a2086593ccc84e -------------------------------------------------------------------------------- /test/reference/2-padded/8c/d52ef7ffa4fd6776982588fb1cb0bfca3bd1b37b9faa97d3a2086593ccc84e.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/8c/d52ef7ffa4fd6776982588fb1cb0bfca3bd1b37b9faa97d3a2086593ccc84e.meta -------------------------------------------------------------------------------- /test/reference/2-padded/9b/85daea10bbb0b50f9e8d6ac7388329a103b718e8c8755068d7947557f20043: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/9b/85daea10bbb0b50f9e8d6ac7388329a103b718e8c8755068d7947557f20043 -------------------------------------------------------------------------------- /test/reference/2-padded/9b/85daea10bbb0b50f9e8d6ac7388329a103b718e8c8755068d7947557f20043.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/9b/85daea10bbb0b50f9e8d6ac7388329a103b718e8c8755068d7947557f20043.meta -------------------------------------------------------------------------------- /test/reference/2-padded/c9/3ee3c1c7141050c9a8fa2e56e6e2d1b1220c55ddcb4b78ecbfa00ef370d59a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/c9/3ee3c1c7141050c9a8fa2e56e6e2d1b1220c55ddcb4b78ecbfa00ef370d59a -------------------------------------------------------------------------------- /test/reference/2-padded/c9/3ee3c1c7141050c9a8fa2e56e6e2d1b1220c55ddcb4b78ecbfa00ef370d59a.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/c9/3ee3c1c7141050c9a8fa2e56e6e2d1b1220c55ddcb4b78ecbfa00ef370d59a.meta -------------------------------------------------------------------------------- /test/reference/2-padded/e7/e6f9393bd4ac12d272cf69ee738ef0e1c2ea6d93ce228eac4bb91ac169756c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/e7/e6f9393bd4ac12d272cf69ee738ef0e1c2ea6d93ce228eac4bb91ac169756c -------------------------------------------------------------------------------- /test/reference/2-padded/e7/e6f9393bd4ac12d272cf69ee738ef0e1c2ea6d93ce228eac4bb91ac169756c.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2-padded/e7/e6f9393bd4ac12d272cf69ee738ef0e1c2ea6d93ce228eac4bb91ac169756c.meta -------------------------------------------------------------------------------- /test/reference/2/.securefs.argon2id.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "a156a9d385e4611e7a3ff173f536aafc12238ce61043f850f86b07b939c9f270", 8 | "MAC" : "79c9f25709a4f4c925d8dfbdc78a3404", 9 | "key" : "b5449eda066c35f4be9f5c66ef509ee2dcbec02a2f68b4c6015a64005984d079" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "b53a6229ace8480a9d1f67ce72df448cd4d396ca23c69534c6048e922b07ec12", 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.argon2id.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "ac3376e22fca88ff8099a8e97b6c3996d91f0d0ed9277a473d0f1123b67db1b0", 8 | "MAC" : "448757f859d33dfe59533e3f27743382", 9 | "key" : "597a65acd0ede69a7c9cfca544338e1d23b132e2e1c3144738ece570d101e2b5" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "64d1e90c05acf130b8c4fbc02e95da01dc092619733f9b33b9be0c8eb618da6b", 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.argon2id.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "fe5bba79b41b4659fcee230e68e5dfc8037f68cbafbc8b4dcfe16d590a7e4b2f", 8 | "MAC" : "02322427269aea536421d053bb5f6e9c", 9 | "key" : "68bcc90356a19b1f9013a65702592d4fc320bb69ccd4e36c8776866db0b58186" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "3173259db2520fe719a382b3a0672f93060682d09b2612a51fe30d8ff37571fa", 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.argon2id.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "d6470dfe85dc036440bfa441e59786c877c2058f33dc3870fc88ac4c4d93dd29", 8 | "MAC" : "3aba064c95da08f279dc6917a9572825", 9 | "key" : "299ef860e3c61672b9a1e51a537cfcb33b98297ce07232dee2eb3d872206d545" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "70abd3eb6c5f5c20f268272bd148c54f4f60d3b63a775de2309890fba1268ead", 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.argon2id.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "1a8b40a9289859ccfcc381d11d9164d955b633ef76d42f3361479150714b737d", 8 | "MAC" : "99901df4c071918a001707064f12d783", 9 | "key" : "afa51ae497ba03b996f48f215704d81d6132f2d1e17507d0b65d4e9295b6e920" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "b246c1723021d085eef4cd1fb06afa890b50d28a34a292483944130c577cc10e", 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "eda641dc5d9703d60873597c29867b4220a31ff9f0ac0425c475a3f541d80235", 6 | "MAC" : "2688208713c09866f54a150ec018bc52", 7 | "key" : "586d9e7ba36dc13ad06d87a7a88fdbe2e607c4f139f17c98874febfa66a602b2" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "1eb63af8da615fabc8f0620d1d5da921551fa95ffd7d0b8bb0db26224e9c6324", 13 | "version" : 2 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "f72166ef4a42a442ef38217be83b1f0697afcb531f10779c39ddf7c6363cc6da", 6 | "MAC" : "0088d5ff6c7ba0d080bce2b83d9ae60f", 7 | "key" : "4e1a53ab6a27825d74b5119755bf417496f3550486a1afb0654db5b3dcfb62c7" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "3d402bbc96deb88ee810e756fda808e521a896093b65593c2adc8c84bcdf0014", 13 | "version" : 2 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "02a2a6696923eb4e0b2d4d5ef891872b6a6dc7adf1860c5324d86f7744ea1808", 6 | "MAC" : "61744944f22061c9ea1c713f5142af21", 7 | "key" : "832da4a43407097ca3ebbdf9339351d4299ebdffbb06705712304946111a7c06" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "d071ead50f2501b06c8df187e5629b48daed30077a6d250416ab50bc7a406cc6", 13 | "version" : 2 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "c9fc9f9cb12b3dd73cc1bace83c8268f401fb12bc2449f0fcb13a3af39bb9ba4", 6 | "MAC" : "704fc9b0fe8de6b6f4a81bed016f4417", 7 | "key" : "678835eb9fb3eb34204e99486c30d12fc8188431b903592e20cef43544f9be4e" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "0a1d4b783bbc0556aaddd7ed3b410a06bf744aa83dee1cdc7955473fdbf0ab03", 13 | "version" : 2 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "d48417c459f8a66159195636080d4560f812e0d0fde00b7c8142b63a73839a37", 6 | "MAC" : "872b3ddec8fda427b1d5fb5fde265c11", 7 | "key" : "7110c09b5e5800af3288b2940a81d6ea82d73c4260890aa1bbc1fc4603b7a562" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "fa523bffe41c014f81a3304925e2fd46625a5574d1f71b5d05fe666fb8e66bff", 13 | "version" : 2 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.scrypt.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "83f70a61f3ac823460b465b5dd951825ef6f57623061c8f05a33635cd0e17d90", 6 | "MAC" : "8d029a2ad6b998ed5eca3ad728844160", 7 | "key" : "9486c7efa6f60ea9df8464e7d0b672386409a4789bc1b8549bc4db17cde4baeb" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "1ad58296db414f663f6aae2f6ebef448253a4071eb05f2f17e4fb168e1c2d025", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.scrypt.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "dbbf4ffab7d3a5c8e8a44533cdf28ec290d321efbc37de4e816d5005bf435913", 6 | "MAC" : "a5c36b97153cbfa2be90d4fed7569212", 7 | "key" : "c264f6be9ed842ebd837a574903f9f2011b561c086b509e378a26c22aceeb64a" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "40a9d719635ea633c7e9b7e74a8392ce63cf697eac174f492842ecd4a1d880df", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.scrypt.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "86eed9ddf2d40ae47d28211eb47c2ae0a7d7d990d782c3a0b1701f5b0d3af85b", 6 | "MAC" : "87b36f2b8146fa622c66492b84c2ff25", 7 | "key" : "7806fba18e53977ad5a5d176593d9b526cf4c3f44d5b33a9448d28fc18927acf" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "e288c1dc0068699de0caa2e4e18cf9177758f67a3fdbfa96578abc1a2922b745", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.scrypt.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "75db43b53ffe497775b19ec7fcaaaecc666fd059d12abe2b92622f6fe235d482", 6 | "MAC" : "4368e2d453cc296670430f146e643b78", 7 | "key" : "e2e164348d5cbd6383d8ad20023cd93bf4a683731adf88db6010eced855dc376" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "1a3d39abec941f76f15670790f4f41a0daa4342b06869e7f705c0ad6f8f74ac6", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/.securefs.scrypt.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "77c01fae23be1a45da7805263ead987bafebf7df989a43f38e2a93ebd8e0cd90", 6 | "MAC" : "435cc2e02f20ced049262e9ff05f3d14", 7 | "key" : "2e6b16393b1b9c52f168c8facc5c3a14a22169b94b43358ab8228a938e1c7210" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "b9eaa702f7486a09970d68798a4c8cfc4b1fa0cb3c82485b254f71eb55a62581", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 2 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/2/00/00000000000000000000000000000000000000000000000000000000000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/00/00000000000000000000000000000000000000000000000000000000000000 -------------------------------------------------------------------------------- /test/reference/2/00/00000000000000000000000000000000000000000000000000000000000000.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/00/00000000000000000000000000000000000000000000000000000000000000.meta -------------------------------------------------------------------------------- /test/reference/2/28/dcac7797555f58496235df82ad988cca7b7427eb2e090dd8cec69122157639: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/28/dcac7797555f58496235df82ad988cca7b7427eb2e090dd8cec69122157639 -------------------------------------------------------------------------------- /test/reference/2/28/dcac7797555f58496235df82ad988cca7b7427eb2e090dd8cec69122157639.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/28/dcac7797555f58496235df82ad988cca7b7427eb2e090dd8cec69122157639.meta -------------------------------------------------------------------------------- /test/reference/2/29/607732f65f8dbbf2a8054906601bd1539f9d1fe0a351f51368f48f6a492323: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/29/607732f65f8dbbf2a8054906601bd1539f9d1fe0a351f51368f48f6a492323 -------------------------------------------------------------------------------- /test/reference/2/29/607732f65f8dbbf2a8054906601bd1539f9d1fe0a351f51368f48f6a492323.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/29/607732f65f8dbbf2a8054906601bd1539f9d1fe0a351f51368f48f6a492323.meta -------------------------------------------------------------------------------- /test/reference/2/31/9ad3f2da476c5d0cfa82e2f6b6221ae775ff684af9efaa57c320492fff512d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/31/9ad3f2da476c5d0cfa82e2f6b6221ae775ff684af9efaa57c320492fff512d -------------------------------------------------------------------------------- /test/reference/2/31/9ad3f2da476c5d0cfa82e2f6b6221ae775ff684af9efaa57c320492fff512d.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/31/9ad3f2da476c5d0cfa82e2f6b6221ae775ff684af9efaa57c320492fff512d.meta -------------------------------------------------------------------------------- /test/reference/2/52/4f94d5052bd9e2be2598c396e42eacf72fcdad9f2519446f329f194904bcf2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/52/4f94d5052bd9e2be2598c396e42eacf72fcdad9f2519446f329f194904bcf2 -------------------------------------------------------------------------------- /test/reference/2/52/4f94d5052bd9e2be2598c396e42eacf72fcdad9f2519446f329f194904bcf2.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/52/4f94d5052bd9e2be2598c396e42eacf72fcdad9f2519446f329f194904bcf2.meta -------------------------------------------------------------------------------- /test/reference/2/58/cc1a68d292b31e2102dc2812d12cdfe25f2299de3fd01dd2243121a1589ab2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/58/cc1a68d292b31e2102dc2812d12cdfe25f2299de3fd01dd2243121a1589ab2 -------------------------------------------------------------------------------- /test/reference/2/58/cc1a68d292b31e2102dc2812d12cdfe25f2299de3fd01dd2243121a1589ab2.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/58/cc1a68d292b31e2102dc2812d12cdfe25f2299de3fd01dd2243121a1589ab2.meta -------------------------------------------------------------------------------- /test/reference/2/60/68410310f845b7be120a579c3ab3bdc2608b063785e9dda5a0ad6c12218f65: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/60/68410310f845b7be120a579c3ab3bdc2608b063785e9dda5a0ad6c12218f65 -------------------------------------------------------------------------------- /test/reference/2/60/68410310f845b7be120a579c3ab3bdc2608b063785e9dda5a0ad6c12218f65.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/60/68410310f845b7be120a579c3ab3bdc2608b063785e9dda5a0ad6c12218f65.meta -------------------------------------------------------------------------------- /test/reference/2/86/431c4b593922269b7077479ae3151180c1e750bfeff7c0e19629cc5a703f24: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/86/431c4b593922269b7077479ae3151180c1e750bfeff7c0e19629cc5a703f24 -------------------------------------------------------------------------------- /test/reference/2/86/431c4b593922269b7077479ae3151180c1e750bfeff7c0e19629cc5a703f24.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/86/431c4b593922269b7077479ae3151180c1e750bfeff7c0e19629cc5a703f24.meta -------------------------------------------------------------------------------- /test/reference/2/db/a9f4fba8fe28d97ff279418fe5b81d16e832761d6868ac7f42880148478701: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/db/a9f4fba8fe28d97ff279418fe5b81d16e832761d6868ac7f42880148478701 -------------------------------------------------------------------------------- /test/reference/2/db/a9f4fba8fe28d97ff279418fe5b81d16e832761d6868ac7f42880148478701.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/2/db/a9f4fba8fe28d97ff279418fe5b81d16e832761d6868ac7f42880148478701.meta -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.argon2id.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "cfedee6cfb6a54eeee4ded2d74c18ae8a9da7164f5710bbdb43a22a834096e2a", 8 | "MAC" : "a8433151d2ecd4668e47fe13e01246de", 9 | "key" : "6b0c3d04c32395c2b8e6e99dd4e804aa8cc2b6117df3db661538dea2447eb11f" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "ebe7c064ddd45bf3b90592c99eafec3f28e0accbf278e88cf0f54604749391bf", 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.argon2id.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "3bebef10dd9891337a2cf3876a699b78e0d5cfcafb1186969e5e46dddc98fff7", 8 | "MAC" : "cafab88c0251cbe745ef5373e2cbeba8", 9 | "key" : "c955f00802a7ec671a20bcf15192d49a93fa03abd28bccfa0e7dbe4d80cc6ac0" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "6ba9395cdeea6668f88ed1f4de5a74ba3faf3d340db91f8dbc2fca747a71125d", 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.argon2id.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "e6fdd6b4da84371ab7b3bed57f32fcb861c81ed7496deb671253b5e47489963f", 8 | "MAC" : "4c17dafd51cbde8812d50c75f0788ba0", 9 | "key" : "ef3c6d9d79f0a48a0256481ad29769dd87d4bf6d31943225a1c7c55cb67819c1" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "f9e99193da4d9b948bf4c4ac3880a390587de12b8e1bf87fbbd4ca55b4a1c417", 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.argon2id.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "9df35e90f1ef2569c3ed574fc19a53c4527cbfc3004ee96c81801163a9a10ab7", 8 | "MAC" : "1b770c52514851ec843d37790a1f5852", 9 | "key" : "c9e7d4fbacd2cca437730121a129f76862dddd342db745be0c57ee13c4a11127" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "2bd31c55324f0a902ff97afca326b2c4fce8d4cab7c43a1aefbd435d7ed3ab5f", 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.argon2id.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "d7a4bbc1e242c5f7da731c1429703f655206428111e147430a9ad7c6a0d2073a", 8 | "MAC" : "35afb40155138c3ec69c497dd6793417", 9 | "key" : "12a19e9a94bfa3d7903ddd47c54b98fb335c1b48b38e1113db0ba740784e641b" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "b7d44e7df497cd9afa06e7eb5c9ff373b9b52172bc95ff15c969d85d31660969", 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "a59a63133a0825f38518a8cf3f126eb8e276fb255fd117df1873a4967f0a75cc", 6 | "MAC" : "174e7acb40d9d4b4961a5a057f505e30", 7 | "key" : "dfea3434c77e3548a51218d066022ebf9160e9c4a4c4fb0f4306590b8059b7b7" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "64e3560b7b673bd883dacd0f929402d8c144b1fad7f9dab81b91fe7c4cb92b7e", 14 | "version" : 3 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "bee9eae27366937b6ceb69c564c1a585509ef10ba2000dced80485c1e2156a0e", 6 | "MAC" : "2a211c8a4af5b2f254691ba19accc88b", 7 | "key" : "d16d57786dc432babc0c34107674a3222c388dba0b0a375858d1da2d5b7d4828" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "c0e3d3a8fe45108532a491576b4640576125cc71c473c7614d13a2f6df92263c", 14 | "version" : 3 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "a8eacca8d0360498fb03a225802e3ab0e006dd6b8eba33a9f1346d8c4266f8c7", 6 | "MAC" : "6e885291e07e65e2d910fd2dc3b3a58c", 7 | "key" : "d32d4d33bb9f7d67004d306903cea1e3cba36bb9f20e763d51b05d8f8891aef8" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "fd5e31fddd45ebffff08cc0e5c4d6d0bdcf1a433b80cd6f31ef594d150a0bfe2", 14 | "version" : 3 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "3f63db9fc228e08aabb68dfa4cfc351ab3e252e2d2e7c56a68b9cc555cce5ca4", 6 | "MAC" : "b6b7c5a67e7773b1fad1df803c82bbd1", 7 | "key" : "caf78f8498ecce6b966789a820e1ab08baab84508c342936bf1bec6427b7416b" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "6a58b7814b4b02afe4b8369f92227f82ca40700f0120890c22c6cd8f6fe9c987", 14 | "version" : 3 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "f8921f5cbb2f2147b854175ac8f2128155f63bd74b3eeded5ef673ae23e78e33", 6 | "MAC" : "a269b253bedae101b6faaaf235897743", 7 | "key" : "fc1a533273fb375ba2e1cf7c1feb3d9bdadac7028ca2068cb4aad76af13a93e7" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "113ea9803d56b0db78d999df21f91af6875d3c41dcd4bbdfb09978751ce58d5f", 14 | "version" : 3 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.scrypt.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "46269dca64f4db470cf0453f995a8c2e2b04bd6b2c3390ea68ca0edbb50ab7ec", 6 | "MAC" : "42fb4bff4784657157d09f44005403ef", 7 | "key" : "705c7d2911c11f6431c71df4c746c5a29e232b2c148aa1035b7d31d8e531c1b7" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "cf4e6b1ea83fd5cec4f5d44ad9f154bf1ac0b082ac8a390dfa6eedadace5b10a", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.scrypt.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "e00f93575fa6466a9e2131936534326a6e308bfda73293abbf745a80b2501ea6", 6 | "MAC" : "4d0dcab92276a3b6be685ddfc35ef784", 7 | "key" : "2be7561de5a2e868d368900c65014e71b1d4851fb0cba863c3b158461387773c" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "84ac772ec873e5c713d6c7951d458de02a07f1f1b6cb4f3bfe711d5c263c0164", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.scrypt.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "1859e19edffd9d39c74a1429fcd9f41acd3b1084d6172191512b552b08a1deb4", 6 | "MAC" : "b121f1e5032312e8712057516337bd46", 7 | "key" : "a2455cd29394f0088cd4e20f37fe42a6d734c11267d1948d324dc4ec1e50079e" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "627240297a530f1cacb02842b432e6deed62a2e2d96347cb4540876565939ad1", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.scrypt.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "19f2847363d3fb2cac7ce4b29020691d09b2fead83f317617a7e75d0aff6fa57", 6 | "MAC" : "b2dba0c027c89497371a4560c3109a51", 7 | "key" : "d41a59578cf6cb5abbf5cc31e60e9024382c8b17fcb543738c675cd5c46e8a62" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "8de33b2520d0c7ea6cfb22ca4f052364f07e62a3b78bc40b31feeaece9e58c82", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/.securefs.scrypt.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "d88f9eba67b174d9fef75341f1f69985d16a762ebd2a3a55ceda3d2c5b962cb2", 6 | "MAC" : "83a80ec6b25e07fa549420c3d7c61bc6", 7 | "key" : "a631fd5a88aea9e6af90ed4e203dd5e26dcf679d0a077da97690218f04bb83b1" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "cda6ce654d8f027e61478762a8051e4954ffe6812d0b980e58444fe550432f04", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 3 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/3-padded/00/00000000000000000000000000000000000000000000000000000000000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/00/00000000000000000000000000000000000000000000000000000000000000 -------------------------------------------------------------------------------- /test/reference/3-padded/00/00000000000000000000000000000000000000000000000000000000000000.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/00/00000000000000000000000000000000000000000000000000000000000000.meta -------------------------------------------------------------------------------- /test/reference/3-padded/55/aea882889d6a2cf8a4954ba62aca318244fea1d6f3a5b6b4523f1cc294aa0d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/55/aea882889d6a2cf8a4954ba62aca318244fea1d6f3a5b6b4523f1cc294aa0d -------------------------------------------------------------------------------- /test/reference/3-padded/55/aea882889d6a2cf8a4954ba62aca318244fea1d6f3a5b6b4523f1cc294aa0d.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/55/aea882889d6a2cf8a4954ba62aca318244fea1d6f3a5b6b4523f1cc294aa0d.meta -------------------------------------------------------------------------------- /test/reference/3-padded/61/df00c83ca67af03afdd285b754a660d678bea05a5cf014c7f970a384d1492a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/61/df00c83ca67af03afdd285b754a660d678bea05a5cf014c7f970a384d1492a -------------------------------------------------------------------------------- /test/reference/3-padded/61/df00c83ca67af03afdd285b754a660d678bea05a5cf014c7f970a384d1492a.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/61/df00c83ca67af03afdd285b754a660d678bea05a5cf014c7f970a384d1492a.meta -------------------------------------------------------------------------------- /test/reference/3-padded/94/164b4ee1a9c7bffa9447858aeb85e52742d357f1500450ccb8c0b41a200415: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/94/164b4ee1a9c7bffa9447858aeb85e52742d357f1500450ccb8c0b41a200415 -------------------------------------------------------------------------------- /test/reference/3-padded/94/164b4ee1a9c7bffa9447858aeb85e52742d357f1500450ccb8c0b41a200415.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/94/164b4ee1a9c7bffa9447858aeb85e52742d357f1500450ccb8c0b41a200415.meta -------------------------------------------------------------------------------- /test/reference/3-padded/b1/92369d6526f986a2114b202bf5bb942b85a7dd76551389e559204c965e68d2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/b1/92369d6526f986a2114b202bf5bb942b85a7dd76551389e559204c965e68d2 -------------------------------------------------------------------------------- /test/reference/3-padded/b1/92369d6526f986a2114b202bf5bb942b85a7dd76551389e559204c965e68d2.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/b1/92369d6526f986a2114b202bf5bb942b85a7dd76551389e559204c965e68d2.meta -------------------------------------------------------------------------------- /test/reference/3-padded/b6/9e1c5c87778226655d14ab39a7050be9455eec054e28aa53e99edebad81c7b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/b6/9e1c5c87778226655d14ab39a7050be9455eec054e28aa53e99edebad81c7b -------------------------------------------------------------------------------- /test/reference/3-padded/b6/9e1c5c87778226655d14ab39a7050be9455eec054e28aa53e99edebad81c7b.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/b6/9e1c5c87778226655d14ab39a7050be9455eec054e28aa53e99edebad81c7b.meta -------------------------------------------------------------------------------- /test/reference/3-padded/b7/c78515d8ff91be615f39308ff44f0f01415fe2699171b25c600d11a1ac8ddd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/b7/c78515d8ff91be615f39308ff44f0f01415fe2699171b25c600d11a1ac8ddd -------------------------------------------------------------------------------- /test/reference/3-padded/b7/c78515d8ff91be615f39308ff44f0f01415fe2699171b25c600d11a1ac8ddd.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/b7/c78515d8ff91be615f39308ff44f0f01415fe2699171b25c600d11a1ac8ddd.meta -------------------------------------------------------------------------------- /test/reference/3-padded/e3/5e2ae5e2fc05f4cae9dcfc73766764419d16bc5c4f0e8b221ac4683fe3a0fe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/e3/5e2ae5e2fc05f4cae9dcfc73766764419d16bc5c4f0e8b221ac4683fe3a0fe -------------------------------------------------------------------------------- /test/reference/3-padded/e3/5e2ae5e2fc05f4cae9dcfc73766764419d16bc5c4f0e8b221ac4683fe3a0fe.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/e3/5e2ae5e2fc05f4cae9dcfc73766764419d16bc5c4f0e8b221ac4683fe3a0fe.meta -------------------------------------------------------------------------------- /test/reference/3-padded/fc/d69806e2242bce1874b73ddbc933cd8420740ea19eacb0235554cfd94f50c0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/fc/d69806e2242bce1874b73ddbc933cd8420740ea19eacb0235554cfd94f50c0 -------------------------------------------------------------------------------- /test/reference/3-padded/fc/d69806e2242bce1874b73ddbc933cd8420740ea19eacb0235554cfd94f50c0.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3-padded/fc/d69806e2242bce1874b73ddbc933cd8420740ea19eacb0235554cfd94f50c0.meta -------------------------------------------------------------------------------- /test/reference/3/.securefs.argon2id.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "6250a5eed5690f326302c4328171f152be37787334d12ca316f455da84cc4fb2", 8 | "MAC" : "451359fcff33b45ed7fce2bb915409de", 9 | "key" : "fb8f91228a9055320b1e106405e7e3308e9fef5142ad21e4d177e494e8b9593e" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "6f5905d32055bc8074deacc817c7a3678571eadfee43b917877184b3aa1ea549", 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.argon2id.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "9af0e3620eea489b5b85432dac865b355f7e95038f30bfd25f7aa70499f4468b", 8 | "MAC" : "f7a04c4a2bcef64bfc7378b90648f020", 9 | "key" : "4c2257cd1e13320a1f0a7d47297fecc0f51647c93d8f354f50e1dff05497fce1" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "c94dd9f7db4db00638514dc060eed05b2fddf858ae4b9489fcbe91cb8a989372", 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.argon2id.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "243986aef6fdb93ecf37237c6a3b531b6d313fc8c0bb71c3582cc6b683ec8e54", 8 | "MAC" : "6b1430069b6ed25b697ecf74ec1cbb38", 9 | "key" : "a32e0e374be9285afe39de68b2e0c6879b920a460f3796627228e8c88f507205" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "326deae503ab919cf7f855b97539b626bdedd2f4762e5fc01c0161651617e166", 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.argon2id.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "1ba7c12fb39f7eaa28b5ebd82355494bddc2c466a5a22c01a7802a6e4ea7e9af", 8 | "MAC" : "f1c75dc91942a7997b16018fa18f5419", 9 | "key" : "285e094b025b3310f0602ddaf1688702ccbb70b81b85ce287a901273f7bf625c" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "01c491d5d9b48294531ca4eb4f5b37728b72bdcb85a404fb5b61839123bc03ec", 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.argon2id.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "2974eaf1d589732c3cb2a76c7db4b4489bf5f0032dd1947eeca885b41088a9cd", 8 | "MAC" : "bdf33202296a9e1c72815376f8cb6991", 9 | "key" : "95f1ab1506b6826d482d8c724696496af6f09d1f38ebe84928a43f94d165ec22" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "f83be4b3e5d06e8574bdc1bbfeeaf9f76725d385f108b350dd0a6381626e5dc0", 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "88a09c2c58b13da51b6de69002365ed8ee16c9bd34015d76de6ff2867619b6ad", 6 | "MAC" : "18e7f9f71be35292955a7c6df2e1126f", 7 | "key" : "93edddc812a9386ab148ef099be5329d33db48a6efc1ff4800a4aa7a65da8266" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "d8073c8f0d5b07b7230613382f8af99092cdb72dcc29360d2fb6b8a9ec0e10cc", 13 | "version" : 3 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "865387d76acfcb62720d8b0f8fb777a0ec0b19e361c187ae57cf9bb17eea6dfa", 6 | "MAC" : "78e2ba05d7515e41f29f87e8ec21e925", 7 | "key" : "2006a5ca01d19917843bb5892096e2406c092a1ed60fc5cc928e0a17d0cd6372" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "0afd452caab732f5041c7b9646c9a4cca8aa3845b69e68abcec80777f2b1ee06", 13 | "version" : 3 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "ccbbaa0b1c8984745c6127968927e2f210ee4de9b219d8f7a37eb720d0483154", 6 | "MAC" : "ccf6e51aacadf40601e17a45be0d1464", 7 | "key" : "fb87fc88fb8a51ec860416f4ebdcd220faaf435849055e91cc85e59ecf687d67" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "ad30fc3ce284fae3a0ba2737aabdf5a66f8d90dbea25031c884a3d26cd79df1c", 13 | "version" : 3 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "56f68b1cb1ad8d1caf4c7810d4a03d546743b26d61d417a99af2e43fd7b879bc", 6 | "MAC" : "cb55bfccb0b85ef33b01f0fc75340559", 7 | "key" : "5b3cad4b17f51f63ce27d27486481815456bdcf503da4f51998f3e640f69c420" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "8a656baf405c709d6efae58a3c48554a95328c9fe359d7def1621c68bfab9b31", 13 | "version" : 3 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "9bf6ddb042c03afa99d2a37b9f6ef30d0f53606877399d1549188d00609026f4", 6 | "MAC" : "1805581e4354cde6059b9b7f712cf6fe", 7 | "key" : "f8407e2eb4a7c9e68931becfcbd63f56cadc54c2515e173d0a8649b3828baac8" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "41fff7c47f9f24d386daa5194f0d0a5ee1623c4e9843f18fd087b3af1b633691", 13 | "version" : 3 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.scrypt.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "f57fd1c1c8e712bdaf54c0252bbbe0e87fa1963be1063d4660ef5c9e2ae17365", 6 | "MAC" : "b7bba481a0038b1536eb4bf543fdd85a", 7 | "key" : "813f83d5a4f8d3d6ea7cad8e9bde47c3009d99f62085d0a8f03741ea677ef4db" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "4750805e98d9c1d1c071fd6ebbcf8bd536b1e84eb1cd99450fd3520b19b8b464", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.scrypt.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "9e5a8138260f1d093efc6afabc194dc77e9b0342c0027b1e9d32b34406a14d6c", 6 | "MAC" : "1eea23da2c86de956c9aca2111e7c2e8", 7 | "key" : "1a0dc3c09d0003722474b65e7d9032e9edad7bafe04eef831895dd9168182574" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "e7d4d641a8dc66c9f0679e3ceb98a4d0a98a7e3f821b92e23b18e171173c8a99", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.scrypt.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "3fc263e60b36260011096fbac33742b4f36967cf0ca344c703c1d87f5cba70d2", 6 | "MAC" : "15dfa0c77de8497aa107610a1671cc13", 7 | "key" : "60ad0df7efdf3d9c4945480ef39877be3aee8db6833477471c97a14921c0454d" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "c6da2c96e7fbe34b5ce797526c35e224705ef606d5de1412ab73c802f789d1f6", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.scrypt.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "ea7939b494107bb03da21b5d845af2ec7e57e47e06510aec02b1b8c0c053f970", 6 | "MAC" : "8d84e6d85e06c7880e2cdbb4a8bb0d57", 7 | "key" : "da2aec7d1305e7e959877213f1eb1131154fe43dbfd0b9d1981c1d0bcd5bda80" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "f5fb7774f94fcad05849152c375c6cadf247778c933c5add18acab24ba7cd947", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/.securefs.scrypt.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "b09e395eb676cfe086d1245e3c3e95f2422e1acf924c19fe69aa136a70ddd7d7", 6 | "MAC" : "b2d89baf57a85d5eb364cde3e6c3a7e9", 7 | "key" : "05438c5dd5aeb98ce44dc0399001b472c2a2c5d1e0d0cc18951031a807313928" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "49083c3b41904e7e75e7fafd0705cbc5ba52f5b750fd6518e4ceb47aeddfd868", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 3 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/3/00/00000000000000000000000000000000000000000000000000000000000000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/00/00000000000000000000000000000000000000000000000000000000000000 -------------------------------------------------------------------------------- /test/reference/3/00/00000000000000000000000000000000000000000000000000000000000000.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/00/00000000000000000000000000000000000000000000000000000000000000.meta -------------------------------------------------------------------------------- /test/reference/3/09/fb9c4a304ed354dcae1aa09edf4359ebf9bf0676dfb4384042c0499c866fdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/09/fb9c4a304ed354dcae1aa09edf4359ebf9bf0676dfb4384042c0499c866fdb -------------------------------------------------------------------------------- /test/reference/3/09/fb9c4a304ed354dcae1aa09edf4359ebf9bf0676dfb4384042c0499c866fdb.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/09/fb9c4a304ed354dcae1aa09edf4359ebf9bf0676dfb4384042c0499c866fdb.meta -------------------------------------------------------------------------------- /test/reference/3/3a/01ce729da045156bbb64f5f3647727d83eff81101d422d09d166b167582c77: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/3a/01ce729da045156bbb64f5f3647727d83eff81101d422d09d166b167582c77 -------------------------------------------------------------------------------- /test/reference/3/3a/01ce729da045156bbb64f5f3647727d83eff81101d422d09d166b167582c77.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/3a/01ce729da045156bbb64f5f3647727d83eff81101d422d09d166b167582c77.meta -------------------------------------------------------------------------------- /test/reference/3/3a/b0a967253e4495609783b176f8fe0f9190785e3ac7c418bf1514d1d3491891: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/3a/b0a967253e4495609783b176f8fe0f9190785e3ac7c418bf1514d1d3491891 -------------------------------------------------------------------------------- /test/reference/3/3a/b0a967253e4495609783b176f8fe0f9190785e3ac7c418bf1514d1d3491891.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/3a/b0a967253e4495609783b176f8fe0f9190785e3ac7c418bf1514d1d3491891.meta -------------------------------------------------------------------------------- /test/reference/3/53/d5d60698ea4829f7fbcce68b88fd8c3449057443b9f797116cc984c7b7aaf9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/53/d5d60698ea4829f7fbcce68b88fd8c3449057443b9f797116cc984c7b7aaf9 -------------------------------------------------------------------------------- /test/reference/3/53/d5d60698ea4829f7fbcce68b88fd8c3449057443b9f797116cc984c7b7aaf9.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/53/d5d60698ea4829f7fbcce68b88fd8c3449057443b9f797116cc984c7b7aaf9.meta -------------------------------------------------------------------------------- /test/reference/3/5c/a180717a176b82b8dff21b5e0fe5382b38ed9bc6e69a61e9ecc5184e94386d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/5c/a180717a176b82b8dff21b5e0fe5382b38ed9bc6e69a61e9ecc5184e94386d -------------------------------------------------------------------------------- /test/reference/3/5c/a180717a176b82b8dff21b5e0fe5382b38ed9bc6e69a61e9ecc5184e94386d.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/5c/a180717a176b82b8dff21b5e0fe5382b38ed9bc6e69a61e9ecc5184e94386d.meta -------------------------------------------------------------------------------- /test/reference/3/65/b61d19eee188fed8545a3077be2077b1a65bc1f3cc28e38644b89f46623f8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/65/b61d19eee188fed8545a3077be2077b1a65bc1f3cc28e38644b89f46623f8c -------------------------------------------------------------------------------- /test/reference/3/65/b61d19eee188fed8545a3077be2077b1a65bc1f3cc28e38644b89f46623f8c.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/65/b61d19eee188fed8545a3077be2077b1a65bc1f3cc28e38644b89f46623f8c.meta -------------------------------------------------------------------------------- /test/reference/3/73/1546106778969180046dff123d936ed498f4a470805a6d147edb253ffff087: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/73/1546106778969180046dff123d936ed498f4a470805a6d147edb253ffff087 -------------------------------------------------------------------------------- /test/reference/3/73/1546106778969180046dff123d936ed498f4a470805a6d147edb253ffff087.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/73/1546106778969180046dff123d936ed498f4a470805a6d147edb253ffff087.meta -------------------------------------------------------------------------------- /test/reference/3/86/c5f6df08cd251451207da09c21c7dde98a19e6fb4eeda8e71ca37a44d1fa1a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/86/c5f6df08cd251451207da09c21c7dde98a19e6fb4eeda8e71ca37a44d1fa1a -------------------------------------------------------------------------------- /test/reference/3/86/c5f6df08cd251451207da09c21c7dde98a19e6fb4eeda8e71ca37a44d1fa1a.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/3/86/c5f6df08cd251451207da09c21c7dde98a19e6fb4eeda8e71ca37a44d1fa1a.meta -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.argon2id.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "3f1d9a5f7329e7e3741d4261581a3939f279c3a65b586b2f77173aa535ae1435", 8 | "MAC" : "e9a983eb46ab7c136bd5bae4476ad40f", 9 | "key" : "086495e4dea3f445006ea43e3a9d51d2a4a5b1915b380c7fbf8d0979896800fd7163418becb09dfb068b9cdd3a042ed51655e317ed83aad47432676482fefe4fe4d283c5159524c2e9d34bb517996a0218c85dc9f272de00bb613e86431e1ccf6bcb94438b86d31039f051efb9820776a35276fa5d39915f46be87af39201dc1" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "a24dcc700c100a80f5d1d9e600e3c29f5307ceec8b328d992fd8877758495f7a", 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.argon2id.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "08e8814e19be2463679fc616de088c6332e595f49d850d3b91c0c7f1d16feda4", 8 | "MAC" : "5146b810ffff0ac9deb0c89d2b9cf560", 9 | "key" : "a25b7258588a2bfc8e8e719b35988bccd4a860013f8f06c400d8162e879fa26a7a228b2e51c88de411b9f34804e93e68b2e8c4de7057d23bc7c561a6000afca66fb153819fa1cbb93d073408ff83ded119196e197888b93a80daa5057a42f04e14fdb401e6842b0256955ae185f3975ca593458245090bc627a36261bdbd4d88" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "bca355efea9d006888fa909cdb4056e5842a192675f188da51babc7b2da49d05", 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.argon2id.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "b6b7fcfce9b858875157c17af84b1d1ffbab16574eaeb743d3b6bbd839849d1c", 8 | "MAC" : "b65a6928bdb858795e36ecba6c494735", 9 | "key" : "dd6c65072a8e14e25037c690ccaaeff83f27c2be60b7e47d0a82dabd2e013beeec1cc27bd72f9185d4fa0d3c2afc9beb892d8e436ef677a5c1db01e72903fd99950e0a00e002b4ef4b198ed3bd05a72e19ececcd334692c61926aa8506a9d46726533e350692d03f4dfc30cdda002839adb4d0536b1130359e10c31269a66e62" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "97f1d562e92e9ee4fb5216d84a165c0e2d28158ad1b21c4f75ff1f465d77c8ea", 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.argon2id.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "514382cc9f8324bb41e73c0998a7bfbed174c7841441718bc03bb409dd5845b3", 8 | "MAC" : "6dde875c4d3bfc9534778d0bd21c11ad", 9 | "key" : "0c150c9fd1a942f65e8cf132255780685b47a3c9f06adcee9d856fa2ff467cf8656e482f7c57b885e7f312ac2a44607a36dbcc631d45c0b43e0c52128569ddcacb6aee46c2507d32c280f33d702523bf25727ad04275ace71f8ef808571eef6324e81841e35fbec3bcb6ed47437528d2d4e7ee2508b06f8dd38f7e98a16845e0" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "3fec0345b0afa2d359cb8a0721d7e0b79b08142536f3051f345d8157c598d97f", 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.argon2id.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "2415f81251e704f410975fb067ae523e42ef454422aa76cd70cb898805dbc593", 8 | "MAC" : "1c782b87e5e8dbaf3caa34205f152612", 9 | "key" : "b0c66e5f21f5fe6b1200452c2d7eb5b5be40a31c308464a40e0a1368df504ea8869052787c272106d5c9629aec43a59bc517b7d06bf7d549241240430750e20a983e4ff222f12f6beb96851df4e58768eda7e2aa1cf8db0406ee934fa071122ccda60dbbf4f718ef8baccbbdeb7a5f9f22eed4cdb34e1a0ba3998525e811ef26" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "max_padding" : 256, 14 | "pbkdf" : "argon2id", 15 | "salt" : "e57901d5201a819d1aab041c06094b57c6eda5cad921dfb52b149cef49fe14a0", 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "ec74b517eea06bf5fc04931d97f00fcd8291cd2dbff88aa084068bb421221541", 6 | "MAC" : "bab72e7630dff5958e599906702c1ee9", 7 | "key" : "fc863397367ac767638cb21dd10f26b6efe6deb3a5514ab385919d812a410171b7859b87e35b3771b56f1466af95ff8b3385d2ac6bc55c340f6fbf6e0725e87da5c1d212252fc0d384bd3398e7042bdf3be0635800f0cf80da80fd9457fcfdd3aef968f8fa0080f84e7f12528c6e7e849e25c4b1f279fb9d52b7d08c1a8920f4" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "95c8fd68e458e14e0681bb52d93a8c2a8592d2ae4b2d562ba2d0da7eb58362c1", 14 | "version" : 4 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "1764d7b891cebc8279ff36fca29b440b2b8d5d9399ceb48b27a2d61ec95da084", 6 | "MAC" : "84e186d93d2c55eab52d6c446aad9c8d", 7 | "key" : "d4f712290f58afa6900dcb1ee394e74ac007d11f9b04adc176a71a942a3d568105de1cef984d50c86bff99c92009ed6938e5f49bc7f3c82c8aaa08b938fef91876714fab81c43a959bfad8fb26e00d24e439c1af37380dd3d32761f2e3ef59798317c123aced2880be777427d8ba1597fba3dfb38fe1019afd0e9d05b74a9bf5" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "7e6d79bf3624b16e5e424363150bd6f136a57bffbeda1bd7d9a35a2fa70b03bd", 14 | "version" : 4 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "15ea087865bbf33723eee5881e5e4e776f93460c1175b2e2afb9c2b49959e8df", 6 | "MAC" : "155027f98d83773f5916ef193199d96c", 7 | "key" : "7c659c08364434237db4599ffc477e08969035855326e1b864c37fa8f580cb258607c4ecc4378e61d6dfb8b8b3f80062084213a64986fe45fdfcde8a8bae0739fdb974f252b5c0a523dd979b40eb7e8b27622ee78d70af4b1a2e63d8701b1495af821a76f9dc059796309390b55d1d01db5098b2d2ed482a519d68df94b0ed0f" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "dacfccd217b4fd77203790e718a13c7f0be93b6606087947a6ebbc10d4f35cb7", 14 | "version" : 4 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "8674023c1819cd0a6b1a414381edbc899d61fb7273b273ed7133d88119b1589f", 6 | "MAC" : "4475223df1a0df1e817c9ec5225eb40b", 7 | "key" : "d5c20e2f098a148325786aa8c533b210abe8e63489d70e93ee88209413c3864a9d47fefd94fa93979628761bfb24e8db20a00385d44e5cf5db3aeaf33d91f3497b5bec02ef3e0b160edd7b655714a42b3573d82403048986245c2d00632e19953dc6420a3a69b762b3aa5396fd03ba8da3fb5d010f8a59b85f31201b9a529442" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "c277eba81b4b3c7ac5e267ad7a52fc3646037ebc84b29d7927110411d956f435", 14 | "version" : 4 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "44cb60da2d587b6925065314bac7b07a7d82ad9439b2223cd0aa0daca1cbc550", 6 | "MAC" : "bda75ca733652f27d4afb50ce566f1b8", 7 | "key" : "3d45ffd063580121a1fd4a95b81afbe8ec4d8aebd5da8514a457b1d90275ece28aac29364bbcf38138a5355f8506c673f4694d830364fc7e0fd2465c05f81cd40d7783c9961c35981453eafab27c4617756a4e3286d709629415296c7d24d6a78d0ce779b7f28da8ab96dc94f52da7307718e92ae73d89ed236489f7a184533e" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 13 | "salt" : "8a74ac0c052e19c561847f3f75743855401a178bc1aebdd000ed1e190e4b12be", 14 | "version" : 4 15 | } 16 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.scrypt.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "beca4343a57b99bfeeff0a9c992825d31c6054e06b837d22c660e71fb433f88e", 6 | "MAC" : "52c39a1da4f5df0d01327ad570000cdd", 7 | "key" : "86ad29e376b3ffcabf4c460f6aed39e81b467a7c1ee067ce650024b80859294e7bcdbab5d583dc36730af21eed975be4906e971ff436e1b4def00554de84e50620fc2d1523392f58329007526ee4d15925662b718369abcfd9234337a99036a8d136f4b06ed81b9da6d351e32134331d4ad9c74e0a3e8752e932183b0ecddf60" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "124b499b0a9f18d09e26ad408ac018dca1da01b0a2bfb9b61d308dd3efa7915e", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.scrypt.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "7da2c54d86258a295bb7b63eb7f68bcab0b9fe160fc271a628a3333deb9fe8fd", 6 | "MAC" : "94dd710762881fd90dc4900977429f7d", 7 | "key" : "e11c5dc7a467273d43d0d08f1b7ba88614a5c04c7f1fdc56ecf9688968b4b4e62a248bfbcbfe2b8e4cd760c9818c41c4610e3f82173b5388372a6d6b87e1100a7cab27b7e73382060a486ed4126d025708456e8abbdf046efd107b948c3ebe84dcefdd89fc04464d0e1b07a7bf0fd9b0c0157e3b08019fdeb5796cf28d7c1afa" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "a8c7420216143bba44d89f793c9a045f8aeae6912cedebffd595417312306ead", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.scrypt.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "098321825007f84c661ea1513a5ce57e760459207748f8f37642ecbcf37cb082", 6 | "MAC" : "755382aedd6a171bb0529c90b76f9b64", 7 | "key" : "795fb054bf882d3b6853aa0760c41f9bf94a41f23f7296c642135c62e8b5525aa77079fcccf71f9e3953879755c47a7cac0ddd975da6a632fb4763c6bb6cac75ea225a10301b38dc7cb54c3d7dcc7141492f970ea688e9c05b3cd2706d39eb07e1c641c5c4808dbe363a465b8d1bc7783f6b0920df47ccf697b1968214d1feed" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "d79a6ebb84d675ae353f149b0ede87a75e2fd1df805a2ef6cf670b1c21e92a48", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.scrypt.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "e944916006377ef435b9ca65fcd895e6575ad0f997c03743bda2d6e4a472f0b8", 6 | "MAC" : "4627be2d684a013c37bcf5569f948b1b", 7 | "key" : "133ab04ef40aacd8936dee0d4e02859ad3b2ceff7a5aab41f54e9e00a5ba6ca3de047f287f2320e75ce3277d58a7d9c1d8d081fb4a0525b944a7ceb087b8c6715846c203fb314080d63c6da832fb5fb95bb13c68d43a92f2261699b08359f268ae5940fd521bf174057e7836086472e356fa240ec958a797c6ca6ee2a25c1b3d" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "df66bb5deebf6f1366da963b0d2d6a5c80766e9eceecfd8823fe169c6fc53cff", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/.securefs.scrypt.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "6b36721b5163eb5a423ea29213b7b4ee0863e9ae9dd27b1d06cf2cccba7b9fcf", 6 | "MAC" : "c77ac40f9fdec19177404b588d90a9c1", 7 | "key" : "890896fe9dbf3c07fb0808cf61f9e3a5be000406b0d90cd8807c9ca05fd22746a8fce207a0be00df86786ba9ce3f71841de3bd50b0f8fc37c65502e9a4f2acf8f3c1e5ec2e8ba1ac36a41503c2503eb6e7d3f16fb13bace448f598a79089e234b66c408491a1d538e7009264948efe97183ebe7d2bc9b00b747c67b8f6599a64" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "max_padding" : 256, 12 | "pbkdf" : "scrypt", 13 | "salt" : "1144b5fba73081e602f9840b972d36d04b324a19cccd6422c3eaeac7c82cc6b7", 14 | "scrypt_p" : 1, 15 | "scrypt_r" : 8, 16 | "version" : 4 17 | } 18 | -------------------------------------------------------------------------------- /test/reference/4-padded/35ZQWZ4FMEJR2GZRK3S78H9IB6H9XMTQY39QC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-padded/35ZQWZ4FMEJR2GZRK3S78H9IB6H9XMTQY39QC -------------------------------------------------------------------------------- /test/reference/4-padded/ATVYQRCAGSDKMFQ63FDQ4C7IJMUAX2VCXW3EGCMT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-padded/ATVYQRCAGSDKMFQ63FDQ4C7IJMUAX2VCXW3EGCMT -------------------------------------------------------------------------------- /test/reference/4-padded/TVGIFJBPT7XCDRQJQ77RGAA5UHYWWUGKY7KAFRU7NDWYVFYTSB8XYNKTQYAS/EJAG7CFH2JAY5RG6FV6UK8EVPUYHKRGDKPN9WCA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-padded/TVGIFJBPT7XCDRQJQ77RGAA5UHYWWUGKY7KAFRU7NDWYVFYTSB8XYNKTQYAS/EJAG7CFH2JAY5RG6FV6UK8EVPUYHKRGDKPN9WCA -------------------------------------------------------------------------------- /test/reference/4-padded/U689DZRBFXB7VM8G7CTAFGQT8M6HSAPI3JWA/7CZ36XY8S6KW3WDW99NX8TEXEHGC3TVWKPV4A: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-padded/U689DZRBFXB7VM8G7CTAFGQT8M6HSAPI3JWA/7CZ36XY8S6KW3WDW99NX8TEXEHGC3TVWKPV4A -------------------------------------------------------------------------------- /test/reference/4-padded/U689DZRBFXB7VM8G7CTAFGQT8M6HSAPI3JWA/R9ZJ5VUMXZKRRF76PTVDQJV683N5JTEUPG9Z35FMHQHDQ476VYSAI5K6ZG8MY3SRXYPA/DKWEQYEIVYC73W9M4Y5BU33453NZZR3IQHXWSHS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-padded/U689DZRBFXB7VM8G7CTAFGQT8M6HSAPI3JWA/R9ZJ5VUMXZKRRF76PTVDQJV683N5JTEUPG9Z35FMHQHDQ476VYSAI5K6ZG8MY3SRXYPA/DKWEQYEIVYC73W9M4Y5BU33453NZZR3IQHXWSHS -------------------------------------------------------------------------------- /test/reference/4-plain-text-names/abcdef/364.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-plain-text-names/abcdef/364.bin -------------------------------------------------------------------------------- /test/reference/4-plain-text-names/abcdef/🌱🅾️⛎®️ ♍️/8000.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-plain-text-names/abcdef/🌱🅾️⛎®️ ♍️/8000.bin -------------------------------------------------------------------------------- /test/reference/4-plain-text-names/ä.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-plain-text-names/ä.bin -------------------------------------------------------------------------------- /test/reference/4-plain-text-names/empty.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-plain-text-names/empty.txt -------------------------------------------------------------------------------- /test/reference/4-plain-text-names/加密式文件系统/4096.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4-plain-text-names/加密式文件系统/4096.bin -------------------------------------------------------------------------------- /test/reference/4/.securefs.argon2id.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "7c73bec2cf15183fcde46097f7893361680deba40ff440968d4e12c4b2848d98", 8 | "MAC" : "99f629174f648cb0015971af7fe8ada8", 9 | "key" : "41d8e8fc75738204cb120e9f5c37e89887595c3c93918eb9e7f0bdff79c7a12889cc51fe6993cf998b8be64d4efec46c6285eae18656d4fdd2d93120d4c77c9558359ed4496142b3bcc555d104ebede39e426d09e143fbac7668a27c6d130194" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "b88d66c2a7241cd6649507c3d4930ca208bc536ae6509375565cb2a25fc5a679", 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.argon2id.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "8294acf499b3aa6320467938a0a9105d0b606bd213a8b1fedc32034127226248", 8 | "MAC" : "44c49a189c2b771a3cbebda5a18e9776", 9 | "key" : "d1aff1e36f31ca639ccd860fff1aa61681e4eddf6aa31cd411b9012d3f731b5f940e9bbd003cf75d7d6daf0425e896f418851035f872f2e133710d0758e752e9b2d1dc18ed7f2b0708b9028fee6c9749825a84ce5ee8a47f9352c67e8e047ff3" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "485e91bcbd8c4685a0a172101151c603cfd1d7d58d6cf1e0f7a0023ab38d74c0", 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.argon2id.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "ef334a95029eaf48afa9d17eafcec3ade0a376e5a08f7717162f8d785062e853", 8 | "MAC" : "d2ca7ddb5e56c3e6c4d170331a86e780", 9 | "key" : "5477943654f08ecf1bc3c356a85abbc2de0f7043a984aae7466d823c39b081395b3a76446802a635d451a2c94316089fcf611eb66974473b8400a5f61fb3a6d367b41aaca5c9f922f71ffc8bcdde141cfd745a6b9e9e5326e94c3a7023e8ad4c" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "80dc5845efb7c2c7c1cc27a3da89fddcf2ecb0b00293e999d924faca7da4e2b4", 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.argon2id.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "879db6589148bff101d20ce54085136347c21c61361174e51ce40ca663e0132d", 8 | "MAC" : "63aa9bd298fc994e0e0fef6ca236594c", 9 | "key" : "ef2fa7e81ed83ccc5aaa518ac23c0d9f3070f183c17a58a0961461be8c78e50ca9ac2b41dbaef1f5536cf7a8816b51053c5c923e094e2e2cbecc6abc560f09d2c43f119de921e1552664e997bd5632b4df8124f7cb19c1e6c157cc0fccd3c973" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "bd0ccc4d503893b43c55a8c2e97ead6115eb132916248d6387c86ac5bf9f708e", 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.argon2id.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "argon2_m_cost" : 16, 3 | "argon2_p" : 2, 4 | "block_size" : 4096, 5 | "encrypted_key" : 6 | { 7 | "IV" : "90e8e8c0d058ef1763b559eabb6b0395642231cc2972934b4484b7a9995bcf0f", 8 | "MAC" : "52b6fb5d3a82e38554530a116dc6d589", 9 | "key" : "e479ed9e00af525de84128800c48ab42bea4954cd820783dcd45c93fec0a2d2ae8f9449eaed211b3c44f4d665e0d2d4861573be7d9237dc7ca133cdce66b8214a36a9ebba26ef4c0de6a1695add50ff27a6ec07df5c3f39ba2020df2f3191817" 10 | }, 11 | "iterations" : 2, 12 | "iv_size" : 12, 13 | "pbkdf" : "argon2id", 14 | "salt" : "86526f0305245a7904f101bc2ca3c044d153c06a5ab7d63b953b1f6baddcd342", 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "029ec5f6a0458478f9ddba14d74aa70ca6dc40dbcadc47ab848eb474ccdabc8d", 6 | "MAC" : "04e1505e32c48d5fe9ff99dea8859afc", 7 | "key" : "8a9f111afebf37749d2d15fdb75c56cfe3d83955315fe3fcd4d0dcee8e8d9f549c602ef614fd791c710cf174a28d9c1dac9760533dc2aab4e40be841c74ed511a153c8c4111df739b2162c657b76df8b29d0212ca6e075bb8727929d96856c59" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "68f04a2e2e4f8d0d90de9bee3a35b4a6b4f04c3139be73aab56356b18921158d", 13 | "version" : 4 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.pkcs5-pbkdf2-hmac-sha256.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "5b15c33340e823021507d7abaa60380e56358ad012d0169425c0f0abad882970", 6 | "MAC" : "a05adf8d918ba52bc6c048e45132de53", 7 | "key" : "464c70ee1072477f6a59d443a86bebf71e331f038902343dfc609a4c0e56368c12cb8d8ab7f7c0e94ae8e2ddbbb174d3e1dbd583fc0b88f56fb09d6b18bf183298c96c1e295caa380bd35674ef57c985e52c7741cce5fc5697dbfc28686c06d6" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "a279044a06aed7a68c109c75ea67e5fcbf36dc95034bdd827cc8ebef03ee670f", 13 | "version" : 4 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "8a6e5fbeb3b2f314656f647e908f15660deaa384954ea8b1daeb42edbfcd895b", 6 | "MAC" : "1d6e3c19a6adda98507a3f253a3802b0", 7 | "key" : "148b4b00ffdb126a2dc1a63a227b0e30d41070cb235f7d8155490cc17979174d404c6987d5b2842221fba8503c091a46cae22e431240f289df61bbe303efde7f1e44c5cc5c82f9c22799dd7cc0ce3dd12f5cb9fd013907568ab6f3b88233e132" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "2a5a9154fe1f4a0476fe6bf5a2747ce704720d0da24ab7a426c45b0c9d932111", 13 | "version" : 4 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "c5d103fdc7ec6afb5a5ab27d1e8c6a6c9b29813fa2c71ec557ddede0a74659d3", 6 | "MAC" : "dcd21693071aaa84db843d73ec4ea02f", 7 | "key" : "b8aae2f5f01fd764df20dbb521cab38ad2cd73ac969929973a6df2703adf2ee963487fe318eb62c6b04562c7eeed01fb898a35a90ef255d1102c40e80e898bc9321491b3a324dec65420635bc1358c8cae480ef0cf7777a787085090c9c46883" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "e293701ba46bcc9ab874947fd7d412946c6e23e827b526841b61567ced9910eb", 13 | "version" : 4 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.pkcs5-pbkdf2-hmac-sha256.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "efc4e87caf4c2c531e29332f3ec5a54ab2ba39a002c41398963a0bc80ea0d38c", 6 | "MAC" : "d46cec89445aed17172e7f640cbcc3c7", 7 | "key" : "6a30273f99d1c02f0ce04e5055f438523cb4796a83a45f5220e38fb339e1e89c02a54d569c57c4702520d096d2ce7d455b97eb97beaae0df431b5c3fa8c33d0453a6cadd6394cef11c22fdf37d64adba1c598f8a5919bd985ae9b630a9aa5a3f" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "pkcs5-pbkdf2-hmac-sha256", 12 | "salt" : "042f70db4f8d260b5329c9da0010bacde52e518a2e266e463a42339f7d8abf11", 13 | "version" : 4 14 | } 15 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.scrypt.KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "72646bc7d82497ed7c66c41c6609b22c343dafcbd48c7cdc326ee8fd4561423e", 6 | "MAC" : "a45256faf8d3a44b3f4aea8e133310f5", 7 | "key" : "3e44958dcf98b0555cf660a155c27c440a31c6b9df4ea48964bcb6cf58fd240e47f75d1d1de9148949ddd1c93c890640b6bd405e9da747c5982f1662f0d317305bb685a9244c5800cbfbd9602a144136cd6865bba4ba0266e88f37c04dc9a402" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "f1ce13d8fd61f42a5b8e72ff05c52b29dfac763f6a28f05fc1de0ba9743e31ee", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.scrypt.KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "82afdc4b17eec55ce4adf9b64f05ec58fc4c7054b666b1b735c79681c20f5f8b", 6 | "MAC" : "b3df552bece79cee106d67c932707660", 7 | "key" : "369ed2557409fcd92d94558c40e08cd90f447125020ca4c61ba322c7f739c0ea7c0cd1485ea0fba73ea5f615e62e565aed098daca67ccf7e2b6d0b0062efe16b358242b629bd40af673cd132d9e28b2ed4a4f11a7ee2cd4dc9fef4afcaf1c242" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "91d78d9fc97604a883b0d471115d4f88de1f2ac184d99906a10cc6df95bf34da", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.scrypt.PASSWORD.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "54a79a06adb6b7d22338cfe55753fffe4ec5cd9f203107e8faa848643234106b", 6 | "MAC" : "57ba435bcb54c2d2616c341fbe035693", 7 | "key" : "02e6c87b4afb2b97c1723431a92b66072a2b83201c5f3299290033d7262fd80e80b2dce830a09616869f29b415ce740ddc871ab6626020e8aec5d1f1fcd58d69c94bae47ea47ccc8d8f45e00ab2cfdaa537fe89f0dde8f38d53c96cce26e19c1" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "0105c30cc501b9a2a91ea8b98a92938942668a4761c912b0d37623144b7a305a", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.scrypt.PASSWORD_WITH_KEYFILE.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "fdc417b508f7909903ea42a812cab30f6dd0ba8dbe359c1803a5f60822dd511a", 6 | "MAC" : "32552fe2412f4c103aed7d12e378522f", 7 | "key" : "b612199bcc45342eddf511844fc48d6b8df6dd3224c6e117dc47b2970541672ef1bdbb02d626d35bd998e6bba0529e24afd34bcb6e0758c0b3a925422538512d8c01e01ac9d5df61a9d5a1f6af5331a79256f73a1b5e31426b3cfb816828b589" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "a267129efd5efc3b031ab3b47684d12ed508480422bf0b239f090983ce652ba3", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/.securefs.scrypt.PASSWORD_WITH_KEYFILE2.json: -------------------------------------------------------------------------------- 1 | { 2 | "block_size" : 4096, 3 | "encrypted_key" : 4 | { 5 | "IV" : "1d6c901a24b8729c73a7a7919dd6435e9679e2936fed3319de0fa6ad4fe31dde", 6 | "MAC" : "6320ce0fb4efb9b6eda4197ff9d9e542", 7 | "key" : "9c1d877bae3b36c94042838861447f0eaef4ccc8b94eb089854580c65c43072290939a9fb49b15e29256aa9798dae9f138a23c33f0a7868b0fe472d4a8e73f4bcd2bc851017983b0929eb54bd985e33eafcb2c902f80bd548934278853503fd6" 8 | }, 9 | "iterations" : 2, 10 | "iv_size" : 12, 11 | "pbkdf" : "scrypt", 12 | "salt" : "6c818bd9b5ce987639d52b854a6ba369eda274d9edaad3e3777126e12c863316", 13 | "scrypt_p" : 1, 14 | "scrypt_r" : 8, 15 | "version" : 4 16 | } 17 | -------------------------------------------------------------------------------- /test/reference/4/A2GUH632MZF6S8TQ9RQSSRDZRYT3DS5UDYDN86CM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4/A2GUH632MZF6S8TQ9RQSSRDZRYT3DS5UDYDN86CM -------------------------------------------------------------------------------- /test/reference/4/A8QMWPP32A5PPV7K5PCM52AQ93USB2XVIHVNDNRC9HKN85KJG9WQKDXF7XAA/QRSZ258MAEE33ZAMKSG7TWZETPK2I627APRS8JA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4/A8QMWPP32A5PPV7K5PCM52AQ93USB2XVIHVNDNRC9HKN85KJG9WQKDXF7XAA/QRSZ258MAEE33ZAMKSG7TWZETPK2I627APRS8JA -------------------------------------------------------------------------------- /test/reference/4/AVJJUV8EC2NXD9HGCTBVKT9R8V68KZEQVR8UA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4/AVJJUV8EC2NXD9HGCTBVKT9R8V68KZEQVR8UA -------------------------------------------------------------------------------- /test/reference/4/VGW4SA2UUXC93ER6TQ9AH2T5Q45SF5AGQ5NS/48IN4KXGCMW9N7G7HNHBBQ829YTHM2NJD64AVSVJR62T3D9MU89UZHUTVDKWIAIHVVBS/53ZF35HVRFJSWA2KFWTV58FC3PYWPDSNBQCNXJA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4/VGW4SA2UUXC93ER6TQ9AH2T5Q45SF5AGQ5NS/48IN4KXGCMW9N7G7HNHBBQ829YTHM2NJD64AVSVJR62T3D9MU89UZHUTVDKWIAIHVVBS/53ZF35HVRFJSWA2KFWTV58FC3PYWPDSNBQCNXJA -------------------------------------------------------------------------------- /test/reference/4/VGW4SA2UUXC93ER6TQ9AH2T5Q45SF5AGQ5NS/T9DFT2V577BZRS4STS2IDWNW96ZX8QWZSCNAY: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/4/VGW4SA2UUXC93ER6TQ9AH2T5Q45SF5AGQ5NS/T9DFT2V577BZRS4STS2IDWNW96ZX8QWZSCNAY -------------------------------------------------------------------------------- /test/reference/chpass_all.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """ 4 | A binary file to create all variations of .securefs.json by calling `chpass`. 5 | """ 6 | 7 | import enum 8 | import os 9 | import subprocess 10 | import shutil 11 | import sys 12 | import glob 13 | 14 | 15 | @enum.unique 16 | class SecretInputMode(enum.IntEnum): 17 | PASSWORD = 0b1 18 | KEYFILE = 0b10 19 | PASSWORD_WITH_KEYFILE = PASSWORD | KEYFILE 20 | KEYFILE2 = KEYFILE | 0b1000 21 | PASSWORD_WITH_KEYFILE2 = PASSWORD | KEYFILE2 22 | 23 | 24 | def create( 25 | securefs_binary: str, version: int, pbkdf: str, mode: SecretInputMode, padded: bool 26 | ): 27 | if padded: 28 | data_dir = f"{version}-padded" 29 | else: 30 | data_dir = str(version) 31 | new_config_filename = os.path.join(data_dir, f".securefs.{pbkdf}.{mode.name}.json") 32 | if os.path.exists(new_config_filename): 33 | print(new_config_filename, "already exists", file=sys.stderr) 34 | return 35 | original_config_filename = next( 36 | glob.iglob(os.path.join(data_dir, ".securefs.*.PASSWORD.json")) 37 | ) 38 | shutil.copy(original_config_filename, new_config_filename) 39 | args = [ 40 | securefs_binary, 41 | "chpass", 42 | "--oldpass", 43 | "abc", 44 | "--pbkdf", 45 | pbkdf, 46 | "--config", 47 | new_config_filename, 48 | "-r", 49 | "2", 50 | ] 51 | if mode & SecretInputMode.KEYFILE: 52 | args.extend(["--newkeyfile", "keyfile"]) 53 | if mode & SecretInputMode.PASSWORD: 54 | args.extend(["--newpass", "abc"]) 55 | args.append(f"{version}") 56 | subprocess.check_call(args) 57 | 58 | 59 | def main(): 60 | os.environ["SECUREFS_ARGON2_M_COST"] = "16" 61 | os.environ["SECUREFS_ARGON2_P"] = "2" 62 | binary = os.path.realpath(sys.argv[1]) 63 | os.chdir(os.path.dirname(__file__)) 64 | for version in range(1, 5): 65 | for pbkdf in ("scrypt", "pkcs5-pbkdf2-hmac-sha256", "argon2id"): 66 | for mode in SecretInputMode: 67 | for padded in [False, True]: 68 | create( 69 | binary, version=version, pbkdf=pbkdf, mode=mode, padded=padded 70 | ) 71 | 72 | 73 | if __name__ == "__main__": 74 | main() 75 | -------------------------------------------------------------------------------- /test/reference/keyfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/keyfile -------------------------------------------------------------------------------- /test/reference/plain/abcdef/364.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/plain/abcdef/364.bin -------------------------------------------------------------------------------- /test/reference/plain/abcdef/🌱🅾️⛎®️ ♍️/8000.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/plain/abcdef/🌱🅾️⛎®️ ♍️/8000.bin -------------------------------------------------------------------------------- /test/reference/plain/ä.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/plain/ä.bin -------------------------------------------------------------------------------- /test/reference/plain/empty.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/plain/empty.txt -------------------------------------------------------------------------------- /test/reference/plain/加密式文件系统/4096.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netheril96/securefs/c338d857cfbc51d9af3c6689ca84131314d4915e/test/reference/plain/加密式文件系统/4096.bin -------------------------------------------------------------------------------- /test/test_common.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "fuse_high_level_ops_base.h" 4 | #include "platform.h" 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | #include 14 | 15 | std::mt19937& get_random_number_engine(); 16 | 17 | inline doctest::String to_doc_str(std::string_view view) 18 | { 19 | return {view.data(), static_cast(view.size())}; 20 | } 21 | 22 | template <> 23 | struct doctest::StringMaker 24 | { 25 | static doctest::String convert(const std::string_view& value) { return to_doc_str(value); } 26 | }; 27 | 28 | template <> 29 | struct doctest::StringMaker> 30 | { 31 | static doctest::String convert(std::vector value) 32 | { 33 | for (auto&& str : value) 34 | { 35 | str = absl::Utf8SafeCEscape(str); 36 | } 37 | return to_doc_str(absl::StrCat("[", absl::StrJoin(value, ", "), "]")); 38 | } 39 | }; 40 | 41 | namespace securefs::testing 42 | { 43 | 44 | enum class CaseSensitivity 45 | { 46 | CaseSensitive, 47 | CaseInsensitive 48 | }; 49 | 50 | enum class ResolveSymlinks 51 | { 52 | NO, 53 | YES 54 | }; 55 | 56 | void test_fuse_ops(FuseHighLevelOpsBase& ops, 57 | OSService& repo_root, 58 | CaseSensitivity case_sensitivity = CaseSensitivity::CaseSensitive, 59 | ResolveSymlinks resolve_symlinks = ResolveSymlinks::NO); 60 | } // namespace securefs::testing 61 | -------------------------------------------------------------------------------- /test/test_constants.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "constants.h" 4 | 5 | TEST_CASE("Test constants") 6 | { 7 | using namespace securefs; 8 | CHECK((kOptionNoAuthentication & kOptionReadOnly) == 0); 9 | CHECK((kOptionNoAuthentication & kOptionStoreTime) == 0); 10 | CHECK((kOptionNoAuthentication & kOptionCaseFoldFileName) == 0); 11 | CHECK((kOptionNoAuthentication & kOptionNFCFileName) == 0); 12 | CHECK((kOptionNoAuthentication & kOptionSkipDotDot) == 0); 13 | CHECK((kOptionNoAuthentication & kOptionNoNameTranslation) == 0); 14 | CHECK((kOptionReadOnly & kOptionNoAuthentication) == 0); 15 | CHECK((kOptionReadOnly & kOptionStoreTime) == 0); 16 | CHECK((kOptionReadOnly & kOptionCaseFoldFileName) == 0); 17 | CHECK((kOptionReadOnly & kOptionNFCFileName) == 0); 18 | CHECK((kOptionReadOnly & kOptionSkipDotDot) == 0); 19 | CHECK((kOptionReadOnly & kOptionNoNameTranslation) == 0); 20 | CHECK((kOptionStoreTime & kOptionNoAuthentication) == 0); 21 | CHECK((kOptionStoreTime & kOptionReadOnly) == 0); 22 | CHECK((kOptionStoreTime & kOptionCaseFoldFileName) == 0); 23 | CHECK((kOptionStoreTime & kOptionNFCFileName) == 0); 24 | CHECK((kOptionStoreTime & kOptionSkipDotDot) == 0); 25 | CHECK((kOptionStoreTime & kOptionNoNameTranslation) == 0); 26 | CHECK((kOptionCaseFoldFileName & kOptionNoAuthentication) == 0); 27 | CHECK((kOptionCaseFoldFileName & kOptionReadOnly) == 0); 28 | CHECK((kOptionCaseFoldFileName & kOptionStoreTime) == 0); 29 | CHECK((kOptionCaseFoldFileName & kOptionNFCFileName) == 0); 30 | CHECK((kOptionCaseFoldFileName & kOptionSkipDotDot) == 0); 31 | CHECK((kOptionCaseFoldFileName & kOptionNoNameTranslation) == 0); 32 | CHECK((kOptionNFCFileName & kOptionNoAuthentication) == 0); 33 | CHECK((kOptionNFCFileName & kOptionReadOnly) == 0); 34 | CHECK((kOptionNFCFileName & kOptionStoreTime) == 0); 35 | CHECK((kOptionNFCFileName & kOptionCaseFoldFileName) == 0); 36 | CHECK((kOptionNFCFileName & kOptionSkipDotDot) == 0); 37 | CHECK((kOptionNFCFileName & kOptionNoNameTranslation) == 0); 38 | CHECK((kOptionSkipDotDot & kOptionNoAuthentication) == 0); 39 | CHECK((kOptionSkipDotDot & kOptionReadOnly) == 0); 40 | CHECK((kOptionSkipDotDot & kOptionStoreTime) == 0); 41 | CHECK((kOptionSkipDotDot & kOptionCaseFoldFileName) == 0); 42 | CHECK((kOptionSkipDotDot & kOptionNFCFileName) == 0); 43 | CHECK((kOptionSkipDotDot & kOptionNoNameTranslation) == 0); 44 | CHECK((kOptionNoNameTranslation & kOptionNoAuthentication) == 0); 45 | CHECK((kOptionNoNameTranslation & kOptionReadOnly) == 0); 46 | CHECK((kOptionNoNameTranslation & kOptionStoreTime) == 0); 47 | CHECK((kOptionNoNameTranslation & kOptionCaseFoldFileName) == 0); 48 | CHECK((kOptionNoNameTranslation & kOptionNFCFileName) == 0); 49 | CHECK((kOptionNoNameTranslation & kOptionSkipDotDot) == 0); 50 | } 51 | -------------------------------------------------------------------------------- /test/test_full_format.cpp: -------------------------------------------------------------------------------- 1 | #include "btree_dir.h" 2 | #include "full_format.h" 3 | #include "fuse_high_level_ops_base.h" 4 | #include "mystring.h" 5 | #include "platform.h" 6 | #include "tags.h" 7 | #include "test_common.h" 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | namespace securefs::full_format 14 | { 15 | namespace 16 | { 17 | template 18 | fruit::Component get_test_component(std::shared_ptr os) 19 | { 20 | return fruit::createComponent() 21 | .bind() 22 | .install(full_format::get_table_io_component, 2) 23 | .template registerProvider()>([]() { return true; }) 24 | .template registerProvider()>( 25 | []() { return false; }) 26 | .template registerProvider()>([]() { return false; }) 27 | .template registerProvider()>( 28 | []() { return CaseInsensitive; }) 29 | .template bind() 30 | .template registerProvider()>( 31 | []() { return 0u; }) 32 | .template registerProvider()>([]() { return 12u; }) 33 | .template registerProvider()>([]() 34 | { return 60u; }) 35 | .template registerProvider()>( 36 | []() { return key_type(0x99); }) 37 | .template registerProvider()>([]() 38 | { return true; }) 39 | .registerProvider( 40 | []() 41 | { 42 | return CaseInsensitive ? Directory::DirNameComparison{&case_insensitive_compare} 43 | : Directory::DirNameComparison{&binary_compare}; 44 | }) 45 | .registerProvider([]() { return OwnerOverride{}; }) 46 | .bindInstance(*os); 47 | } 48 | TEST_CASE("Full format test (case sensitive)") 49 | { 50 | auto temp_dir_name = OSService::temp_name("tmp/full", "dir"); 51 | OSService::get_default().ensure_directory(temp_dir_name, 0755); 52 | auto root = std::make_shared(temp_dir_name); 53 | fruit::Injector injector(get_test_component, root); 54 | testing::test_fuse_ops(injector.get(), 55 | *root, 56 | testing::CaseSensitivity::CaseSensitive, 57 | testing::ResolveSymlinks::YES); 58 | } 59 | TEST_CASE("Full format test (case insensitive)") 60 | { 61 | auto temp_dir_name = OSService::temp_name("tmp/full", "dir"); 62 | OSService::get_default().ensure_directory(temp_dir_name, 0755); 63 | auto root = std::make_shared(temp_dir_name); 64 | fruit::Injector injector(get_test_component, root); 65 | testing::test_fuse_ops(injector.get(), 66 | *root, 67 | testing::CaseSensitivity::CaseInsensitive, 68 | testing::ResolveSymlinks::YES); 69 | } 70 | } // namespace 71 | } // namespace securefs::full_format 72 | -------------------------------------------------------------------------------- /test/test_io.cpp: -------------------------------------------------------------------------------- 1 | #include "test_common.h" 2 | 3 | namespace securefs 4 | { 5 | namespace 6 | { 7 | constexpr std::string_view kLongFileNameExample = u8"🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️🛡️"; 8 | std::string construct_long_filename() 9 | { 10 | return absl::StrCat( 11 | kLongFileNameExample, "/", kLongFileNameExample, "/", kLongFileNameExample); 12 | } 13 | 14 | TEST_CASE("Test symlink, stat, and readlink") 15 | { 16 | auto& os_service = OSService::get_default(); 17 | 18 | // Create a temporary file and symlink 19 | auto target_file = OSService::temp_name("tmp/", construct_long_filename()); 20 | auto symlink_file = OSService::temp_name("tmp/", ".symlink"); 21 | auto symlink_file2 = OSService::temp_name("tmp/", ".symlink2"); 22 | 23 | // Create a symlink 24 | os_service.symlink(target_file, symlink_file); 25 | 26 | // Test stat on the symlink 27 | fuse_stat symlink_stat; 28 | REQUIRE(os_service.stat(symlink_file, &symlink_stat)); 29 | CHECK((symlink_stat.st_mode & S_IFMT) == S_IFLNK); 30 | 31 | { // Test readlink 32 | char buffer[65535]; 33 | auto link_size = os_service.readlink(symlink_file, buffer, sizeof(buffer)); 34 | REQUIRE(link_size == symlink_stat.st_size); 35 | CHECK(std::string_view(buffer, link_size) == target_file); 36 | } 37 | 38 | os_service.rename(symlink_file, symlink_file2); 39 | fuse_stat symlink_stat2; 40 | REQUIRE(os_service.stat(symlink_file2, &symlink_stat2)); 41 | CHECK((symlink_stat2.st_mode & S_IFMT) == S_IFLNK); 42 | CHECK(symlink_stat2.st_size == symlink_stat.st_size); 43 | 44 | { // Test readlink 45 | char buffer[65535]; 46 | auto link_size = os_service.readlink(symlink_file2, buffer, sizeof(buffer)); 47 | REQUIRE(link_size == symlink_stat.st_size); 48 | CHECK(std::string_view(buffer, link_size) == target_file); 49 | } 50 | 51 | // Clean up 52 | os_service.remove_file(symlink_file2); 53 | } 54 | 55 | } // namespace 56 | } // namespace securefs 57 | -------------------------------------------------------------------------------- /test/test_stat_workaround.cpp: -------------------------------------------------------------------------------- 1 | #include "platform.h" 2 | 3 | #ifdef st_atime 4 | #undef st_atime 5 | #endif 6 | 7 | #ifdef st_mtime 8 | #undef st_mtime 9 | #endif 10 | 11 | #ifdef st_ctime 12 | #undef st_ctime 13 | #endif 14 | 15 | #ifdef st_birthtime 16 | #undef st_birthtime 17 | #endif 18 | 19 | #include "stat_workaround.h" 20 | 21 | #include 22 | 23 | namespace securefs 24 | { 25 | namespace 26 | { 27 | struct Stat1 28 | { 29 | fuse_timespec st_atim; 30 | fuse_timespec st_mtim; 31 | fuse_timespec st_ctim; 32 | }; 33 | struct Stat2 34 | { 35 | fuse_timespec st_atimespec; 36 | fuse_timespec st_mtimespec; 37 | fuse_timespec st_ctimespec; 38 | fuse_timespec st_birthtimespec; 39 | }; 40 | struct Stat3 41 | { 42 | fuse_timespec st_atim; 43 | fuse_timespec st_mtim; 44 | fuse_timespec st_ctim; 45 | fuse_timespec st_birthtim; 46 | }; 47 | TEST_CASE("Different stat structs") 48 | { 49 | Stat1 st1{}; 50 | Stat2 st2{}; 51 | Stat3 st3{}; 52 | CHECK(get_atim(st1).tv_sec == get_atim(st2).tv_sec); 53 | CHECK(get_mtim(st1).tv_sec == get_mtim(st2).tv_sec); 54 | CHECK(get_ctim(st1).tv_sec == get_ctim(st2).tv_sec); 55 | CHECK(!get_birthtim(st1).has_value()); 56 | CHECK(get_birthtim(st2).has_value()); 57 | CHECK(get_birthtim(st3).has_value()); 58 | } 59 | } // namespace 60 | } // namespace securefs 61 | -------------------------------------------------------------------------------- /test/test_thread_local.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "thread_local.h" 3 | #include 4 | #include 5 | #include 6 | 7 | namespace securefs 8 | { 9 | namespace 10 | { 11 | struct A 12 | { 13 | int value = 1; 14 | static inline std::atomic destroy_count = 0; 15 | 16 | ~A() { ++destroy_count; } 17 | }; 18 | 19 | TEST_CASE("Test custom ThreadLocal") 20 | { 21 | ThreadLocal a1([]() { return std::make_unique(); }); 22 | { 23 | ThreadLocal a2( 24 | []() 25 | { 26 | auto result = std::make_unique(); 27 | result->value = 2; 28 | return result; 29 | }); 30 | CHECK(a1.get().value == 1); 31 | CHECK(a2.get().value == 2); 32 | } 33 | // Now a2 is destroyed, and a3 will take over its slot. 34 | ThreadLocal a3( 35 | []() 36 | { 37 | auto result = std::make_unique(); 38 | result->value = 3; 39 | return result; 40 | }); 41 | CHECK(a1.get().value == 1); 42 | CHECK(a3.get().value == 3); 43 | CHECK(A::destroy_count.load() == 1); 44 | } 45 | } // namespace 46 | } // namespace securefs 47 | -------------------------------------------------------------------------------- /test/test_utils.cpp: -------------------------------------------------------------------------------- 1 | #include "crypto.h" 2 | #include "myutils.h" 3 | #include "platform.h" 4 | #include 5 | 6 | #include 7 | 8 | TEST_CASE("Test endian") 9 | { 10 | using namespace securefs; 11 | 12 | uint32_t a = 0xABCDEF; 13 | byte raw[4]; 14 | to_little_endian(a, raw); 15 | REQUIRE(raw[0] == 0xEF); 16 | REQUIRE(raw[1] == 0xCD); 17 | REQUIRE(raw[2] == 0xAB); 18 | REQUIRE(raw[3] == 0); 19 | REQUIRE(from_little_endian(raw) == 0xABCDEF); 20 | } 21 | 22 | TEST_CASE("Test conversion of hex") 23 | { 24 | securefs::id_type id; 25 | securefs::generate_random(id.data(), id.size()); 26 | auto hex = securefs::hexify(id); 27 | securefs::id_type id_copy; 28 | securefs::parse_hex(hex, id_copy.data(), id_copy.size()); 29 | REQUIRE(memcmp(id.data(), id_copy.data(), id.size()) == 0); 30 | } 31 | 32 | TEST_CASE("Base32") 33 | { 34 | CryptoPP::Base32Encoder enc; 35 | const byte from[] = "hello"; 36 | byte out[256] = {}, out2[256] = {}; 37 | enc.Put(from, sizeof(from)); 38 | enc.MessageEnd(); 39 | enc.Get(out, sizeof(out)); 40 | 41 | enc.Initialize(); 42 | enc.Put(from, sizeof(from)); 43 | enc.MessageEnd(); 44 | enc.Get(out2, sizeof(out2)); 45 | CAPTURE(out); 46 | CAPTURE(out2); 47 | REQUIRE(strcmp((char*)out, (char*)out2) == 0); 48 | } 49 | 50 | TEST_CASE("our base32") 51 | { 52 | std::string input, output, decoded; 53 | input.reserve(128); 54 | for (size_t i = 0; i < 128; ++i) 55 | { 56 | if (i > 0) 57 | { 58 | input.resize(i, 0); 59 | securefs::generate_random((byte*)input.data(), i); 60 | } 61 | securefs::base32_encode((const byte*)input.data(), i, output); 62 | CAPTURE(output); 63 | securefs::base32_decode(output.data(), output.size(), decoded); 64 | CHECK(input == decoded); 65 | } 66 | } 67 | 68 | TEST_CASE("our base32 against CryptoPP") 69 | { 70 | std::string input, output; 71 | char buffer[4000]; 72 | input.reserve(128); 73 | for (size_t i = 0; i < 128; ++i) 74 | { 75 | if (i > 0) 76 | { 77 | input.resize(i, 0); 78 | securefs::generate_random((byte*)input.data(), i); 79 | } 80 | securefs::base32_encode((const byte*)input.data(), i, output); 81 | 82 | CryptoPP::Base32Encoder enc; 83 | enc.Put((const byte*)input.data(), input.size()); 84 | enc.MessageEnd(); 85 | memset(buffer, 0, sizeof(buffer)); 86 | enc.Get((byte*)buffer, sizeof(buffer)); 87 | CHECK(output == buffer); 88 | } 89 | } 90 | 91 | TEST_CASE("is_ascii") 92 | { 93 | REQUIRE(securefs::is_ascii("")); 94 | REQUIRE(securefs::is_ascii("a")); 95 | REQUIRE(securefs::is_ascii("abd;df-135j~")); 96 | REQUIRE(securefs::is_ascii("\x7f")); 97 | REQUIRE(securefs::is_ascii("abc\x11")); 98 | 99 | REQUIRE(!securefs::is_ascii("\xe8\xb0\xb7\xe6\xad\x8c")); 100 | REQUIRE(!securefs::is_ascii("\x41\xcc\x88\x66\x66\x69\x6e")); 101 | REQUIRE(!securefs::is_ascii("\x80")); 102 | } 103 | -------------------------------------------------------------------------------- /test/test_win.cpp: -------------------------------------------------------------------------------- 1 | #ifdef _WIN32 2 | #include "platform.h" 3 | #include 4 | 5 | using ::securefs::OSService; 6 | 7 | TEST_CASE("Test windows path normalization") 8 | { 9 | REQUIRE(OSService::concat_and_norm("", R"(C:\abc.txt)") == LR"(C:\abc.txt)"); 10 | REQUIRE(OSService::concat_and_norm(R"(C:\Users)", R"(C:\abc.txt)") == LR"(C:\abc.txt)"); 11 | REQUIRE(OSService::concat_and_norm(R"(C:\Users)", R"(\\server\share)") == LR"(\\server\share)"); 12 | REQUIRE(OSService::concat_and_norm(R"(C:\Users)", R"(/cygwin)") == LR"(/cygwin)"); 13 | REQUIRE(OSService::concat_and_norm(R"(C:\Users)", R"(👌🎍😍)") == LR"(\\?\C:\Users\👌🎍😍)"); 14 | REQUIRE(OSService::concat_and_norm(R"(C:\Users)", R"(cygwin\..\abc\.\.\.)") 15 | == LR"(\\?\C:\Users\abc)"); 16 | REQUIRE(OSService::concat_and_norm(R"(\\server\share\)", R"(cygwin\..\abc\.\.\.)") 17 | == LR"(\\server\share\abc)"); 18 | REQUIRE(OSService::concat_and_norm(R"(\\?\\C:\Users\\\.//..)", R"(cygwin/)") 19 | == LR"(\\?\C:\cygwin)"); 20 | REQUIRE(OSService::concat_and_norm(R"(\\?\C:\Users)", R"(cygwin/../c)") 21 | == LR"(\\?\C:\Users\c)"); 22 | REQUIRE(OSService::concat_and_norm(R"(\\?\C:\Users)", R"(cygwin/./c)") 23 | == LR"(\\?\C:\Users\cygwin\c)"); 24 | REQUIRE(OSService::concat_and_norm(R"(\\?\C:\Users)", R"(cygwin)") 25 | == LR"(\\?\C:\Users\cygwin)"); 26 | REQUIRE(OSService::concat_and_norm(R"(\\?\UNC\server\share)", R"(a\b\c)") 27 | == LR"(\\?\UNC\server\share\a\b\c)"); 28 | REQUIRE_THROWS(OSService::concat_and_norm("abc", "def")); 29 | } 30 | #endif 31 | -------------------------------------------------------------------------------- /test/test_xattr_workaround.cpp: -------------------------------------------------------------------------------- 1 | #include "apple_xattr_workaround.h" 2 | #include "myutils.h" 3 | 4 | #include 5 | 6 | #include 7 | 8 | template 9 | static std::string to_string(const char (&buffer)[N]) 10 | { 11 | return std::string(buffer, sizeof(buffer)); 12 | } 13 | 14 | namespace securefs::apple_xattr 15 | { 16 | namespace 17 | { 18 | TEST_CASE("transform listxattr result") 19 | { 20 | if (!is_apple()) 21 | { 22 | return; 23 | } 24 | { 25 | char buffer[] = ""; 26 | const char canonical_result[] = ""; 27 | transform_listxattr_result(buffer, sizeof(buffer)); 28 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 29 | } 30 | { 31 | char buffer[] = "abc"; 32 | const char canonical_result[] = "abc"; 33 | transform_listxattr_result(buffer, sizeof(buffer)); 34 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 35 | } 36 | { 37 | char buffer[] = "a"; 38 | const char canonical_result[] = "a"; 39 | transform_listxattr_result(buffer, sizeof(buffer)); 40 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 41 | } 42 | { 43 | char buffer[] = "com.apple.FinderInfo"; 44 | const char canonical_result[] = "com.apple.FinderInfo"; 45 | transform_listxattr_result(buffer, sizeof(buffer)); 46 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 47 | } 48 | { 49 | char buffer[] = "_securefs.FinderInfo"; 50 | const char canonical_result[] = "com.apple.FinderInfo"; 51 | transform_listxattr_result(buffer, sizeof(buffer)); 52 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 53 | } 54 | { 55 | char buffer[] = "_securefs.FinderInf"; 56 | const char canonical_result[] = "_securefs.FinderInf"; 57 | transform_listxattr_result(buffer, sizeof(buffer)); 58 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 59 | } 60 | { 61 | char buffer[] = "_securefs.FinderInfoa"; 62 | const char canonical_result[] = "_securefs.FinderInfoa"; 63 | transform_listxattr_result(buffer, sizeof(buffer)); 64 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 65 | } 66 | { 67 | char buffer[] = "_securefs.FinderInfo\0abcde"; 68 | const char canonical_result[] = "com.apple.FinderInfo\0abcde"; 69 | transform_listxattr_result(buffer, sizeof(buffer)); 70 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 71 | } 72 | { 73 | char buffer[] = "abcde\0_securefs.FinderInfo"; 74 | const char canonical_result[] = "abcde\0com.apple.FinderInfo"; 75 | transform_listxattr_result(buffer, sizeof(buffer)); 76 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 77 | } 78 | { 79 | char buffer[] = "abcdefghijklmnopkrstuvwxyz\0_securefs.FinderInfo"; 80 | const char canonical_result[] = "abcdefghijklmnopkrstuvwxyz\0com.apple.FinderInfo"; 81 | transform_listxattr_result(buffer, sizeof(buffer)); 82 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 83 | } 84 | { 85 | char buffer[] = "abcde\0_securefs.FinderInfo\0fgh"; 86 | const char canonical_result[] = "abcde\0com.apple.FinderInfo\0fgh"; 87 | transform_listxattr_result(buffer, sizeof(buffer)); 88 | REQUIRE(to_string(buffer) == to_string(canonical_result)); 89 | } 90 | } 91 | } // namespace 92 | } // namespace securefs::apple_xattr 93 | -------------------------------------------------------------------------------- /vcpkg.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", 3 | "dependencies": [ 4 | "argon2", 5 | "cryptopp", 6 | "tclap", 7 | "doctest", 8 | "sqlite3", 9 | "fruit", 10 | { 11 | "name": "abseil", 12 | "features": [ 13 | "cxx17" 14 | ] 15 | }, 16 | "uni-algo", 17 | "protobuf" 18 | ], 19 | "features": { 20 | "mimalloc": { 21 | "description": "Enable linking to mimalloc", 22 | "dependencies": [ 23 | { 24 | "name": "mimalloc", 25 | "features": [ 26 | "override" 27 | ] 28 | } 29 | ] 30 | }, 31 | "jemalloc": { 32 | "description": "Enable linking to jemalloc", 33 | "dependencies": [ 34 | { 35 | "name": "jemalloc" 36 | } 37 | ] 38 | } 39 | } 40 | } 41 | --------------------------------------------------------------------------------