Просмотр исходного кода

Merge pull request #7 from xtruan/develop

Crypto as lib & QR address gen
Struan Clark 2 лет назад
Родитель
Сommit
e7943e34a1
100 измененных файлов с 195 добавлено и 55 удалено
  1. 28 0
      .github/workflows/build.yml
  2. 42 0
      .github/workflows/release.yml
  3. 7 0
      README.md
  4. 6 1
      application.fam
  5. 4 3
      flipbip.c
  6. 2 2
      flipbip.h
  7. 83 38
      helpers/flipbip_file.c
  8. 20 5
      helpers/flipbip_file.h
  9. 0 3
      helpers/flipbip_led.h
  10. 3 3
      helpers/flipbip_string.c
  11. 0 0
      lib/crypto/AUTHORS
  12. 0 0
      lib/crypto/CONTRIBUTORS
  13. 0 0
      lib/crypto/LICENSE
  14. 0 0
      lib/crypto/Makefile
  15. 0 0
      lib/crypto/README.md
  16. 0 0
      lib/crypto/address.c
  17. 0 0
      lib/crypto/address.h
  18. 0 0
      lib/crypto/aes/aes.h
  19. 0 0
      lib/crypto/aes/aes_modes.c
  20. 0 0
      lib/crypto/aes/aescrypt.c
  21. 0 0
      lib/crypto/aes/aeskey.c
  22. 0 0
      lib/crypto/aes/aesopt.h
  23. 0 0
      lib/crypto/aes/aestab.c
  24. 0 0
      lib/crypto/aes/aestab.h
  25. 0 0
      lib/crypto/aes/aestst.c
  26. 0 0
      lib/crypto/aes/aestst.h
  27. 0 0
      lib/crypto/base32.c
  28. 0 0
      lib/crypto/base32.h
  29. 0 0
      lib/crypto/base58.c
  30. 0 0
      lib/crypto/base58.h
  31. 0 0
      lib/crypto/bignum.c
  32. 0 0
      lib/crypto/bignum.h
  33. 0 0
      lib/crypto/bip32.c
  34. 0 0
      lib/crypto/bip32.h
  35. 0 0
      lib/crypto/bip39.c
  36. 0 0
      lib/crypto/bip39.h
  37. 0 0
      lib/crypto/bip39_english.c
  38. 0 0
      lib/crypto/blake256.c
  39. 0 0
      lib/crypto/blake256.h
  40. 0 0
      lib/crypto/blake2_common.h
  41. 0 0
      lib/crypto/blake2b.c
  42. 0 0
      lib/crypto/blake2b.h
  43. 0 0
      lib/crypto/blake2s.c
  44. 0 0
      lib/crypto/blake2s.h
  45. 0 0
      lib/crypto/byte_order.h
  46. 0 0
      lib/crypto/cardano.c
  47. 0 0
      lib/crypto/cardano.h
  48. 0 0
      lib/crypto/cash_addr.c
  49. 0 0
      lib/crypto/cash_addr.h
  50. 0 0
      lib/crypto/chacha20poly1305/LICENSE
  51. 0 0
      lib/crypto/chacha20poly1305/chacha20poly1305.c
  52. 0 0
      lib/crypto/chacha20poly1305/chacha20poly1305.h
  53. 0 0
      lib/crypto/chacha20poly1305/chacha_merged.c
  54. 0 0
      lib/crypto/chacha20poly1305/ecrypt_config.h
  55. 0 0
      lib/crypto/chacha20poly1305/ecrypt_machine.h
  56. 0 0
      lib/crypto/chacha20poly1305/ecrypt_portable.h
  57. 0 0
      lib/crypto/chacha20poly1305/ecrypt_sync.h
  58. 0 0
      lib/crypto/chacha20poly1305/ecrypt_types.h
  59. 0 0
      lib/crypto/chacha20poly1305/poly1305_donna.c
  60. 0 0
      lib/crypto/chacha20poly1305/poly1305_donna.h
  61. 0 0
      lib/crypto/chacha20poly1305/poly1305_donna_32.h
  62. 0 0
      lib/crypto/chacha20poly1305/rfc7539.c
  63. 0 0
      lib/crypto/chacha20poly1305/rfc7539.h
  64. 0 0
      lib/crypto/chacha_drbg.c
  65. 0 0
      lib/crypto/chacha_drbg.h
  66. 0 0
      lib/crypto/check_mem.h
  67. 0 0
      lib/crypto/curves.c
  68. 0 0
      lib/crypto/curves.h
  69. 0 0
      lib/crypto/ecdsa.c
  70. 0 0
      lib/crypto/ecdsa.h
  71. 0 0
      lib/crypto/ed25519_donna/README.md
  72. 0 0
      lib/crypto/ed25519_donna/curve25519_donna_32bit.c
  73. 0 0
      lib/crypto/ed25519_donna/curve25519_donna_32bit.h
  74. 0 0
      lib/crypto/ed25519_donna/curve25519_donna_helpers.c
  75. 0 0
      lib/crypto/ed25519_donna/curve25519_donna_helpers.h
  76. 0 0
      lib/crypto/ed25519_donna/curve25519_donna_scalarmult_base.c
  77. 0 0
      lib/crypto/ed25519_donna/curve25519_donna_scalarmult_base.h
  78. 0 0
      lib/crypto/ed25519_donna/ed25519.c
  79. 0 0
      lib/crypto/ed25519_donna/ed25519.h
  80. 0 0
      lib/crypto/ed25519_donna/ed25519_donna.h
  81. 0 0
      lib/crypto/ed25519_donna/ed25519_donna_32bit_tables.c
  82. 0 0
      lib/crypto/ed25519_donna/ed25519_donna_32bit_tables.h
  83. 0 0
      lib/crypto/ed25519_donna/ed25519_donna_basepoint_table.c
  84. 0 0
      lib/crypto/ed25519_donna/ed25519_donna_basepoint_table.h
  85. 0 0
      lib/crypto/ed25519_donna/ed25519_donna_impl_base.c
  86. 0 0
      lib/crypto/ed25519_donna/ed25519_donna_impl_base.h
  87. 0 0
      lib/crypto/ed25519_donna/ed25519_donna_portable.h
  88. 0 0
      lib/crypto/ed25519_donna/ed25519_hash_custom.h
  89. 0 0
      lib/crypto/ed25519_donna/ed25519_hash_custom_keccak.h
  90. 0 0
      lib/crypto/ed25519_donna/ed25519_hash_custom_sha3.h
  91. 0 0
      lib/crypto/ed25519_donna/ed25519_keccak.c
  92. 0 0
      lib/crypto/ed25519_donna/ed25519_keccak.h
  93. 0 0
      lib/crypto/ed25519_donna/ed25519_sha3.c
  94. 0 0
      lib/crypto/ed25519_donna/ed25519_sha3.h
  95. 0 0
      lib/crypto/ed25519_donna/modm_donna_32bit.c
  96. 0 0
      lib/crypto/ed25519_donna/modm_donna_32bit.h
  97. 0 0
      lib/crypto/groestl.c
  98. 0 0
      lib/crypto/groestl.h
  99. 0 0
      lib/crypto/groestl_internal.h
  100. 0 0
      lib/crypto/hasher.c

+ 28 - 0
.github/workflows/build.yml

@@ -0,0 +1,28 @@
+name: Build
+
+on:
+  push:
+    branches:
+      - main
+      - develop
+
+env:
+  firmware_version: '0.78.1'
+
+jobs:
+  build:
+    name: Build
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout Flipper Zero Firmware
+        uses: actions/checkout@v3
+        with:
+          repository: 'flipperdevices/flipperzero-firmware'
+          ref: ${{ env.firmware_version }}
+          submodules: true
+      - name: Checkout FlipBIP
+        uses: actions/checkout@v3
+        with:
+          path: 'applications_user/FlipBIP'
+      - name: Build FAPs
+        run: ./fbt COMPACT=1 DEBUG=0 faps

+ 42 - 0
.github/workflows/release.yml

@@ -0,0 +1,42 @@
+name: Release
+
+on:
+  push:
+    tags:
+      - 'v[0-9]+.[0-9]+.[0-9]+'
+
+env:
+  firmware_version: '0.78.1'
+
+jobs:
+  build:
+    name: Build
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout Flipper Zero Firmware
+        uses: actions/checkout@v3
+        with:
+          repository: 'flipperdevices/flipperzero-firmware'
+          ref: ${{ env.firmware_version }}
+          submodules: true
+      - name: Checkout FlipBIP
+        uses: actions/checkout@v3
+        with:
+          path: 'applications_user/FlipBIP'
+      - name: Build FAPs
+        run: ./fbt COMPACT=1 DEBUG=0 faps
+      - name: Get tag
+        id: tag
+        uses: dawidd6/action-get-tag@v1
+        with:
+          strip_v: false
+      - name: Publish FlipBIP
+        uses: softprops/action-gh-release@v1
+        with:
+          files: |
+            build/f7-firmware-C/.extapps/FlipBIP.fap
+            applications_user/FlipBIP/README.md
+          name: ${{steps.tag.outputs.tag}}
+          body: Built against Flipper Zero firmware v${{ env.firmware_version }}
+          generate_release_notes: true
+          fail_on_unmatched_files: true

+ 7 - 0
README.md

@@ -54,6 +54,13 @@ The application will be compiled and copied onto your device
 - Import your own mnemonic
   - Lots of typing required but you can now use the wallet with an existing mnemonic you have saved
   - Useful to convert paper backup to keys and receive addresses without relying on a laptop or phone
+- Improved receive address generation features
+  - Addresses are now generated at the same time as other pieces of wallet info
+    - This slows down initial wallet load, but makes UI much more responsive
+  - QR code files are now generated for each address and stored in the `apps_data/flipbip` directory
+    - This app is required to view the QR code files: https://github.com/bmatcuk/flipperzero-qrcode (included in RM firmware)
+    - NOTE: This happens during the `View Wallet` step; you must view a wallet after generating/importing a wallet in order to ensure the address QR files are correct
+- Broke out crypto functionality into its own library using `fap_private_libs` feature
 
 ### Work in Progress
 

+ 6 - 1
application.fam

@@ -7,10 +7,15 @@ App(
     requires=[
         "gui",
     ],
-    stack_size=2 * 1024,
+    stack_size=3 * 1024,
     order=10,
     fap_icon="flipbip_10px.png",
     fap_icon_assets="icons",
+    fap_private_libs=[
+        Lib(
+            name="crypto",
+        ),
+    ],
     fap_category="Misc",
     fap_description="Crypto toolkit for Flipper",
     fap_author="Struan Clark (xtruan)",

+ 4 - 3
flipbip.c

@@ -1,8 +1,9 @@
 #include "flipbip.h"
-#include "crypto/memzero.h"
-#include "crypto/bip39.h"
 #include "helpers/flipbip_file.h"
 #include "helpers/flipbip_haptic.h"
+// From: lib/crypto
+#include <memzero.h>
+#include <bip39.h>
 
 bool flipbip_custom_event_callback(void* context, uint32_t event) {
     furi_assert(context);
@@ -49,7 +50,7 @@ static void text_input_callback(void* context) {
                 if(mnemonic_check(app->import_mnemonic_text) == 0)
                     status = FlipBipStatusMnemonicCheckError; // 13 = mnemonic check error
                 // Save the mnemonic to persistent storage
-                else if(!flipbip_save_settings_secure(app->import_mnemonic_text))
+                else if(!flipbip_save_file_secure(app->import_mnemonic_text))
                     status = FlipBipStatusSaveError; // 12 = save error
 
                 if(status == FlipBipStatusSuccess) {

+ 2 - 2
flipbip.h

@@ -15,7 +15,7 @@
 #include "views/flipbip_startscreen.h"
 #include "views/flipbip_scene_1.h"
 
-#define FLIPBIP_VERSION "v0.0.6"
+#define FLIPBIP_VERSION "v0.0.7"
 
 #define COIN_BTC 0
 #define COIN_DOGE 3
@@ -96,4 +96,4 @@ typedef enum {
     FlipBipStatusLoadError = 11,
     FlipBipStatusSaveError = 12,
     FlipBipStatusMnemonicCheckError = 13,
-} FlipBipStatus;
+} FlipBipStatus;

+ 83 - 38
helpers/flipbip_file.c

@@ -1,37 +1,50 @@
 #include "flipbip_file.h"
-#include "../helpers/flipbip_string.h"
-
-#include "../crypto/memzero.h"
-#include "../crypto/rand.h"
-
 #include <storage/storage.h>
+#include <applications.h>
+#include <loader/loader.h>
+#include "../helpers/flipbip_string.h"
+// From: lib/crypto
+#include <memzero.h>
+#include <rand.h>
 
+// #define FLIPBIP_APP_BASE_FOLDER APP_DATA_PATH("flipbip")
 #define FLIPBIP_APP_BASE_FOLDER EXT_PATH("apps_data/flipbip")
+#define FLIPBIP_APP_BASE_FOLDER_PATH(path) FLIPBIP_APP_BASE_FOLDER "/" path
 #define FLIPBIP_DAT_FILE_NAME ".flipbip.dat"
 // #define FLIPBIP_DAT_FILE_NAME ".flipbip.dat.txt"
 #define FLIPBIP_DAT_FILE_NAME_BAK ".flipbip.dat.bak"
 #define FLIPBIP_KEY_FILE_NAME ".flipbip.key"
 // #define FLIPBIP_KEY_FILE_NAME ".flipbip.key.txt"
 #define FLIPBIP_KEY_FILE_NAME_BAK ".flipbip.key.bak"
-#define FLIPBIP_DAT_PATH FLIPBIP_APP_BASE_FOLDER "/" FLIPBIP_DAT_FILE_NAME
-#define FLIPBIP_DAT_PATH_BAK FLIPBIP_APP_BASE_FOLDER "/" FLIPBIP_DAT_FILE_NAME_BAK
-#define FLIPBIP_KEY_PATH FLIPBIP_APP_BASE_FOLDER "/" FLIPBIP_KEY_FILE_NAME
-#define FLIPBIP_KEY_PATH_BAK FLIPBIP_APP_BASE_FOLDER "/" FLIPBIP_KEY_FILE_NAME_BAK
-
-const size_t FILE_HLEN = 4;
-const size_t FILE_KLEN = 256;
-const size_t FILE_SLEN = 512;
+#define FLIPBIP_DAT_PATH FLIPBIP_APP_BASE_FOLDER_PATH(FLIPBIP_DAT_FILE_NAME)
+#define FLIPBIP_DAT_PATH_BAK FLIPBIP_APP_BASE_FOLDER_PATH(FLIPBIP_DAT_FILE_NAME_BAK)
+#define FLIPBIP_KEY_PATH FLIPBIP_APP_BASE_FOLDER_PATH(FLIPBIP_KEY_FILE_NAME)
+#define FLIPBIP_KEY_PATH_BAK FLIPBIP_APP_BASE_FOLDER_PATH(FLIPBIP_KEY_FILE_NAME_BAK)
+
+const char* TEXT_QRFILE = "Filetype: QRCode\n"
+                          "Version: 0\n"
+                          "Message: "; // 37 chars + 1 null
+#define FILE_HLEN 4
+#define FILE_KLEN 256
+#define FILE_SLEN 512
+#define FILE_MAX_PATH_LEN 48
 const char* FILE_HSTR = "fb01";
 const char* FILE_K1 = "fb0131d5cf688221c109163908ebe51debb46227c6cc8b37641910833222772a"
                       "baefe6d9ceb651842260e0d1e05e3b90d15e7d5ffaaabc0207bf200a117793a2";
 
-bool flipbip_load_settings(char* settings, bool key_file) {
+bool flipbip_load_file(char* settings, const FlipBipFile file_type, const char* file_name) {
     bool ret = false;
     const char* path;
-    if(key_file) {
+    if(file_type == FlipBipFileKey) {
         path = FLIPBIP_KEY_PATH;
-    } else {
+    } else if(file_type == FlipBipFileDat) {
         path = FLIPBIP_DAT_PATH;
+    } else {
+        char path_buf[32] = {0};
+        strcpy(path_buf, FLIPBIP_APP_BASE_FOLDER);
+        strcpy(path_buf + strlen(path_buf), "/");
+        strcpy(path_buf + strlen(path_buf), file_name);
+        path = path_buf;
     }
 
     Storage* fs_api = furi_record_open(RECORD_STORAGE);
@@ -74,34 +87,53 @@ bool flipbip_load_settings(char* settings, bool key_file) {
     return ret;
 }
 
-bool flipbip_has_settings(bool key_file) {
+bool flipbip_has_file(const FlipBipFile file_type, const char* file_name, const bool remove) {
     bool ret = false;
     const char* path;
-    if(key_file) {
+    if(file_type == FlipBipFileKey) {
         path = FLIPBIP_KEY_PATH;
-    } else {
+    } else if(file_type == FlipBipFileDat) {
         path = FLIPBIP_DAT_PATH;
+    } else {
+        char path_buf[32] = {0};
+        strcpy(path_buf, FLIPBIP_APP_BASE_FOLDER);
+        strcpy(path_buf + strlen(path_buf), "/");
+        strcpy(path_buf + strlen(path_buf), file_name);
+        path = path_buf;
     }
 
     Storage* fs_api = furi_record_open(RECORD_STORAGE);
-    if(storage_file_exists(fs_api, path)) {
-        ret = true;
+    if(remove) {
+        ret = storage_simply_remove(fs_api, path);
+    } else {
+        ret = storage_file_exists(fs_api, path);
     }
     furi_record_close(RECORD_STORAGE);
 
     return ret;
 }
 
-bool flipbip_save_settings(const char* settings, bool key_file, bool append) {
+bool flipbip_save_file(
+    const char* settings,
+    const FlipBipFile file_type,
+    const char* file_name,
+    const bool append) {
     bool ret = false;
     const char* path;
     const char* path_bak;
-    if(key_file) {
+    if(file_type == FlipBipFileKey) {
         path = FLIPBIP_KEY_PATH;
         path_bak = FLIPBIP_KEY_PATH_BAK;
-    } else {
+    } else if(file_type == FlipBipFileDat) {
         path = FLIPBIP_DAT_PATH;
         path_bak = FLIPBIP_DAT_PATH_BAK;
+    } else {
+        char path_buf[FILE_MAX_PATH_LEN] = {0};
+        strcpy(path_buf, FLIPBIP_APP_BASE_FOLDER); // 22
+        strcpy(path_buf + strlen(path_buf), "/");
+        strcpy(path_buf + strlen(path_buf), file_name);
+        path = path_buf;
+        path_bak = NULL;
     }
     int open_mode = FSOM_OPEN_ALWAYS;
     if(append) {
@@ -116,7 +148,7 @@ bool flipbip_save_settings(const char* settings, bool key_file, bool append) {
     //     return ret;
     // }
     // try to create the folder
-    storage_common_mkdir(fs_api, FLIPBIP_APP_BASE_FOLDER);
+    storage_simply_mkdir(fs_api, FLIPBIP_APP_BASE_FOLDER);
 
     File* settings_file = storage_file_alloc(fs_api);
     if(storage_file_open(settings_file, path, FSAM_WRITE, open_mode)) {
@@ -127,20 +159,33 @@ bool flipbip_save_settings(const char* settings, bool key_file, bool append) {
     storage_file_close(settings_file);
     storage_file_free(settings_file);
 
-    File* settings_file_bak = storage_file_alloc(fs_api);
-    if(storage_file_open(settings_file_bak, path_bak, FSAM_WRITE, open_mode)) {
-        storage_file_write(settings_file_bak, settings, strlen(settings));
-        storage_file_write(settings_file_bak, "\n", 1);
+    if(path_bak != NULL) {
+        File* settings_file_bak = storage_file_alloc(fs_api);
+        if(storage_file_open(settings_file_bak, path_bak, FSAM_WRITE, open_mode)) {
+            storage_file_write(settings_file_bak, settings, strlen(settings));
+            storage_file_write(settings_file_bak, "\n", 1);
+        }
+        storage_file_close(settings_file_bak);
+        storage_file_free(settings_file_bak);
     }
-    storage_file_close(settings_file_bak);
-    storage_file_free(settings_file_bak);
 
     furi_record_close(RECORD_STORAGE);
 
     return ret;
 }
 
-bool flipbip_load_settings_secure(char* settings) {
+bool flipbip_save_qrfile(
+    const char* qr_msg_prefix,
+    const char* qr_msg_content,
+    const char* file_name) {
+    char qr_buf[90] = {0};
+    strcpy(qr_buf, TEXT_QRFILE);
+    strcpy(qr_buf + strlen(qr_buf), qr_msg_prefix);
+    strcpy(qr_buf + strlen(qr_buf), qr_msg_content);
+    return flipbip_save_file(qr_buf, FlipBipFileOther, file_name, false);
+}
+
+bool flipbip_load_file_secure(char* settings) {
     const size_t dlen = FILE_HLEN + FILE_SLEN + 1;
 
     // allocate memory for key/data
@@ -148,7 +193,7 @@ bool flipbip_load_settings_secure(char* settings) {
     memzero(data, dlen);
 
     // load k2 from file
-    if(!flipbip_load_settings(data, true)) return false;
+    if(!flipbip_load_file(data, FlipBipFileKey, NULL)) return false;
 
     // check header
     if(data[0] != FILE_HSTR[0] || data[1] != FILE_HSTR[1] || data[2] != FILE_HSTR[2] ||
@@ -174,7 +219,7 @@ bool flipbip_load_settings_secure(char* settings) {
     data -= FILE_HLEN;
 
     // load data from file
-    if(!flipbip_load_settings(data, false)) return false;
+    if(!flipbip_load_file(data, FlipBipFileDat, NULL)) return false;
 
     // check header
     if(data[0] != FILE_HSTR[0] || data[1] != FILE_HSTR[1] || data[2] != FILE_HSTR[2] ||
@@ -207,7 +252,7 @@ bool flipbip_load_settings_secure(char* settings) {
     return true;
 }
 
-bool flipbip_save_settings_secure(const char* settings) {
+bool flipbip_save_file_secure(const char* settings) {
     const size_t dlen = FILE_HLEN + FILE_SLEN + 1;
 
     // cap settings to 256 bytes
@@ -238,7 +283,7 @@ bool flipbip_save_settings_secure(const char* settings) {
     // seek <-- header
     data -= FILE_HLEN;
     // save k2 to file
-    flipbip_save_settings(data, true, false);
+    flipbip_save_file(data, FlipBipFileKey, NULL, false);
     // seek --> header
     data += FILE_HLEN;
     // zero k2 memory
@@ -251,7 +296,7 @@ bool flipbip_save_settings_secure(const char* settings) {
     // seek <-- header
     data -= FILE_HLEN;
     // save data to file
-    flipbip_save_settings(data, false, false);
+    flipbip_save_file(data, FlipBipFileDat, NULL, false);
 
     // clear memory
     memzero(data, dlen);
@@ -260,4 +305,4 @@ bool flipbip_save_settings_secure(const char* settings) {
     memzero(k2, FILE_KLEN / 2);
 
     return true;
-}
+}

+ 20 - 5
helpers/flipbip_file.h

@@ -1,8 +1,23 @@
 #include <stdbool.h>
 
-bool flipbip_has_settings(bool key_file);
-bool flipbip_load_settings(char* settings, bool key_file);
-bool flipbip_save_settings(const char* settings, bool key_file, bool append);
+typedef enum {
+    FlipBipFileDat,
+    FlipBipFileKey,
+    FlipBipFileOther,
+} FlipBipFile;
 
-bool flipbip_load_settings_secure(char* settings);
-bool flipbip_save_settings_secure(const char* settings);
+bool flipbip_has_file(const FlipBipFile file_type, const char* file_name, const bool remove);
+bool flipbip_load_file(char* settings, const FlipBipFile file_type, const char* file_name);
+bool flipbip_save_file(
+    const char* settings,
+    const FlipBipFile file_type,
+    const char* file_name,
+    const bool append);
+
+bool flipbip_save_qrfile(
+    const char* qr_msg_prefix,
+    const char* qr_msg_content,
+    const char* file_name);
+
+bool flipbip_load_file_secure(char* settings);
+bool flipbip_save_file_secure(const char* settings);

+ 0 - 3
helpers/flipbip_led.h

@@ -1,5 +1,2 @@
-
-
 void flipbip_led_set_rgb(void* context, int red, int green, int blue);
-
 void flipbip_led_reset(void* context);

+ 3 - 3
helpers/flipbip_string.c

@@ -30,9 +30,9 @@
 #include <ctype.h>
 #include <stdint.h>
 #include <string.h>
-
-#include "../crypto/memzero.h"
-#include "../crypto/rc4.h"
+// From: lib/crypto
+#include <memzero.h>
+#include <rc4.h>
 
 char* flipbip_strtok(char* s, const char* delim) {
     static char* last;

+ 0 - 0
crypto/AUTHORS → lib/crypto/AUTHORS


+ 0 - 0
crypto/CONTRIBUTORS → lib/crypto/CONTRIBUTORS


+ 0 - 0
crypto/LICENSE → lib/crypto/LICENSE


+ 0 - 0
crypto/Makefile → lib/crypto/Makefile


+ 0 - 0
crypto/README.md → lib/crypto/README.md


+ 0 - 0
crypto/address.c → lib/crypto/address.c


+ 0 - 0
crypto/address.h → lib/crypto/address.h


+ 0 - 0
crypto/aes/aes.h → lib/crypto/aes/aes.h


+ 0 - 0
crypto/aes/aes_modes.c → lib/crypto/aes/aes_modes.c


+ 0 - 0
crypto/aes/aescrypt.c → lib/crypto/aes/aescrypt.c


+ 0 - 0
crypto/aes/aeskey.c → lib/crypto/aes/aeskey.c


+ 0 - 0
crypto/aes/aesopt.h → lib/crypto/aes/aesopt.h


+ 0 - 0
crypto/aes/aestab.c → lib/crypto/aes/aestab.c


+ 0 - 0
crypto/aes/aestab.h → lib/crypto/aes/aestab.h


+ 0 - 0
crypto/aes/aestst.c → lib/crypto/aes/aestst.c


+ 0 - 0
crypto/aes/aestst.h → lib/crypto/aes/aestst.h


+ 0 - 0
crypto/base32.c → lib/crypto/base32.c


+ 0 - 0
crypto/base32.h → lib/crypto/base32.h


+ 0 - 0
crypto/base58.c → lib/crypto/base58.c


+ 0 - 0
crypto/base58.h → lib/crypto/base58.h


+ 0 - 0
crypto/bignum.c → lib/crypto/bignum.c


+ 0 - 0
crypto/bignum.h → lib/crypto/bignum.h


+ 0 - 0
crypto/bip32.c → lib/crypto/bip32.c


+ 0 - 0
crypto/bip32.h → lib/crypto/bip32.h


+ 0 - 0
crypto/bip39.c → lib/crypto/bip39.c


+ 0 - 0
crypto/bip39.h → lib/crypto/bip39.h


+ 0 - 0
crypto/bip39_english.c → lib/crypto/bip39_english.c


+ 0 - 0
crypto/blake256.c → lib/crypto/blake256.c


+ 0 - 0
crypto/blake256.h → lib/crypto/blake256.h


+ 0 - 0
crypto/blake2_common.h → lib/crypto/blake2_common.h


+ 0 - 0
crypto/blake2b.c → lib/crypto/blake2b.c


+ 0 - 0
crypto/blake2b.h → lib/crypto/blake2b.h


+ 0 - 0
crypto/blake2s.c → lib/crypto/blake2s.c


+ 0 - 0
crypto/blake2s.h → lib/crypto/blake2s.h


+ 0 - 0
crypto/byte_order.h → lib/crypto/byte_order.h


+ 0 - 0
crypto/cardano.c → lib/crypto/cardano.c


+ 0 - 0
crypto/cardano.h → lib/crypto/cardano.h


+ 0 - 0
crypto/cash_addr.c → lib/crypto/cash_addr.c


+ 0 - 0
crypto/cash_addr.h → lib/crypto/cash_addr.h


+ 0 - 0
crypto/chacha20poly1305/LICENSE → lib/crypto/chacha20poly1305/LICENSE


+ 0 - 0
crypto/chacha20poly1305/chacha20poly1305.c → lib/crypto/chacha20poly1305/chacha20poly1305.c


+ 0 - 0
crypto/chacha20poly1305/chacha20poly1305.h → lib/crypto/chacha20poly1305/chacha20poly1305.h


+ 0 - 0
crypto/chacha20poly1305/chacha_merged.c → lib/crypto/chacha20poly1305/chacha_merged.c


+ 0 - 0
crypto/chacha20poly1305/ecrypt_config.h → lib/crypto/chacha20poly1305/ecrypt_config.h


+ 0 - 0
crypto/chacha20poly1305/ecrypt_machine.h → lib/crypto/chacha20poly1305/ecrypt_machine.h


+ 0 - 0
crypto/chacha20poly1305/ecrypt_portable.h → lib/crypto/chacha20poly1305/ecrypt_portable.h


+ 0 - 0
crypto/chacha20poly1305/ecrypt_sync.h → lib/crypto/chacha20poly1305/ecrypt_sync.h


+ 0 - 0
crypto/chacha20poly1305/ecrypt_types.h → lib/crypto/chacha20poly1305/ecrypt_types.h


+ 0 - 0
crypto/chacha20poly1305/poly1305_donna.c → lib/crypto/chacha20poly1305/poly1305_donna.c


+ 0 - 0
crypto/chacha20poly1305/poly1305_donna.h → lib/crypto/chacha20poly1305/poly1305_donna.h


+ 0 - 0
crypto/chacha20poly1305/poly1305_donna_32.h → lib/crypto/chacha20poly1305/poly1305_donna_32.h


+ 0 - 0
crypto/chacha20poly1305/rfc7539.c → lib/crypto/chacha20poly1305/rfc7539.c


+ 0 - 0
crypto/chacha20poly1305/rfc7539.h → lib/crypto/chacha20poly1305/rfc7539.h


+ 0 - 0
crypto/chacha_drbg.c → lib/crypto/chacha_drbg.c


+ 0 - 0
crypto/chacha_drbg.h → lib/crypto/chacha_drbg.h


+ 0 - 0
crypto/check_mem.h → lib/crypto/check_mem.h


+ 0 - 0
crypto/curves.c → lib/crypto/curves.c


+ 0 - 0
crypto/curves.h → lib/crypto/curves.h


+ 0 - 0
crypto/ecdsa.c → lib/crypto/ecdsa.c


+ 0 - 0
crypto/ecdsa.h → lib/crypto/ecdsa.h


+ 0 - 0
crypto/ed25519_donna/README.md → lib/crypto/ed25519_donna/README.md


+ 0 - 0
crypto/ed25519_donna/curve25519_donna_32bit.c → lib/crypto/ed25519_donna/curve25519_donna_32bit.c


+ 0 - 0
crypto/ed25519_donna/curve25519_donna_32bit.h → lib/crypto/ed25519_donna/curve25519_donna_32bit.h


+ 0 - 0
crypto/ed25519_donna/curve25519_donna_helpers.c → lib/crypto/ed25519_donna/curve25519_donna_helpers.c


+ 0 - 0
crypto/ed25519_donna/curve25519_donna_helpers.h → lib/crypto/ed25519_donna/curve25519_donna_helpers.h


+ 0 - 0
crypto/ed25519_donna/curve25519_donna_scalarmult_base.c → lib/crypto/ed25519_donna/curve25519_donna_scalarmult_base.c


+ 0 - 0
crypto/ed25519_donna/curve25519_donna_scalarmult_base.h → lib/crypto/ed25519_donna/curve25519_donna_scalarmult_base.h


+ 0 - 0
crypto/ed25519_donna/ed25519.c → lib/crypto/ed25519_donna/ed25519.c


+ 0 - 0
crypto/ed25519_donna/ed25519.h → lib/crypto/ed25519_donna/ed25519.h


+ 0 - 0
crypto/ed25519_donna/ed25519_donna.h → lib/crypto/ed25519_donna/ed25519_donna.h


+ 0 - 0
crypto/ed25519_donna/ed25519_donna_32bit_tables.c → lib/crypto/ed25519_donna/ed25519_donna_32bit_tables.c


+ 0 - 0
crypto/ed25519_donna/ed25519_donna_32bit_tables.h → lib/crypto/ed25519_donna/ed25519_donna_32bit_tables.h


+ 0 - 0
crypto/ed25519_donna/ed25519_donna_basepoint_table.c → lib/crypto/ed25519_donna/ed25519_donna_basepoint_table.c


+ 0 - 0
crypto/ed25519_donna/ed25519_donna_basepoint_table.h → lib/crypto/ed25519_donna/ed25519_donna_basepoint_table.h


+ 0 - 0
crypto/ed25519_donna/ed25519_donna_impl_base.c → lib/crypto/ed25519_donna/ed25519_donna_impl_base.c


+ 0 - 0
crypto/ed25519_donna/ed25519_donna_impl_base.h → lib/crypto/ed25519_donna/ed25519_donna_impl_base.h


+ 0 - 0
crypto/ed25519_donna/ed25519_donna_portable.h → lib/crypto/ed25519_donna/ed25519_donna_portable.h


+ 0 - 0
crypto/ed25519_donna/ed25519_hash_custom.h → lib/crypto/ed25519_donna/ed25519_hash_custom.h


+ 0 - 0
crypto/ed25519_donna/ed25519_hash_custom_keccak.h → lib/crypto/ed25519_donna/ed25519_hash_custom_keccak.h


+ 0 - 0
crypto/ed25519_donna/ed25519_hash_custom_sha3.h → lib/crypto/ed25519_donna/ed25519_hash_custom_sha3.h


+ 0 - 0
crypto/ed25519_donna/ed25519_keccak.c → lib/crypto/ed25519_donna/ed25519_keccak.c


+ 0 - 0
crypto/ed25519_donna/ed25519_keccak.h → lib/crypto/ed25519_donna/ed25519_keccak.h


+ 0 - 0
crypto/ed25519_donna/ed25519_sha3.c → lib/crypto/ed25519_donna/ed25519_sha3.c


+ 0 - 0
crypto/ed25519_donna/ed25519_sha3.h → lib/crypto/ed25519_donna/ed25519_sha3.h


+ 0 - 0
crypto/ed25519_donna/modm_donna_32bit.c → lib/crypto/ed25519_donna/modm_donna_32bit.c


+ 0 - 0
crypto/ed25519_donna/modm_donna_32bit.h → lib/crypto/ed25519_donna/modm_donna_32bit.h


+ 0 - 0
crypto/groestl.c → lib/crypto/groestl.c


+ 0 - 0
crypto/groestl.h → lib/crypto/groestl.h


+ 0 - 0
crypto/groestl_internal.h → lib/crypto/groestl_internal.h


+ 0 - 0
crypto/hasher.c → lib/crypto/hasher.c


Некоторые файлы не были показаны из-за большого количества измененных файлов