From 6833f63b0fda04c468c8b8c45fa05c6887f940dd Mon Sep 17 00:00:00 2001 From: ZiCode0 Date: Sun, 6 Apr 2025 20:30:38 +1200 Subject: [PATCH] :tada: begin project :tada: --- .gitignore | 14 + README.md | 3 + _other/crash.20200109 | 65 + _other/crash.20200122 | 13 + _other/crash.20201123 | 23 + _other/crash.20201225 | 33 + _other/crash.20220422 | 32 + _other/crash.20220424 | 12 + _other/dump-20190804 | 503 + _other/proguard-rules.pro | 7 + .../reimer_prochnow-manage_extensions.patch | 259 + app/build.gradle | 41 + app/src/main/AndroidManifest.xml | 80 + .../org/galexander/sshd/BootReceiver.java | 15 + .../java/org/galexander/sshd/DocActivity.java | 26 + .../org/galexander/sshd/DocActivityTV.java | 5 + .../main/java/org/galexander/sshd/Prefs.java | 75 + .../java/org/galexander/sshd/Settings.java | 45 + .../java/org/galexander/sshd/SimpleSSHD.java | 334 + .../galexander/sshd/SimpleSSHDService.java | 263 + .../org/galexander/sshd/SimpleSSHDTV.java | 3 + .../org/galexander/sshd/StartReceiver.java | 11 + .../org/galexander/sshd/StopReceiver.java | 11 + .../org/galexander/sshd/UpdaterThread.java | 30 + .../main/java/org/galexander/sshd/api.java | 101 + app/src/main/res/drawable/icon.png | Bin 0 -> 4663 bytes .../main/res/drawable/notification_icon.png | Bin 0 -> 3033 bytes app/src/main/res/drawable/tv_button_bg.xml | 6 + .../res/drawable/tv_button_bg_focused.xml | 8 + .../main/res/drawable/tv_button_bg_normal.xml | 8 + app/src/main/res/drawable/tvbanner.png | Bin 0 -> 32682 bytes app/src/main/res/layout/doc.xml | 5 + app/src/main/res/layout/main.xml | 35 + app/src/main/res/layout/main_tv.xml | 71 + app/src/main/res/layout/notification.xml | 17 + app/src/main/res/menu/main_menu.xml | 19 + app/src/main/res/values/styles.xml | 14 + app/src/main/res/xml/preferences.xml | 62 + build.gradle | 17 + dropbear/.hg_archival.txt | 7 + dropbear/.hgsigs | 30 + dropbear/.travis.yml | 78 + dropbear/CHANGES | 1514 +++ dropbear/DEVELOPING.md | 75 + dropbear/FUZZER-NOTES.md | 77 + dropbear/INSTALL | 93 + dropbear/LICENSE | 114 + dropbear/MULTI | 22 + dropbear/Makefile.in | 331 + dropbear/README | 79 + dropbear/SMALL | 53 + dropbear/agentfwd.h | 66 + dropbear/algo.h | 147 + dropbear/atomicio.c | 59 + dropbear/atomicio.h | 35 + dropbear/auth.h | 146 + dropbear/bignum.c | 104 + dropbear/bignum.h | 38 + dropbear/buffer.c | 370 + dropbear/buffer.h | 72 + dropbear/chachapoly.c | 148 + dropbear/chachapoly.h | 44 + dropbear/channel.h | 147 + dropbear/chansession.h | 106 + dropbear/circbuffer.c | 133 + dropbear/circbuffer.h | 52 + dropbear/cli-agentfwd.c | 316 + dropbear/cli-auth.c | 357 + dropbear/cli-authinteract.c | 175 + dropbear/cli-authpasswd.c | 161 + dropbear/cli-authpubkey.c | 290 + dropbear/cli-channel.c | 59 + dropbear/cli-chansession.c | 489 + dropbear/cli-kex.c | 463 + dropbear/cli-main.c | 149 + dropbear/cli-runopts.c | 920 ++ dropbear/cli-session.c | 474 + dropbear/cli-tcpfwd.c | 289 + dropbear/common-algo.c | 604 + dropbear/common-channel.c | 1249 +++ dropbear/common-chansession.c | 43 + dropbear/common-kex.c | 1023 ++ dropbear/common-runopts.c | 104 + dropbear/common-session.c | 716 ++ dropbear/compat.c | 282 + dropbear/compat.h | 56 + dropbear/config.guess | 1645 +++ dropbear/config.h.in | 453 + dropbear/config.sub | 1795 +++ dropbear/configure | 8878 +++++++++++++++ dropbear/configure.ac | 885 ++ dropbear/crypto_desc.c | 84 + dropbear/crypto_desc.h | 9 + dropbear/curve25519.c | 497 + dropbear/curve25519.h | 37 + dropbear/dbclient.1 | 214 + dropbear/dbhelpers.c | 18 + dropbear/dbhelpers.h | 21 + dropbear/dbmalloc.c | 192 + dropbear/dbmalloc.h | 27 + dropbear/dbmulti.c | 104 + dropbear/dbrandom.c | 420 + dropbear/dbrandom.h | 35 + dropbear/dbutil.c | 758 ++ dropbear/dbutil.h | 100 + dropbear/debian/README.Debian | 41 + dropbear/debian/README.Debian.diet | 15 + dropbear/debian/README.runit | 46 + dropbear/debian/changelog | 467 + dropbear/debian/control | 20 + dropbear/debian/copyright.in | 11 + dropbear/debian/dropbear.README.Debian | 19 + dropbear/debian/dropbear.conffiles | 3 + dropbear/debian/dropbear.default | 0 dropbear/debian/dropbear.docs | 3 + dropbear/debian/dropbear.init | 71 + dropbear/debian/dropbear.postinst | 79 + dropbear/debian/dropbear.postrm | 12 + dropbear/debian/dropbear.prerm | 11 + dropbear/debian/implicit | 93 + dropbear/debian/rules | 103 + dropbear/debian/service/log | 2 + dropbear/debian/service/run | 3 + dropbear/debug.h | 74 + dropbear/default_options.h | 314 + dropbear/dh_groups.c | 97 + dropbear/dh_groups.h | 26 + dropbear/dropbear.8 | 202 + dropbear/dropbear_lint.sh | 8 + dropbear/dropbearconvert.1 | 50 + dropbear/dropbearconvert.c | 145 + dropbear/dropbearkey.1 | 61 + dropbear/dropbearkey.c | 367 + dropbear/dss.c | 378 + dropbear/dss.h | 59 + dropbear/ecc.c | 264 + dropbear/ecc.h | 35 + dropbear/ecdsa.c | 420 + dropbear/ecdsa.h | 36 + dropbear/ed25519.c | 182 + dropbear/ed25519.h | 54 + dropbear/fake-rfc2553.c | 237 + dropbear/fake-rfc2553.h | 177 + dropbear/filelist.txt | 121 + dropbear/fuzz-common.c | 312 + dropbear/fuzz-harness.c | 48 + dropbear/fuzz-hostkeys.c | 140 + dropbear/fuzz-wrapfd.c | 241 + dropbear/fuzz-wrapfd.h | 23 + dropbear/fuzz.h | 77 + dropbear/fuzzer-kexdh.c | 76 + dropbear/fuzzer-kexecdh.c | 82 + dropbear/fuzzer-preauth.c | 6 + dropbear/fuzzer-preauth_nomaths.c | 6 + dropbear/fuzzer-pubkey.c | 54 + dropbear/fuzzer-verify.c | 79 + dropbear/fuzzers_test.sh | 12 + dropbear/gcm.c | 120 + dropbear/gcm.h | 47 + dropbear/gendss.c | 198 + dropbear/gendss.h | 36 + dropbear/gened25519.c | 47 + dropbear/gened25519.h | 36 + dropbear/genrsa.c | 134 + dropbear/genrsa.h | 36 + dropbear/gensignkey.c | 195 + dropbear/gensignkey.h | 9 + dropbear/ifndef_wrapper.sh | 7 + dropbear/includes.h | 195 + dropbear/install-sh | 251 + dropbear/kex.h | 113 + dropbear/keyimport.c | 2080 ++++ dropbear/keyimport.h | 42 + dropbear/libtomcrypt/.travis.yml | 135 + dropbear/libtomcrypt/Doxyfile | 1155 ++ dropbear/libtomcrypt/LICENSE | 29 + dropbear/libtomcrypt/Makefile.in | 299 + dropbear/libtomcrypt/README | 3 + dropbear/libtomcrypt/TODO | 3 + dropbear/libtomcrypt/build.sh | 59 + dropbear/libtomcrypt/changes | 1648 +++ dropbear/libtomcrypt/check_source.sh | 15 + dropbear/libtomcrypt/coverage.sh | 51 + dropbear/libtomcrypt/coverage_more.sh | 24 + dropbear/libtomcrypt/coverity.sh | 40 + dropbear/libtomcrypt/crypt.lof | 24 + dropbear/libtomcrypt/demos/constants.c | 87 + dropbear/libtomcrypt/demos/demo_dynamic.py | 309 + dropbear/libtomcrypt/demos/encrypt.c | 241 + dropbear/libtomcrypt/demos/hashsum.c | 300 + dropbear/libtomcrypt/demos/ltcrypt.c | 205 + dropbear/libtomcrypt/demos/multi.c | 110 + dropbear/libtomcrypt/demos/openssl-enc.c | 397 + dropbear/libtomcrypt/demos/sizes.c | 81 + dropbear/libtomcrypt/demos/small.c | 22 + dropbear/libtomcrypt/demos/test.c | 36 + dropbear/libtomcrypt/demos/timing.c | 1468 +++ dropbear/libtomcrypt/demos/tv_gen.c | 802 ++ dropbear/libtomcrypt/doc/Doxyfile | 2430 +++++ dropbear/libtomcrypt/doc/crypt.tex | 8269 ++++++++++++++ dropbear/libtomcrypt/doc/footer.html | 10 + dropbear/libtomcrypt/doc/header.html | 12 + dropbear/libtomcrypt/doc/libtomsm.png | Bin 0 -> 17809 bytes dropbear/libtomcrypt/doc/makefile | 63 + dropbear/libtomcrypt/filter.pl | 30 + dropbear/libtomcrypt/fixupind.pl | 11 + dropbear/libtomcrypt/genlist.sh | 10 + dropbear/libtomcrypt/helper.pl | 384 + dropbear/libtomcrypt/makefile.icc | 295 + dropbear/libtomcrypt/makefile.mingw | 288 + dropbear/libtomcrypt/makefile.msvc | 273 + dropbear/libtomcrypt/makefile.shared | 77 + dropbear/libtomcrypt/makefile.unix | 294 + dropbear/libtomcrypt/makefile_include.mk | 490 + dropbear/libtomcrypt/mess.sh | 4 + dropbear/libtomcrypt/notes/base64_tv.txt | 35 + dropbear/libtomcrypt/notes/ccm_tv.txt | 284 + dropbear/libtomcrypt/notes/cipher_tv.txt | 2339 ++++ dropbear/libtomcrypt/notes/eax_tv.txt | 569 + dropbear/libtomcrypt/notes/ecc_tv.txt | 1261 +++ .../libtomcrypt/notes/etc/NoekeonVects.java | 249 + .../libtomcrypt/notes/etc/saferp_optimizer.c | 177 + dropbear/libtomcrypt/notes/etc/whirlgen.c | 95 + dropbear/libtomcrypt/notes/etc/whirltest.c | 19 + dropbear/libtomcrypt/notes/gcm_tv.txt | 276 + dropbear/libtomcrypt/notes/hash_tv.txt | 5035 +++++++++ dropbear/libtomcrypt/notes/hmac_tv.txt | 5035 +++++++++ dropbear/libtomcrypt/notes/lrw_tv.txt | 126 + dropbear/libtomcrypt/notes/ocb_tv.txt | 569 + dropbear/libtomcrypt/notes/omac_tv.txt | 569 + dropbear/libtomcrypt/notes/pmac_tv.txt | 569 + .../notes/rsa-testvectors/makefile | 11 + .../notes/rsa-testvectors/oaep-int.txt | 369 + .../notes/rsa-testvectors/oaep-vect.c | 1418 +++ .../notes/rsa-testvectors/oaep-vect.txt | 2212 ++++ .../rsa-testvectors/pkcs1v15crypt-vectors.c | 5463 ++++++++++ .../rsa-testvectors/pkcs1v15crypt-vectors.txt | 9709 +++++++++++++++++ .../rsa-testvectors/pkcs1v15sign-vectors.c | 4261 ++++++++ .../rsa-testvectors/pkcs1v15sign-vectors.txt | 9049 +++++++++++++++ .../notes/rsa-testvectors/pss-int.txt | 162 + .../notes/rsa-testvectors/pss-vect.c | 1418 +++ .../notes/rsa-testvectors/pss-vect.txt | 2581 +++++ .../notes/rsa-testvectors/readme.txt | 22 + .../libtomcrypt/notes/rsa-testvectors/rt.py | 253 + dropbear/libtomcrypt/notes/tech0001.txt | 73 + dropbear/libtomcrypt/notes/tech0002.txt | 52 + dropbear/libtomcrypt/notes/tech0003.txt | 52 + dropbear/libtomcrypt/notes/tech0004.txt | 91 + dropbear/libtomcrypt/notes/tech0005.txt | 20 + dropbear/libtomcrypt/notes/tech0006.txt | 91 + dropbear/libtomcrypt/notes/tech0007.txt | 5 + dropbear/libtomcrypt/parsenames.pl | 26 + dropbear/libtomcrypt/printinfo.sh | 20 + dropbear/libtomcrypt/run.sh | 49 + dropbear/libtomcrypt/scan_build.sh | 19 + dropbear/libtomcrypt/src/ciphers/aes/aes.c | 746 ++ .../libtomcrypt/src/ciphers/aes/aes_tab.c | 1033 ++ dropbear/libtomcrypt/src/ciphers/anubis.c | 1559 +++ dropbear/libtomcrypt/src/ciphers/blowfish.c | 595 + dropbear/libtomcrypt/src/ciphers/camellia.c | 726 ++ dropbear/libtomcrypt/src/ciphers/cast5.c | 721 ++ dropbear/libtomcrypt/src/ciphers/des.c | 2099 ++++ dropbear/libtomcrypt/src/ciphers/kasumi.c | 319 + dropbear/libtomcrypt/src/ciphers/khazad.c | 856 ++ dropbear/libtomcrypt/src/ciphers/kseed.c | 377 + dropbear/libtomcrypt/src/ciphers/multi2.c | 319 + dropbear/libtomcrypt/src/ciphers/noekeon.c | 329 + dropbear/libtomcrypt/src/ciphers/rc2.c | 418 + dropbear/libtomcrypt/src/ciphers/rc5.c | 323 + dropbear/libtomcrypt/src/ciphers/rc6.c | 332 + .../libtomcrypt/src/ciphers/safer/safer.c | 496 + .../libtomcrypt/src/ciphers/safer/safer_tab.c | 65 + .../libtomcrypt/src/ciphers/safer/saferp.c | 569 + dropbear/libtomcrypt/src/ciphers/skipjack.c | 344 + .../libtomcrypt/src/ciphers/twofish/twofish.c | 712 ++ .../src/ciphers/twofish/twofish_tab.c | 497 + dropbear/libtomcrypt/src/ciphers/xtea.c | 262 + .../libtomcrypt/src/encauth/ccm/ccm_add_aad.c | 63 + .../src/encauth/ccm/ccm_add_nonce.c | 113 + .../libtomcrypt/src/encauth/ccm/ccm_done.c | 65 + .../libtomcrypt/src/encauth/ccm/ccm_init.c | 81 + .../libtomcrypt/src/encauth/ccm/ccm_memory.c | 408 + .../libtomcrypt/src/encauth/ccm/ccm_process.c | 88 + .../libtomcrypt/src/encauth/ccm/ccm_reset.c | 35 + .../libtomcrypt/src/encauth/ccm/ccm_test.c | 258 + .../chachapoly/chacha20poly1305_add_aad.c | 38 + .../chachapoly/chacha20poly1305_decrypt.c | 49 + .../chachapoly/chacha20poly1305_done.c | 46 + .../chachapoly/chacha20poly1305_encrypt.c | 48 + .../chachapoly/chacha20poly1305_init.c | 30 + .../chachapoly/chacha20poly1305_memory.c | 74 + .../chachapoly/chacha20poly1305_setiv.c | 68 + .../chacha20poly1305_setiv_rfc7905.c | 40 + .../chachapoly/chacha20poly1305_test.c | 134 + .../src/encauth/eax/eax_addheader.c | 37 + .../libtomcrypt/src/encauth/eax/eax_decrypt.c | 49 + .../encauth/eax/eax_decrypt_verify_memory.c | 110 + .../libtomcrypt/src/encauth/eax/eax_done.c | 93 + .../libtomcrypt/src/encauth/eax/eax_encrypt.c | 50 + .../eax/eax_encrypt_authenticate_memory.c | 81 + .../libtomcrypt/src/encauth/eax/eax_init.c | 143 + .../libtomcrypt/src/encauth/eax/eax_test.c | 260 + .../libtomcrypt/src/encauth/gcm/gcm_add_aad.c | 125 + .../libtomcrypt/src/encauth/gcm/gcm_add_iv.c | 93 + .../libtomcrypt/src/encauth/gcm/gcm_done.c | 91 + .../libtomcrypt/src/encauth/gcm/gcm_gf_mult.c | 220 + .../libtomcrypt/src/encauth/gcm/gcm_init.c | 106 + .../libtomcrypt/src/encauth/gcm/gcm_memory.c | 107 + .../libtomcrypt/src/encauth/gcm/gcm_mult_h.c | 58 + .../libtomcrypt/src/encauth/gcm/gcm_process.c | 161 + .../libtomcrypt/src/encauth/gcm/gcm_reset.c | 43 + .../libtomcrypt/src/encauth/gcm/gcm_test.c | 393 + .../libtomcrypt/src/encauth/ocb/ocb_decrypt.c | 78 + .../encauth/ocb/ocb_decrypt_verify_memory.c | 85 + .../src/encauth/ocb/ocb_done_decrypt.c | 79 + .../src/encauth/ocb/ocb_done_encrypt.c | 45 + .../libtomcrypt/src/encauth/ocb/ocb_encrypt.c | 71 + .../ocb/ocb_encrypt_authenticate_memory.c | 83 + .../libtomcrypt/src/encauth/ocb/ocb_init.c | 140 + .../libtomcrypt/src/encauth/ocb/ocb_ntz.c | 41 + .../src/encauth/ocb/ocb_shift_xor.c | 38 + .../libtomcrypt/src/encauth/ocb/ocb_test.c | 216 + .../libtomcrypt/src/encauth/ocb/s_ocb_done.c | 147 + .../src/encauth/ocb3/ocb3_add_aad.c | 106 + .../src/encauth/ocb3/ocb3_decrypt.c | 86 + .../src/encauth/ocb3/ocb3_decrypt_last.c | 110 + .../encauth/ocb3/ocb3_decrypt_verify_memory.c | 110 + .../libtomcrypt/src/encauth/ocb3/ocb3_done.c | 92 + .../src/encauth/ocb3/ocb3_encrypt.c | 86 + .../ocb3/ocb3_encrypt_authenticate_memory.c | 82 + .../src/encauth/ocb3/ocb3_encrypt_last.c | 112 + .../libtomcrypt/src/encauth/ocb3/ocb3_init.c | 196 + .../src/encauth/ocb3/ocb3_int_ntz.c | 39 + .../src/encauth/ocb3/ocb3_int_xor_blocks.c | 40 + .../libtomcrypt/src/encauth/ocb3/ocb3_test.c | 309 + dropbear/libtomcrypt/src/hashes/blake2b.c | 588 + dropbear/libtomcrypt/src/hashes/blake2s.c | 563 + dropbear/libtomcrypt/src/hashes/chc/chc.c | 307 + .../libtomcrypt/src/hashes/helper/hash_file.c | 54 + .../src/hashes/helper/hash_filehandle.c | 75 + .../src/hashes/helper/hash_memory.c | 70 + .../src/hashes/helper/hash_memory_multi.c | 89 + dropbear/libtomcrypt/src/hashes/md2.c | 251 + dropbear/libtomcrypt/src/hashes/md4.c | 307 + dropbear/libtomcrypt/src/hashes/md5.c | 367 + dropbear/libtomcrypt/src/hashes/rmd128.c | 407 + dropbear/libtomcrypt/src/hashes/rmd160.c | 466 + dropbear/libtomcrypt/src/hashes/rmd256.c | 431 + dropbear/libtomcrypt/src/hashes/rmd320.c | 496 + dropbear/libtomcrypt/src/hashes/sha1.c | 287 + dropbear/libtomcrypt/src/hashes/sha2/sha224.c | 130 + dropbear/libtomcrypt/src/hashes/sha2/sha256.c | 335 + dropbear/libtomcrypt/src/hashes/sha2/sha384.c | 135 + dropbear/libtomcrypt/src/hashes/sha2/sha512.c | 314 + .../libtomcrypt/src/hashes/sha2/sha512_224.c | 130 + .../libtomcrypt/src/hashes/sha2/sha512_256.c | 130 + dropbear/libtomcrypt/src/hashes/sha3.c | 306 + dropbear/libtomcrypt/src/hashes/sha3_test.c | 401 + dropbear/libtomcrypt/src/hashes/tiger.c | 813 ++ dropbear/libtomcrypt/src/hashes/whirl/whirl.c | 307 + .../libtomcrypt/src/hashes/whirl/whirltab.c | 597 + dropbear/libtomcrypt/src/headers/tomcrypt.h | 105 + .../libtomcrypt/src/headers/tomcrypt_argchk.h | 61 + .../libtomcrypt/src/headers/tomcrypt_cfg.h | 283 + .../libtomcrypt/src/headers/tomcrypt_cipher.h | 1008 ++ .../libtomcrypt/src/headers/tomcrypt_custom.h | 599 + .../src/headers/tomcrypt_dropbear.h | 92 + .../libtomcrypt/src/headers/tomcrypt_hash.h | 531 + .../libtomcrypt/src/headers/tomcrypt_mac.h | 565 + .../libtomcrypt/src/headers/tomcrypt_macros.h | 446 + .../libtomcrypt/src/headers/tomcrypt_math.h | 583 + .../libtomcrypt/src/headers/tomcrypt_misc.h | 113 + .../libtomcrypt/src/headers/tomcrypt_pk.h | 747 ++ .../libtomcrypt/src/headers/tomcrypt_pkcs.h | 108 + .../libtomcrypt/src/headers/tomcrypt_prng.h | 232 + .../libtomcrypt/src/mac/blake2/blake2bmac.c | 66 + .../src/mac/blake2/blake2bmac_file.c | 88 + .../src/mac/blake2/blake2bmac_memory.c | 48 + .../src/mac/blake2/blake2bmac_memory_multi.c | 62 + .../src/mac/blake2/blake2bmac_test.c | 314 + .../libtomcrypt/src/mac/blake2/blake2smac.c | 66 + .../src/mac/blake2/blake2smac_file.c | 88 + .../src/mac/blake2/blake2smac_memory.c | 48 + .../src/mac/blake2/blake2smac_memory_multi.c | 62 + .../src/mac/blake2/blake2smac_test.c | 314 + dropbear/libtomcrypt/src/mac/f9/f9_done.c | 76 + dropbear/libtomcrypt/src/mac/f9/f9_file.c | 98 + dropbear/libtomcrypt/src/mac/f9/f9_init.c | 69 + dropbear/libtomcrypt/src/mac/f9/f9_memory.c | 70 + .../libtomcrypt/src/mac/f9/f9_memory_multi.c | 89 + dropbear/libtomcrypt/src/mac/f9/f9_process.c | 77 + dropbear/libtomcrypt/src/mac/f9/f9_test.c | 77 + dropbear/libtomcrypt/src/mac/hmac/hmac_done.c | 91 + dropbear/libtomcrypt/src/mac/hmac/hmac_file.c | 101 + dropbear/libtomcrypt/src/mac/hmac/hmac_init.c | 101 + .../libtomcrypt/src/mac/hmac/hmac_memory.c | 87 + .../src/mac/hmac/hmac_memory_multi.c | 91 + .../libtomcrypt/src/mac/hmac/hmac_process.c | 42 + dropbear/libtomcrypt/src/mac/hmac/hmac_test.c | 631 ++ dropbear/libtomcrypt/src/mac/omac/omac_done.c | 85 + dropbear/libtomcrypt/src/mac/omac/omac_file.c | 98 + dropbear/libtomcrypt/src/mac/omac/omac_init.c | 100 + .../libtomcrypt/src/mac/omac/omac_memory.c | 84 + .../src/mac/omac/omac_memory_multi.c | 89 + .../libtomcrypt/src/mac/omac/omac_process.c | 91 + dropbear/libtomcrypt/src/mac/omac/omac_test.c | 104 + .../libtomcrypt/src/mac/pelican/pelican.c | 165 + .../src/mac/pelican/pelican_memory.c | 58 + .../src/mac/pelican/pelican_test.c | 114 + dropbear/libtomcrypt/src/mac/pmac/pmac_done.c | 73 + dropbear/libtomcrypt/src/mac/pmac/pmac_file.c | 99 + dropbear/libtomcrypt/src/mac/pmac/pmac_init.c | 149 + .../libtomcrypt/src/mac/pmac/pmac_memory.c | 73 + .../src/mac/pmac/pmac_memory_multi.c | 88 + dropbear/libtomcrypt/src/mac/pmac/pmac_ntz.c | 38 + .../libtomcrypt/src/mac/pmac/pmac_process.c | 99 + .../libtomcrypt/src/mac/pmac/pmac_shift_xor.c | 43 + dropbear/libtomcrypt/src/mac/pmac/pmac_test.c | 155 + .../libtomcrypt/src/mac/poly1305/poly1305.c | 268 + .../src/mac/poly1305/poly1305_file.c | 93 + .../src/mac/poly1305/poly1305_memory.c | 53 + .../src/mac/poly1305/poly1305_memory_multi.c | 67 + .../src/mac/poly1305/poly1305_test.c | 56 + dropbear/libtomcrypt/src/mac/xcbc/xcbc_done.c | 76 + dropbear/libtomcrypt/src/mac/xcbc/xcbc_file.c | 98 + dropbear/libtomcrypt/src/mac/xcbc/xcbc_init.c | 107 + .../libtomcrypt/src/mac/xcbc/xcbc_memory.c | 70 + .../src/mac/xcbc/xcbc_memory_multi.c | 89 + .../libtomcrypt/src/mac/xcbc/xcbc_process.c | 74 + dropbear/libtomcrypt/src/mac/xcbc/xcbc_test.c | 127 + .../src/math/fp/ltc_ecc_fp_mulmod.c | 1586 +++ dropbear/libtomcrypt/src/math/gmp_desc.c | 555 + dropbear/libtomcrypt/src/math/ltm_desc.c | 523 + dropbear/libtomcrypt/src/math/multi.c | 77 + dropbear/libtomcrypt/src/math/radix_to_bin.c | 62 + dropbear/libtomcrypt/src/math/rand_bn.c | 75 + dropbear/libtomcrypt/src/math/rand_prime.c | 89 + dropbear/libtomcrypt/src/math/tfm_desc.c | 808 ++ dropbear/libtomcrypt/src/misc/adler32.c | 131 + .../src/misc/base64/base64_decode.c | 203 + .../src/misc/base64/base64_encode.c | 125 + dropbear/libtomcrypt/src/misc/burn_stack.c | 33 + .../libtomcrypt/src/misc/compare_testvector.c | 87 + dropbear/libtomcrypt/src/misc/crc32.c | 202 + dropbear/libtomcrypt/src/misc/crypt/crypt.c | 499 + .../libtomcrypt/src/misc/crypt/crypt_argchk.c | 28 + .../src/misc/crypt/crypt_cipher_descriptor.c | 26 + .../src/misc/crypt/crypt_cipher_is_valid.c | 35 + .../src/misc/crypt/crypt_constants.c | 292 + .../src/misc/crypt/crypt_find_cipher.c | 40 + .../src/misc/crypt/crypt_find_cipher_any.c | 49 + .../src/misc/crypt/crypt_find_cipher_id.c | 39 + .../src/misc/crypt/crypt_find_hash.c | 39 + .../src/misc/crypt/crypt_find_hash_any.c | 48 + .../src/misc/crypt/crypt_find_hash_id.c | 39 + .../src/misc/crypt/crypt_find_hash_oid.c | 34 + .../src/misc/crypt/crypt_find_prng.c | 40 + .../libtomcrypt/src/misc/crypt/crypt_fsa.c | 57 + .../src/misc/crypt/crypt_hash_descriptor.c | 26 + .../src/misc/crypt/crypt_hash_is_valid.c | 35 + .../libtomcrypt/src/misc/crypt/crypt_inits.c | 43 + .../src/misc/crypt/crypt_ltc_mp_descriptor.c | 17 + .../src/misc/crypt/crypt_prng_descriptor.c | 25 + .../src/misc/crypt/crypt_prng_is_valid.c | 35 + .../misc/crypt/crypt_prng_rng_descriptor.c | 17 + .../misc/crypt/crypt_register_all_ciphers.c | 100 + .../misc/crypt/crypt_register_all_hashes.c | 99 + .../src/misc/crypt/crypt_register_all_prngs.c | 48 + .../src/misc/crypt/crypt_register_cipher.c | 53 + .../src/misc/crypt/crypt_register_hash.c | 53 + .../src/misc/crypt/crypt_register_prng.c | 53 + .../libtomcrypt/src/misc/crypt/crypt_sizes.c | 348 + .../src/misc/crypt/crypt_unregister_cipher.c | 44 + .../src/misc/crypt/crypt_unregister_hash.c | 43 + .../src/misc/crypt/crypt_unregister_prng.c | 43 + .../libtomcrypt/src/misc/error_to_string.c | 80 + dropbear/libtomcrypt/src/misc/hkdf/hkdf.c | 143 + .../libtomcrypt/src/misc/hkdf/hkdf_test.c | 294 + dropbear/libtomcrypt/src/misc/mem_neq.c | 63 + dropbear/libtomcrypt/src/misc/pk_get_oid.c | 44 + .../libtomcrypt/src/misc/pkcs5/pkcs_5_1.c | 188 + .../libtomcrypt/src/misc/pkcs5/pkcs_5_2.c | 128 + .../libtomcrypt/src/misc/pkcs5/pkcs_5_test.c | 231 + dropbear/libtomcrypt/src/misc/zeromem.c | 30 + .../libtomcrypt/src/modes/cbc/cbc_decrypt.c | 96 + dropbear/libtomcrypt/src/modes/cbc/cbc_done.c | 41 + .../libtomcrypt/src/modes/cbc/cbc_encrypt.c | 97 + .../libtomcrypt/src/modes/cbc/cbc_getiv.c | 45 + .../libtomcrypt/src/modes/cbc/cbc_setiv.c | 43 + .../libtomcrypt/src/modes/cbc/cbc_start.c | 61 + .../libtomcrypt/src/modes/cfb/cfb_decrypt.c | 66 + dropbear/libtomcrypt/src/modes/cfb/cfb_done.c | 41 + .../libtomcrypt/src/modes/cfb/cfb_encrypt.c | 64 + .../libtomcrypt/src/modes/cfb/cfb_getiv.c | 45 + .../libtomcrypt/src/modes/cfb/cfb_setiv.c | 51 + .../libtomcrypt/src/modes/cfb/cfb_start.c | 64 + .../libtomcrypt/src/modes/ctr/ctr_decrypt.c | 41 + dropbear/libtomcrypt/src/modes/ctr/ctr_done.c | 41 + .../libtomcrypt/src/modes/ctr/ctr_encrypt.c | 140 + .../libtomcrypt/src/modes/ctr/ctr_getiv.c | 45 + .../libtomcrypt/src/modes/ctr/ctr_setiv.c | 55 + .../libtomcrypt/src/modes/ctr/ctr_start.c | 100 + dropbear/libtomcrypt/src/modes/ctr/ctr_test.c | 84 + .../libtomcrypt/src/modes/ecb/ecb_decrypt.c | 60 + dropbear/libtomcrypt/src/modes/ecb/ecb_done.c | 41 + .../libtomcrypt/src/modes/ecb/ecb_encrypt.c | 60 + .../libtomcrypt/src/modes/ecb/ecb_start.c | 47 + .../libtomcrypt/src/modes/f8/f8_decrypt.c | 42 + dropbear/libtomcrypt/src/modes/f8/f8_done.c | 41 + .../libtomcrypt/src/modes/f8/f8_encrypt.c | 102 + dropbear/libtomcrypt/src/modes/f8/f8_getiv.c | 45 + dropbear/libtomcrypt/src/modes/f8/f8_setiv.c | 51 + dropbear/libtomcrypt/src/modes/f8/f8_start.c | 97 + .../libtomcrypt/src/modes/f8/f8_test_mode.c | 75 + .../libtomcrypt/src/modes/lrw/lrw_decrypt.c | 50 + dropbear/libtomcrypt/src/modes/lrw/lrw_done.c | 41 + .../libtomcrypt/src/modes/lrw/lrw_encrypt.c | 49 + .../libtomcrypt/src/modes/lrw/lrw_getiv.c | 44 + .../libtomcrypt/src/modes/lrw/lrw_process.c | 119 + .../libtomcrypt/src/modes/lrw/lrw_setiv.c | 78 + .../libtomcrypt/src/modes/lrw/lrw_start.c | 102 + dropbear/libtomcrypt/src/modes/lrw/lrw_test.c | 135 + .../libtomcrypt/src/modes/ofb/ofb_decrypt.c | 42 + dropbear/libtomcrypt/src/modes/ofb/ofb_done.c | 41 + .../libtomcrypt/src/modes/ofb/ofb_encrypt.c | 59 + .../libtomcrypt/src/modes/ofb/ofb_getiv.c | 45 + .../libtomcrypt/src/modes/ofb/ofb_setiv.c | 51 + .../libtomcrypt/src/modes/ofb/ofb_start.c | 59 + .../libtomcrypt/src/modes/xts/xts_decrypt.c | 156 + dropbear/libtomcrypt/src/modes/xts/xts_done.c | 31 + .../libtomcrypt/src/modes/xts/xts_encrypt.c | 157 + dropbear/libtomcrypt/src/modes/xts/xts_init.c | 61 + .../libtomcrypt/src/modes/xts/xts_mult_x.c | 39 + dropbear/libtomcrypt/src/modes/xts/xts_test.c | 306 + .../pk/asn1/der/bit/der_decode_bit_string.c | 101 + .../asn1/der/bit/der_decode_raw_bit_string.c | 107 + .../pk/asn1/der/bit/der_encode_bit_string.c | 88 + .../asn1/der/bit/der_encode_raw_bit_string.c | 90 + .../pk/asn1/der/bit/der_length_bit_string.c | 53 + .../pk/asn1/der/boolean/der_decode_boolean.c | 46 + .../pk/asn1/der/boolean/der_encode_boolean.c | 50 + .../pk/asn1/der/boolean/der_length_boolean.c | 34 + .../pk/asn1/der/choice/der_decode_choice.c | 224 + .../der_decode_generalizedtime.c | 144 + .../der_encode_generalizedtime.c | 108 + .../der_length_generalizedtime.c | 58 + .../pk/asn1/der/ia5/der_decode_ia5_string.c | 95 + .../pk/asn1/der/ia5/der_encode_ia5_string.c | 84 + .../pk/asn1/der/ia5/der_length_ia5_string.c | 193 + .../pk/asn1/der/integer/der_decode_integer.c | 109 + .../pk/asn1/der/integer/der_encode_integer.c | 129 + .../pk/asn1/der/integer/der_length_integer.c | 80 + .../der_decode_object_identifier.c | 107 + .../der_encode_object_identifier.c | 110 + .../der_length_object_identifier.c | 88 + .../asn1/der/octet/der_decode_octet_string.c | 90 + .../asn1/der/octet/der_encode_octet_string.c | 85 + .../asn1/der/octet/der_length_octet_string.c | 52 + .../der_decode_printable_string.c | 95 + .../der_encode_printable_string.c | 84 + .../der_length_printable_string.c | 165 + .../der/sequence/der_decode_sequence_ex.c | 329 + .../der/sequence/der_decode_sequence_flexi.c | 485 + .../der/sequence/der_decode_sequence_multi.c | 146 + .../der_decode_subject_public_key_info.c | 112 + .../der/sequence/der_encode_sequence_ex.c | 218 + .../der/sequence/der_encode_sequence_multi.c | 150 + .../der_encode_subject_public_key_info.c | 71 + .../asn1/der/sequence/der_length_sequence.c | 194 + .../pk/asn1/der/sequence/der_sequence_free.c | 64 + .../asn1/der/sequence/der_sequence_shrink.c | 50 + .../src/pk/asn1/der/set/der_encode_set.c | 109 + .../src/pk/asn1/der/set/der_encode_setof.c | 162 + .../short_integer/der_decode_short_integer.c | 67 + .../short_integer/der_encode_short_integer.c | 96 + .../short_integer/der_length_short_integer.c | 69 + .../der_decode_teletex_string.c | 93 + .../der_length_teletex_string.c | 208 + .../pk/asn1/der/utctime/der_decode_utctime.c | 126 + .../pk/asn1/der/utctime/der_encode_utctime.c | 82 + .../pk/asn1/der/utctime/der_length_utctime.c | 45 + .../pk/asn1/der/utf8/der_decode_utf8_string.c | 115 + .../pk/asn1/der/utf8/der_encode_utf8_string.c | 105 + .../pk/asn1/der/utf8/der_length_utf8_string.c | 103 + dropbear/libtomcrypt/src/pk/dh/dh.c | 237 + .../libtomcrypt/src/pk/dh/dh_check_pubkey.c | 65 + dropbear/libtomcrypt/src/pk/dh/dh_export.c | 62 + .../libtomcrypt/src/pk/dh/dh_export_key.c | 47 + dropbear/libtomcrypt/src/pk/dh/dh_free.c | 28 + .../libtomcrypt/src/pk/dh/dh_generate_key.c | 102 + dropbear/libtomcrypt/src/pk/dh/dh_import.c | 99 + dropbear/libtomcrypt/src/pk/dh/dh_set.c | 124 + .../libtomcrypt/src/pk/dh/dh_set_pg_dhparam.c | 54 + .../libtomcrypt/src/pk/dh/dh_shared_secret.c | 80 + .../libtomcrypt/src/pk/dsa/dsa_decrypt_key.c | 140 + .../libtomcrypt/src/pk/dsa/dsa_encrypt_key.c | 129 + dropbear/libtomcrypt/src/pk/dsa/dsa_export.c | 117 + dropbear/libtomcrypt/src/pk/dsa/dsa_free.c | 34 + .../libtomcrypt/src/pk/dsa/dsa_generate_key.c | 47 + .../libtomcrypt/src/pk/dsa/dsa_generate_pqg.c | 244 + dropbear/libtomcrypt/src/pk/dsa/dsa_import.c | 153 + .../libtomcrypt/src/pk/dsa/dsa_make_key.c | 42 + dropbear/libtomcrypt/src/pk/dsa/dsa_set.c | 112 + .../src/pk/dsa/dsa_set_pqg_dsaparam.c | 67 + .../src/pk/dsa/dsa_shared_secret.c | 71 + .../libtomcrypt/src/pk/dsa/dsa_sign_hash.c | 153 + .../libtomcrypt/src/pk/dsa/dsa_verify_hash.c | 138 + .../libtomcrypt/src/pk/dsa/dsa_verify_key.c | 200 + dropbear/libtomcrypt/src/pk/ecc/ecc.c | 126 + .../src/pk/ecc/ecc_ansi_x963_export.c | 78 + .../src/pk/ecc/ecc_ansi_x963_import.c | 103 + .../libtomcrypt/src/pk/ecc/ecc_decrypt_key.c | 150 + .../libtomcrypt/src/pk/ecc/ecc_encrypt_key.c | 135 + dropbear/libtomcrypt/src/pk/ecc/ecc_export.c | 81 + dropbear/libtomcrypt/src/pk/ecc/ecc_free.c | 39 + .../libtomcrypt/src/pk/ecc/ecc_get_size.c | 43 + dropbear/libtomcrypt/src/pk/ecc/ecc_import.c | 175 + .../libtomcrypt/src/pk/ecc/ecc_make_key.c | 129 + .../src/pk/ecc/ecc_shared_secret.c | 94 + .../libtomcrypt/src/pk/ecc/ecc_sign_hash.c | 172 + dropbear/libtomcrypt/src/pk/ecc/ecc_sizes.c | 47 + dropbear/libtomcrypt/src/pk/ecc/ecc_test.c | 94 + .../libtomcrypt/src/pk/ecc/ecc_verify_hash.c | 201 + .../src/pk/ecc/ltc_ecc_is_valid_idx.c | 45 + dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_map.c | 75 + .../libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c | 207 + .../libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c | 221 + .../src/pk/ecc/ltc_ecc_mulmod_timing.c | 164 + .../libtomcrypt/src/pk/ecc/ltc_ecc_points.c | 59 + .../src/pk/ecc/ltc_ecc_projective_add_point.c | 195 + .../src/pk/ecc/ltc_ecc_projective_dbl_point.c | 146 + .../src/pk/katja/katja_decrypt_key.c | 104 + .../src/pk/katja/katja_encrypt_key.c | 86 + .../libtomcrypt/src/pk/katja/katja_export.c | 74 + .../libtomcrypt/src/pk/katja/katja_exptmod.c | 114 + .../libtomcrypt/src/pk/katja/katja_free.c | 34 + .../libtomcrypt/src/pk/katja/katja_import.c | 80 + .../libtomcrypt/src/pk/katja/katja_make_key.c | 100 + .../libtomcrypt/src/pk/pkcs1/pkcs_1_i2osp.c | 50 + .../libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c | 107 + .../src/pk/pkcs1/pkcs_1_oaep_decode.c | 186 + .../src/pk/pkcs1/pkcs_1_oaep_encode.c | 172 + .../libtomcrypt/src/pk/pkcs1/pkcs_1_os2ip.c | 35 + .../src/pk/pkcs1/pkcs_1_pss_decode.c | 177 + .../src/pk/pkcs1/pkcs_1_pss_encode.c | 175 + .../src/pk/pkcs1/pkcs_1_v1_5_decode.c | 113 + .../src/pk/pkcs1/pkcs_1_v1_5_encode.c | 110 + .../libtomcrypt/src/pk/rsa/rsa_decrypt_key.c | 104 + .../libtomcrypt/src/pk/rsa/rsa_encrypt_key.c | 101 + dropbear/libtomcrypt/src/pk/rsa/rsa_export.c | 98 + dropbear/libtomcrypt/src/pk/rsa/rsa_exptmod.c | 183 + dropbear/libtomcrypt/src/pk/rsa/rsa_free.c | 33 + .../libtomcrypt/src/pk/rsa/rsa_get_size.c | 40 + dropbear/libtomcrypt/src/pk/rsa/rsa_import.c | 130 + .../libtomcrypt/src/pk/rsa/rsa_import_pkcs8.c | 153 + .../libtomcrypt/src/pk/rsa/rsa_import_x509.c | 118 + .../libtomcrypt/src/pk/rsa/rsa_make_key.c | 108 + dropbear/libtomcrypt/src/pk/rsa/rsa_set.c | 134 + .../libtomcrypt/src/pk/rsa/rsa_sign_hash.c | 147 + .../src/pk/rsa/rsa_sign_saltlen_get.c | 47 + .../libtomcrypt/src/pk/rsa/rsa_verify_hash.c | 194 + dropbear/libtomcrypt/src/prngs/chacha20.c | 247 + dropbear/libtomcrypt/src/prngs/fortuna.c | 499 + dropbear/libtomcrypt/src/prngs/rc4.c | 251 + .../libtomcrypt/src/prngs/rng_get_bytes.c | 160 + .../libtomcrypt/src/prngs/rng_make_prng.c | 70 + dropbear/libtomcrypt/src/prngs/sober128.c | 250 + dropbear/libtomcrypt/src/prngs/sober128tab.c | 163 + dropbear/libtomcrypt/src/prngs/sprng.c | 162 + dropbear/libtomcrypt/src/prngs/yarrow.c | 353 + .../src/stream/chacha/chacha_crypt.c | 101 + .../src/stream/chacha/chacha_done.c | 30 + .../src/stream/chacha/chacha_ivctr32.c | 47 + .../src/stream/chacha/chacha_ivctr64.c | 47 + .../src/stream/chacha/chacha_keystream.c | 38 + .../src/stream/chacha/chacha_setup.c | 67 + .../src/stream/chacha/chacha_test.c | 71 + .../libtomcrypt/src/stream/rc4/rc4_stream.c | 111 + .../libtomcrypt/src/stream/rc4/rc4_test.c | 39 + .../src/stream/sober128/sober128_stream.c | 346 + .../src/stream/sober128/sober128_test.c | 45 + .../src/stream/sober128/sober128tab.c | 176 + dropbear/libtomcrypt/testbuild.sh | 15 + dropbear/libtomcrypt/testme.sh | 71 + dropbear/libtomcrypt/testprof/base64_test.c | 24 + .../libtomcrypt/testprof/cipher_hash_test.c | 45 + dropbear/libtomcrypt/testprof/der_tests.c | 853 ++ dropbear/libtomcrypt/testprof/dsa_test.c | 82 + dropbear/libtomcrypt/testprof/ecc_test.c | 252 + dropbear/libtomcrypt/testprof/katja_test.c | 231 + dropbear/libtomcrypt/testprof/mac_test.c | 41 + dropbear/libtomcrypt/testprof/makefile | 24 + dropbear/libtomcrypt/testprof/makefile.icc | 20 + dropbear/libtomcrypt/testprof/makefile.msvc | 10 + dropbear/libtomcrypt/testprof/makefile.shared | 24 + dropbear/libtomcrypt/testprof/modes_test.c | 119 + dropbear/libtomcrypt/testprof/pkcs_1_test.c | 93 + dropbear/libtomcrypt/testprof/rsa_test.c | 387 + dropbear/libtomcrypt/testprof/store_test.c | 78 + dropbear/libtomcrypt/testprof/test.der | Bin 0 -> 162 bytes dropbear/libtomcrypt/testprof/test.key | 15 + dropbear/libtomcrypt/testprof/test_driver.c | 15 + dropbear/libtomcrypt/testprof/tomcrypt_test.h | 83 + dropbear/libtomcrypt/testprof/x86_prof.c | 1439 +++ dropbear/libtomcrypt/tests/base64_test.c | 134 + dropbear/libtomcrypt/tests/cipher_hash_test.c | 46 + dropbear/libtomcrypt/tests/common.c | 68 + dropbear/libtomcrypt/tests/common.h | 34 + dropbear/libtomcrypt/tests/der_test.c | 1472 +++ dropbear/libtomcrypt/tests/dh_test.c | 454 + dropbear/libtomcrypt/tests/dsa_test.c | 400 + dropbear/libtomcrypt/tests/ecc_test.c | 268 + dropbear/libtomcrypt/tests/file_test.c | 115 + dropbear/libtomcrypt/tests/katja_test.c | 242 + dropbear/libtomcrypt/tests/mac_test.c | 64 + dropbear/libtomcrypt/tests/misc_test.c | 33 + dropbear/libtomcrypt/tests/modes_test.c | 130 + dropbear/libtomcrypt/tests/mpi_test.c | 147 + dropbear/libtomcrypt/tests/multi_test.c | 237 + dropbear/libtomcrypt/tests/no_prng.c | 185 + dropbear/libtomcrypt/tests/pkcs_1_eme_test.c | 78 + dropbear/libtomcrypt/tests/pkcs_1_emsa_test.c | 72 + dropbear/libtomcrypt/tests/pkcs_1_oaep_test.c | 78 + dropbear/libtomcrypt/tests/pkcs_1_pss_test.c | 79 + dropbear/libtomcrypt/tests/pkcs_1_test.c | 106 + dropbear/libtomcrypt/tests/prng_test.c | 90 + dropbear/libtomcrypt/tests/rotate_test.c | 416 + dropbear/libtomcrypt/tests/rsa_test.c | 702 ++ dropbear/libtomcrypt/tests/store_test.c | 86 + dropbear/libtomcrypt/tests/test.c | 433 + dropbear/libtomcrypt/tests/test.der | Bin 0 -> 162 bytes dropbear/libtomcrypt/tests/test.key | 15 + dropbear/libtomcrypt/tests/test_dsa.key | 12 + dropbear/libtomcrypt/tests/tomcrypt_test.h | 69 + dropbear/libtomcrypt/updatemakes.sh | 12 + dropbear/libtommath/LICENSE | 26 + dropbear/libtommath/Makefile.in | 173 + dropbear/libtommath/README.md | 44 + dropbear/libtommath/astylerc | 30 + dropbear/libtommath/bn_cutoffs.c | 14 + dropbear/libtommath/bn_deprecated.c | 321 + dropbear/libtommath/bn_mp_2expt.c | 31 + dropbear/libtommath/bn_mp_abs.c | 26 + dropbear/libtommath/bn_mp_add.c | 38 + dropbear/libtommath/bn_mp_add_d.c | 89 + dropbear/libtommath/bn_mp_addmod.c | 25 + dropbear/libtommath/bn_mp_and.c | 56 + dropbear/libtommath/bn_mp_clamp.c | 27 + dropbear/libtommath/bn_mp_clear.c | 20 + dropbear/libtommath/bn_mp_clear_multi.c | 19 + dropbear/libtommath/bn_mp_cmp.c | 26 + dropbear/libtommath/bn_mp_cmp_d.c | 28 + dropbear/libtommath/bn_mp_cmp_mag.c | 39 + dropbear/libtommath/bn_mp_cnt_lsb.c | 37 + dropbear/libtommath/bn_mp_complement.c | 12 + dropbear/libtommath/bn_mp_copy.c | 47 + dropbear/libtommath/bn_mp_count_bits.c | 28 + dropbear/libtommath/bn_mp_decr.c | 34 + dropbear/libtommath/bn_mp_div.c | 250 + dropbear/libtommath/bn_mp_div_2.c | 49 + dropbear/libtommath/bn_mp_div_2d.c | 71 + dropbear/libtommath/bn_mp_div_3.c | 63 + dropbear/libtommath/bn_mp_div_d.c | 84 + dropbear/libtommath/bn_mp_dr_is_modulus.c | 27 + dropbear/libtommath/bn_mp_dr_reduce.c | 78 + dropbear/libtommath/bn_mp_dr_setup.c | 15 + dropbear/libtommath/bn_mp_error_to_string.c | 27 + dropbear/libtommath/bn_mp_exch.c | 17 + dropbear/libtommath/bn_mp_expt_u32.c | 46 + dropbear/libtommath/bn_mp_exptmod.c | 76 + dropbear/libtommath/bn_mp_exteuclid.c | 73 + dropbear/libtommath/bn_mp_fread.c | 60 + dropbear/libtommath/bn_mp_from_sbin.c | 25 + dropbear/libtommath/bn_mp_from_ubin.c | 39 + dropbear/libtommath/bn_mp_fwrite.c | 45 + dropbear/libtommath/bn_mp_gcd.c | 92 + dropbear/libtommath/bn_mp_get_i32.c | 7 + dropbear/libtommath/bn_mp_get_i64.c | 7 + dropbear/libtommath/bn_mp_get_l.c | 7 + dropbear/libtommath/bn_mp_get_ll.c | 7 + dropbear/libtommath/bn_mp_get_mag_u32.c | 7 + dropbear/libtommath/bn_mp_get_mag_u64.c | 7 + dropbear/libtommath/bn_mp_get_mag_ul.c | 7 + dropbear/libtommath/bn_mp_get_mag_ull.c | 7 + dropbear/libtommath/bn_mp_grow.c | 38 + dropbear/libtommath/bn_mp_incr.c | 30 + dropbear/libtommath/bn_mp_init.c | 23 + dropbear/libtommath/bn_mp_init_copy.c | 21 + dropbear/libtommath/bn_mp_init_i32.c | 7 + dropbear/libtommath/bn_mp_init_i64.c | 7 + dropbear/libtommath/bn_mp_init_l.c | 7 + dropbear/libtommath/bn_mp_init_ll.c | 7 + dropbear/libtommath/bn_mp_init_multi.c | 41 + dropbear/libtommath/bn_mp_init_set.c | 16 + dropbear/libtommath/bn_mp_init_size.c | 24 + dropbear/libtommath/bn_mp_init_u32.c | 7 + dropbear/libtommath/bn_mp_init_u64.c | 7 + dropbear/libtommath/bn_mp_init_ul.c | 7 + dropbear/libtommath/bn_mp_init_ull.c | 7 + dropbear/libtommath/bn_mp_invmod.c | 23 + dropbear/libtommath/bn_mp_is_square.c | 93 + dropbear/libtommath/bn_mp_iseven.c | 10 + dropbear/libtommath/bn_mp_isodd.c | 10 + dropbear/libtommath/bn_mp_kronecker.c | 129 + dropbear/libtommath/bn_mp_lcm.c | 44 + dropbear/libtommath/bn_mp_log_u32.c | 180 + dropbear/libtommath/bn_mp_lshd.c | 51 + dropbear/libtommath/bn_mp_mod.c | 31 + dropbear/libtommath/bn_mp_mod_2d.c | 38 + dropbear/libtommath/bn_mp_mod_d.c | 10 + .../bn_mp_montgomery_calc_normalization.c | 44 + dropbear/libtommath/bn_mp_montgomery_reduce.c | 102 + dropbear/libtommath/bn_mp_montgomery_setup.c | 42 + dropbear/libtommath/bn_mp_mul.c | 52 + dropbear/libtommath/bn_mp_mul_2.c | 64 + dropbear/libtommath/bn_mp_mul_2d.c | 69 + dropbear/libtommath/bn_mp_mul_d.c | 61 + dropbear/libtommath/bn_mp_mulmod.c | 25 + dropbear/libtommath/bn_mp_neg.c | 24 + dropbear/libtommath/bn_mp_or.c | 56 + dropbear/libtommath/bn_mp_pack.c | 69 + dropbear/libtommath/bn_mp_pack_count.c | 12 + dropbear/libtommath/bn_mp_prime_fermat.c | 47 + .../bn_mp_prime_frobenius_underwood.c | 132 + dropbear/libtommath/bn_mp_prime_is_prime.c | 314 + .../libtommath/bn_mp_prime_miller_rabin.c | 91 + dropbear/libtommath/bn_mp_prime_next_prime.c | 132 + .../bn_mp_prime_rabin_miller_trials.c | 47 + dropbear/libtommath/bn_mp_prime_rand.c | 141 + .../bn_mp_prime_strong_lucas_selfridge.c | 289 + dropbear/libtommath/bn_mp_radix_size.c | 65 + dropbear/libtommath/bn_mp_radix_smap.c | 22 + dropbear/libtommath/bn_mp_rand.c | 48 + dropbear/libtommath/bn_mp_read_radix.c | 79 + dropbear/libtommath/bn_mp_reduce.c | 83 + dropbear/libtommath/bn_mp_reduce_2k.c | 48 + dropbear/libtommath/bn_mp_reduce_2k_l.c | 49 + dropbear/libtommath/bn_mp_reduce_2k_setup.c | 32 + dropbear/libtommath/bn_mp_reduce_2k_setup_l.c | 28 + dropbear/libtommath/bn_mp_reduce_is_2k.c | 38 + dropbear/libtommath/bn_mp_reduce_is_2k_l.c | 28 + dropbear/libtommath/bn_mp_reduce_setup.c | 17 + dropbear/libtommath/bn_mp_root_u32.c | 139 + dropbear/libtommath/bn_mp_rshd.c | 51 + dropbear/libtommath/bn_mp_sbin_size.c | 11 + dropbear/libtommath/bn_mp_set.c | 14 + dropbear/libtommath/bn_mp_set_i32.c | 7 + dropbear/libtommath/bn_mp_set_i64.c | 7 + dropbear/libtommath/bn_mp_set_l.c | 7 + dropbear/libtommath/bn_mp_set_ll.c | 7 + dropbear/libtommath/bn_mp_set_u32.c | 7 + dropbear/libtommath/bn_mp_set_u64.c | 7 + dropbear/libtommath/bn_mp_set_ul.c | 7 + dropbear/libtommath/bn_mp_set_ull.c | 7 + dropbear/libtommath/bn_mp_shrink.c | 22 + dropbear/libtommath/bn_mp_signed_rsh.c | 22 + dropbear/libtommath/bn_mp_sqr.c | 28 + dropbear/libtommath/bn_mp_sqrmod.c | 25 + dropbear/libtommath/bn_mp_sqrt.c | 67 + dropbear/libtommath/bn_mp_sqrtmod_prime.c | 118 + dropbear/libtommath/bn_mp_sub.c | 40 + dropbear/libtommath/bn_mp_sub_d.c | 74 + dropbear/libtommath/bn_mp_submod.c | 25 + dropbear/libtommath/bn_mp_to_radix.c | 84 + dropbear/libtommath/bn_mp_to_sbin.c | 22 + dropbear/libtommath/bn_mp_to_ubin.c | 41 + dropbear/libtommath/bn_mp_ubin_size.c | 12 + dropbear/libtommath/bn_mp_unpack.c | 49 + dropbear/libtommath/bn_mp_xor.c | 56 + dropbear/libtommath/bn_mp_zero.c | 13 + dropbear/libtommath/bn_prime_tab.c | 61 + dropbear/libtommath/bn_s_mp_add.c | 91 + dropbear/libtommath/bn_s_mp_balance_mul.c | 81 + dropbear/libtommath/bn_s_mp_exptmod.c | 198 + dropbear/libtommath/bn_s_mp_exptmod_fast.c | 254 + dropbear/libtommath/bn_s_mp_get_bit.c | 21 + dropbear/libtommath/bn_s_mp_invmod_fast.c | 118 + dropbear/libtommath/bn_s_mp_invmod_slow.c | 119 + dropbear/libtommath/bn_s_mp_karatsuba_mul.c | 174 + dropbear/libtommath/bn_s_mp_karatsuba_sqr.c | 110 + .../bn_s_mp_montgomery_reduce_fast.c | 159 + dropbear/libtommath/bn_s_mp_mul_digs.c | 74 + dropbear/libtommath/bn_s_mp_mul_digs_fast.c | 90 + dropbear/libtommath/bn_s_mp_mul_high_digs.c | 64 + .../libtommath/bn_s_mp_mul_high_digs_fast.c | 81 + .../libtommath/bn_s_mp_prime_is_divisible.c | 35 + dropbear/libtommath/bn_s_mp_rand_jenkins.c | 52 + dropbear/libtommath/bn_s_mp_rand_platform.c | 148 + dropbear/libtommath/bn_s_mp_reverse.c | 22 + dropbear/libtommath/bn_s_mp_sqr.c | 69 + dropbear/libtommath/bn_s_mp_sqr_fast.c | 97 + dropbear/libtommath/bn_s_mp_sub.c | 71 + dropbear/libtommath/bn_s_mp_toom_mul.c | 215 + dropbear/libtommath/bn_s_mp_toom_sqr.c | 147 + dropbear/libtommath/changes.txt | 497 + dropbear/libtommath/gen.pl | 20 + dropbear/libtommath/helper.pl | 469 + dropbear/libtommath/makefile_include.mk | 166 + dropbear/libtommath/testme.sh | 394 + dropbear/libtommath/tommath.h | 781 ++ dropbear/libtommath/tommath_class.h | 1326 +++ dropbear/libtommath/tommath_cutoffs.h | 13 + dropbear/libtommath/tommath_private.h | 303 + dropbear/libtommath/tommath_superclass.h | 110 + dropbear/list.c | 49 + dropbear/list.h | 28 + dropbear/listener.c | 174 + dropbear/listener.h | 65 + dropbear/localoptions.h | 300 + dropbear/loginrec.c | 1378 +++ dropbear/loginrec.h | 181 + dropbear/ltc_prng.c | 136 + dropbear/ltc_prng.h | 12 + dropbear/netio.c | 715 ++ dropbear/netio.h | 65 + dropbear/options.h | 26 + dropbear/packet.c | 770 ++ dropbear/packet.h | 53 + dropbear/process-packet.c | 180 + dropbear/progressmeter.c | 294 + dropbear/progressmeter.h | 27 + dropbear/pubkeyapi.h | 151 + dropbear/queue.c | 87 + dropbear/queue.h | 49 + dropbear/release.sh | 45 + dropbear/rsa.c | 431 + dropbear/rsa.h | 59 + dropbear/runopts.h | 196 + dropbear/scp.c | 1259 +++ dropbear/scpmisc.c | 253 + dropbear/scpmisc.h | 66 + dropbear/service.h | 30 + dropbear/session.h | 351 + dropbear/signkey.c | 780 ++ dropbear/signkey.h | 141 + dropbear/ssh.h | 128 + dropbear/sshpty.c | 412 + dropbear/sshpty.h | 28 + dropbear/svr-agentfwd.c | 280 + dropbear/svr-auth.c | 512 + dropbear/svr-authpam.c | 298 + dropbear/svr-authpasswd.c | 133 + dropbear/svr-authpubkey.c | 587 + dropbear/svr-authpubkeyoptions.c | 219 + dropbear/svr-chansession.c | 1077 ++ dropbear/svr-kex.c | 271 + dropbear/svr-main.c | 525 + dropbear/svr-runopts.c | 672 ++ dropbear/svr-service.c | 87 + dropbear/svr-session.c | 347 + dropbear/svr-tcpfwd.c | 301 + dropbear/svr-x11fwd.c | 270 + dropbear/sysoptions.h | 367 + dropbear/tcp-accept.c | 153 + dropbear/tcpfwd.h | 79 + dropbear/termcodes.c | 213 + dropbear/termcodes.h | 46 + dropbear/x11fwd.h | 37 + full_build.sh | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 172 + icon.big.png | Bin 0 -> 470873 bytes java | 1 + jni/Android.mk | 622 ++ jni/Application.mk | 2 + jni/buffersu.c | 241 + jni/config.h | 51 + jni/interface.c | 244 + openssh/LICENCE | 340 + openssh/bufaux.c | 259 + openssh/buffer.c | 121 + openssh/buffer.h | 79 + openssh/config.h | 28 + openssh/defines.h | 849 ++ openssh/includes.h | 175 + openssh/match.c | 279 + openssh/match.h | 27 + openssh/misc.c | 1110 ++ openssh/misc.h | 138 + openssh/openbsd-compat/fmt_scaled.c | 274 + openssh/openbsd-compat/getopt.h | 74 + openssh/openbsd-compat/getopt_long.c | 531 + openssh/openbsd-compat/openbsd-compat.h | 257 + openssh/openbsd-compat/pwcache.c | 114 + openssh/openbsd-compat/strmode.c | 148 + openssh/sftp-common.c | 235 + openssh/sftp-common.h | 51 + openssh/sftp-server-main.c | 42 + openssh/sftp-server.c | 1403 +++ openssh/sftp.h | 102 + openssh/sshbuf-getput-basic.c | 421 + openssh/sshbuf.c | 406 + openssh/sshbuf.h | 336 + openssh/ssherr.c | 131 + openssh/ssherr.h | 80 + openssh/xmalloc.c | 102 + openssh/xmalloc.h | 25 + prepare | 24 + res | 1 + rsync/COPYING | 674 ++ rsync/Doxyfile | 187 + rsync/INSTALL | 74 + rsync/Makefile.in | 323 + rsync/NEWS | 115 + rsync/OLDNEWS | 3599 ++++++ rsync/README | 140 + rsync/TODO | 528 + rsync/access.c | 290 + rsync/aclocal.m4 | 92 + rsync/acls.c | 1155 ++ rsync/authenticate.c | 373 + rsync/backup.c | 341 + rsync/batch.c | 283 + rsync/byteorder.h | 124 + rsync/case_N.h | 76 + rsync/checksum.c | 223 + rsync/chmod.c | 249 + rsync/cleanup.c | 292 + rsync/clientname.c | 348 + rsync/clientserver.c | 1210 ++ rsync/compat.c | 336 + rsync/config.h | 82 + rsync/config.h.in | 769 ++ rsync/connection.c | 46 + rsync/csprotocol.txt | 88 + rsync/delete.c | 240 + rsync/doc/README-SGML | 20 + rsync/doc/profile.txt | 42 + rsync/doc/rsync.sgml | 351 + rsync/errcode.h | 64 + rsync/exclude.c | 1401 +++ rsync/fileio.c | 288 + rsync/flist.c | 3231 ++++++ rsync/generator.c | 2374 ++++ rsync/getfsdev.c | 23 + rsync/getgroups.c | 62 + rsync/hashtable.c | 172 + rsync/hlink.c | 571 + rsync/ifuncs.h | 106 + rsync/install-sh | 238 + rsync/inums.h | 57 + rsync/io.c | 2384 ++++ rsync/io.h | 52 + rsync/itypes.h | 59 + rsync/lib/addrinfo.h | 180 + rsync/lib/compat.c | 275 + rsync/lib/dummy.in | 2 + rsync/lib/getaddrinfo.c | 504 + rsync/lib/getpass.c | 72 + rsync/lib/inet_ntop.c | 186 + rsync/lib/inet_pton.c | 212 + rsync/lib/md5.c | 304 + rsync/lib/mdfour.c | 246 + rsync/lib/mdigest.h | 26 + rsync/lib/permstring.c | 65 + rsync/lib/permstring.h | 3 + rsync/lib/pool_alloc.3 | 268 + rsync/lib/pool_alloc.c | 376 + rsync/lib/pool_alloc.h | 21 + rsync/lib/snprintf.c | 1512 +++ rsync/lib/sysacls.c | 2796 +++++ rsync/lib/sysacls.h | 305 + rsync/lib/sysxattrs.c | 300 + rsync/lib/sysxattrs.h | 26 + rsync/lib/wildmatch.c | 368 + rsync/lib/wildmatch.h | 6 + rsync/loadparm.c | 846 ++ rsync/log.c | 896 ++ rsync/main.c | 1640 +++ rsync/match.c | 448 + rsync/mkproto.pl | 48 + rsync/options.c | 2880 +++++ rsync/params.c | 666 ++ rsync/pipe.c | 180 + rsync/popt/CHANGES | 46 + rsync/popt/COPYING | 22 + rsync/popt/README | 18 + rsync/popt/README.rsync | 4 + rsync/popt/dummy.in | 0 rsync/popt/findme.c | 55 + rsync/popt/findme.h | 20 + rsync/popt/popt.c | 1283 +++ rsync/popt/popt.h | 565 + rsync/popt/poptconfig.c | 183 + rsync/popt/popthelp.c | 826 ++ rsync/popt/poptint.h | 122 + rsync/popt/poptparse.c | 231 + rsync/popt/system.h | 128 + rsync/prepare-source | 51 + rsync/prepare-source.mak | 7 + rsync/progress.c | 221 + rsync/proto.h | 423 + rsync/proto.h-tstamp | 0 rsync/receiver.c | 953 ++ rsync/rounding.c | 38 + rsync/rounding.h | 1 + rsync/rsync-ssl.in | 12 + rsync/rsync.c | 747 ++ rsync/rsync.h | 1294 +++ rsync/rsync3.txt | 469 + rsync/rsyncd.conf.5 | 1082 ++ rsync/rsyncd.conf.yo | 934 ++ rsync/rsyncsh.txt | 26 + rsync/runtests.sh | 334 + rsync/sender.c | 430 + rsync/shconfig.in | 15 + rsync/socket.c | 855 ++ rsync/stunnel-rsync.in | 52 + rsync/stunnel-rsyncd.conf.in | 30 + rsync/syscall.c | 504 + rsync/t_stub.c | 99 + rsync/t_unsafe.c | 48 + rsync/tech_report.tex | 310 + rsync/testhelp/maketree.py | 133 + rsync/testrun.c | 61 + rsync/tls.c | 261 + rsync/token.c | 666 ++ rsync/trimslash.c | 47 + rsync/tweak_manpage | 28 + rsync/uidlist.c | 548 + rsync/util.c | 1635 +++ rsync/util2.c | 109 + rsync/wildtest.c | 221 + rsync/wildtest.txt | 165 + rsync/xattrs.c | 1108 ++ rsync/zlib/ChangeLog | 1472 +++ rsync/zlib/README | 115 + rsync/zlib/README.rsync | 31 + rsync/zlib/adler32.c | 179 + rsync/zlib/compress.c | 80 + rsync/zlib/crc32.c | 425 + rsync/zlib/crc32.h | 441 + rsync/zlib/deflate.c | 1998 ++++ rsync/zlib/deflate.h | 346 + rsync/zlib/dummy.in | 2 + rsync/zlib/gzguts.h | 209 + rsync/zlib/inffast.c | 340 + rsync/zlib/inffast.h | 11 + rsync/zlib/inffixed.h | 94 + rsync/zlib/inflate.c | 1533 +++ rsync/zlib/inflate.h | 126 + rsync/zlib/inftrees.c | 306 + rsync/zlib/inftrees.h | 62 + rsync/zlib/trees.c | 1226 +++ rsync/zlib/trees.h | 128 + rsync/zlib/zconf.h | 511 + rsync/zlib/zlib.h | 1769 +++ rsync/zlib/zutil.c | 324 + rsync/zlib/zutil.h | 251 + settings.gradle | 1 + 1151 files changed, 301061 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 _other/crash.20200109 create mode 100644 _other/crash.20200122 create mode 100644 _other/crash.20201123 create mode 100644 _other/crash.20201225 create mode 100644 _other/crash.20220422 create mode 100644 _other/crash.20220424 create mode 100644 _other/dump-20190804 create mode 100644 _other/proguard-rules.pro create mode 100644 _other/reimer_prochnow-manage_extensions.patch create mode 100644 app/build.gradle create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/org/galexander/sshd/BootReceiver.java create mode 100644 app/src/main/java/org/galexander/sshd/DocActivity.java create mode 100644 app/src/main/java/org/galexander/sshd/DocActivityTV.java create mode 100644 app/src/main/java/org/galexander/sshd/Prefs.java create mode 100644 app/src/main/java/org/galexander/sshd/Settings.java create mode 100644 app/src/main/java/org/galexander/sshd/SimpleSSHD.java create mode 100644 app/src/main/java/org/galexander/sshd/SimpleSSHDService.java create mode 100644 app/src/main/java/org/galexander/sshd/SimpleSSHDTV.java create mode 100644 app/src/main/java/org/galexander/sshd/StartReceiver.java create mode 100644 app/src/main/java/org/galexander/sshd/StopReceiver.java create mode 100644 app/src/main/java/org/galexander/sshd/UpdaterThread.java create mode 100644 app/src/main/java/org/galexander/sshd/api.java create mode 100644 app/src/main/res/drawable/icon.png create mode 100644 app/src/main/res/drawable/notification_icon.png create mode 100644 app/src/main/res/drawable/tv_button_bg.xml create mode 100644 app/src/main/res/drawable/tv_button_bg_focused.xml create mode 100644 app/src/main/res/drawable/tv_button_bg_normal.xml create mode 100644 app/src/main/res/drawable/tvbanner.png create mode 100644 app/src/main/res/layout/doc.xml create mode 100644 app/src/main/res/layout/main.xml create mode 100644 app/src/main/res/layout/main_tv.xml create mode 100644 app/src/main/res/layout/notification.xml create mode 100644 app/src/main/res/menu/main_menu.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/xml/preferences.xml create mode 100644 build.gradle create mode 100644 dropbear/.hg_archival.txt create mode 100644 dropbear/.hgsigs create mode 100644 dropbear/.travis.yml create mode 100644 dropbear/CHANGES create mode 100644 dropbear/DEVELOPING.md create mode 100644 dropbear/FUZZER-NOTES.md create mode 100644 dropbear/INSTALL create mode 100644 dropbear/LICENSE create mode 100644 dropbear/MULTI create mode 100644 dropbear/Makefile.in create mode 100644 dropbear/README create mode 100644 dropbear/SMALL create mode 100644 dropbear/agentfwd.h create mode 100644 dropbear/algo.h create mode 100644 dropbear/atomicio.c create mode 100644 dropbear/atomicio.h create mode 100644 dropbear/auth.h create mode 100644 dropbear/bignum.c create mode 100644 dropbear/bignum.h create mode 100644 dropbear/buffer.c create mode 100644 dropbear/buffer.h create mode 100644 dropbear/chachapoly.c create mode 100644 dropbear/chachapoly.h create mode 100644 dropbear/channel.h create mode 100644 dropbear/chansession.h create mode 100644 dropbear/circbuffer.c create mode 100644 dropbear/circbuffer.h create mode 100644 dropbear/cli-agentfwd.c create mode 100644 dropbear/cli-auth.c create mode 100644 dropbear/cli-authinteract.c create mode 100644 dropbear/cli-authpasswd.c create mode 100644 dropbear/cli-authpubkey.c create mode 100644 dropbear/cli-channel.c create mode 100644 dropbear/cli-chansession.c create mode 100644 dropbear/cli-kex.c create mode 100644 dropbear/cli-main.c create mode 100644 dropbear/cli-runopts.c create mode 100644 dropbear/cli-session.c create mode 100644 dropbear/cli-tcpfwd.c create mode 100644 dropbear/common-algo.c create mode 100644 dropbear/common-channel.c create mode 100644 dropbear/common-chansession.c create mode 100644 dropbear/common-kex.c create mode 100644 dropbear/common-runopts.c create mode 100644 dropbear/common-session.c create mode 100644 dropbear/compat.c create mode 100644 dropbear/compat.h create mode 100644 dropbear/config.guess create mode 100644 dropbear/config.h.in create mode 100644 dropbear/config.sub create mode 100755 dropbear/configure create mode 100644 dropbear/configure.ac create mode 100644 dropbear/crypto_desc.c create mode 100644 dropbear/crypto_desc.h create mode 100644 dropbear/curve25519.c create mode 100644 dropbear/curve25519.h create mode 100644 dropbear/dbclient.1 create mode 100644 dropbear/dbhelpers.c create mode 100644 dropbear/dbhelpers.h create mode 100644 dropbear/dbmalloc.c create mode 100644 dropbear/dbmalloc.h create mode 100644 dropbear/dbmulti.c create mode 100644 dropbear/dbrandom.c create mode 100644 dropbear/dbrandom.h create mode 100644 dropbear/dbutil.c create mode 100644 dropbear/dbutil.h create mode 100644 dropbear/debian/README.Debian create mode 100644 dropbear/debian/README.Debian.diet create mode 100644 dropbear/debian/README.runit create mode 100644 dropbear/debian/changelog create mode 100644 dropbear/debian/control create mode 100644 dropbear/debian/copyright.in create mode 100644 dropbear/debian/dropbear.README.Debian create mode 100644 dropbear/debian/dropbear.conffiles create mode 100644 dropbear/debian/dropbear.default create mode 100644 dropbear/debian/dropbear.docs create mode 100644 dropbear/debian/dropbear.init create mode 100644 dropbear/debian/dropbear.postinst create mode 100644 dropbear/debian/dropbear.postrm create mode 100644 dropbear/debian/dropbear.prerm create mode 100644 dropbear/debian/implicit create mode 100755 dropbear/debian/rules create mode 100644 dropbear/debian/service/log create mode 100644 dropbear/debian/service/run create mode 100644 dropbear/debug.h create mode 100644 dropbear/default_options.h create mode 100644 dropbear/dh_groups.c create mode 100644 dropbear/dh_groups.h create mode 100644 dropbear/dropbear.8 create mode 100755 dropbear/dropbear_lint.sh create mode 100644 dropbear/dropbearconvert.1 create mode 100644 dropbear/dropbearconvert.c create mode 100644 dropbear/dropbearkey.1 create mode 100644 dropbear/dropbearkey.c create mode 100644 dropbear/dss.c create mode 100644 dropbear/dss.h create mode 100644 dropbear/ecc.c create mode 100644 dropbear/ecc.h create mode 100644 dropbear/ecdsa.c create mode 100644 dropbear/ecdsa.h create mode 100644 dropbear/ed25519.c create mode 100644 dropbear/ed25519.h create mode 100644 dropbear/fake-rfc2553.c create mode 100644 dropbear/fake-rfc2553.h create mode 100644 dropbear/filelist.txt create mode 100644 dropbear/fuzz-common.c create mode 100644 dropbear/fuzz-harness.c create mode 100644 dropbear/fuzz-hostkeys.c create mode 100644 dropbear/fuzz-wrapfd.c create mode 100644 dropbear/fuzz-wrapfd.h create mode 100644 dropbear/fuzz.h create mode 100644 dropbear/fuzzer-kexdh.c create mode 100644 dropbear/fuzzer-kexecdh.c create mode 100644 dropbear/fuzzer-preauth.c create mode 100644 dropbear/fuzzer-preauth_nomaths.c create mode 100644 dropbear/fuzzer-pubkey.c create mode 100644 dropbear/fuzzer-verify.c create mode 100755 dropbear/fuzzers_test.sh create mode 100644 dropbear/gcm.c create mode 100644 dropbear/gcm.h create mode 100644 dropbear/gendss.c create mode 100644 dropbear/gendss.h create mode 100644 dropbear/gened25519.c create mode 100644 dropbear/gened25519.h create mode 100644 dropbear/genrsa.c create mode 100644 dropbear/genrsa.h create mode 100644 dropbear/gensignkey.c create mode 100644 dropbear/gensignkey.h create mode 100755 dropbear/ifndef_wrapper.sh create mode 100644 dropbear/includes.h create mode 100644 dropbear/install-sh create mode 100644 dropbear/kex.h create mode 100644 dropbear/keyimport.c create mode 100644 dropbear/keyimport.h create mode 100644 dropbear/libtomcrypt/.travis.yml create mode 100644 dropbear/libtomcrypt/Doxyfile create mode 100644 dropbear/libtomcrypt/LICENSE create mode 100644 dropbear/libtomcrypt/Makefile.in create mode 100644 dropbear/libtomcrypt/README create mode 100644 dropbear/libtomcrypt/TODO create mode 100755 dropbear/libtomcrypt/build.sh create mode 100644 dropbear/libtomcrypt/changes create mode 100755 dropbear/libtomcrypt/check_source.sh create mode 100755 dropbear/libtomcrypt/coverage.sh create mode 100755 dropbear/libtomcrypt/coverage_more.sh create mode 100755 dropbear/libtomcrypt/coverity.sh create mode 100644 dropbear/libtomcrypt/crypt.lof create mode 100644 dropbear/libtomcrypt/demos/constants.c create mode 100644 dropbear/libtomcrypt/demos/demo_dynamic.py create mode 100644 dropbear/libtomcrypt/demos/encrypt.c create mode 100644 dropbear/libtomcrypt/demos/hashsum.c create mode 100644 dropbear/libtomcrypt/demos/ltcrypt.c create mode 100644 dropbear/libtomcrypt/demos/multi.c create mode 100644 dropbear/libtomcrypt/demos/openssl-enc.c create mode 100644 dropbear/libtomcrypt/demos/sizes.c create mode 100644 dropbear/libtomcrypt/demos/small.c create mode 100644 dropbear/libtomcrypt/demos/test.c create mode 100644 dropbear/libtomcrypt/demos/timing.c create mode 100644 dropbear/libtomcrypt/demos/tv_gen.c create mode 100644 dropbear/libtomcrypt/doc/Doxyfile create mode 100644 dropbear/libtomcrypt/doc/crypt.tex create mode 100644 dropbear/libtomcrypt/doc/footer.html create mode 100644 dropbear/libtomcrypt/doc/header.html create mode 100644 dropbear/libtomcrypt/doc/libtomsm.png create mode 100644 dropbear/libtomcrypt/doc/makefile create mode 100644 dropbear/libtomcrypt/filter.pl create mode 100644 dropbear/libtomcrypt/fixupind.pl create mode 100644 dropbear/libtomcrypt/genlist.sh create mode 100755 dropbear/libtomcrypt/helper.pl create mode 100644 dropbear/libtomcrypt/makefile.icc create mode 100644 dropbear/libtomcrypt/makefile.mingw create mode 100644 dropbear/libtomcrypt/makefile.msvc create mode 100644 dropbear/libtomcrypt/makefile.shared create mode 100644 dropbear/libtomcrypt/makefile.unix create mode 100644 dropbear/libtomcrypt/makefile_include.mk create mode 100644 dropbear/libtomcrypt/mess.sh create mode 100644 dropbear/libtomcrypt/notes/base64_tv.txt create mode 100644 dropbear/libtomcrypt/notes/ccm_tv.txt create mode 100644 dropbear/libtomcrypt/notes/cipher_tv.txt create mode 100644 dropbear/libtomcrypt/notes/eax_tv.txt create mode 100644 dropbear/libtomcrypt/notes/ecc_tv.txt create mode 100644 dropbear/libtomcrypt/notes/etc/NoekeonVects.java create mode 100644 dropbear/libtomcrypt/notes/etc/saferp_optimizer.c create mode 100644 dropbear/libtomcrypt/notes/etc/whirlgen.c create mode 100644 dropbear/libtomcrypt/notes/etc/whirltest.c create mode 100644 dropbear/libtomcrypt/notes/gcm_tv.txt create mode 100644 dropbear/libtomcrypt/notes/hash_tv.txt create mode 100644 dropbear/libtomcrypt/notes/hmac_tv.txt create mode 100644 dropbear/libtomcrypt/notes/lrw_tv.txt create mode 100644 dropbear/libtomcrypt/notes/ocb_tv.txt create mode 100644 dropbear/libtomcrypt/notes/omac_tv.txt create mode 100644 dropbear/libtomcrypt/notes/pmac_tv.txt create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/makefile create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/oaep-int.txt create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/oaep-vect.c create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/oaep-vect.txt create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/pkcs1v15crypt-vectors.c create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/pkcs1v15crypt-vectors.txt create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/pkcs1v15sign-vectors.c create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/pkcs1v15sign-vectors.txt create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/pss-int.txt create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/pss-vect.c create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/pss-vect.txt create mode 100644 dropbear/libtomcrypt/notes/rsa-testvectors/readme.txt create mode 100755 dropbear/libtomcrypt/notes/rsa-testvectors/rt.py create mode 100644 dropbear/libtomcrypt/notes/tech0001.txt create mode 100644 dropbear/libtomcrypt/notes/tech0002.txt create mode 100644 dropbear/libtomcrypt/notes/tech0003.txt create mode 100644 dropbear/libtomcrypt/notes/tech0004.txt create mode 100644 dropbear/libtomcrypt/notes/tech0005.txt create mode 100644 dropbear/libtomcrypt/notes/tech0006.txt create mode 100644 dropbear/libtomcrypt/notes/tech0007.txt create mode 100644 dropbear/libtomcrypt/parsenames.pl create mode 100644 dropbear/libtomcrypt/printinfo.sh create mode 100755 dropbear/libtomcrypt/run.sh create mode 100755 dropbear/libtomcrypt/scan_build.sh create mode 100644 dropbear/libtomcrypt/src/ciphers/aes/aes.c create mode 100644 dropbear/libtomcrypt/src/ciphers/aes/aes_tab.c create mode 100644 dropbear/libtomcrypt/src/ciphers/anubis.c create mode 100644 dropbear/libtomcrypt/src/ciphers/blowfish.c create mode 100644 dropbear/libtomcrypt/src/ciphers/camellia.c create mode 100644 dropbear/libtomcrypt/src/ciphers/cast5.c create mode 100644 dropbear/libtomcrypt/src/ciphers/des.c create mode 100644 dropbear/libtomcrypt/src/ciphers/kasumi.c create mode 100644 dropbear/libtomcrypt/src/ciphers/khazad.c create mode 100644 dropbear/libtomcrypt/src/ciphers/kseed.c create mode 100644 dropbear/libtomcrypt/src/ciphers/multi2.c create mode 100644 dropbear/libtomcrypt/src/ciphers/noekeon.c create mode 100644 dropbear/libtomcrypt/src/ciphers/rc2.c create mode 100644 dropbear/libtomcrypt/src/ciphers/rc5.c create mode 100644 dropbear/libtomcrypt/src/ciphers/rc6.c create mode 100644 dropbear/libtomcrypt/src/ciphers/safer/safer.c create mode 100644 dropbear/libtomcrypt/src/ciphers/safer/safer_tab.c create mode 100644 dropbear/libtomcrypt/src/ciphers/safer/saferp.c create mode 100644 dropbear/libtomcrypt/src/ciphers/skipjack.c create mode 100644 dropbear/libtomcrypt/src/ciphers/twofish/twofish.c create mode 100644 dropbear/libtomcrypt/src/ciphers/twofish/twofish_tab.c create mode 100644 dropbear/libtomcrypt/src/ciphers/xtea.c create mode 100644 dropbear/libtomcrypt/src/encauth/ccm/ccm_add_aad.c create mode 100644 dropbear/libtomcrypt/src/encauth/ccm/ccm_add_nonce.c create mode 100644 dropbear/libtomcrypt/src/encauth/ccm/ccm_done.c create mode 100644 dropbear/libtomcrypt/src/encauth/ccm/ccm_init.c create mode 100644 dropbear/libtomcrypt/src/encauth/ccm/ccm_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/ccm/ccm_process.c create mode 100644 dropbear/libtomcrypt/src/encauth/ccm/ccm_reset.c create mode 100644 dropbear/libtomcrypt/src/encauth/ccm/ccm_test.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_add_aad.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_decrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_done.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_encrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_init.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_setiv.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.c create mode 100644 dropbear/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_test.c create mode 100644 dropbear/libtomcrypt/src/encauth/eax/eax_addheader.c create mode 100644 dropbear/libtomcrypt/src/encauth/eax/eax_decrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/eax/eax_decrypt_verify_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/eax/eax_done.c create mode 100644 dropbear/libtomcrypt/src/encauth/eax/eax_encrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/eax/eax_encrypt_authenticate_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/eax/eax_init.c create mode 100644 dropbear/libtomcrypt/src/encauth/eax/eax_test.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_add_aad.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_add_iv.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_done.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_gf_mult.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_init.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_mult_h.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_process.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_reset.c create mode 100644 dropbear/libtomcrypt/src/encauth/gcm/gcm_test.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_decrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_decrypt_verify_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_done_decrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_done_encrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_encrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_encrypt_authenticate_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_init.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_ntz.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_shift_xor.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/ocb_test.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb/s_ocb_done.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_add_aad.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_decrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_decrypt_last.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_decrypt_verify_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_done.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_encrypt.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_encrypt_authenticate_memory.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_encrypt_last.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_init.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_int_ntz.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_int_xor_blocks.c create mode 100644 dropbear/libtomcrypt/src/encauth/ocb3/ocb3_test.c create mode 100644 dropbear/libtomcrypt/src/hashes/blake2b.c create mode 100644 dropbear/libtomcrypt/src/hashes/blake2s.c create mode 100644 dropbear/libtomcrypt/src/hashes/chc/chc.c create mode 100644 dropbear/libtomcrypt/src/hashes/helper/hash_file.c create mode 100644 dropbear/libtomcrypt/src/hashes/helper/hash_filehandle.c create mode 100644 dropbear/libtomcrypt/src/hashes/helper/hash_memory.c create mode 100644 dropbear/libtomcrypt/src/hashes/helper/hash_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/hashes/md2.c create mode 100644 dropbear/libtomcrypt/src/hashes/md4.c create mode 100644 dropbear/libtomcrypt/src/hashes/md5.c create mode 100644 dropbear/libtomcrypt/src/hashes/rmd128.c create mode 100644 dropbear/libtomcrypt/src/hashes/rmd160.c create mode 100644 dropbear/libtomcrypt/src/hashes/rmd256.c create mode 100644 dropbear/libtomcrypt/src/hashes/rmd320.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha1.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha2/sha224.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha2/sha256.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha2/sha384.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha2/sha512.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha2/sha512_224.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha2/sha512_256.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha3.c create mode 100644 dropbear/libtomcrypt/src/hashes/sha3_test.c create mode 100644 dropbear/libtomcrypt/src/hashes/tiger.c create mode 100644 dropbear/libtomcrypt/src/hashes/whirl/whirl.c create mode 100644 dropbear/libtomcrypt/src/hashes/whirl/whirltab.c create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_argchk.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_cfg.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_cipher.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_custom.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_dropbear.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_hash.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_mac.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_macros.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_math.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_misc.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_pk.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_pkcs.h create mode 100644 dropbear/libtomcrypt/src/headers/tomcrypt_prng.h create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2bmac.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2bmac_file.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2bmac_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2bmac_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2bmac_test.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2smac.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2smac_file.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2smac_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2smac_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/mac/blake2/blake2smac_test.c create mode 100644 dropbear/libtomcrypt/src/mac/f9/f9_done.c create mode 100644 dropbear/libtomcrypt/src/mac/f9/f9_file.c create mode 100644 dropbear/libtomcrypt/src/mac/f9/f9_init.c create mode 100644 dropbear/libtomcrypt/src/mac/f9/f9_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/f9/f9_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/mac/f9/f9_process.c create mode 100644 dropbear/libtomcrypt/src/mac/f9/f9_test.c create mode 100644 dropbear/libtomcrypt/src/mac/hmac/hmac_done.c create mode 100644 dropbear/libtomcrypt/src/mac/hmac/hmac_file.c create mode 100644 dropbear/libtomcrypt/src/mac/hmac/hmac_init.c create mode 100644 dropbear/libtomcrypt/src/mac/hmac/hmac_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/hmac/hmac_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/mac/hmac/hmac_process.c create mode 100644 dropbear/libtomcrypt/src/mac/hmac/hmac_test.c create mode 100644 dropbear/libtomcrypt/src/mac/omac/omac_done.c create mode 100644 dropbear/libtomcrypt/src/mac/omac/omac_file.c create mode 100644 dropbear/libtomcrypt/src/mac/omac/omac_init.c create mode 100644 dropbear/libtomcrypt/src/mac/omac/omac_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/omac/omac_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/mac/omac/omac_process.c create mode 100644 dropbear/libtomcrypt/src/mac/omac/omac_test.c create mode 100644 dropbear/libtomcrypt/src/mac/pelican/pelican.c create mode 100644 dropbear/libtomcrypt/src/mac/pelican/pelican_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/pelican/pelican_test.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_done.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_file.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_init.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_ntz.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_process.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_shift_xor.c create mode 100644 dropbear/libtomcrypt/src/mac/pmac/pmac_test.c create mode 100644 dropbear/libtomcrypt/src/mac/poly1305/poly1305.c create mode 100644 dropbear/libtomcrypt/src/mac/poly1305/poly1305_file.c create mode 100644 dropbear/libtomcrypt/src/mac/poly1305/poly1305_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/poly1305/poly1305_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/mac/poly1305/poly1305_test.c create mode 100644 dropbear/libtomcrypt/src/mac/xcbc/xcbc_done.c create mode 100644 dropbear/libtomcrypt/src/mac/xcbc/xcbc_file.c create mode 100644 dropbear/libtomcrypt/src/mac/xcbc/xcbc_init.c create mode 100644 dropbear/libtomcrypt/src/mac/xcbc/xcbc_memory.c create mode 100644 dropbear/libtomcrypt/src/mac/xcbc/xcbc_memory_multi.c create mode 100644 dropbear/libtomcrypt/src/mac/xcbc/xcbc_process.c create mode 100644 dropbear/libtomcrypt/src/mac/xcbc/xcbc_test.c create mode 100644 dropbear/libtomcrypt/src/math/fp/ltc_ecc_fp_mulmod.c create mode 100644 dropbear/libtomcrypt/src/math/gmp_desc.c create mode 100644 dropbear/libtomcrypt/src/math/ltm_desc.c create mode 100644 dropbear/libtomcrypt/src/math/multi.c create mode 100644 dropbear/libtomcrypt/src/math/radix_to_bin.c create mode 100644 dropbear/libtomcrypt/src/math/rand_bn.c create mode 100644 dropbear/libtomcrypt/src/math/rand_prime.c create mode 100644 dropbear/libtomcrypt/src/math/tfm_desc.c create mode 100644 dropbear/libtomcrypt/src/misc/adler32.c create mode 100644 dropbear/libtomcrypt/src/misc/base64/base64_decode.c create mode 100644 dropbear/libtomcrypt/src/misc/base64/base64_encode.c create mode 100644 dropbear/libtomcrypt/src/misc/burn_stack.c create mode 100644 dropbear/libtomcrypt/src/misc/compare_testvector.c create mode 100644 dropbear/libtomcrypt/src/misc/crc32.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_argchk.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_cipher_descriptor.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_cipher_is_valid.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_constants.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_find_cipher.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_find_cipher_any.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_find_cipher_id.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_find_hash.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_find_hash_any.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_find_hash_id.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_find_hash_oid.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_find_prng.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_fsa.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_hash_descriptor.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_hash_is_valid.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_inits.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_ltc_mp_descriptor.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_prng_descriptor.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_prng_is_valid.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_prng_rng_descriptor.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_register_all_ciphers.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_register_all_hashes.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_register_all_prngs.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_register_cipher.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_register_hash.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_register_prng.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_sizes.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_unregister_cipher.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_unregister_hash.c create mode 100644 dropbear/libtomcrypt/src/misc/crypt/crypt_unregister_prng.c create mode 100644 dropbear/libtomcrypt/src/misc/error_to_string.c create mode 100644 dropbear/libtomcrypt/src/misc/hkdf/hkdf.c create mode 100644 dropbear/libtomcrypt/src/misc/hkdf/hkdf_test.c create mode 100644 dropbear/libtomcrypt/src/misc/mem_neq.c create mode 100644 dropbear/libtomcrypt/src/misc/pk_get_oid.c create mode 100644 dropbear/libtomcrypt/src/misc/pkcs5/pkcs_5_1.c create mode 100644 dropbear/libtomcrypt/src/misc/pkcs5/pkcs_5_2.c create mode 100644 dropbear/libtomcrypt/src/misc/pkcs5/pkcs_5_test.c create mode 100644 dropbear/libtomcrypt/src/misc/zeromem.c create mode 100644 dropbear/libtomcrypt/src/modes/cbc/cbc_decrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/cbc/cbc_done.c create mode 100644 dropbear/libtomcrypt/src/modes/cbc/cbc_encrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/cbc/cbc_getiv.c create mode 100644 dropbear/libtomcrypt/src/modes/cbc/cbc_setiv.c create mode 100644 dropbear/libtomcrypt/src/modes/cbc/cbc_start.c create mode 100644 dropbear/libtomcrypt/src/modes/cfb/cfb_decrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/cfb/cfb_done.c create mode 100644 dropbear/libtomcrypt/src/modes/cfb/cfb_encrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/cfb/cfb_getiv.c create mode 100644 dropbear/libtomcrypt/src/modes/cfb/cfb_setiv.c create mode 100644 dropbear/libtomcrypt/src/modes/cfb/cfb_start.c create mode 100644 dropbear/libtomcrypt/src/modes/ctr/ctr_decrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/ctr/ctr_done.c create mode 100644 dropbear/libtomcrypt/src/modes/ctr/ctr_encrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/ctr/ctr_getiv.c create mode 100644 dropbear/libtomcrypt/src/modes/ctr/ctr_setiv.c create mode 100644 dropbear/libtomcrypt/src/modes/ctr/ctr_start.c create mode 100644 dropbear/libtomcrypt/src/modes/ctr/ctr_test.c create mode 100644 dropbear/libtomcrypt/src/modes/ecb/ecb_decrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/ecb/ecb_done.c create mode 100644 dropbear/libtomcrypt/src/modes/ecb/ecb_encrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/ecb/ecb_start.c create mode 100644 dropbear/libtomcrypt/src/modes/f8/f8_decrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/f8/f8_done.c create mode 100644 dropbear/libtomcrypt/src/modes/f8/f8_encrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/f8/f8_getiv.c create mode 100644 dropbear/libtomcrypt/src/modes/f8/f8_setiv.c create mode 100644 dropbear/libtomcrypt/src/modes/f8/f8_start.c create mode 100644 dropbear/libtomcrypt/src/modes/f8/f8_test_mode.c create mode 100644 dropbear/libtomcrypt/src/modes/lrw/lrw_decrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/lrw/lrw_done.c create mode 100644 dropbear/libtomcrypt/src/modes/lrw/lrw_encrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/lrw/lrw_getiv.c create mode 100644 dropbear/libtomcrypt/src/modes/lrw/lrw_process.c create mode 100644 dropbear/libtomcrypt/src/modes/lrw/lrw_setiv.c create mode 100644 dropbear/libtomcrypt/src/modes/lrw/lrw_start.c create mode 100644 dropbear/libtomcrypt/src/modes/lrw/lrw_test.c create mode 100644 dropbear/libtomcrypt/src/modes/ofb/ofb_decrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/ofb/ofb_done.c create mode 100644 dropbear/libtomcrypt/src/modes/ofb/ofb_encrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/ofb/ofb_getiv.c create mode 100644 dropbear/libtomcrypt/src/modes/ofb/ofb_setiv.c create mode 100644 dropbear/libtomcrypt/src/modes/ofb/ofb_start.c create mode 100644 dropbear/libtomcrypt/src/modes/xts/xts_decrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/xts/xts_done.c create mode 100644 dropbear/libtomcrypt/src/modes/xts/xts_encrypt.c create mode 100644 dropbear/libtomcrypt/src/modes/xts/xts_init.c create mode 100644 dropbear/libtomcrypt/src/modes/xts/xts_mult_x.c create mode 100644 dropbear/libtomcrypt/src/modes/xts/xts_test.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/bit/der_decode_bit_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/bit/der_decode_raw_bit_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/bit/der_encode_bit_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/bit/der_encode_raw_bit_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/bit/der_length_bit_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/boolean/der_decode_boolean.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/boolean/der_encode_boolean.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/boolean/der_length_boolean.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/choice/der_decode_choice.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/generalizedtime/der_length_generalizedtime.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/ia5/der_decode_ia5_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/ia5/der_encode_ia5_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/ia5/der_length_ia5_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/integer/der_decode_integer.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/integer/der_encode_integer.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/integer/der_length_integer.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/object_identifier/der_length_object_identifier.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/octet/der_decode_octet_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/octet/der_encode_octet_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/octet/der_length_octet_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/printable_string/der_decode_printable_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/printable_string/der_encode_printable_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/printable_string/der_length_printable_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_ex.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_multi.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_decode_subject_public_key_info.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_encode_sequence_ex.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_encode_sequence_multi.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_encode_subject_public_key_info.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_length_sequence.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_sequence_free.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/sequence/der_sequence_shrink.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/set/der_encode_set.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/set/der_encode_setof.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/short_integer/der_decode_short_integer.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/short_integer/der_encode_short_integer.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/short_integer/der_length_short_integer.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/teletex_string/der_decode_teletex_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/teletex_string/der_length_teletex_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/utctime/der_decode_utctime.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/utctime/der_encode_utctime.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/utctime/der_length_utctime.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/utf8/der_decode_utf8_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/utf8/der_encode_utf8_string.c create mode 100644 dropbear/libtomcrypt/src/pk/asn1/der/utf8/der_length_utf8_string.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_check_pubkey.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_export.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_export_key.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_free.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_generate_key.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_import.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_set.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_set_pg_dhparam.c create mode 100644 dropbear/libtomcrypt/src/pk/dh/dh_shared_secret.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_decrypt_key.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_encrypt_key.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_export.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_free.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_generate_key.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_generate_pqg.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_import.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_make_key.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_set.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_set_pqg_dsaparam.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_shared_secret.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_sign_hash.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_verify_hash.c create mode 100644 dropbear/libtomcrypt/src/pk/dsa/dsa_verify_key.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_ansi_x963_export.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_ansi_x963_import.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_decrypt_key.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_encrypt_key.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_export.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_free.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_get_size.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_import.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_make_key.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_shared_secret.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_sign_hash.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_sizes.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_test.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ecc_verify_hash.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_is_valid_idx.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_map.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod_timing.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_points.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c create mode 100644 dropbear/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c create mode 100644 dropbear/libtomcrypt/src/pk/katja/katja_decrypt_key.c create mode 100644 dropbear/libtomcrypt/src/pk/katja/katja_encrypt_key.c create mode 100644 dropbear/libtomcrypt/src/pk/katja/katja_export.c create mode 100644 dropbear/libtomcrypt/src/pk/katja/katja_exptmod.c create mode 100644 dropbear/libtomcrypt/src/pk/katja/katja_free.c create mode 100644 dropbear/libtomcrypt/src/pk/katja/katja_import.c create mode 100644 dropbear/libtomcrypt/src/pk/katja/katja_make_key.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_i2osp.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_encode.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_os2ip.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c create mode 100644 dropbear/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_decrypt_key.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_encrypt_key.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_export.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_exptmod.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_free.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_get_size.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_import.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_import_pkcs8.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_import_x509.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_make_key.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_set.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_sign_hash.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_sign_saltlen_get.c create mode 100644 dropbear/libtomcrypt/src/pk/rsa/rsa_verify_hash.c create mode 100644 dropbear/libtomcrypt/src/prngs/chacha20.c create mode 100644 dropbear/libtomcrypt/src/prngs/fortuna.c create mode 100644 dropbear/libtomcrypt/src/prngs/rc4.c create mode 100644 dropbear/libtomcrypt/src/prngs/rng_get_bytes.c create mode 100644 dropbear/libtomcrypt/src/prngs/rng_make_prng.c create mode 100644 dropbear/libtomcrypt/src/prngs/sober128.c create mode 100644 dropbear/libtomcrypt/src/prngs/sober128tab.c create mode 100644 dropbear/libtomcrypt/src/prngs/sprng.c create mode 100644 dropbear/libtomcrypt/src/prngs/yarrow.c create mode 100644 dropbear/libtomcrypt/src/stream/chacha/chacha_crypt.c create mode 100644 dropbear/libtomcrypt/src/stream/chacha/chacha_done.c create mode 100644 dropbear/libtomcrypt/src/stream/chacha/chacha_ivctr32.c create mode 100644 dropbear/libtomcrypt/src/stream/chacha/chacha_ivctr64.c create mode 100644 dropbear/libtomcrypt/src/stream/chacha/chacha_keystream.c create mode 100644 dropbear/libtomcrypt/src/stream/chacha/chacha_setup.c create mode 100644 dropbear/libtomcrypt/src/stream/chacha/chacha_test.c create mode 100644 dropbear/libtomcrypt/src/stream/rc4/rc4_stream.c create mode 100644 dropbear/libtomcrypt/src/stream/rc4/rc4_test.c create mode 100644 dropbear/libtomcrypt/src/stream/sober128/sober128_stream.c create mode 100644 dropbear/libtomcrypt/src/stream/sober128/sober128_test.c create mode 100644 dropbear/libtomcrypt/src/stream/sober128/sober128tab.c create mode 100755 dropbear/libtomcrypt/testbuild.sh create mode 100755 dropbear/libtomcrypt/testme.sh create mode 100644 dropbear/libtomcrypt/testprof/base64_test.c create mode 100644 dropbear/libtomcrypt/testprof/cipher_hash_test.c create mode 100644 dropbear/libtomcrypt/testprof/der_tests.c create mode 100644 dropbear/libtomcrypt/testprof/dsa_test.c create mode 100644 dropbear/libtomcrypt/testprof/ecc_test.c create mode 100644 dropbear/libtomcrypt/testprof/katja_test.c create mode 100644 dropbear/libtomcrypt/testprof/mac_test.c create mode 100644 dropbear/libtomcrypt/testprof/makefile create mode 100644 dropbear/libtomcrypt/testprof/makefile.icc create mode 100644 dropbear/libtomcrypt/testprof/makefile.msvc create mode 100644 dropbear/libtomcrypt/testprof/makefile.shared create mode 100644 dropbear/libtomcrypt/testprof/modes_test.c create mode 100644 dropbear/libtomcrypt/testprof/pkcs_1_test.c create mode 100644 dropbear/libtomcrypt/testprof/rsa_test.c create mode 100644 dropbear/libtomcrypt/testprof/store_test.c create mode 100644 dropbear/libtomcrypt/testprof/test.der create mode 100644 dropbear/libtomcrypt/testprof/test.key create mode 100644 dropbear/libtomcrypt/testprof/test_driver.c create mode 100644 dropbear/libtomcrypt/testprof/tomcrypt_test.h create mode 100644 dropbear/libtomcrypt/testprof/x86_prof.c create mode 100644 dropbear/libtomcrypt/tests/base64_test.c create mode 100644 dropbear/libtomcrypt/tests/cipher_hash_test.c create mode 100644 dropbear/libtomcrypt/tests/common.c create mode 100644 dropbear/libtomcrypt/tests/common.h create mode 100644 dropbear/libtomcrypt/tests/der_test.c create mode 100644 dropbear/libtomcrypt/tests/dh_test.c create mode 100644 dropbear/libtomcrypt/tests/dsa_test.c create mode 100644 dropbear/libtomcrypt/tests/ecc_test.c create mode 100644 dropbear/libtomcrypt/tests/file_test.c create mode 100644 dropbear/libtomcrypt/tests/katja_test.c create mode 100644 dropbear/libtomcrypt/tests/mac_test.c create mode 100644 dropbear/libtomcrypt/tests/misc_test.c create mode 100644 dropbear/libtomcrypt/tests/modes_test.c create mode 100644 dropbear/libtomcrypt/tests/mpi_test.c create mode 100644 dropbear/libtomcrypt/tests/multi_test.c create mode 100644 dropbear/libtomcrypt/tests/no_prng.c create mode 100644 dropbear/libtomcrypt/tests/pkcs_1_eme_test.c create mode 100644 dropbear/libtomcrypt/tests/pkcs_1_emsa_test.c create mode 100644 dropbear/libtomcrypt/tests/pkcs_1_oaep_test.c create mode 100644 dropbear/libtomcrypt/tests/pkcs_1_pss_test.c create mode 100644 dropbear/libtomcrypt/tests/pkcs_1_test.c create mode 100644 dropbear/libtomcrypt/tests/prng_test.c create mode 100644 dropbear/libtomcrypt/tests/rotate_test.c create mode 100644 dropbear/libtomcrypt/tests/rsa_test.c create mode 100644 dropbear/libtomcrypt/tests/store_test.c create mode 100644 dropbear/libtomcrypt/tests/test.c create mode 100644 dropbear/libtomcrypt/tests/test.der create mode 100644 dropbear/libtomcrypt/tests/test.key create mode 100644 dropbear/libtomcrypt/tests/test_dsa.key create mode 100644 dropbear/libtomcrypt/tests/tomcrypt_test.h create mode 100755 dropbear/libtomcrypt/updatemakes.sh create mode 100644 dropbear/libtommath/LICENSE create mode 100644 dropbear/libtommath/Makefile.in create mode 100644 dropbear/libtommath/README.md create mode 100644 dropbear/libtommath/astylerc create mode 100644 dropbear/libtommath/bn_cutoffs.c create mode 100644 dropbear/libtommath/bn_deprecated.c create mode 100644 dropbear/libtommath/bn_mp_2expt.c create mode 100644 dropbear/libtommath/bn_mp_abs.c create mode 100644 dropbear/libtommath/bn_mp_add.c create mode 100644 dropbear/libtommath/bn_mp_add_d.c create mode 100644 dropbear/libtommath/bn_mp_addmod.c create mode 100644 dropbear/libtommath/bn_mp_and.c create mode 100644 dropbear/libtommath/bn_mp_clamp.c create mode 100644 dropbear/libtommath/bn_mp_clear.c create mode 100644 dropbear/libtommath/bn_mp_clear_multi.c create mode 100644 dropbear/libtommath/bn_mp_cmp.c create mode 100644 dropbear/libtommath/bn_mp_cmp_d.c create mode 100644 dropbear/libtommath/bn_mp_cmp_mag.c create mode 100644 dropbear/libtommath/bn_mp_cnt_lsb.c create mode 100644 dropbear/libtommath/bn_mp_complement.c create mode 100644 dropbear/libtommath/bn_mp_copy.c create mode 100644 dropbear/libtommath/bn_mp_count_bits.c create mode 100644 dropbear/libtommath/bn_mp_decr.c create mode 100644 dropbear/libtommath/bn_mp_div.c create mode 100644 dropbear/libtommath/bn_mp_div_2.c create mode 100644 dropbear/libtommath/bn_mp_div_2d.c create mode 100644 dropbear/libtommath/bn_mp_div_3.c create mode 100644 dropbear/libtommath/bn_mp_div_d.c create mode 100644 dropbear/libtommath/bn_mp_dr_is_modulus.c create mode 100644 dropbear/libtommath/bn_mp_dr_reduce.c create mode 100644 dropbear/libtommath/bn_mp_dr_setup.c create mode 100644 dropbear/libtommath/bn_mp_error_to_string.c create mode 100644 dropbear/libtommath/bn_mp_exch.c create mode 100644 dropbear/libtommath/bn_mp_expt_u32.c create mode 100644 dropbear/libtommath/bn_mp_exptmod.c create mode 100644 dropbear/libtommath/bn_mp_exteuclid.c create mode 100644 dropbear/libtommath/bn_mp_fread.c create mode 100644 dropbear/libtommath/bn_mp_from_sbin.c create mode 100644 dropbear/libtommath/bn_mp_from_ubin.c create mode 100644 dropbear/libtommath/bn_mp_fwrite.c create mode 100644 dropbear/libtommath/bn_mp_gcd.c create mode 100644 dropbear/libtommath/bn_mp_get_i32.c create mode 100644 dropbear/libtommath/bn_mp_get_i64.c create mode 100644 dropbear/libtommath/bn_mp_get_l.c create mode 100644 dropbear/libtommath/bn_mp_get_ll.c create mode 100644 dropbear/libtommath/bn_mp_get_mag_u32.c create mode 100644 dropbear/libtommath/bn_mp_get_mag_u64.c create mode 100644 dropbear/libtommath/bn_mp_get_mag_ul.c create mode 100644 dropbear/libtommath/bn_mp_get_mag_ull.c create mode 100644 dropbear/libtommath/bn_mp_grow.c create mode 100644 dropbear/libtommath/bn_mp_incr.c create mode 100644 dropbear/libtommath/bn_mp_init.c create mode 100644 dropbear/libtommath/bn_mp_init_copy.c create mode 100644 dropbear/libtommath/bn_mp_init_i32.c create mode 100644 dropbear/libtommath/bn_mp_init_i64.c create mode 100644 dropbear/libtommath/bn_mp_init_l.c create mode 100644 dropbear/libtommath/bn_mp_init_ll.c create mode 100644 dropbear/libtommath/bn_mp_init_multi.c create mode 100644 dropbear/libtommath/bn_mp_init_set.c create mode 100644 dropbear/libtommath/bn_mp_init_size.c create mode 100644 dropbear/libtommath/bn_mp_init_u32.c create mode 100644 dropbear/libtommath/bn_mp_init_u64.c create mode 100644 dropbear/libtommath/bn_mp_init_ul.c create mode 100644 dropbear/libtommath/bn_mp_init_ull.c create mode 100644 dropbear/libtommath/bn_mp_invmod.c create mode 100644 dropbear/libtommath/bn_mp_is_square.c create mode 100644 dropbear/libtommath/bn_mp_iseven.c create mode 100644 dropbear/libtommath/bn_mp_isodd.c create mode 100644 dropbear/libtommath/bn_mp_kronecker.c create mode 100644 dropbear/libtommath/bn_mp_lcm.c create mode 100644 dropbear/libtommath/bn_mp_log_u32.c create mode 100644 dropbear/libtommath/bn_mp_lshd.c create mode 100644 dropbear/libtommath/bn_mp_mod.c create mode 100644 dropbear/libtommath/bn_mp_mod_2d.c create mode 100644 dropbear/libtommath/bn_mp_mod_d.c create mode 100644 dropbear/libtommath/bn_mp_montgomery_calc_normalization.c create mode 100644 dropbear/libtommath/bn_mp_montgomery_reduce.c create mode 100644 dropbear/libtommath/bn_mp_montgomery_setup.c create mode 100644 dropbear/libtommath/bn_mp_mul.c create mode 100644 dropbear/libtommath/bn_mp_mul_2.c create mode 100644 dropbear/libtommath/bn_mp_mul_2d.c create mode 100644 dropbear/libtommath/bn_mp_mul_d.c create mode 100644 dropbear/libtommath/bn_mp_mulmod.c create mode 100644 dropbear/libtommath/bn_mp_neg.c create mode 100644 dropbear/libtommath/bn_mp_or.c create mode 100644 dropbear/libtommath/bn_mp_pack.c create mode 100644 dropbear/libtommath/bn_mp_pack_count.c create mode 100644 dropbear/libtommath/bn_mp_prime_fermat.c create mode 100644 dropbear/libtommath/bn_mp_prime_frobenius_underwood.c create mode 100644 dropbear/libtommath/bn_mp_prime_is_prime.c create mode 100644 dropbear/libtommath/bn_mp_prime_miller_rabin.c create mode 100644 dropbear/libtommath/bn_mp_prime_next_prime.c create mode 100644 dropbear/libtommath/bn_mp_prime_rabin_miller_trials.c create mode 100644 dropbear/libtommath/bn_mp_prime_rand.c create mode 100644 dropbear/libtommath/bn_mp_prime_strong_lucas_selfridge.c create mode 100644 dropbear/libtommath/bn_mp_radix_size.c create mode 100644 dropbear/libtommath/bn_mp_radix_smap.c create mode 100644 dropbear/libtommath/bn_mp_rand.c create mode 100644 dropbear/libtommath/bn_mp_read_radix.c create mode 100644 dropbear/libtommath/bn_mp_reduce.c create mode 100644 dropbear/libtommath/bn_mp_reduce_2k.c create mode 100644 dropbear/libtommath/bn_mp_reduce_2k_l.c create mode 100644 dropbear/libtommath/bn_mp_reduce_2k_setup.c create mode 100644 dropbear/libtommath/bn_mp_reduce_2k_setup_l.c create mode 100644 dropbear/libtommath/bn_mp_reduce_is_2k.c create mode 100644 dropbear/libtommath/bn_mp_reduce_is_2k_l.c create mode 100644 dropbear/libtommath/bn_mp_reduce_setup.c create mode 100644 dropbear/libtommath/bn_mp_root_u32.c create mode 100644 dropbear/libtommath/bn_mp_rshd.c create mode 100644 dropbear/libtommath/bn_mp_sbin_size.c create mode 100644 dropbear/libtommath/bn_mp_set.c create mode 100644 dropbear/libtommath/bn_mp_set_i32.c create mode 100644 dropbear/libtommath/bn_mp_set_i64.c create mode 100644 dropbear/libtommath/bn_mp_set_l.c create mode 100644 dropbear/libtommath/bn_mp_set_ll.c create mode 100644 dropbear/libtommath/bn_mp_set_u32.c create mode 100644 dropbear/libtommath/bn_mp_set_u64.c create mode 100644 dropbear/libtommath/bn_mp_set_ul.c create mode 100644 dropbear/libtommath/bn_mp_set_ull.c create mode 100644 dropbear/libtommath/bn_mp_shrink.c create mode 100644 dropbear/libtommath/bn_mp_signed_rsh.c create mode 100644 dropbear/libtommath/bn_mp_sqr.c create mode 100644 dropbear/libtommath/bn_mp_sqrmod.c create mode 100644 dropbear/libtommath/bn_mp_sqrt.c create mode 100644 dropbear/libtommath/bn_mp_sqrtmod_prime.c create mode 100644 dropbear/libtommath/bn_mp_sub.c create mode 100644 dropbear/libtommath/bn_mp_sub_d.c create mode 100644 dropbear/libtommath/bn_mp_submod.c create mode 100644 dropbear/libtommath/bn_mp_to_radix.c create mode 100644 dropbear/libtommath/bn_mp_to_sbin.c create mode 100644 dropbear/libtommath/bn_mp_to_ubin.c create mode 100644 dropbear/libtommath/bn_mp_ubin_size.c create mode 100644 dropbear/libtommath/bn_mp_unpack.c create mode 100644 dropbear/libtommath/bn_mp_xor.c create mode 100644 dropbear/libtommath/bn_mp_zero.c create mode 100644 dropbear/libtommath/bn_prime_tab.c create mode 100644 dropbear/libtommath/bn_s_mp_add.c create mode 100644 dropbear/libtommath/bn_s_mp_balance_mul.c create mode 100644 dropbear/libtommath/bn_s_mp_exptmod.c create mode 100644 dropbear/libtommath/bn_s_mp_exptmod_fast.c create mode 100644 dropbear/libtommath/bn_s_mp_get_bit.c create mode 100644 dropbear/libtommath/bn_s_mp_invmod_fast.c create mode 100644 dropbear/libtommath/bn_s_mp_invmod_slow.c create mode 100644 dropbear/libtommath/bn_s_mp_karatsuba_mul.c create mode 100644 dropbear/libtommath/bn_s_mp_karatsuba_sqr.c create mode 100644 dropbear/libtommath/bn_s_mp_montgomery_reduce_fast.c create mode 100644 dropbear/libtommath/bn_s_mp_mul_digs.c create mode 100644 dropbear/libtommath/bn_s_mp_mul_digs_fast.c create mode 100644 dropbear/libtommath/bn_s_mp_mul_high_digs.c create mode 100644 dropbear/libtommath/bn_s_mp_mul_high_digs_fast.c create mode 100644 dropbear/libtommath/bn_s_mp_prime_is_divisible.c create mode 100644 dropbear/libtommath/bn_s_mp_rand_jenkins.c create mode 100644 dropbear/libtommath/bn_s_mp_rand_platform.c create mode 100644 dropbear/libtommath/bn_s_mp_reverse.c create mode 100644 dropbear/libtommath/bn_s_mp_sqr.c create mode 100644 dropbear/libtommath/bn_s_mp_sqr_fast.c create mode 100644 dropbear/libtommath/bn_s_mp_sub.c create mode 100644 dropbear/libtommath/bn_s_mp_toom_mul.c create mode 100644 dropbear/libtommath/bn_s_mp_toom_sqr.c create mode 100644 dropbear/libtommath/changes.txt create mode 100644 dropbear/libtommath/gen.pl create mode 100755 dropbear/libtommath/helper.pl create mode 100644 dropbear/libtommath/makefile_include.mk create mode 100755 dropbear/libtommath/testme.sh create mode 100644 dropbear/libtommath/tommath.h create mode 100644 dropbear/libtommath/tommath_class.h create mode 100644 dropbear/libtommath/tommath_cutoffs.h create mode 100644 dropbear/libtommath/tommath_private.h create mode 100644 dropbear/libtommath/tommath_superclass.h create mode 100644 dropbear/list.c create mode 100644 dropbear/list.h create mode 100644 dropbear/listener.c create mode 100644 dropbear/listener.h create mode 100644 dropbear/localoptions.h create mode 100644 dropbear/loginrec.c create mode 100644 dropbear/loginrec.h create mode 100644 dropbear/ltc_prng.c create mode 100644 dropbear/ltc_prng.h create mode 100644 dropbear/netio.c create mode 100644 dropbear/netio.h create mode 100644 dropbear/options.h create mode 100644 dropbear/packet.c create mode 100644 dropbear/packet.h create mode 100644 dropbear/process-packet.c create mode 100644 dropbear/progressmeter.c create mode 100644 dropbear/progressmeter.h create mode 100644 dropbear/pubkeyapi.h create mode 100644 dropbear/queue.c create mode 100644 dropbear/queue.h create mode 100755 dropbear/release.sh create mode 100644 dropbear/rsa.c create mode 100644 dropbear/rsa.h create mode 100644 dropbear/runopts.h create mode 100644 dropbear/scp.c create mode 100644 dropbear/scpmisc.c create mode 100644 dropbear/scpmisc.h create mode 100644 dropbear/service.h create mode 100644 dropbear/session.h create mode 100644 dropbear/signkey.c create mode 100644 dropbear/signkey.h create mode 100644 dropbear/ssh.h create mode 100644 dropbear/sshpty.c create mode 100644 dropbear/sshpty.h create mode 100644 dropbear/svr-agentfwd.c create mode 100644 dropbear/svr-auth.c create mode 100644 dropbear/svr-authpam.c create mode 100644 dropbear/svr-authpasswd.c create mode 100644 dropbear/svr-authpubkey.c create mode 100644 dropbear/svr-authpubkeyoptions.c create mode 100644 dropbear/svr-chansession.c create mode 100644 dropbear/svr-kex.c create mode 100644 dropbear/svr-main.c create mode 100644 dropbear/svr-runopts.c create mode 100644 dropbear/svr-service.c create mode 100644 dropbear/svr-session.c create mode 100644 dropbear/svr-tcpfwd.c create mode 100644 dropbear/svr-x11fwd.c create mode 100644 dropbear/sysoptions.h create mode 100644 dropbear/tcp-accept.c create mode 100644 dropbear/tcpfwd.h create mode 100644 dropbear/termcodes.c create mode 100644 dropbear/termcodes.h create mode 100644 dropbear/x11fwd.h create mode 100755 full_build.sh create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 icon.big.png create mode 120000 java create mode 100644 jni/Android.mk create mode 100644 jni/Application.mk create mode 100644 jni/buffersu.c create mode 100644 jni/config.h create mode 100644 jni/interface.c create mode 100644 openssh/LICENCE create mode 100644 openssh/bufaux.c create mode 100644 openssh/buffer.c create mode 100644 openssh/buffer.h create mode 100644 openssh/config.h create mode 100644 openssh/defines.h create mode 100644 openssh/includes.h create mode 100644 openssh/match.c create mode 100644 openssh/match.h create mode 100644 openssh/misc.c create mode 100644 openssh/misc.h create mode 100644 openssh/openbsd-compat/fmt_scaled.c create mode 100644 openssh/openbsd-compat/getopt.h create mode 100644 openssh/openbsd-compat/getopt_long.c create mode 100644 openssh/openbsd-compat/openbsd-compat.h create mode 100644 openssh/openbsd-compat/pwcache.c create mode 100644 openssh/openbsd-compat/strmode.c create mode 100644 openssh/sftp-common.c create mode 100644 openssh/sftp-common.h create mode 100644 openssh/sftp-server-main.c create mode 100644 openssh/sftp-server.c create mode 100644 openssh/sftp.h create mode 100644 openssh/sshbuf-getput-basic.c create mode 100644 openssh/sshbuf.c create mode 100644 openssh/sshbuf.h create mode 100644 openssh/ssherr.c create mode 100644 openssh/ssherr.h create mode 100644 openssh/xmalloc.c create mode 100644 openssh/xmalloc.h create mode 100755 prepare create mode 120000 res create mode 100644 rsync/COPYING create mode 100644 rsync/Doxyfile create mode 100644 rsync/INSTALL create mode 100644 rsync/Makefile.in create mode 100644 rsync/NEWS create mode 100644 rsync/OLDNEWS create mode 100644 rsync/README create mode 100644 rsync/TODO create mode 100644 rsync/access.c create mode 100644 rsync/aclocal.m4 create mode 100644 rsync/acls.c create mode 100644 rsync/authenticate.c create mode 100644 rsync/backup.c create mode 100644 rsync/batch.c create mode 100644 rsync/byteorder.h create mode 100644 rsync/case_N.h create mode 100644 rsync/checksum.c create mode 100644 rsync/chmod.c create mode 100644 rsync/cleanup.c create mode 100644 rsync/clientname.c create mode 100644 rsync/clientserver.c create mode 100644 rsync/compat.c create mode 100644 rsync/config.h create mode 100644 rsync/config.h.in create mode 100644 rsync/connection.c create mode 100644 rsync/csprotocol.txt create mode 100644 rsync/delete.c create mode 100644 rsync/doc/README-SGML create mode 100644 rsync/doc/profile.txt create mode 100644 rsync/doc/rsync.sgml create mode 100644 rsync/errcode.h create mode 100644 rsync/exclude.c create mode 100644 rsync/fileio.c create mode 100644 rsync/flist.c create mode 100644 rsync/generator.c create mode 100644 rsync/getfsdev.c create mode 100644 rsync/getgroups.c create mode 100644 rsync/hashtable.c create mode 100644 rsync/hlink.c create mode 100644 rsync/ifuncs.h create mode 100755 rsync/install-sh create mode 100644 rsync/inums.h create mode 100644 rsync/io.c create mode 100644 rsync/io.h create mode 100644 rsync/itypes.h create mode 100644 rsync/lib/addrinfo.h create mode 100644 rsync/lib/compat.c create mode 100644 rsync/lib/dummy.in create mode 100644 rsync/lib/getaddrinfo.c create mode 100644 rsync/lib/getpass.c create mode 100644 rsync/lib/inet_ntop.c create mode 100644 rsync/lib/inet_pton.c create mode 100644 rsync/lib/md5.c create mode 100644 rsync/lib/mdfour.c create mode 100644 rsync/lib/mdigest.h create mode 100644 rsync/lib/permstring.c create mode 100644 rsync/lib/permstring.h create mode 100644 rsync/lib/pool_alloc.3 create mode 100644 rsync/lib/pool_alloc.c create mode 100644 rsync/lib/pool_alloc.h create mode 100644 rsync/lib/snprintf.c create mode 100644 rsync/lib/sysacls.c create mode 100644 rsync/lib/sysacls.h create mode 100644 rsync/lib/sysxattrs.c create mode 100644 rsync/lib/sysxattrs.h create mode 100644 rsync/lib/wildmatch.c create mode 100644 rsync/lib/wildmatch.h create mode 100644 rsync/loadparm.c create mode 100644 rsync/log.c create mode 100644 rsync/main.c create mode 100644 rsync/match.c create mode 100644 rsync/mkproto.pl create mode 100644 rsync/options.c create mode 100644 rsync/params.c create mode 100644 rsync/pipe.c create mode 100644 rsync/popt/CHANGES create mode 100644 rsync/popt/COPYING create mode 100644 rsync/popt/README create mode 100644 rsync/popt/README.rsync create mode 100644 rsync/popt/dummy.in create mode 100644 rsync/popt/findme.c create mode 100644 rsync/popt/findme.h create mode 100644 rsync/popt/popt.c create mode 100644 rsync/popt/popt.h create mode 100644 rsync/popt/poptconfig.c create mode 100644 rsync/popt/popthelp.c create mode 100644 rsync/popt/poptint.h create mode 100644 rsync/popt/poptparse.c create mode 100644 rsync/popt/system.h create mode 100755 rsync/prepare-source create mode 100644 rsync/prepare-source.mak create mode 100644 rsync/progress.c create mode 100644 rsync/proto.h create mode 100644 rsync/proto.h-tstamp create mode 100644 rsync/receiver.c create mode 100644 rsync/rounding.c create mode 100644 rsync/rounding.h create mode 100755 rsync/rsync-ssl.in create mode 100644 rsync/rsync.c create mode 100644 rsync/rsync.h create mode 100644 rsync/rsync3.txt create mode 100644 rsync/rsyncd.conf.5 create mode 100644 rsync/rsyncd.conf.yo create mode 100644 rsync/rsyncsh.txt create mode 100755 rsync/runtests.sh create mode 100644 rsync/sender.c create mode 100755 rsync/shconfig.in create mode 100644 rsync/socket.c create mode 100755 rsync/stunnel-rsync.in create mode 100644 rsync/stunnel-rsyncd.conf.in create mode 100644 rsync/syscall.c create mode 100644 rsync/t_stub.c create mode 100644 rsync/t_unsafe.c create mode 100644 rsync/tech_report.tex create mode 100644 rsync/testhelp/maketree.py create mode 100644 rsync/testrun.c create mode 100644 rsync/tls.c create mode 100644 rsync/token.c create mode 100644 rsync/trimslash.c create mode 100755 rsync/tweak_manpage create mode 100644 rsync/uidlist.c create mode 100644 rsync/util.c create mode 100644 rsync/util2.c create mode 100644 rsync/wildtest.c create mode 100644 rsync/wildtest.txt create mode 100644 rsync/xattrs.c create mode 100644 rsync/zlib/ChangeLog create mode 100644 rsync/zlib/README create mode 100644 rsync/zlib/README.rsync create mode 100644 rsync/zlib/adler32.c create mode 100644 rsync/zlib/compress.c create mode 100644 rsync/zlib/crc32.c create mode 100644 rsync/zlib/crc32.h create mode 100644 rsync/zlib/deflate.c create mode 100644 rsync/zlib/deflate.h create mode 100644 rsync/zlib/dummy.in create mode 100644 rsync/zlib/gzguts.h create mode 100644 rsync/zlib/inffast.c create mode 100644 rsync/zlib/inffast.h create mode 100644 rsync/zlib/inffixed.h create mode 100644 rsync/zlib/inflate.c create mode 100644 rsync/zlib/inflate.h create mode 100644 rsync/zlib/inftrees.c create mode 100644 rsync/zlib/inftrees.h create mode 100644 rsync/zlib/trees.c create mode 100644 rsync/zlib/trees.h create mode 100644 rsync/zlib/zconf.h create mode 100644 rsync/zlib/zlib.h create mode 100644 rsync/zlib/zutil.c create mode 100644 rsync/zlib/zutil.h create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e5fa895 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +dropbear/default_options_guard.h +.gradle/ +.idea/ +build/ +app/build/ +local.properties + +# ignore binary files (libraries) +obj/ +app/src/main/lib/*/*.so + +# ignore generated apk paths +app/debug/ +app/release/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e0c7da1 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +1. Run `./prepare` to build libraries. +- ready lib files located in *app/src/main/lib/armeabi-v7a* +2. Run `./gradlew assembleRelease` to start building release apk. \ No newline at end of file diff --git a/_other/crash.20200109 b/_other/crash.20200109 new file mode 100644 index 0000000..4b4a905 --- /dev/null +++ b/_other/crash.20200109 @@ -0,0 +1,65 @@ +Yesterday, 7:03 PM on app version 24 +OnePlus OnePlus 7T (OnePlus7T), Android 10 +Report 1 of 3 + +android.app.RemoteServiceException: + at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2038) + at android.os.Handler.dispatchMessage (Handler.java:107) + at android.os.Looper.loop (Looper.java:214) + at android.app.ActivityThread.main (ActivityThread.java:7682) + at java.lang.reflect.Method.invoke (Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:516) + at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950) + + +2021/01/17 - confirmed this is still happening with version 26 of the +app, reported on Android 8.1 (SDK 27) and Android 10 (SDK 29). + +https://stackoverflow.com/questions/51222082/why-do-i-get-remoteserviceexception-for-creating-updating-a-notification +suggests it has something to do with the Notification passed to +startForeground(), but their "workaround" was to only modify the +Notification from the Service thread, which we already do. + +I could not reproduce it under the emulator with Android 8.1 and starting +the service is several different contexts, including using the START +broadcast after the app had been force stopped, or when the service had +started because the package had just been updated (UI not displayed yet). +I also tested launching the PendingIntent from those contexts. + +Looking at ActivityThread.java that came with my SDK and it looks like +RemoteServiceException() is just called whenever handleMessage() is +passed a msg.what == SCHEDULE_CRASH, which is sent from +ApplicationThread.scheduleCrash(), which is called (indirectly) from: + ActivityStackSupervisor.PendingActivityLaunch.sendErrorResult() + ... ultimately called when there's an exception during a + PendingIntent launch, with the string from that exception?? + BroadcastQueue.performReceiveLocked() on a RemoteException with the + string "can't deliver broadcast" + ActivityManagerShellCommand.runCrash() with "shell-induced crash" + ServiceRecord.postNotification() with "Bad notification for startForeground:" + ActiveServices.serviceForegroundCrash() with + "Context.startForegroundService() did not then call + Service.startForeground():" + NativeCrashListener.NativeCrashReporter.run() but I'm not sure it + actually makes it into the same crashApplication() or not? + RuntimeInit.wtf() not sure where this error winds up either but + +Most of those, I think, would be pretty good about putting a message +there so I'm not clear why no message is provided. + +Googling some more: + https://github.com/commons-app/apps-android-commons/issues/1877 + failed to set a NotificationChannel but I think I've already + crossed that bridge. + https://www.xspdf.com/resolution/50183960.html + the XML layout for their Notification specified a manual height for + the root element?? the outer element for mine is wrap_content, but + one of the contents is an ImageView with a manual size (60dp x + 60dp) ?? (and many others at this URL) Could maybe be a problem + with the res/drawable for the notification icon? + +Crashlytics would apparently provide more info -- I'm not clear why +Google's crash reporter isn't giving me the RemoteServiceException +message on its own though! But Crashlytics smells like bloatware to me +and from looking at the source (/usr/src/firebase-android-sdk), I didn't +immediately see how it could change the reporting of this sort of crash. diff --git a/_other/crash.20200122 b/_other/crash.20200122 new file mode 100644 index 0000000..9006357 --- /dev/null +++ b/_other/crash.20200122 @@ -0,0 +1,13 @@ +Jan 22, 9:01 AM on app version 24 +Xiaomi MiBox S (oneday), Android 8.1 +Report 1 of 1 +*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** +pid: 0, tid: 0 >>> org.galexander.sshd <<< + +backtrace: + #00 pc 000000000001a6ac /system/lib/libc.so (abort+63) + #01 pc 0000000000020c79 /system/lib/libc.so (sigprocmask+48) + + +2021/01/17 - Looking at the play console today, this crash is not in the +last 60 days which is all it will show me. So I guess it's rare. diff --git a/_other/crash.20201123 b/_other/crash.20201123 new file mode 100644 index 0000000..3517347 --- /dev/null +++ b/_other/crash.20201123 @@ -0,0 +1,23 @@ +java.lang.IllegalStateException: + at android.os.Parcel.createException (Parcel.java:1958) + at android.os.Parcel.readException (Parcel.java:1918) + at android.os.Parcel.readException (Parcel.java:1868) + at android.app.IActivityManager$Stub$Proxy.reportAssistContextExtras (IActivityManager.java:7107) + at android.app.ActivityThread.handleRequestAssistContextExtras (ActivityThread.java:3212) + at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1764) + at android.os.Handler.dispatchMessage (Handler.java:106) + at android.os.Looper.loop (Looper.java:193) + at android.app.ActivityThread.main (ActivityThread.java:6669) + at java.lang.reflect.Method.invoke (Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493) + at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) +Caused by: android.os.RemoteException: + at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1577) + at android.app.ContextImpl.startServiceAsUser (ContextImpl.java:1549) + at com.android.server.am.ActivityManagerService.reportAssistContextExtras (ActivityManagerService.java:14185) + at android.app.IActivityManager$Stub.onTransact$reportAssistContextExtras$ (IActivityManager.java:10882) + at android.app.IActivityManager$Stub.onTransact (IActivityManager.java:1953) + + +2021/01/17 - reported exactly once on an unknown Android 9 device with +version 24 of SimpleSSHD. A mystery I will leave unless it recurs. diff --git a/_other/crash.20201225 b/_other/crash.20201225 new file mode 100644 index 0000000..b57e548 --- /dev/null +++ b/_other/crash.20201225 @@ -0,0 +1,33 @@ +java.lang.UnsatisfiedLinkError: + at java.lang.Runtime.loadLibrary0 (Runtime.java:1016) + at java.lang.System.loadLibrary (System.java:1669) + at org.galexander.sshd.SimpleSSHDService. (SimpleSSHDService.java:185) + at org.galexander.sshd.SimpleSSHDService.is_started (SimpleSSHDService.java:86) + at org.galexander.sshd.SimpleSSHD.update_startstop_prime (SimpleSSHD.java:107) + at org.galexander.sshd.SimpleSSHD.onResume (SimpleSSHD.java:49) + at android.app.Instrumentation.callActivityOnResume (Instrumentation.java:1412) + at android.app.Activity.performResume (Activity.java:7302) + at android.app.ActivityThread.performResumeActivity (ActivityThread.java:3776) + at android.app.ActivityThread.handleResumeActivity (ActivityThread.java:3816) + at android.app.servertransaction.ResumeActivityItem.execute (ResumeActivityItem.java:51) + at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:145) + at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:70) + at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1808) + at android.os.Handler.dispatchMessage (Handler.java:106) + at android.os.Looper.loop (Looper.java:193) + at android.app.ActivityThread.main (ActivityThread.java:6669) + at java.lang.reflect.Method.invoke (Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:518) + at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) + + +2021/01/17 - This has been reported from two different users, both on +OnePlus3 phone running Android 9. It was reported both with version 16 +and 24 of SimpleSSHD. It seems to be from where SimpleSSHDService tries +to load simplesshd-jni, which is the core JNI for the whole thing and the +only one that is linked in the normal way. It is a normal processor +(snapdragon 820). + +Since it's just the one kind of phone, I think I'm gonna ignore it. It's +probably some problem with how libc or JNI library is linked, but I can't +imagine what that problem is. diff --git a/_other/crash.20220422 b/_other/crash.20220422 new file mode 100644 index 0000000..8b77330 --- /dev/null +++ b/_other/crash.20220422 @@ -0,0 +1,32 @@ +This crash happened 26 times to only one user, who seems to be able to +use the app since it keeps happening. A Pixel 6 Pro with Android 12L. +There are two other crashes that look the same to me, on Pixel 5 Android +12L, and on Galaxy S21+ Android 12. So it may be an Android 12 issue. + +Not sure if I've put too much blocking crap in do_startservice() or if +Android is starving us of CPU and it's impossible to satisfy the +requirement. + + +android.app.RemoteServiceException$ForegroundServiceDidNotStartInTimeException: + at android.app.ActivityThread.generateForegroundServiceDidNotStartInTimeException (ActivityThread.java:1965) + at android.app.ActivityThread.throwRemoteServiceException (ActivityThread.java:1936) + at android.app.ActivityThread.access$2700 (ActivityThread.java:256) + at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2190) + at android.os.Handler.dispatchMessage (Handler.java:106) + at android.os.Looper.loopOnce (Looper.java:201) + at android.os.Looper.loop (Looper.java:288) + at android.app.ActivityThread.main (ActivityThread.java:7870) + at java.lang.reflect.Method.invoke (Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548) + at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1003) +Caused by: android.app.StackTrace: + at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1876) + at android.app.ContextImpl.startForegroundService (ContextImpl.java:1831) + at android.content.ContextWrapper.startForegroundService (ContextWrapper.java:779) + at android.content.ContextWrapper.startForegroundService (ContextWrapper.java:779) + at org.galexander.sshd.SimpleSSHDService.do_startService (SimpleSSHDService.java:226) + at org.galexander.sshd.StopReceiver.onReceive (StopReceiver.java:9) + at android.app.ActivityThread.handleReceiver (ActivityThread.java:4375) + at android.app.ActivityThread.access$1600 (ActivityThread.java:256) + at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2102) diff --git a/_other/crash.20220424 b/_other/crash.20220424 new file mode 100644 index 0000000..be8ba67 --- /dev/null +++ b/_other/crash.20220424 @@ -0,0 +1,12 @@ +Happened to 6 different people one time each, on Android 9 and Android +11, on 5 different phones, all when the app was supposed to be in the +foreground. Not sure what it could mean. + +android.app.RemoteServiceException: + at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2012) + at android.os.Handler.dispatchMessage (Handler.java:106) + at android.os.Looper.loop (Looper.java:223) + at android.app.ActivityThread.main (ActivityThread.java:7868) + at java.lang.reflect.Method.invoke (Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:592) + at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:981) diff --git a/_other/dump-20190804 b/_other/dump-20190804 new file mode 100644 index 0000000..067e965 --- /dev/null +++ b/_other/dump-20190804 @@ -0,0 +1,503 @@ +starting dropbear +[10627] Aug 04 18:18:56 Not backgrounding +server select in +server select out (1) +server select in +[10650] Aug 04 18:19:06 Child connection from 192.168.1.72:59362 +[10650] Aug 04 18:19:06 Pubkey auth succeeded for 'user' with key md5 0f:fb:35:79:cf:36:50:18:c8:0a:6d:8b:7c:be:27:a8 from 192.168.1.72:59362 +server select out (1) +server select in +[10650] Aug 04 18:19:09 Exit (user): Disconnect received +server select out (1) +Aiee, segfault! You should probably report this as a bug to the developer +sp=0000007FED323B00 +fault_address=00000007FFD3454C +pc=00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +r0=00000007FFD34554 +r1=00000007FFD3454C +r2=0000000000000001 +r3=0000000070100000 +r4=0000000070100001 +r5=0000000000000000 +r6=0000000000000001 +r7=00000000000000D8 +r8=00000007FFD34550 +r9=0000000000000001 +r10=0000000000000001 +r11=0000000000000001 +r12=0000000000000001 +r13=0000000000000001 +r14=0000000000000001 +r15=0000000000009669 +r16=0000000000004B34 +r17=0000000000000000 +r18=0000000000000001 +r19=00000078C91A3A00 +r20=0000000000000004 +r21=0000000000000000 +r22=0000000000000000 +r23=00000078C91A3AE0 +r24=00000078DE248AF0 +r25=00000078DB854640 +r26=000000797167C000 +r27=0000000000000018 +r28=0000000000000020 +r29=0000007FED323B20 +r30=00000078DB84FAA4 +stack: +00000078CEA86AF8 (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000078CEA869FC (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000061A8B6DA90 (f /system/bin/app_process64=00000061A8B6B000) +00000079734A47F0 (__kernel_rt_sigreturn=00000079734A47F0) +00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +00000078DB84FAA4 (_ZN9EsxCmdMgr16IssuePendingIB1sE14EsxFlushReasonii=00000078DB84F930) +00000078DB850C3C (_ZN9EsxCmdMgr5FlushE14EsxFlushReason=00000078DB84FCC8) +server select in +00000078DB80EF3C (_ZN10EsxContext7DestroyEv=00000078DB80EF08) +00000078DB81F0D8 (_ZN10EglContext17DestroyEsxContextEv=00000078DB81F090) +00000078DB81EFFC (_ZN10EglContext7DestroyEv=00000078DB81EF60) +00000078DB821CA0 (_ZN10EglDisplay25MarkContextListForDestroyEv=00000078DB821BF0) +[10656] Aug 04 18:19:09 Child connection from 192.168.1.72:59364 +00000078DB82151C (_ZN10EglDisplay9TerminateEi=00000078DB821418) +00000078DB82134C (_ZN14EglDisplayList7DestroyEv=00000078DB8211F8) +00000078DB822838 (_ZN10EglDisplay35DestroyStaticListsMutexesAndTlsKeysEv=00000078DB8227C8) +00000078DB6F2F20 (_Z16EsxEntryDestructv=00000078DB6F2F10) +00000078DB854780 (f /system/vendor/lib64/egl/libGLESv2_adreno.so=00000078DB642000) +sigchld +sigchld return from waitpid +server select out (-1) +server select in +[10656] Aug 04 18:19:09 Pubkey auth succeeded for 'user' with key md5 0f:fb:35:79:cf:36:50:18:c8:0a:6d:8b:7c:be:27:a8 from 192.168.1.72:59364 +server select out (1) +server select in +[10656] Aug 04 18:19:10 Exit (user): Disconnect received +Aiee, segfault! You should probably report this as a bug to the developer +sp=0000007FED323B00 +fault_address=00000007FFD3454C +pc=00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +r0=00000007FFD34554 +r1=00000007FFD3454C +r2=0000000000000001 +r3=0000000070100000 +r4=0000000070100001 +r5=0000000000000000 +r6=0000000000000001 +r7=00000000000000D8 +r8=00000007FFD34550 +r9=0000000000000001 +r10=0000000000000001 +r11=0000000000000001 +r12=0000000000000001 +r13=0000000000000001 +r14=0000000000000001 +r15=0000000000009669 +r16=0000000000004B34 +r17=0000000000000000 +r18=0000000000000001 +r19=00000078C91A3A00 +r20=0000000000000004 +r21=0000000000000000 +r22=0000000000000000 +r23=00000078C91A3AE0 +r24=00000078DE248AF0 +r25=00000078DB854640 +r26=000000797167C000 +r27=0000000000000018 +r28=0000000000000020 +r29=0000007FED323B20 +r30=00000078DB84FAA4 +stack: +00000078CEA86AF8 (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +server select out (1) +00000078CEA869FC (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000061A8B6DA90 (f /system/bin/app_process64=00000061A8B6B000) +00000079734A47F0 (__kernel_rt_sigreturn=00000079734A47F0) +00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +00000078DB84FAA4 (_ZN9EsxCmdMgr16IssuePendingIB1sE14EsxFlushReasonii=00000078DB84F930) +00000078DB850C3C (_ZN9EsxCmdMgr5FlushE14EsxFlushReason=00000078DB84FCC8) +00000078DB80EF3C (_ZN10EsxContext7DestroyEv=00000078DB80EF08) +00000078DB81F0D8 (_ZN10EglContext17DestroyEsxContextEv=00000078DB81F090) +00000078DB81EFFC (_ZN10EglContext7DestroyEv=00000078DB81EF60) +00000078DB821CA0 (_ZN10EglDisplay25MarkContextListForDestroyEv=00000078DB821BF0) +00000078DB82151C (_ZN10EglDisplay9TerminateEi=00000078DB821418) +00000078DB82134C (_ZN14EglDisplayList7DestroyEv=00000078DB8211F8) +00000078DB822838 (_ZN10EglDisplay35DestroyStaticListsMutexesAndTlsKeysEv=00000078DB8227C8) +00000078DB6F2F20 (_Z16EsxEntryDestructv=00000078DB6F2F10) +00000078DB854780 (f /system/vendor/lib64/egl/libGLESv2_adreno.so=00000078DB642000) +server select in +[10659] Aug 04 18:19:10 Child connection from 192.168.1.72:59366 +sigchld +sigchld return from waitpid +server select out (-1) +server select in +[10659] Aug 04 18:19:10 Pubkey auth succeeded for 'user' with key md5 0f:fb:35:79:cf:36:50:18:c8:0a:6d:8b:7c:be:27:a8 from 192.168.1.72:59366 +server select out (1) +server select in +[10659] Aug 04 18:19:11 Exit (user): Disconnect received +server select out (1) +Aiee, segfault! You should probably report this as a bug to the developer +sp=0000007FED323B00 +fault_address=00000007FFD3454C +pc=00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +r0=00000007FFD34554 +r1=00000007FFD3454C +r2=0000000000000001 +r3=0000000070100000 +r4=0000000070100001 +r5=0000000000000000 +r6=0000000000000001 +r7=00000000000000D8 +r8=00000007FFD34550 +r9=0000000000000001 +r10=0000000000000001 +r11=0000000000000001 +r12=0000000000000001 +r13=0000000000000001 +r14=0000000000000001 +r15=0000000000009669 +r16=0000000000004B34 +r17=0000000000000000 +r18=0000000000000001 +r19=00000078C91A3A00 +r20=0000000000000004 +r21=0000000000000000 +r22=0000000000000000 +r23=00000078C91A3AE0 +r24=00000078DE248AF0 +r25=00000078DB854640 +r26=000000797167C000 +r27=0000000000000018 +r28=0000000000000020 +r29=0000007FED323B20 +r30=00000078DB84FAA4 +stack: +00000078CEA86AF8 (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000078CEA869FC (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000061A8B6DA90 (f /system/bin/app_process64=00000061A8B6B000) +00000079734A47F0 (__kernel_rt_sigreturn=00000079734A47F0) +00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +00000078DB84FAA4 (_ZN9EsxCmdMgr16IssuePendingIB1sE14EsxFlushReasonii=00000078DB84F930) +00000078DB850C3C (_ZN9EsxCmdMgr5FlushE14EsxFlushReason=00000078DB84FCC8) +00000078DB80EF3C (_ZN10EsxContext7DestroyEv=00000078DB80EF08) +00000078DB81F0D8 (_ZN10EglContext17DestroyEsxContextEv=00000078DB81F090) +00000078DB81EFFC (_ZN10EglContext7DestroyEv=00000078DB81EF60) +00000078DB821CA0 (_ZN10EglDisplay25MarkContextListForDestroyEv=00000078DB821BF0) +00000078DB82151C (_ZN10EglDisplay9TerminateEi=00000078DB821418) +00000078DB82134C (_ZN14EglDisplayList7DestroyEv=00000078DB8211F8) +00000078DB822838 (_ZN10EglDisplay35DestroyStaticListsMutexesAndTlsKeysEv=00000078DB8227C8) +00000078DB6F2F20 (_Z16EsxEntryDestructv=00000078DB6F2F10) +00000078DB854780 (f /system/vendor/lib64/egl/libGLESv2_adreno.so=00000078DB642000) +server select in +sigchld +sigchld return from waitpid +[10662] Aug 04 18:19:11 Child connection from 192.168.1.72:59368 +[10662] Aug 04 18:19:11 Pubkey auth succeeded for 'user' with key md5 0f:fb:35:79:cf:36:50:18:c8:0a:6d:8b:7c:be:27:a8 from 192.168.1.72:59368 +server select out (1) +server select in +[10662] Aug 04 18:19:11 Exit (user): Disconnect received +server select out (1) +Aiee, segfault! You should probably report this as a bug to the developer +sp=0000007FED323B00 +fault_address=00000007FFD3454C +pc=00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +r0=00000007FFD34554 +r1=00000007FFD3454C +r2=0000000000000001 +r3=0000000070100000 +r4=0000000070100001 +r5=0000000000000000 +r6=0000000000000001 +r7=00000000000000D8 +r8=00000007FFD34550 +r9=0000000000000001 +r10=0000000000000001 +r11=0000000000000001 +r12=0000000000000001 +r13=0000000000000001 +r14=0000000000000001 +r15=0000000000009669 +r16=0000000000004B34 +r17=0000000000000000 +r18=0000000000000001 +r19=00000078C91A3A00 +r20=0000000000000004 +r21=0000000000000000 +r22=0000000000000000 +r23=00000078C91A3AE0 +r24=00000078DE248AF0 +r25=00000078DB854640 +r26=000000797167C000 +r27=0000000000000018 +r28=0000000000000020 +r29=0000007FED323B20 +r30=00000078DB84FAA4 +stack: +00000078CEA86AF8 (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000078CEA869FC (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000061A8B6DA90 (f /system/bin/app_process64=00000061A8B6B000) +00000079734A47F0 (__kernel_rt_sigreturn=00000079734A47F0) +00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +00000078DB84FAA4 (_ZN9EsxCmdMgr16IssuePendingIB1sE14EsxFlushReasonii=00000078DB84F930) +00000078DB850C3C (_ZN9EsxCmdMgr5FlushE14EsxFlushReason=00000078DB84FCC8) +00000078DB80EF3C (_ZN10EsxContext7DestroyEv=00000078DB80EF08) +00000078DB81F0D8 (_ZN10EglContext17DestroyEsxContextEv=00000078DB81F090) +00000078DB81EFFC (_ZN10EglContext7DestroyEv=00000078DB81EF60) +00000078DB821CA0 (_ZN10EglDisplay25MarkContextListForDestroyEv=00000078DB821BF0) +00000078DB82151C (_ZN10EglDisplay9TerminateEi=00000078DB821418) +00000078DB82134C (_ZN14EglDisplayList7DestroyEv=00000078DB8211F8) +00000078DB822838 (_ZN10EglDisplay35DestroyStaticListsMutexesAndTlsKeysEv=00000078DB8227C8) +00000078DB6F2F20 (_Z16EsxEntryDestructv=00000078DB6F2F10) +00000078DB854780 (f /system/vendor/lib64/egl/libGLESv2_adreno.so=00000078DB642000) +server select in +[10665] Aug 04 18:19:12 Child connection from 192.168.1.72:59370 +sigchld +sigchld return from waitpid +server select out (-1) +server select in +[10665] Aug 04 18:19:12 Pubkey auth succeeded for 'user' with key md5 0f:fb:35:79:cf:36:50:18:c8:0a:6d:8b:7c:be:27:a8 from 192.168.1.72:59370 +server select out (1) +server select in +[10665] Aug 04 18:19:12 Exit (user): Disconnect received +server select out (1) +Aiee, segfault! You should probably report this as a bug to the developer +sp=0000007FED323B00 +fault_address=00000007FFD3454C +pc=00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +r0=00000007FFD34554 +r1=00000007FFD3454C +r2=0000000000000001 +r3=0000000070100000 +r4=0000000070100001 +r5=0000000000000000 +r6=0000000000000001 +r7=00000000000000D8 +r8=00000007FFD34550 +r9=0000000000000001 +r10=0000000000000001 +r11=0000000000000001 +r12=0000000000000001 +r13=0000000000000001 +r14=0000000000000001 +r15=0000000000009669 +r16=0000000000004B34 +r17=0000000000000000 +r18=0000000000000001 +r19=00000078C91A3A00 +r20=0000000000000004 +r21=0000000000000000 +r22=0000000000000000 +r23=00000078C91A3AE0 +r24=00000078DE248AF0 +r25=00000078DB854640 +r26=000000797167C000 +r27=0000000000000018 +r28=0000000000000020 +r29=0000007FED323B20 +r30=00000078DB84FAA4 +stack: +00000078CEA86AF8 (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000078CEA869FC (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000061A8B6DA90 (f /system/bin/app_process64=00000061A8B6B000) +00000079734A47F0 (__kernel_rt_sigreturn=00000079734A47F0) +00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +00000078DB84FAA4 (_ZN9EsxCmdMgr16IssuePendingIB1sE14EsxFlushReasonii=00000078DB84F930) +00000078DB850C3C (_ZN9EsxCmdMgr5FlushE14EsxFlushReason=00000078DB84FCC8) +00000078DB80EF3C (_ZN10EsxContext7DestroyEv=00000078DB80EF08) +00000078DB81F0D8 (_ZN10EglContext17DestroyEsxContextEv=00000078DB81F090) +00000078DB81EFFC (_ZN10EglContext7DestroyEv=00000078DB81EF60) +00000078DB821CA0 (_ZN10EglDisplay25MarkContextListForDestroyEv=00000078DB821BF0) +00000078DB82151C (_ZN10EglDisplay9TerminateEi=00000078DB821418) +00000078DB82134C (_ZN14EglDisplayList7DestroyEv=00000078DB8211F8) +00000078DB822838 (_ZN10EglDisplay35DestroyStaticListsMutexesAndTlsKeysEv=00000078DB8227C8) +00000078DB6F2F20 (_Z16EsxEntryDestructv=00000078DB6F2F10) +00000078DB854780 (f /system/vendor/lib64/egl/libGLESv2_adreno.so=00000078DB642000) +sigchld +sigchld return from waitpid +server select in +[10669] Aug 04 18:19:12 Child connection from 192.168.1.72:59372 +[10669] Aug 04 18:19:12 Pubkey auth succeeded for 'user' with key md5 0f:fb:35:79:cf:36:50:18:c8:0a:6d:8b:7c:be:27:a8 from 192.168.1.72:59372 +server select out (1) +server select in +[10669] Aug 04 18:19:12 Exit (user): Disconnect received +server select out (1) +Aiee, segfault! You should probably report this as a bug to the developer +sp=0000007FED323B00 +fault_address=00000007FFD3454C +pc=00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +r0=00000007FFD34554 +r1=00000007FFD3454C +r2=0000000000000001 +r3=0000000070100000 +r4=0000000070100001 +r5=0000000000000000 +r6=0000000000000001 +r7=00000000000000D8 +r8=00000007FFD34550 +r9=0000000000000001 +r10=0000000000000001 +r11=0000000000000001 +r12=0000000000000001 +r13=0000000000000001 +r14=0000000000000001 +r15=0000000000009669 +r16=0000000000004B34 +r17=0000000000000000 +r18=0000000000000001 +r19=00000078C91A3A00 +r20=0000000000000004 +r21=0000000000000000 +r22=0000000000000000 +r23=00000078C91A3AE0 +r24=00000078DE248AF0 +r25=00000078DB854640 +r26=000000797167C000 +r27=0000000000000018 +r28=0000000000000020 +r29=0000007FED323B20 +r30=00000078DB84FAA4 +stack: +00000078CEA86AF8 (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000078CEA869FC (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000061A8B6DA90 (f /system/bin/app_process64=00000061A8B6B000) +00000079734A47F0 (__kernel_rt_sigreturn=00000079734A47F0) +00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +00000078DB84FAA4 (_ZN9EsxCmdMgr16IssuePendingIB1sE14EsxFlushReasonii=00000078DB84F930) +00000078DB850C3C (_ZN9EsxCmdMgr5FlushE14EsxFlushReason=00000078DB84FCC8) +00000078DB80EF3C (_ZN10EsxContext7DestroyEv=00000078DB80EF08) +00000078DB81F0D8 (_ZN10EglContext17DestroyEsxContextEv=00000078DB81F090) +00000078DB81EFFC (_ZN10EglContext7DestroyEv=00000078DB81EF60) +00000078DB821CA0 (_ZN10EglDisplay25MarkContextListForDestroyEv=00000078DB821BF0) +00000078DB82151C (_ZN10EglDisplay9TerminateEi=00000078DB821418) +00000078DB82134C (_ZN14EglDisplayList7DestroyEv=00000078DB8211F8) +00000078DB822838 (_ZN10EglDisplay35DestroyStaticListsMutexesAndTlsKeysEv=00000078DB8227C8) +00000078DB6F2F20 (_Z16EsxEntryDestructv=00000078DB6F2F10) +00000078DB854780 (f /system/vendor/lib64/egl/libGLESv2_adreno.so=00000078DB642000) +server select in +[10672] Aug 04 18:19:12 Child connection from 192.168.1.72:59374 +sigchld +sigchld return from waitpid +server select out (-1) +server select in +[10672] Aug 04 18:19:12 Pubkey auth succeeded for 'user' with key md5 0f:fb:35:79:cf:36:50:18:c8:0a:6d:8b:7c:be:27:a8 from 192.168.1.72:59374 +server select out (1) +server select in +[10672] Aug 04 18:19:13 Exit (user): Disconnect received +server select out (1) +Aiee, segfault! You should probably report this as a bug to the developer +sp=0000007FED323B00 +fault_address=00000007FFD3454C +pc=00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +r0=00000007FFD34554 +r1=00000007FFD3454C +r2=0000000000000001 +r3=0000000070100000 +r4=0000000070100001 +r5=0000000000000000 +r6=0000000000000001 +r7=00000000000000D8 +r8=00000007FFD34550 +r9=0000000000000001 +r10=0000000000000001 +r11=0000000000000001 +r12=0000000000000001 +r13=0000000000000001 +r14=0000000000000001 +r15=0000000000009669 +r16=0000000000004B34 +r17=0000000000000000 +r18=0000000000000001 +r19=00000078C91A3A00 +r20=0000000000000004 +r21=0000000000000000 +r22=0000000000000000 +r23=00000078C91A3AE0 +r24=00000078DE248AF0 +r25=00000078DB854640 +r26=000000797167C000 +r27=0000000000000018 +r28=0000000000000020 +r29=0000007FED323B20 +r30=00000078DB84FAA4 +stack: +00000078CEA86AF8 (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000078CEA869FC (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000061A8B6DA90 (f /system/bin/app_process64=00000061A8B6B000) +00000079734A47F0 (__kernel_rt_sigreturn=00000079734A47F0) +00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +00000078DB84FAA4 (_ZN9EsxCmdMgr16IssuePendingIB1sE14EsxFlushReasonii=00000078DB84F930) +00000078DB850C3C (_ZN9EsxCmdMgr5FlushE14EsxFlushReason=00000078DB84FCC8) +00000078DB80EF3C (_ZN10EsxContext7DestroyEv=00000078DB80EF08) +00000078DB81F0D8 (_ZN10EglContext17DestroyEsxContextEv=00000078DB81F090) +00000078DB81EFFC (_ZN10EglContext7DestroyEv=00000078DB81EF60) +00000078DB821CA0 (_ZN10EglDisplay25MarkContextListForDestroyEv=00000078DB821BF0) +00000078DB82151C (_ZN10EglDisplay9TerminateEi=00000078DB821418) +00000078DB82134C (_ZN14EglDisplayList7DestroyEv=00000078DB8211F8) +00000078DB822838 (_ZN10EglDisplay35DestroyStaticListsMutexesAndTlsKeysEv=00000078DB8227C8) +00000078DB6F2F20 (_Z16EsxEntryDestructv=00000078DB6F2F10) +00000078DB854780 (f /system/vendor/lib64/egl/libGLESv2_adreno.so=00000078DB642000) +server select in +[10675] Aug 04 18:19:13 Child connection from 192.168.1.72:59376 +sigchld +sigchld return from waitpid +server select out (-1) +server select in +[10675] Aug 04 18:19:13 Pubkey auth succeeded for 'user' with key md5 0f:fb:35:79:cf:36:50:18:c8:0a:6d:8b:7c:be:27:a8 from 192.168.1.72:59376 +server select out (1) +server select in +[10675] Aug 04 18:19:13 Exit (user): Disconnect received +Aiee, segfault! You should probably report this as a bug to the developer +sp=0000007FED323B00 +fault_address=00000007FFD3454C +pc=00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +r0=00000007FFD34554 +r1=00000007FFD3454C +r2=0000000000000001 +r3=0000000070100000 +r4=0000000070100001 +r5=0000000000000000 +r6=0000000000000001 +r7=00000000000000D8 +r8=00000007FFD34550 +r9=0000000000000001 +r10=0000000000000001 +r11=0000000000000001 +r12=0000000000000001 +r13=0000000000000001 +r14=0000000000000001 +r15=0000000000009669 +r16=0000000000004B34 +r17=0000000000000000 +r18=0000000000000001 +r19=00000078C91A3A00 +r20=0000000000000004 +r21=0000000000000000 +r22=0000000000000000 +r23=00000078C91A3AE0 +r24=00000078DE248AF0 +r25=00000078DB854640 +r26=000000797167C000 +r27=0000000000000018 +r28=0000000000000020 +r29=0000007FED323B20 +r30=00000078DB84FAA4 +stack: +00000078CEA86AF8 (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000078CEA869FC (f /data/app/org.galexander.sshd-T8u2XjV_9MO9tmjVSkhk-w==/lib/arm64/libsimplesshd-jni.so=00000078CEA4A000) +00000061A8B6DA90 (f /system/bin/app_process64=00000061A8B6B000) +00000079734A47F0 (__kernel_rt_sigreturn=00000079734A47F0) +00000078DB95C750 (_ZN10A5xContext8HwAddNopEPjj=00000078DB95C710) +00000078DB84FAA4 (_ZN9EsxCmdMgr16IssuePendingIB1sE14EsxFlushReasonii=00000078DB84F930) +00000078DB850C3C (_ZN9EsxCmdMgr5FlushE14EsxFlushReason=00000078DB84FCC8) +00000078DB80EF3C (_ZN10EsxContext7DestroyEv=00000078DB80EF08) +00000078DB81F0D8 (_ZN10EglContext17DestroyEsxContextEv=00000078DB81F090) +00000078DB81EFFC (_ZN10EglContext7DestroyEv=00000078DB81EF60) +00000078DB821CA0 (_ZN10EglDisplay25MarkContextListForDestroyEv=00000078DB821BF0) +00000078DB82151C (_ZN10EglDisplay9TerminateEi=00000078DB821418) +00000078DB82134C (_ZN14EglDisplayList7DestroyEv=00000078DB8211F8) +00000078DB822838 (_ZN10EglDisplay35DestroyStaticListsMutexesAndTlsKeysEv=00000078DB8227C8) +00000078DB6F2F20 (_Z16EsxEntryDestructv=00000078DB6F2F10) +00000078DB854780 (f /system/vendor/lib64/egl/libGLESv2_adreno.so=00000078DB642000) +sigchld +sigchld return from waitpid +server select out (-1) +server select in diff --git a/_other/proguard-rules.pro b/_other/proguard-rules.pro new file mode 100644 index 0000000..357939e --- /dev/null +++ b/_other/proguard-rules.pro @@ -0,0 +1,7 @@ +# -dontobfuscate +-optimizationpasses 5 + +# Remove Log.d messages +-assumenosideeffects class android.util.Log { + public static int d(...); +} diff --git a/_other/reimer_prochnow-manage_extensions.patch b/_other/reimer_prochnow-manage_extensions.patch new file mode 100644 index 0000000..93dec71 --- /dev/null +++ b/_other/reimer_prochnow-manage_extensions.patch @@ -0,0 +1,259 @@ +diff --git a/.gitignore b/.gitignore +new file mode 100644 +index 0000000..0c83e19 +--- /dev/null ++++ b/.gitignore +@@ -0,0 +1,7 @@ ++obj/ ++dropbear/default_options_guard.h ++.gradle/ ++.vscode/ ++app/build/ ++app/src/main/lib/ ++build/ +diff --git a/app/build.gradle b/app/build.gradle +index d045336..980d396 100644 +--- a/app/build.gradle ++++ b/app/build.gradle +@@ -1,7 +1,10 @@ + apply plugin: 'com.android.application' + +-def keyprops=new Properties() +-keyprops.load(new FileInputStream(rootProject.file("keystore.properties"))) ++def keystoreProperties = new Properties() ++def keystorePropertiesFile = rootProject.file("keystore.properties") ++if (keystorePropertiesFile.exists()) { ++ keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) ++} + + android { + compileSdkVersion 30 +@@ -14,28 +17,42 @@ android { + } + + signingConfigs { +- release { +- keyAlias keyprops['keyAlias'] +- keyPassword keyprops['keyPassword'] +- storeFile file(keyprops['storeFile']) +- storePassword keyprops['storePassword'] +- } ++ release { ++ if (keystorePropertiesFile.exists()) { ++ keyAlias keystoreProperties['keyAlias'] ++ keyPassword keystoreProperties['keyPassword'] ++ storeFile file(keystoreProperties['storeFile']) ++ storePassword keystoreProperties['storePassword'] ++ } else { ++ println("key.properties not found") ++ } ++ } + } + + defaultConfig { + applicationId "org.galexander.sshd" +- minSdkVersion 17 +- targetSdkVersion 29 ++ minSdkVersion 29 ++ targetSdkVersion 30 + +- versionCode 27 +- versionName "27" ++ versionCode 28 ++ versionName "28" + } + + buildTypes { + release { +- signingConfig signingConfigs.release +- minifyEnabled false +- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' ++ if (keystorePropertiesFile.exists()) { ++ signingConfig signingConfigs.release ++ println "Signing with key.properties" ++ } else { ++ signingConfig signingConfigs.debug ++ println "Signing with debug keys" ++ } ++ minifyEnabled false ++ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' ++ } ++ debug { ++ applicationIdSuffix ".debug" ++ debuggable true + } + } + } +diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml +index 55b171e..4360259 100644 +--- a/app/src/main/AndroidManifest.xml ++++ b/app/src/main/AndroidManifest.xml +@@ -1,8 +1,11 @@ + +- + +- ++ ++ ++ + + + +@@ -10,8 +13,7 @@ + + ++ android:usesCleartextTraffic="true"> + + +diff --git a/app/src/main/java/org/galexander/sshd/SimpleSSHD.java b/app/src/main/java/org/galexander/sshd/SimpleSSHD.java +index 3e8fc0e..dc2cbad 100644 +--- a/app/src/main/java/org/galexander/sshd/SimpleSSHD.java ++++ b/app/src/main/java/org/galexander/sshd/SimpleSSHD.java +@@ -2,6 +2,7 @@ package org.galexander.sshd; + + import android.app.Activity; + import android.app.AlertDialog; ++import android.os.Build; + import android.os.Bundle; + import android.content.Context; + import android.content.SharedPreferences; +@@ -37,6 +38,7 @@ public class SimpleSSHD extends Activity + public static String app_private = null; + private UpdaterThread updater = null; + public static boolean is_tv = false; ++ final static int APP_STORAGE_ACCESS_REQUEST_CODE = 2296; // Any value + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +@@ -319,7 +321,7 @@ public class SimpleSSHD extends Activity + } + + private void permission_startup() { +- if (android.os.Build.VERSION.SDK_INT < 23) { ++ if (Build.VERSION.SDK_INT < 23) { + return; + } + if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { +@@ -328,7 +330,7 @@ public class SimpleSSHD extends Activity + if (Prefs.get_requested()) { /* already asked once */ + return; + } +- requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); ++ requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.MANAGE_EXTERNAL_STORAGE}, 1); + } + + private void toast(String s) { +@@ -336,16 +338,58 @@ public class SimpleSSHD extends Activity + } + + private void permission_menu() { +- if (android.os.Build.VERSION.SDK_INT < 23) { ++ if (Build.VERSION.SDK_INT < 23) { + toast("Your phone uses an Android version that grants external storage access by default."); + return; + } +- if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { +- toast("External storage permission already granted."); +- return; +- } +- requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); ++ requestPermission(); ++/* if (Build.VERSION.SDK_INT >= 30) { ++ Intent intent = new Intent(); ++ intent.setAction(android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); ++ Uri uri = Uri.fromParts("package", this.getPackageName(), null); ++ intent.setData(uri); ++ startActivity(intent); ++ } else { ++ if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { ++ toast("External storage permission already granted."); ++ return; ++ } ++ requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); ++ }*/ + } ++ // The below method can be used for requesting a permission in android 11 or below ++ private void requestPermission() { ++ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { ++ try { ++ Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); ++ intent.addCategory("android.intent.category.DEFAULT"); ++ intent.setData(Uri.parse(String.format("package:%s",getApplicationContext().getPackageName()))); ++ startActivityForResult(intent, APP_STORAGE_ACCESS_REQUEST_CODE); ++ } catch (Exception e) { ++ Intent intent = new Intent(); ++ intent.setAction(android.provider.Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); ++ startActivityForResult(intent, APP_STORAGE_ACCESS_REQUEST_CODE); ++ } ++ } else { ++ //below android 11 ++ requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); ++ } ++ } ++ ++ // Handling permission callback for Android 11 or above versions ++ protected void onActivityResult(int requestCode, int resultCode, Intent data) { ++ super.onActivityResult(requestCode, resultCode, data); ++ if (requestCode == APP_STORAGE_ACCESS_REQUEST_CODE) { ++ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { ++ if ( android.os.Environment.isExternalStorageManager()) { ++ toast("External"); ++ // perform action when allow permission success ++ } else { ++ toast("Allow permission for storage access!"); ++ } ++ } ++ } ++ } + + public void onRequestPermissionsResult(int code, String[] perms, int[] results) { + Prefs.set_requested(); /* whatever result, don't ask again */ +diff --git a/doit b/doit +index 8e9b779..ed72072 100755 +--- a/doit ++++ b/doit +@@ -9,7 +9,7 @@ instlib() { + } + + [ dropbear/default_options.h -nt dropbear/default_options_guard.h ] && dropbear/ifndef_wrapper.sh < dropbear/default_options.h > dropbear/default_options_guard.h +-~/Android/Sdk/ndk-bundle/ndk-build -j8 && ++${ANDROID_HOME}/ndk-bundle/ndk-build -j8 && + mkdir -p app/src/main/lib/armeabi-v7a && + instlib scp libscp.so && + instlib sftp-server libsftp-server.so && +diff --git a/java b/java +deleted file mode 120000 +index e19930e..0000000 +--- a/java ++++ /dev/null +@@ -1 +0,0 @@ +-app/src/main/java/org/galexander/sshd/ +\ No newline at end of file +diff --git a/keystore.properties b/keystore.properties +deleted file mode 120000 +index e4aa0b9..0000000 +--- a/keystore.properties ++++ /dev/null +@@ -1 +0,0 @@ +-/home/greg/.android/keystore.properties +\ No newline at end of file +diff --git a/local.properties b/local.properties +index 6d01e43..ddc6676 100644 +--- a/local.properties ++++ b/local.properties +@@ -5,5 +5,6 @@ + # For customization when using a Version Control System, please read the + # header note. + #Sun May 26 20:02:34 EDT 2019 +-ndk.dir=/home/greg/Android/Sdk/ndk-bundle +-sdk.dir=/home/greg/Android/Sdk ++# uses ANDROID_HOME ++#ndk.dir=/home/greg/Android/Sdk/ndk-bundle ++#sdk.dir=/home/greg/Android/Sdk diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..0f22071 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,41 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 33 + ndkVersion '21.3.6528147' + + sourceSets { + main { + jniLibs.srcDirs 'src/main/lib' + } + } + + defaultConfig { + applicationId "org.galexander.sshd" + minSdkVersion 17 + targetSdkVersion 30 + + versionCode 27 + versionName "27" + } + + buildTypes { + release { + minifyEnabled true + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + lintOptions { + abortOnError false + } + + compileOptions { + targetCompatibility 1.8 + sourceCompatibility 1.8 + } +} +dependencies { + implementation 'com.android.support:support-compat:28.0.0' +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..58f007f --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/org/galexander/sshd/BootReceiver.java b/app/src/main/java/org/galexander/sshd/BootReceiver.java new file mode 100644 index 0000000..9d18263 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/BootReceiver.java @@ -0,0 +1,15 @@ +package org.galexander.sshd; + +import android.content.BroadcastReceiver; +import android.content.Intent; +import android.content.Context; + +public class BootReceiver extends BroadcastReceiver { + public void onReceive(Context context, Intent intent) { + Prefs.init(context); + if (Prefs.get_onboot()) { + SimpleSSHDService.do_startService(context, + /*stop=*/false); + } + } +} diff --git a/app/src/main/java/org/galexander/sshd/DocActivity.java b/app/src/main/java/org/galexander/sshd/DocActivity.java new file mode 100644 index 0000000..b43ad69 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/DocActivity.java @@ -0,0 +1,26 @@ +package org.galexander.sshd; + +import android.app.Activity; +import android.os.Bundle; +import android.webkit.WebView; + +public class DocActivity extends Activity +{ + public static final String url = "http://www.galexander.org/software/simplesshd"; + private WebView wv; + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.doc); + wv = (WebView)findViewById(R.id.docview); + } + + public void onResume() { + super.onResume(); + wv.loadUrl(url); + } + + public void onPause() { + super.onPause(); + } +} diff --git a/app/src/main/java/org/galexander/sshd/DocActivityTV.java b/app/src/main/java/org/galexander/sshd/DocActivityTV.java new file mode 100644 index 0000000..44e1cd1 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/DocActivityTV.java @@ -0,0 +1,5 @@ +package org.galexander.sshd; + +public class DocActivityTV extends DocActivity +{ +} diff --git a/app/src/main/java/org/galexander/sshd/Prefs.java b/app/src/main/java/org/galexander/sshd/Prefs.java new file mode 100644 index 0000000..59638b7 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/Prefs.java @@ -0,0 +1,75 @@ +package org.galexander.sshd; + +import android.content.SharedPreferences; +import android.content.Context; +import android.preference.PreferenceManager; + +public class Prefs { + private static SharedPreferences pref = null; + + public static void init(Context c) { + if(pref == null) { + pref = PreferenceManager.getDefaultSharedPreferences(c); + set_defaults(); + } + } + + public static boolean get_onboot() { + return pref.getBoolean("onboot", true); + } + public static boolean get_foreground() { + return pref.getBoolean("foreground", true); + } + public static boolean get_onopen() { + return pref.getBoolean("onopen", true); + } + public static boolean get_rsyncbuffer() { + return pref.getBoolean("rsyncbuffer", true); + } + public static int get_port() { + try { + return Integer.parseInt(pref.getString("port", "2222")); + } + catch(Exception e) { + return 2222; + } + } + public static String get_ssh_server_password() { + return pref.getString("sshserverpassword", ""); + } + public static String get_path() { + return pref.getString("path", SimpleSSHD.app_private); + } + public static String get_shell() { + return pref.getString("shell", "/system/bin/sh"); + } + public static String get_home() { + return pref.getString("home", SimpleSSHD.app_private); + } + public static String get_extra() { + return pref.getString("extra", ""); + } + public static String get_env() { + return pref.getString("env", ""); + } + public static boolean get_requested() { /* already requested perms */ + return pref.getBoolean("requested", false); + } + public static void set_requested() { + SharedPreferences.Editor edit = pref.edit(); + edit.putBoolean("requested", true); + edit.apply(); + } + + /* NB - other defaults can be filled in by either Prefs or Settings as + * needed */ + private static void set_defaults() { + boolean need_path = (pref.getString("path", null) == null); + boolean need_home = (pref.getString("home", null) == null); + if(!need_path && !need_home) return; + SharedPreferences.Editor edit = pref.edit(); + if(need_path) edit.putString("path", SimpleSSHD.app_private); + if(need_home) edit.putString("home", SimpleSSHD.app_private); + edit.apply(); + } +} diff --git a/app/src/main/java/org/galexander/sshd/Settings.java b/app/src/main/java/org/galexander/sshd/Settings.java new file mode 100644 index 0000000..5dc3a44 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/Settings.java @@ -0,0 +1,45 @@ +package org.galexander.sshd; + +import android.os.Build; +import android.os.Bundle; +import android.preference.CheckBoxPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.widget.Toast; + +public class Settings extends PreferenceActivity { + private CheckBoxPreference pref_onboot, pref_foreground; + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.preferences); + + pref_onboot = (CheckBoxPreference)findPreference("onboot"); + pref_foreground = (CheckBoxPreference)findPreference("foreground"); + + Preference.OnPreferenceChangeListener l = + (p, v) -> { + ((CheckBoxPreference)p).setChecked((Boolean) v); + check(); + return false; + }; + pref_onboot.setOnPreferenceChangeListener(l); + pref_foreground.setOnPreferenceChangeListener(l); + } + + public void onResume() { + super.onResume(); + check(); + } + + private void check() { + if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) && + pref_onboot.isChecked() && + !pref_foreground.isChecked()) { + pref_foreground.setChecked(true); + Toast.makeText(this, + "Android Oreo will not start a background service at boot. Forcing foreground.", + Toast.LENGTH_LONG).show(); + } + } +} diff --git a/app/src/main/java/org/galexander/sshd/SimpleSSHD.java b/app/src/main/java/org/galexander/sshd/SimpleSSHD.java new file mode 100644 index 0000000..10e69ec --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/SimpleSSHD.java @@ -0,0 +1,334 @@ +package org.galexander.sshd; + +import android.Manifest; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.text.ClipboardManager; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.Window; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.Collections; +import java.util.List; + +public class SimpleSSHD extends Activity +{ + private static final Object lock = new Object(); + private EditText log_view; + private Button startstop_view; + private TextView ip_view; + public static SimpleSSHD curr = null; + public static String app_private = null; + private UpdaterThread updater = null; + public final boolean is_tv = this instanceof SimpleSSHDTV; + + public void onCreate(Bundle savedInstanceState) { + if(is_tv) requestWindowFeature(Window.FEATURE_NO_TITLE); + super.onCreate(savedInstanceState); + app_private = getFilesDir().toString(); + Prefs.init(this); + setContentView(is_tv ? R.layout.main_tv : R.layout.main); + log_view = (EditText)findViewById(R.id.log); + startstop_view = (Button)findViewById(R.id.startstop); + ip_view = (TextView)findViewById(R.id.ip); + } + + public void onResume() { + super.onResume(); + synchronized (lock) { + curr = this; + } + permission_startup(); + update_startstop_prime(); + updater = new UpdaterThread(); + updater.start(); + ip_view.setText(get_ip(true)); + + if (Prefs.get_onopen() && !SimpleSSHDService.is_started()) { + SimpleSSHDService.do_startService(this, /*stop=*/false); + } + } + + public void onPause() { + synchronized (lock) { + curr = null; + } + updater.interrupt(); + super.onPause(); + } + + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main_menu, menu); + return true; + } + + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.settings: + settings_clicked(null); + return true; + case R.id.copypriv: + copypriv_clicked(null); + return true; + case R.id.resetkeys: + resetkeys_clicked(null); + return true; + case R.id.doc: + doc_clicked(null); + return true; + case R.id.about: + about_clicked(null); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + + /* these can be called as the _clicked() variant on Android TV, or + * through the options menu on regular Android */ + public void settings_clicked(View v) { + startActivity(new Intent(this, Settings.class)); + } + public void copypriv_clicked(View v) { + copy_app_private(); + } + public void resetkeys_clicked(View v) { + reset_keys(); + } + public void doc_clicked(View v) { + try { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(DocActivity.url)); + startActivity(i); + } catch (Exception e) { + startActivity(new Intent(this, (is_tv + ? DocActivityTV.class : DocActivity.class))); + } + } + public void about_clicked(View v) { + AlertDialog.Builder b = new AlertDialog.Builder(this); + b.setCancelable(true); + b.setPositiveButton("OK", (d, w) -> {}); + b.setIcon(android.R.drawable.ic_dialog_info); + b.setTitle("About"); + b.setMessage( + "SimpleSSHD version " + my_version() + + "\ndropbear 2020.81" + + "\nscp/sftp from OpenSSH 6.7p1" + + "\nrsync 3.1.1" + + "\nPGP's mod version: 20230708"); + b.show(); + } + + + private void update_startstop_prime() { + if (SimpleSSHDService.is_started()) { + startstop_view.setText(Prefs.get_onopen() ? "QUIT" : "STOP"); + startstop_view.setTextColor(is_tv ? 0xFFFF6666 : 0xFF881111); + } else { + startstop_view.setText("START"); + startstop_view.setTextColor(is_tv ? 0xFF44FF44 : 0xFF118811); + } + } + + private static void run_on_ui(Runnable r) { + synchronized(lock) { + if(curr != null) curr.runOnUiThread(r); + } + } + + public static void update_startstop() { + run_on_ui(() -> { + synchronized(lock) { + if(curr != null) curr.update_startstop_prime(); + } + }); + } + + public void startstop_clicked(View v) { + boolean already_started = SimpleSSHDService.is_started(); + SimpleSSHDService.do_startService(this, already_started); + if(already_started && Prefs.get_onopen()) finish(); + } + + private void update_log_prime() { + String[] lines = new String[50]; + int curr_line = 0; + boolean wrapped = false; + try { + File f = new File(Prefs.get_path(), "dropbear.err"); + if(f.exists()) { + BufferedReader r = new BufferedReader(new FileReader(f)); + try { + String l; + while((l = r.readLine()) != null) { + lines[curr_line++] = l; + if(curr_line >= lines.length) { + curr_line = 0; + wrapped = true; + } + } + } + finally { + r.close(); + } + } + } + catch(Exception ignored) { } + int i; + i = (wrapped ? curr_line : 0); + String output = ""; + do { + output = output + lines[i] + "\n"; + i++; + i %= lines.length; + } while (i != curr_line); + log_view.setText(output); + log_view.setSelection(output.length()); + } + + public static void update_log() { + run_on_ui(() -> { + synchronized (lock) { + if(curr != null) curr.update_log_prime(); + } + }); + } + + public static String get_ip(boolean pretty) { + String ret = ""; + int num_ips = 0; + try { + List interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); + for (NetworkInterface intf : interfaces) { + List addrs = Collections.list(intf.getInetAddresses()); + for (InetAddress addr : addrs) { + String ip = addr.getHostAddress(); + if (!addr.isLoopbackAddress() && + !ip.startsWith("fe80")) { + int i = ip.indexOf('%'); + if (i != -1) { + ip = ip.substring(0,i); + } + if (!pretty) { + return ip; + } + if (num_ips++ >= 5) { + return ret+"..."; + } + if (num_ips > 1) { + ret += "\n"; + } + ret += "IP: " + ip; + } + } + } + } + catch (Exception ignored) { } // for now swallow exceptions + return ret; + } + + private void copy_app_private() { + new AlertDialog.Builder(this) + .setCancelable(true) + .setPositiveButton("OK", null) + .setNegativeButton("Copy", + (d, w) -> { + ClipboardManager cl = (ClipboardManager) + getSystemService( + Context.CLIPBOARD_SERVICE); + if (cl != null) { + cl.setText(app_private); + } + }) + .setIcon(android.R.drawable.ic_dialog_info) + .setTitle("App-private path") + .setMessage(app_private) + .show(); + } + + private void do_reset_keys() { + new File(Prefs.get_path(), "authorized_keys").delete(); + } + + private void reset_keys() { + AlertDialog.Builder b = new AlertDialog.Builder(this); + b.setCancelable(true); + b.setPositiveButton("Yes", (d, w) -> do_reset_keys()); + b.setNegativeButton("No", null); + b.setIcon(android.R.drawable.ic_dialog_alert); + b.setTitle("Reset Keys"); + b.setMessage("Delete the authorized_keys file? (then you will only be able to login with single-use passwords)"); + b.show(); + } + + public String my_version() { + try { + return getPackageManager().getPackageInfo(getPackageName(), 0).versionName; + } + catch(Exception e) { + return "UNKNOWN"; + } + } + + public boolean areStoragePermissionsGranted() { + // EITHER Android < 6 + // OR storage permissions granted on Android 6-10 + // OR all-files permissions granted on Android 11+ + return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || + (Build.VERSION.SDK_INT < Build.VERSION_CODES.R && + checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) || + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && Environment.isExternalStorageManager()); + } + + public void requestStoragePermissions() { + if(Build.VERSION.SDK_INT < Build.VERSION_CODES.R) + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); + else { + // with Android >= 11, by having this signature permission granted by user, we can access all files (both read and write, even external sd and usb drives) + Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + getPackageName())); + startActivityForResult(intent, 0); + } + } + + private void permission_startup() { + if(!areStoragePermissionsGranted()) requestStoragePermissions(); + } + + private void toast(String s) { + Toast.makeText(this, s, Toast.LENGTH_LONG).show(); + } + + public void onRequestPermissionsResult(int code, String[] perms, int[] results) { + Prefs.set_requested(); /* whatever result, don't ask again */ + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if(requestCode == 0) { + if(!areStoragePermissionsGranted()) { + toast("Storage permissions not granted, exiting..."); + finishAffinity(); + } + } + } +} diff --git a/app/src/main/java/org/galexander/sshd/SimpleSSHDService.java b/app/src/main/java/org/galexander/sshd/SimpleSSHDService.java new file mode 100644 index 0000000..1a62565 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/SimpleSSHDService.java @@ -0,0 +1,263 @@ +package org.galexander.sshd; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Intent; +import android.content.Context; +import android.os.Build; +import android.os.IBinder; +import android.widget.RemoteViews; +import android.widget.Toast; +import android.support.v4.app.NotificationCompat; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.util.List; + +public class SimpleSSHDService extends Service { + /* if restarting twice within 10 seconds, give up */ + private static final int MIN_DURATION = 10000; + + private static final Object lock = new Object(); + private static int sshd_pid = 0; + private static long sshd_when = 0; + private static long sshd_duration = 0; + private static boolean foregrounded = false; + private static String libdir = null; + + public void onCreate() { + super.onCreate(); + + Prefs.init(this); + + read_pidfile(); + + stop_sshd(); /* it would be stale anyways */ + } + + public int onStartCommand(Intent intent, int flags, int startId) { + libdir = getApplicationInfo().nativeLibraryDir; + if ((intent == null) || + (!intent.getBooleanExtra("stop", false))) { + do_start(); + do_foreground(); + return START_STICKY; + } else { + stop_sshd(); + stop_service(); + SimpleSSHD.update_startstop(); + return START_NOT_STICKY; + } + } + + public IBinder onBind(Intent intent) { + return null; + } + + /* unfortunately, android doesn't reliably call this when, i.e., + * the package is upgraded... so it's really pretty useless */ + public void onDestroy() { + stop_sshd(); + stop_service(); + super.onDestroy(); + } + + private void do_foreground() { + foregrounded = Prefs.get_foreground(); + if (foregrounded) { + create_notification_channel(); + + RemoteViews rv = new RemoteViews(getPackageName(), + R.layout.notification); + rv.setImageViewResource(R.id.n_icon, R.drawable.icon); + rv.setTextViewText(R.id.n_text, + "SimpleSSHD listening on " + + SimpleSSHD.get_ip(false) + + ":" + Prefs.get_port()); + PendingIntent pi = PendingIntent.getActivity(this, 0, + new Intent(this, SimpleSSHD.class), + PendingIntent.FLAG_UPDATE_CURRENT); + Notification n = new NotificationCompat.Builder( + this, "main") + .setSmallIcon(R.drawable.notification_icon) + .setTicker("SimpleSSHD") + .setContent(rv) + .setContentIntent(pi) + .setOngoing(true) + .setPriority(NotificationCompat.PRIORITY_LOW) + .setLocalOnly(true) + .setVisibility( + NotificationCompat.VISIBILITY_PUBLIC) + .build(); + startForeground(1, n); + } + } + + private void create_notification_channel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel nc = new NotificationChannel( + "main", "SimpleSSHD", + NotificationManager.IMPORTANCE_LOW); + nc.enableLights(false); + nc.enableVibration(false); + nc.setSound(null, null); + getSystemService(NotificationManager.class) + .createNotificationChannel(nc); + } + } + + public static boolean is_started() { + return (sshd_pid != 0); + } + + private static void stop_sshd() { + int pid; + synchronized (lock) { + pid = sshd_pid; + sshd_pid = 0; + } + if (pid != 0) { + kill(pid); + } + } + + private void stop_service() { + stopSelf(); + if (foregrounded) { + stopForeground(true); + foregrounded = false; + } + } + + private static void maybe_restart(int pid) { + boolean do_restart = false; + long now = System.currentTimeMillis(); + synchronized (lock) { + if (sshd_pid == pid) { + sshd_pid = 0; + do_restart = + ((sshd_duration == 0) || + (sshd_when == 0) || + (sshd_duration >= MIN_DURATION) || + ((now-sshd_when) >= MIN_DURATION)); + } + } + if (do_restart) { + do_start(); + } + } + + private static void do_start() { + stop_sshd(); + new File(Prefs.get_path()).mkdirs(); + final int pid = start_sshd(Prefs.get_port(), + Prefs.get_ssh_server_password(), + Prefs.get_path(), Prefs.get_shell(), + Prefs.get_home(), Prefs.get_extra(), + (Prefs.get_rsyncbuffer() ? 1 : 0), + Prefs.get_env(), libdir); + + long now = System.currentTimeMillis(); + if (pid != 0) { + synchronized (lock) { + stop_sshd(); + sshd_pid = pid; + sshd_duration = ((sshd_when != 0) + ? (now - sshd_when) : 0); + sshd_when = now; + } + new Thread(() -> { + waitpid(pid); + maybe_restart(pid); + SimpleSSHD.update_startstop(); + }).start(); + } + SimpleSSHD.update_startstop(); + } + + private static void read_pidfile() { + try { + File f = new File(Prefs.get_path(), "dropbear.pid"); + int pid = 0; + if(f.exists()) { + BufferedReader r = new BufferedReader( + new FileReader(f)); + try { + pid = Integer.parseInt(r.readLine()); + } + finally { + r.close(); + } + } + if(pid != 0) { + synchronized (lock) { + stop_sshd(); + sshd_pid = pid; + sshd_when = 0; + sshd_duration = 0; + } + } + } + catch(Exception ignored) { /* *shrug* */ } + } + + private static native int start_sshd(int port, String sshserverpassword, String path, + String shell, String home, String extra, + int rsyncbuffer, String env, String lib); + private static native void kill(int pid); + private static native int waitpid(int pid); + private static native String api_mkfifo(String path); + static { + System.loadLibrary("simplesshd-jni"); + } + + public static void do_startService(Context ctx, boolean stop) { + if (!stop) api.start(ctx, api_mkfifo(SimpleSSHD.app_private)); + Intent i = new Intent(ctx, SimpleSSHDService.class); + if (stop) { + i.putExtra("stop", true); + } + Prefs.init(ctx); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (Prefs.get_foreground()) { + ctx.startForegroundService(i); + } else if (!(ctx instanceof Activity)) { + Toast.makeText(ctx, +"SimpleSSHD cannot start in background since Oreo (enable Settings -> Foreground Service).", + Toast.LENGTH_LONG).show(); + } else if (is_foreground_app(ctx)) { + ctx.startService(i); + } else { + /* The OS put us in SimpleSSHD.onResume() even + * though it's not ready to put an app activity + * in the foreground yet! Just give up. Maybe + * the OS will try again? */ + } + } else { + ctx.startService(i); + } + } + + /* There's a bug in Android 9 Pie (SDK 28) where onResume() is called + * during wake-up when the OS isn't ready to put the app in the + * foreground, so startService() fails. This should detect that state. + * This code is copy-pasted from stackoverflow, and initially comes from + * a Google bug report on the issue? */ + public static boolean is_foreground_app(Context ctx) { + ActivityManager am = (ActivityManager)ctx.getSystemService( + Context.ACTIVITY_SERVICE); + List procs = + am.getRunningAppProcesses(); + if (procs == null) { + return false; + } + // higher importance has lower number (?) + return (procs.get(0).importance <= + ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND); + } +} diff --git a/app/src/main/java/org/galexander/sshd/SimpleSSHDTV.java b/app/src/main/java/org/galexander/sshd/SimpleSSHDTV.java new file mode 100644 index 0000000..623cbe1 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/SimpleSSHDTV.java @@ -0,0 +1,3 @@ +package org.galexander.sshd; + +public class SimpleSSHDTV extends SimpleSSHD {} diff --git a/app/src/main/java/org/galexander/sshd/StartReceiver.java b/app/src/main/java/org/galexander/sshd/StartReceiver.java new file mode 100644 index 0000000..27cbdc8 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/StartReceiver.java @@ -0,0 +1,11 @@ +package org.galexander.sshd; + +import android.content.BroadcastReceiver; +import android.content.Intent; +import android.content.Context; + +public class StartReceiver extends BroadcastReceiver { + public void onReceive(Context context, Intent intent) { + SimpleSSHDService.do_startService(context, /*stop=*/false); + } +} diff --git a/app/src/main/java/org/galexander/sshd/StopReceiver.java b/app/src/main/java/org/galexander/sshd/StopReceiver.java new file mode 100644 index 0000000..2eedd98 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/StopReceiver.java @@ -0,0 +1,11 @@ +package org.galexander.sshd; + +import android.content.BroadcastReceiver; +import android.content.Intent; +import android.content.Context; + +public class StopReceiver extends BroadcastReceiver { + public void onReceive(Context context, Intent intent) { + SimpleSSHDService.do_startService(context, /*stop=*/true); + } +} diff --git a/app/src/main/java/org/galexander/sshd/UpdaterThread.java b/app/src/main/java/org/galexander/sshd/UpdaterThread.java new file mode 100644 index 0000000..384acc3 --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/UpdaterThread.java @@ -0,0 +1,30 @@ +package org.galexander.sshd; + +import java.io.File; + +public class UpdaterThread extends Thread { + /* poll for changes to the dropbear.err file */ + public void run() { + File f = new File(Prefs.get_path(), "dropbear.err"); + long lastmod = 0; + long lastlen = 0; + for(;;) { + if(isInterrupted()) break; + + if(SimpleSSHD.curr == null) break; + long mod = f.lastModified(); + long len = f.length(); + if((mod != lastmod) || (len != lastlen)) { + SimpleSSHD.update_log(); + lastmod = mod; + lastlen = len; + } + try{ + sleep(1000); + } + catch(InterruptedException e) { + break; + } + } + } +} diff --git a/app/src/main/java/org/galexander/sshd/api.java b/app/src/main/java/org/galexander/sshd/api.java new file mode 100644 index 0000000..13fc39b --- /dev/null +++ b/app/src/main/java/org/galexander/sshd/api.java @@ -0,0 +1,101 @@ +package org.galexander.sshd; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + + +public class api { + private static final AtomicReference curr_thread = new AtomicReference<>(null); + + /* assumes JNI api_mkfifo() has already completed */ + public static void start(final Context ctx, final String fn) { + if (fn == null) return; + if (curr_thread.get() != null) return; + Thread t = new Thread(()->thread_main(ctx, fn)); + if(curr_thread.compareAndSet(null, t)) t.start(); + } + + private static String get_line(FileInputStream fis) throws IOException { + byte[] ret = new byte[512]; + int len = 0; + while (true) { + if (len+5 > ret.length) { + ret = Arrays.copyOf(ret, len+512); + } + int c = fis.read(); + if ((c == -1) || (c == '\n') || (c == 0)) { + return new String(ret, 0, len); + } + ret[len++] = (byte)c; + } + } + + private static String get_command(String fn) { + try { + FileInputStream fis = new FileInputStream(fn); + String ret = get_line(fis); + fis.close(); + return ret; + } catch (Exception e) { + return null; + } + } + + private static List split_string(String s) { + LinkedList ret = new LinkedList(); + int ofs = 0; + final int len = s.length(); + while (ofs < len) { + while ((ofs < len) && + Character.isWhitespace(s.charAt(ofs))) { + ofs++; + } + if (s.startsWith("-- ", ofs)) { + ret.add(s.substring(ofs+3)); + break; + } else if (ofs < len) { + int start = ofs; + while ((ofs < len) && + !Character.isWhitespace(s.charAt(ofs))) { + ofs++; + } + ret.add(s.substring(start, ofs-start)); + } + } + return ret; + } + + private static void parse_command(Context ctx, String s) { + List parms = split_string(s); + Iterator pi = parms.iterator(); + String cmd = pi.next(); + + if (cmd.equals("activity")) { + String url = pi.next(); + Uri uri = (new Uri.Builder()).path(url).build(); + ctx.startActivity(new Intent(Intent.ACTION_VIEW, uri)); + } + } + + private static void thread_main(Context ctx, String fn) { + int nulls = 0; + while (nulls < 5) { /* retry limit */ + String s = get_command(fn); + if (s == null) { + nulls++; + } else { + nulls = 0; + parse_command(ctx, s); + } + } + curr_thread.compareAndSet(Thread.currentThread(), null); + } +} diff --git a/app/src/main/res/drawable/icon.png b/app/src/main/res/drawable/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..224128a3f8288b565dec354d7cba7d0ff63c3801 GIT binary patch literal 4663 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 + + + + diff --git a/app/src/main/res/drawable/tv_button_bg_focused.xml b/app/src/main/res/drawable/tv_button_bg_focused.xml new file mode 100644 index 0000000..ec0abd3 --- /dev/null +++ b/app/src/main/res/drawable/tv_button_bg_focused.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/tv_button_bg_normal.xml b/app/src/main/res/drawable/tv_button_bg_normal.xml new file mode 100644 index 0000000..81f7627 --- /dev/null +++ b/app/src/main/res/drawable/tv_button_bg_normal.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/tvbanner.png b/app/src/main/res/drawable/tvbanner.png new file mode 100644 index 0000000000000000000000000000000000000000..b20f9c96034d6dfa319205b9bd1cb962cf2515b9 GIT binary patch literal 32682 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 b&Pn-yu#!0bLW^IX00000NkvXXu0mjf_N?zJ literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/doc.xml b/app/src/main/res/layout/doc.xml new file mode 100644 index 0000000..d6c02b9 --- /dev/null +++ b/app/src/main/res/layout/doc.xml @@ -0,0 +1,5 @@ + + diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml new file mode 100644 index 0000000..9708520 --- /dev/null +++ b/app/src/main/res/layout/main.xml @@ -0,0 +1,35 @@ + + + + +