251 Commits
Author SHA1 Message Date
Michele Balistreri 793c8eedc9 bump pairing slot count to 100 2025-02-12 09:07:40 +01:00
Michele Balistreri 146c049b45 Merge pull request #89 from status-im/internal-factory-reset
Internal factory reset
2023-06-06 17:03:32 +02:00
Michele Balistreri 86faab3f26 update sdk 2023-06-06 17:02:26 +02:00
Michele Balistreri 44adec536e clear also some ram buffers 2023-06-06 15:26:18 +02:00
Michele Balistreri e79d84b9b4 fix and test factory reset 2023-06-06 14:40:24 +02:00
Michele Balistreri 039964e8d0 implement factory reset 2023-06-06 10:46:46 +02:00
guylouis 4a04bdacec Update README.md with enno wallet mention 2023-05-17 07:40:52 +02:00
Michele Balistreri b21fef0fec Merge pull request #87 from status-im/plausible-deniability
implement plausible deniability
2022-12-02 12:47:18 +01:00
Michele Balistreri 40a4168a17 bump version 2022-12-02 12:33:55 +01:00
Michele Balistreri a2595b35e7 constant time comparison 2022-11-25 10:03:55 +01:00
Michele Balistreri 4956fcc1ee rename alt chain code 2022-11-10 15:48:05 +01:00
Michele Balistreri 509abc291b modify init command 2022-11-10 14:12:02 +01:00
Michele Balistreri b55764bdd7 add tests 2022-11-10 08:13:40 +01:00
Michele Balistreri 8ac2e88383 implement plausble deniability 2022-11-09 13:47:03 +01:00
Michele Balistreri 5bc653c012 Merge pull request #86 from status-im/lazy-derivation
add chain code export and remove derivation caches
2022-11-07 13:10:55 +01:00
Michele Balistreri e71c9d7f49 remove debug code 2022-11-07 12:15:21 +01:00
Michele Balistreri a3aba74ffa move chain code outside pubkey 2022-11-04 10:33:05 +03:00
Michele Balistreri f3e834226f allow export of extended public key 2022-11-03 17:50:18 +03:00
Michele Balistreri e6dc3b8189 make key derivation lazy 2022-11-02 10:55:31 +03:00
Michele Balistreri 9677aefcbb Merge pull request #85 from status-im/ident
implement IDENTIFY CARD
2022-11-02 07:25:18 +01:00
Michele Balistreri 01c46f7009 add identify card command to cash applet 2022-07-26 10:04:10 +02:00
Michele Balistreri a692b6b838 improve tests 2022-07-25 12:49:56 +02:00
Michele Balistreri 44a77dfcb3 implement ident command 2022-07-22 15:21:51 +02:00
Michele Balistreri f1d3d41887 Merge pull request #63 from status-im/pin-puk-minmax-retries
add optional PIN/PUK retry count in INIT
2021-12-08 10:12:30 +03:00
Michele Balistreri bba7d4cb36 improve build and test 2021-12-08 10:11:18 +03:00
Michele Balistreri 6a40687804 add optional PIN/PUK retry count in INIT 2021-12-08 10:09:51 +03:00
Bitgamma f420fd962f Update README.md 2021-03-16 12:45:22 +03:00
Michele Balistreri 1625fe9afe update SDK 2020-11-09 15:46:20 +01:00
Bitgamma 36de0fcc9c Merge pull request #71 from x5engine/patch-1
fix typo
2020-06-16 07:59:44 +03:00
X5 Engine a7b7e5b8bc fix typo 2020-06-16 03:02:53 +01:00
Michele Balistreri a5f64f78dd update sdk 2020-06-02 10:26:57 +03:00
Michele Balistreri 57c72b11aa Merge remote-tracking branch 'origin/master' 2020-04-16 13:49:36 +03:00
Michele Balistreri 677c2347c6 JCOP4 workaround 2020-04-16 13:35:15 +03:00
Bitgamma 4a51855678 Update README.md
closes #66
2020-04-02 10:22:20 +03:00
Bitgamma 81a62bbc93 Update README.md 2020-03-25 09:11:11 +03:00
Bitgamma dd290cd217 Update README.md 2020-03-24 16:38:04 +03:00
Bitgamma e9cfd04800 Update README.md
closes #64
2020-02-17 10:14:42 +03:00
Bitgamma e110c64f83 Merge pull request #60 from status-im/reduce-nvm-writes
JCOP4 compatibility + reduce NVM writes
2020-02-10 14:16:30 +03:00
Michele Balistreri 1d16a82117 JCOP4 workaround (defer initialization) 2020-01-23 19:05:49 +03:00
Michele Balistreri bca030f069 reduce NVM writes 2019-12-23 17:33:49 +01:00
Bitgamma 5908a8b66e Update README.md
Remove WIP for swift sdk
2019-12-16 16:00:01 +01:00
Michele Balistreri 53fabe75c8 use SDK 3.0.0 2019-10-18 13:25:56 +03:00
Bitgamma bdfaf8c9f3 Update README.md 2019-10-18 12:03:30 +03:00
Michele Balistreri 5640e993a4 add manual test for mnemonic loading 2019-10-17 11:00:29 +03:00
Michele Balistreri 4cc3f1576c add data in cash applet 2019-10-16 14:53:36 +03:00
Michele Balistreri 1b716790f0 remove DUPLICATE KEY 2019-10-15 14:54:49 +03:00
Michele Balistreri b9fa61282e fix oneShotAES 2019-09-06 15:43:08 +03:00
Michele Balistreri c53b0cd811 fix key size for native HMAC 2019-09-03 13:49:02 +03:00
Bitgamma fc4120cd0d Merge pull request #57 from status-im/v2.3
continue 2.3 development on main branch
2019-09-02 13:46:56 +03:00
Michele Balistreri a26ed296de use master branch of SDK 2019-09-02 13:45:28 +03:00
Michele Balistreri 7473390715 make simulator work again 2019-09-02 13:30:27 +03:00
Michele Balistreri 5e0bcc8bbb remove deprecated junit plugin 2019-09-02 12:33:10 +03:00
Michele Balistreri 08be5158da use newer SDK 2019-08-14 10:58:40 +03:00
guylouis 684566c30b Update README.md
Added link to the Swift SDK repo
2019-07-10 10:29:02 +02:00
Michele Balistreri 576cabb04b better SELECT response 2019-06-10 15:11:16 +02:00
Michele Balistreri 5e68adb79e build the cash applet 2019-05-24 11:44:45 +02:00
Michele Balistreri 09c725dcb2 add (draft of) cash applet 2019-05-24 09:41:49 +02:00
Michele Balistreri ac3c24852f closes #48 2019-05-15 11:49:46 +02:00
Michele Balistreri 3e49fe9626 test GET DATA + STORE DATA 2019-04-09 12:56:54 +03:00
Michele Balistreri 7edee9c594 implement GET DATA + STORE DATA 2019-04-09 10:40:47 +03:00
Michele Balistreri add5da6ce8 use 2.2.1 SDK 2019-04-08 10:34:50 +03:00
Michele Balistreri 29346c0668 add missing 2 bytes when automatically adding length to NDEF 2019-04-05 19:16:00 +03:00
Michele Balistreri 21e9f66798 use key-detecting SDK 2019-04-05 16:18:04 +03:00
Michele Balistreri bb8f89bf58 use released version of 2.2 SDK 2019-04-04 11:41:14 +03:00
Michele Balistreri 6e0a86c300 update version number also in gradle build file 2019-04-04 11:35:13 +03:00
Michele Balistreri 0d650d0838 more tolerant SET NDEF 2019-04-04 11:27:20 +03:00
Bitgamma c574944153 Merge pull request #36 from status-im/pos-enabled
Keycard v2.2
2019-04-04 10:21:40 +03:00
Michele Balistreri 77d0ee8c58 fix secure channel cases 2019-04-01 17:52:16 +03:00
Michele Balistreri 355ee91d2c add sign and derive tests 2019-04-01 17:06:20 +03:00
Michele Balistreri 5bc5e23272 add support for derivation in sign 2019-03-29 14:55:59 +03:00
Michele Balistreri 12481c6f94 add support for pinless sign 2019-03-28 15:04:57 +03:00
Michele Balistreri ec121e477d add pinless path caching 2019-03-28 10:50:29 +03:00
Michele Balistreri 8f1461e33a bump version number 2019-03-26 17:16:20 +03:00
Michele Balistreri c803265ac1 forward the the pairing password setting to the JDK 2019-03-21 09:46:19 +03:00
Michele Balistreri ee12e6e1a3 use newer SDK 2019-03-20 13:26:58 +03:00
Michele Balistreri d803f47b99 make password a parameter 2019-03-20 12:22:19 +03:00
Michele Balistreri 993672565c fix all tests for Ledger 2019-03-18 18:51:32 +03:00
Bitgamma 734347a093 Merge pull request #35 from gravityblast/patch-1
fix application status response length
2019-03-18 17:41:00 +03:00
Andrea Franz 2d366d6e8e fix application status response length 2019-03-18 15:37:54 +01:00
Michele Balistreri 56a6d7dd5e dynamic capability-based test filtering 2019-03-04 14:35:24 +03:00
Michele Balistreri 05d3c5c80f adapt SET PINLESS PATH test 2019-03-04 10:16:29 +03:00
Michele Balistreri 5d94371015 more extensive key derivation/sign/get status testing 2019-02-27 17:38:52 +03:00
Michele Balistreri 4549f9794f partial adaptation for Ledger 2019-02-27 14:28:20 +03:00
Michele Balistreri 8a9d2758bf partial adaptation for Ledger 2019-02-26 15:25:49 +03:00
Michele Balistreri eb73388e21 bring applet to protocol version 2.1 2019-02-12 12:21:40 +03:00
Michele Balistreri ca65db5c71 remove outdated documentation 2019-02-11 16:58:34 +03:00
Bitgamma fe8ecb2b03 Merge pull request #34 from status-im/Keycard-new-readme.md
Update the readme to facilitate keycard onboarding
2019-02-01 13:40:21 +03:00
guylouis c1930f3a11 Update README.md
added intro, link to our documentation site, links to some related repos
2019-02-01 11:16:43 +01:00
Michele Balistreri 8799ed6dc7 call genKeyPair as soon as possible to avoid timeouts on first installation ever on JCOP3 cards. Apparently no "wait" TPDUs are sent when the card does its very first ECC key generation 2018-12-29 11:55:21 +03:00
Michele Balistreri 1f9df5503b version 2.0 2018-12-14 14:26:53 +03:00
Michele Balistreri a33aae5ed5 closes #32 2018-12-14 12:04:30 +03:00
Bitgamma 73b73ffa3c Merge pull request #31 from status-im/unified-sdk
Unified sdk
2018-12-11 12:03:05 +03:00
Michele Balistreri ceaf1ac7b8 use unified SDK 2018-12-11 12:02:32 +03:00
Michele Balistreri 245e26730d use unified SDK 2018-12-11 11:42:17 +03:00
Michele Balistreri 8b9fe48932 use unified sdk 2018-12-10 20:17:04 +03:00
Bitgamma 9209fee228 Merge pull request #30 from status-im/keycard-rename
rename to keycard
2018-12-07 17:18:28 +03:00
Michele Balistreri 2a3f282229 rename to keycard 2018-12-04 16:13:27 +03:00
Michele Balistreri bd018de2ee rename to keycard 2018-12-04 10:20:43 +03:00
Michele Balistreri d4e01ab21b make EXPORT KEY able to derive from other sources 2018-11-30 11:34:05 +03:00
Bitgamma 98ffcda1b8 Merge pull request #28 from status-im/eip-1581
implement EIP-1581
2018-11-30 10:44:16 +03:00
Michele Balistreri a7da5983c2 fix EXPORT KEY without make current 2018-11-30 10:33:12 +03:00
Michele Balistreri cd26da75d3 fix usage of uinitialized keys 2018-11-30 10:01:29 +03:00
Michele Balistreri a0c15da432 add better exception handling 2018-11-30 09:55:49 +03:00
Michele Balistreri b7f9df6383 fix some errors 2018-11-30 09:44:39 +03:00
Michele Balistreri 863ac1d6cf avoid deriving public when not needed, commit only final result 2018-11-29 19:22:14 +03:00
Michele Balistreri 852a7d9f48 remove reference to old usage mode 2018-11-28 17:44:29 +03:00
Michele Balistreri 013d07a079 redesign export key command 2018-11-28 17:22:49 +03:00
Bitgamma 2ff8de6e80 Merge pull request #26 from status-im/backup-restore
implement backup/restore
2018-11-22 18:04:26 +03:00
Michele Balistreri da127a621a clarify format of the exported key 2018-11-22 18:03:19 +03:00
Michele Balistreri bd6448734d implement tests, correct bugs 2018-11-22 17:56:28 +03:00
Michele Balistreri c4c93b9c02 implement duplication 2018-11-21 16:40:48 +03:00
Michele Balistreri 2a72585cbb implement duplication (partial) 2018-11-19 16:50:57 +03:00
Michele Balistreri b00120c637 document the DUPLICATE KEY command 2018-11-19 14:27:36 +03:00
Michele Balistreri 8f811a47f4 remove outdate info, closes #25 2018-11-14 15:28:41 +03:00
Michele Balistreri 2ebb131d8e adds the ability to also configure NDEF record during NDEF applet installation. Needed if we want to ship with tap-to-down feature 2018-11-13 14:29:50 +03:00
Michele Balistreri c5a398e05e Closes #17 2018-11-12 17:28:23 +03:00
Bitgamma 846ab1443b Merge pull request #23 from status-im/set-ndef
Set NDEF
2018-11-12 14:27:58 +03:00
Michele Balistreri 42240ad5a5 make NDEF configurable 2018-11-12 11:09:36 +03:00
Michele Balistreri bc75b75802 make NDEF configurable 2018-11-09 19:41:00 +03:00
Michele Balistreri 178395df52 remove software-based CMAC implementation 2018-11-07 16:18:44 +03:00
Michele Balistreri 97cf00d45c update README 2018-11-07 16:06:22 +03:00
Michele Balistreri bc0cb02eca remove plain data signing, closes #15 2018-11-07 16:02:21 +03:00
Michele Balistreri e78397c198 remove assisted key derivation 2018-11-07 15:17:17 +03:00
Michele Balistreri 22b41ab781 add GENERATE KEY command 2018-11-07 13:56:06 +03:00
Michele Balistreri f83c655524 add key generation command 2018-11-07 12:56:06 +03:00
Bitgamma 643f81b60c Merge pull request #5 from status-im/no-inst-params
Move installation parameters to INIT command
2018-10-10 16:30:48 +03:00
Michele Balistreri 8fbba1817a remove documentation of the old script 2018-10-10 12:58:54 +02:00
Michele Balistreri 5cdbc4c0eb remove outdated script 2018-10-10 12:58:04 +02:00
Michele Balistreri 625f75302b add ability to change PUK and pairing secret 2018-10-10 12:42:34 +02:00
Michele Balistreri 796449023d update documentation 2018-10-10 10:39:51 +02:00
Michele Balistreri c4365c1cef make the PIN an initialization parameter 2018-10-09 16:07:52 +02:00
Michele Balistreri 5e007afb54 move initialization in-applet 2018-10-09 14:57:33 +02:00
Michele Balistreri f71286e7d1 add NDEF applet 2018-10-08 13:18:55 +02:00
Michele Balistreri 7e11327f69 refresh EC keys every 100 SELECT commands 2018-10-08 12:31:47 +02:00
Michele Balistreri 9a8932ca2a correct javadoc 2018-10-08 11:32:51 +02:00
Michele Balistreri 582002b29e add key uid 2018-10-01 15:41:19 +02:00
Michele Balistreri 6a0ca5e260 add remove key command 2018-10-01 10:58:44 +02:00
Michele Balistreri 3c5fd3bfca avoid non-primitive, non-final static references 2018-09-26 15:22:04 +02:00
Michele Balistreri 174675dba8 add unassisted key derivation performance test 2018-09-24 14:18:12 +03:00
Michele Balistreri fde5d12850 implemented EXPORT KEY changes 2018-09-18 11:26:24 +03:00
Michele Balistreri 6af167612e use pairing key generated using PBKDF2 2018-09-14 11:35:47 +03:00
Michele Balistreri 7ed8b803df add performance tests 2018-09-04 15:06:06 +03:00
Michele Balistreri be4bad496e add performance test 2018-09-04 15:04:31 +03:00
Michele Balistreri 8d42005e13 add personalization script 2018-08-14 13:27:52 +03:00
Michele Balistreri c6ecebb057 correct typo 2018-07-18 13:51:16 +03:00
Michele Balistreri 6429c802ed add ux notes 2018-07-18 13:48:00 +03:00
Michele Balistreri 527760d7df decouple pairing secret from PUK 2018-06-25 11:13:06 +02:00
Bitgamma eb233757fc Merge pull request #4 from tista3/master
fixed typos in code documentation and markdown
2018-05-04 12:48:55 +03:00
Timotej Stanek 94c9289b64 fixed typos 2018-05-04 11:26:17 +02:00
Michele Balistreri d98eafd6b6 add application version and PUK retry count to select 2018-04-22 13:39:10 +03:00
Michele Balistreri ae6490c132 Merge remote-tracking branch 'origin/master' 2018-04-22 11:27:32 +03:00
Michele Balistreri 3decb868b5 supports compilation with Java 10 SDK 2018-04-22 11:27:14 +03:00
Jarrad 9224471670 Create LICENSE 2018-01-31 03:28:33 +00:00
Michele Balistreri 6bec9622ef fixed typos in documentation 2018-01-23 14:31:05 +03:00
Michele Balistreri 64ca24fbac add key derivation from parent 2018-01-23 13:41:30 +03:00
Michele Balistreri d475900300 check and fix the S field of the ECDSA signature to avoid malleability 2018-01-19 15:40:36 +03:00
Michele Balistreri e15da6a7e0 add ability to export current public key 2018-01-19 12:04:55 +03:00
Michele Balistreri 404aef15a0 adapt tests 2018-01-19 10:58:36 +03:00
Michele Balistreri ccb1c04c80 Merge branch 'Arachnid-statusfix' 2018-01-19 10:54:46 +03:00
Michele Balistreri c15eef418f fix merge conflict, adapt tests 2018-01-19 10:54:02 +03:00
Michele Balistreri 450938f203 fixing GET STATUS length 2018-01-18 16:53:26 +03:00
Nick Johnson 07c1f9cc42 Make boolean true 0xFF, not 0x01 2018-01-17 15:29:16 +00:00
Nick Johnson b68e7a55ea Update APPLICATION.MD 2018-01-17 13:29:38 +00:00
Nick Johnson 6855e46975 Replace context-specific tags on GET_STATUS with type tags, and fix length 2018-01-17 13:27:33 +00:00
Michele Balistreri 08e657a2c8 make the UID tag context specific too 2018-01-05 18:11:14 +03:00
Michele Balistreri d1b90a872a convert private tags in context-specific or application-specific tags 2018-01-05 16:11:00 +03:00
Michele Balistreri 9f20584df3 add support to gradle to run tests on simulator 2017-12-31 21:16:06 +03:00
Michele Balistreri f3f50b2e17 add support to gradle to run tests on simulator 2017-12-31 21:14:40 +03:00
Michele Balistreri 9003c35fcd add notes regarding cryptography 2017-12-31 20:29:15 +03:00
Michele Balistreri b96f1ea473 add notes for client implementation 2017-12-05 15:02:30 +01:00
Michele Balistreri f8776d6758 add list of card requirements 2017-11-25 11:43:30 +03:00
Michele Balistreri 5a8dcf4888 add missing documentation 2017-11-21 17:02:45 +03:00
Michele Balistreri e04f4c7bc7 implement AES CBC-MAC with a software fallback 2017-11-21 16:21:56 +03:00
Michele Balistreri 9cab2f993a make MAC actually work 2017-11-21 15:46:21 +03:00
Michele Balistreri 9772f17efa implement MAC 2017-11-20 17:42:12 +03:00
Michele Balistreri ca8c61ed5d test pair/unpair 2017-11-20 12:44:37 +03:00
Michele Balistreri d8b862d58d improve MUTUALLY AUTHENTICATE 2017-11-17 17:27:58 +03:00
Michele Balistreri 60f18b7afd Add the MUTUALLY AUTHENTICATE command 2017-11-17 16:12:28 +03:00
Michele Balistreri 09fe778d85 add instance UID 2017-11-15 12:55:41 +03:00
Michele Balistreri a61369d1bc update test to use pairing/unpairing 2017-11-15 12:11:01 +03:00
Michele Balistreri e11d817c64 implement PAIR/UNPAIR 2017-11-14 18:04:22 +03:00
Michele Balistreri 2d63b34afa add PAIR/UNPAIR commands to the specs 2017-11-14 15:50:07 +03:00
Michele Balistreri 868c476ced document test utils 2017-11-04 12:54:31 +03:00
Michele Balistreri 10a429bf6d document Crypto utility class 2017-10-28 19:43:07 +03:00
Michele Balistreri a216b29b97 document SECP256k1 utility class 2017-10-28 19:04:24 +03:00
Michele Balistreri 5bf6f62ac7 fix typo 2017-10-28 18:47:47 +03:00
Michele Balistreri 74594092c8 document SecureChannel 2017-10-28 18:46:56 +03:00
Michele Balistreri 8729768478 add a not about replay attacks 2017-10-28 18:23:17 +03:00
Michele Balistreri 196e91f3ec document main applet class 2017-10-28 18:20:06 +03:00
Michele Balistreri eb27f6c2c4 make README more clear 2017-10-26 16:00:01 +03:00
Michele Balistreri b68c6bd275 implement EXPORT KEY 2017-10-26 14:15:40 +03:00
Michele Balistreri d778080899 implement PIN-less path 2017-10-26 12:11:49 +03:00
Michele Balistreri 5fc82298b8 implement retrieval of current key path 2017-10-25 14:29:13 +03:00
Michele Balistreri c062e53a6e fix situation where the card would get stuck in waiting for public key status 2017-10-25 12:25:08 +03:00
Michele Balistreri 24352fb0bc split sign and sign data tests 2017-10-25 11:20:40 +03:00
Michele Balistreri 760f431a16 implement assisted DERIVE KEY 2017-10-24 15:42:59 +03:00
Michele Balistreri 49c8f06c2d implement append in key derivation 2017-10-24 11:45:05 +03:00
Michele Balistreri 3a32731061 specify assisted key derivation 2017-10-19 16:37:14 +03:00
Michele Balistreri dc2af3b4fb test master key reset 2017-10-19 14:56:57 +03:00
Michele Balistreri c4b0da3703 fix DERIVE KEY 2017-10-18 15:51:03 +03:00
Michele Balistreri 32fbcfdcd5 implement DERIVE KEY test 2017-10-18 14:30:56 +03:00
Michele Balistreri de91e33f74 implement low-level BIP32 CKDPriv function 2017-10-18 11:40:20 +03:00
Michele Balistreri 4c0c58ac90 add hint if public key derivation is optimized or not 2017-10-16 17:34:37 +03:00
Michele Balistreri d26b1120a0 support T=0 in tests 2017-10-16 17:00:10 +03:00
Michele Balistreri 232db9b571 separate master and derived chain codes 2017-10-12 13:46:25 +03:00
Michele Balistreri f923e48333 rename ECCCurves to SEC256k1 to avoid confusion with the similarly named
ECCurve class
2017-10-12 13:43:08 +03:00
Michele Balistreri 84d56c95cd javacard applet can only define 1 package. JCMathLib has been integrated
in the main package
2017-10-12 13:39:04 +03:00
Michele Balistreri 48f1905cee add point multiplication through JCMathLib 2017-10-12 13:21:19 +03:00
Michele Balistreri b2543239aa make right shift work on both simulator and JavaCard 2017-10-11 13:26:50 +03:00
Michele Balistreri f134be461c remove duplication in loadKey variants 2017-10-11 12:55:47 +03:00
Michele Balistreri 8424f262df extend LOAD KEY with seed loading support 2017-10-11 12:44:48 +03:00
Michele Balistreri 97d195e6b5 simplify specifications - public key derivation must be somehow implemented 2017-10-11 10:55:04 +03:00
Michele Balistreri 5be35a8fe1 extend LOAD KEY 2017-10-11 10:45:37 +03:00
Michele Balistreri 9396e1448d implement GENERATE MNEMONIC 2017-10-10 20:07:09 +03:00
Michele Balistreri 5ba012fad1 implement GET STATUS 2017-10-09 17:12:21 +03:00
Michele Balistreri f4ea1f6e69 update specs for BIP32/39 2017-10-09 15:06:59 +03:00
Michele Balistreri 3b0319cb37 add interface (and possible implementation) for public key derivation from
private key
2017-10-09 12:37:50 +03:00
Michele Balistreri 3c13025773 add public key to the output of the SIGN command 2017-10-06 15:08:07 +03:00
Michele Balistreri c7e35b8aeb explain compilation 2017-10-06 12:58:10 +03:00
Michele Balistreri 11bfc4a4bf test files 2017-10-06 12:05:31 +03:00
Michele Balistreri 6035857f08 add web3j based test 2017-10-06 11:58:41 +03:00
Michele Balistreri fb24995cee add web3j based test (incomplete) 2017-10-05 14:10:49 +03:00
Michele Balistreri 7c72c16578 test with simulator 2017-10-04 17:25:28 +03:00
Michele Balistreri a78c5340c2 add ability to SIGN precomputed hashes. Switch to ECDSA with SHA256 for
data sign
2017-10-04 15:10:59 +03:00
Michele Balistreri ac5929a9fe implement SIGN 2017-09-30 17:26:06 +03:00
Michele Balistreri dd11e0cfa4 enforce P1 on LOAD KEY 2017-09-30 12:24:19 +03:00
Michele Balistreri 18ff9b1bdb implemented LOAD KEY 2017-09-29 19:02:24 +03:00
Michele Balistreri 5b231fb711 move installation script to gradle with configurable parameters 2017-09-27 20:04:26 +03:00
Michele Balistreri 91b4a96194 implement UNBLOCK PIN 2017-09-27 19:49:02 +03:00
Michele Balistreri f05190111c add PUK installation parameter 2017-09-27 16:01:45 +03:00
Michele Balistreri 8a06c7d074 implement CHANGE PIN 2017-09-27 15:22:34 +03:00
Michele Balistreri b0b5a68d2c implement secure channel encryption 2017-09-26 15:43:35 +03:00
Michele Balistreri 7ae588054b correct data length for decryption 2017-09-26 14:21:57 +03:00
Michele Balistreri 69a27f4c86 correct decryption overlapping offsets 2017-09-26 14:20:23 +03:00
Michele Balistreri 1c56b7fbf2 implement decrypt channel 2017-09-26 14:16:39 +03:00
Michele Balistreri 5a70ed2113 implement secure channel key exchange (open secure channel) 2017-09-26 13:05:59 +03:00
Michele Balistreri 5ddffcc10c document the presence of tests 2017-09-25 14:36:28 +03:00
Michele Balistreri c12ce33fc6 test VERIFY PIN 2017-09-25 14:33:00 +03:00
Michele Balistreri fe37968654 add testing facilities 2017-09-25 14:16:26 +03:00
Michele Balistreri 6b600182dd begin application implementation 2017-09-25 12:26:15 +03:00
Michele Balistreri 360fa6ff5e simplify the LOAD KEY command to use a single APDU 2017-09-25 11:27:55 +03:00
Michele Balistreri da001198f6 document load key and sign APDUs 2017-09-25 10:53:20 +03:00
Michele Balistreri 0276f29198 document overhead 2017-09-25 10:53:04 +03:00
Michele Balistreri a69bd8a0df document PIN-related commands 2017-09-22 12:41:43 +03:00
Michele Balistreri 4d7351d07e document PIN-related commands 2017-09-22 12:14:15 +03:00
Michele Balistreri 9316ff7e76 secure channel specification 2017-09-22 10:40:34 +03:00
Michele Balistreri d55f8efc7f secure channel specification 2017-09-22 10:37:24 +03:00
Michele Balistreri a2887abee4 draft of the secure channel implementation 2017-09-21 17:16:49 +03:00
Michele Balistreri b9b316cb95 make build work without setting environment variables 2017-09-21 16:29:28 +03:00
Michele Balistreri 9427ccf48c add scripts to install on card and a smoke test 2017-09-21 16:06:36 +03:00
Michele Balistreri d977bac7f9 add skeleton app 2017-09-21 15:09:04 +03:00
163 changed files with 5561 additions and 75613 deletions
+12
View File
@@ -0,0 +1,12 @@
# IntelliJ IDEA project files
.idea
*.iml
/.vscode
# Gradle output
/.gradle
/build
/bin
/gradle.properties
buildSrc/build
buildSrc/.gradle
-1
View File
@@ -1 +0,0 @@
keycard.tech
+201 -202
View File
@@ -1,202 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+93
View File
@@ -0,0 +1,93 @@
# What is Keycard?
Keycard is an implementation of a BIP-32 HD wallet running on Javacard 3.0.4+ (see implementation notes)
It supports among others
- key generation, derivation and signing
- exporting keys defined in the context of EIP-1581 https://eips.ethereum.org/EIPS/eip-1581
- setting up a NFC NDEF tag
Communication with the Keycard happens through a simple APDU interface, together with a Secure Channel guaranteeing confidentiality, authentication and integrity of all commands. It supports both NFC and ISO7816 physical interfaces, meaning that it is compatible with any Android phone equipped with NFC, and all USB Smartcard readers.
The most obvious case for integration of Keycard is crypto wallets (ETH, BTC, etc), however it can be used in other systems where a BIP-32 key tree is used and/or you perform authentication/identification.
# Where to start?
A good place to start is our documentation site https://keycard.tech/docs/
You can also join the dicussion about this project on Status channel: https://get.status.im/chat/public/status-keycard
If you just want to use the Keycard as your hardware wallet there are currently three apps supporting it
1. Status [[Android](https://play.google.com/store/apps/details?id=im.status.ethereum)][[iOS](https://apps.apple.com/us/app/status-private-communication/id1178893006)]
2. WallETH [[Android](https://play.google.com/store/apps/details?id=org.walleth)]
3. Enno Walet https://ennowallet.com/
# How to contribute?
Anyone is welcome to contribute to Keycard!
Most of our communication about the project is going on here: https://get.status.im/chat/public/status-keycard
Should you wish to work on an issue, please claim it first by commenting on the GitHub issue that you want to work on it. This is to prevent duplicated efforts from contributors on the same issue.
# How to build the project?
The project is built using Gradle with the [Fidesmo Javacard Gradle plugin](https://github.com/fidesmo/gradle-javacard).
You can set the JavaCard HOME not only through the environment but also creating a gradle.properties file with the
property "com.fidesmo.gradle.javacard.home" set to the correct path.
Testing is done with JUnit and performed either on a real card or on [jCardSim](https://github.com/status-im/jcardsim).
Although the tests are comprehensive, debugging on the real card is not easy because raw APDUs are not shown in the test
log and there is no way to set breakpoints in the applet.
In order to test with the simulator with an IDE, you need to pass these additional parameters to the JVM
```-noverify -Dim.status.keycard.test.target=simulator```
## Compilation
1. Download and install the JavaCard 3.0.4 SDK from [Oracle](http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javame-419430.html#java_card_kit-classic-3_0_4-rr-bin-do)
2. Clone the Github repo for our fork of [jCardSim](https://github.com/status-im/jcardsim)
3. Create a gradle.properties (see below for an example)
4. Run `./gradlew convertJavacard`
## Installation
1. Follow all steps from the Compilation phase (except the last one)
2. Disconnect all card reader terminals from the system, except the one with the card where you want to install the applet
3. Run `./gradlew install`
## Testing
1. Follow all steps from the Installation phase (except the last one)
2. Make sure your JRE has the [JCE Unlimited Strength Jurisdiction Policy Files](http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html)
installed. For more information check [here](https://stackoverflow.com/questions/41580489/how-to-install-unlimited-strength-jurisdiction-policy-files).
3. Run `./gradlew test`
# What kind of smartcards can I use?
* The applet requires JavaCard 3.0.4 (with the addition of KeyAgreement.ALG_EC_SVDP_DH_PLAIN_XY
) or later.
* The class byte of the APDU is not checked since there are no conflicting INS code.
* The GlobalPlatform ISD keys are set to c212e073ff8b4bbfaff4de8ab655221f.
The algorithms the card must support are at least:
* Cipher.ALG_AES_BLOCK_128_CBC_NOPAD
* Cipher.ALG_AES_CBC_ISO9797_M2
* KeyAgreement.ALG_EC_SVDP_DH_PLAIN
* KeyAgreement.ALG_EC_SVDP_DH_PLAIN_XY
* KeyPair.ALG_EC_FP (generation of 256-bit keys)
* MessageDigest.ALG_SHA_256
* MessageDigest.ALG_SHA_512
* RandomData.ALG_SECURE_RANDOM
* Signature.ALG_AES_MAC_128_NOPAD
* Signature.ALG_ECDSA_SHA_256
Best performance is achieved if the card supports:
* Signature.ALG_HMAC_SHA_512
# Other related repositories
Java SDK for Android and Desktop https://github.com/status-im/status-keycard-java
Swift SDK for iOS13 and above https://github.com/status-im/Keycard.swift
Keycard CLI for Desktop https://github.com/status-im/keycard-cli
-765
View File
File diff suppressed because one or more lines are too long
+101
View File
@@ -0,0 +1,101 @@
apply plugin: 'javacard'
buildscript {
repositories {
maven { url 'http://releases.marmeladburk.fidesmo.com/' }
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
classpath 'com.fidesmo:gradle-javacard:0.2.7'
classpath 'com.github.status-im.status-keycard-java:desktop:64aece4'
}
}
javacard {
sdkVersion = "3.0.4"
cap {
aid = '0xA0:0x00:0x00:0x08:0x04:0x00:0x01'
packageName = 'im.status.keycard'
applet {
aid = '0xA0:0x00:0x00:0x08:0x04:0x00:0x01:0x01'
className = 'KeycardApplet'
}
applet {
aid = '0xA0:0x00:0x00:0x08:0x04:0x00:0x01:0x02'
className = 'NDEFApplet'
}
applet {
aid = '0xA0:0x00:0x00:0x08:0x04:0x00:0x01:0x03'
className = 'CashApplet'
}
applet {
aid = '0xA0:0x00:0x00:0x08:0x04:0x00:0x01:0x04'
className = 'IdentApplet'
}
version = '3.1'
}
}
def testTarget = project.properties['im.status.keycard.test.target']
if (!testTarget) {
testTarget = 'card'
}
def pairingPass = project.properties['im.status.keycard.test.pairing']
if (!pairingPass) {
pairingPass = 'KeycardDefaultPairing'
}
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
testCompile(files("../jcardsim/jcardsim-3.0.5-SNAPSHOT.jar"))
testCompile('org.web3j:core:2.3.1')
testCompile('org.bitcoinj:bitcoinj-core:0.14.5')
testCompile('com.github.status-im.status-keycard-java:desktop:3.1.2')
testCompile('org.bouncycastle:bcprov-jdk15on:1.65')
testCompile("org.junit.jupiter:junit-jupiter-api:5.1.1")
testRuntime("org.junit.jupiter:junit-jupiter-engine:5.1.1")
}
test {
classpath = sourceSets.test.runtimeClasspath.filter { f -> f.name != "api_classic.jar" }
useJUnitPlatform {
excludeTags 'manual'
}
}
task install (type: im.status.keycard.build.InstallTask)
if (testTarget == 'card') {
tasks.install.dependsOn(convertJavacard)
tasks.test.dependsOn(install)
}
compileJava {
sourceCompatibility = 1.6
targetCompatibility = 1.6
}
compileTestJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
afterEvaluate {
def jvmArgs = ["-Dim.status.keycard.test.target=${testTarget}", "-Dim.status.keycard.test.pairing=${pairingPass}"]
if (testTarget == 'simulator') {
jvmArgs.push('-noverify')
}
def testTask = tasks.getByName('test')
testTask.jvmArgs(jvmArgs)
}
+8
View File
@@ -0,0 +1,8 @@
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
compile 'com.github.status-im.status-keycard-java:desktop:3.1.2'
}
@@ -0,0 +1,82 @@
package im.status.keycard.build;
import im.status.keycard.applet.Identifiers;
import im.status.keycard.desktop.PCSCCardChannel;
import im.status.keycard.globalplatform.GlobalPlatformCommandSet;
import im.status.keycard.globalplatform.LoadCallback;
import im.status.keycard.io.APDUException;
import org.bouncycastle.util.encoders.Hex;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.logging.Logger;
import org.gradle.api.tasks.TaskAction;
import javax.smartcardio.*;
import java.io.FileInputStream;
import java.io.IOException;
public class InstallTask extends DefaultTask {
@TaskAction
public void install() {
Logger logger = getLogger();
TerminalFactory tf = TerminalFactory.getDefault();
CardTerminal cardTerminal = null;
try {
for (CardTerminal t : tf.terminals().list()) {
if (t.isCardPresent()) {
cardTerminal = t;
break;
}
}
} catch(CardException e) {
throw new GradleException("Error listing card terminals", e);
}
if (cardTerminal == null) {
throw new GradleException("No available PC/SC terminal");
}
Card apduCard;
try {
apduCard = cardTerminal.connect("*");
} catch(CardException e) {
throw new GradleException("Couldn't connect to the card", e);
}
logger.info("Connected to " + cardTerminal.getName());
PCSCCardChannel sdkChannel = new PCSCCardChannel(apduCard.getBasicChannel());
GlobalPlatformCommandSet cmdSet = new GlobalPlatformCommandSet(sdkChannel);
try {
logger.info("Selecting the ISD");
cmdSet.select().checkOK();
logger.info("Opening a SecureChannel");
cmdSet.openSecureChannel();
logger.info("Deleting the old instances and package (if present)");
cmdSet.deleteKeycardInstancesAndPackage();
logger.info("Loading the new package");
cmdSet.loadKeycardPackage(new FileInputStream(this.getProject().file("build/javacard/im/status/keycard/javacard/keycard.cap")), new LoadCallback() {
@Override
public void blockLoaded(int loadedBlock, int blockCount) {
logger.info("Loaded block " + loadedBlock + "/" + blockCount);
}
});
logger.info("Installing the Keycard Applet");
cmdSet.installKeycardApplet().checkOK();
logger.info("Installing the NDEF Applet");
cmdSet.installNDEFApplet(new byte[0]).checkOK();
logger.info("Installing the Cash Applet");
cmdSet.installCashApplet().checkOK();
logger.info("Installing the Identifier Applet");
cmdSet.installIdentApplet().checkOK();
} catch (IOException e) {
throw new GradleException("I/O error", e);
} catch (APDUException e) {
throw new GradleException(e.getMessage(), e);
}
}
}
-2913
View File
File diff suppressed because it is too large Load Diff
-146
View File
@@ -1,146 +0,0 @@
/**
* atom-dark theme for `prism.js`
* Based on Atom's `atom-dark` theme: https://github.com/atom/atom-dark-syntax
* @author Joe Gibson (@gibsjose)
*/
code[class*="language-"],
pre[class*="language-"] {
color: #c5c8c6;
text-shadow: 0 1px rgba(0, 0, 0, 0.3);
font-family: Inconsolata, Monaco, Consolas, 'Courier New', Courier, monospace;
direction: ltr;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
border-radius: 0.3em;
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #1d1f21;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: #7C7C7C;
}
.token.punctuation {
color: #c5c8c6;
}
.namespace {
opacity: .7;
}
.token.property,
.token.keyword,
.token.tag {
color: #96CBFE;
}
.token.class-name {
color: #FFFFB6;
text-decoration: underline;
}
.token.boolean,
.token.constant {
color: #99CC99;
}
.token.symbol,
.token.deleted {
color: #f92672;
}
.token.number {
color: #FF73FD;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #A8FF60;
}
.token.variable {
color: #C6C5FE;
}
.token.operator {
color: #EDEDED;
}
.token.entity {
color: #FFFFB6;
/* text-decoration: underline; */
}
.token.url {
color: #96CBFE;
}
.language-css .token.string,
.style .token.string {
color: #87C38A;
}
.token.atrule,
.token.attr-value {
color: #F9EE98;
}
.token.function {
color: #DAD085;
}
.token.regex {
color: #E9C062;
}
.token.important {
color: #fd971f;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-894
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-895
View File
File diff suppressed because one or more lines are too long
-990
View File
File diff suppressed because one or more lines are too long
-879
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-893
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-908
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-903
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-894
View File
File diff suppressed because one or more lines are too long
-892
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-898
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-892
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-895
View File
File diff suppressed because one or more lines are too long
-990
View File
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
+5
View File
@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored Executable
+172
View File
@@ -0,0 +1,172 @@
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
Vendored
+84
View File
@@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
-4
View File
@@ -1,4 +0,0 @@
<svg width="49" height="48" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M32.1917 11.5C32.5901 11.5 32.9722 11.342 33.2539 11.0607C33.5356 10.7794 33.6939 10.3978 33.6939 10V7C33.6939 6.60218 33.5356 6.22064 33.2539 5.93934C32.9722 5.65804 32.5901 5.5 32.1917 5.5C31.7933 5.5 31.4112 5.65804 31.1295 5.93934C30.8478 6.22064 30.6896 6.60218 30.6896 7V10C30.6896 10.3978 30.8478 10.7794 31.1295 11.0607C31.4112 11.342 31.7933 11.5 32.1917 11.5Z" fill="#09D9B9"/>
<path d="M42.206 6C42.206 4.4087 41.573 2.88258 40.4461 1.75736C39.3193 0.632141 37.791 0 36.1974 0L12.1631 0C10.5695 0 9.04122 0.632141 7.91439 1.75736C6.78756 2.88258 6.15452 4.4087 6.15452 6V42C6.15452 43.5913 6.78756 45.1174 7.91439 46.2426C9.04122 47.3679 10.5695 48 12.1631 48H36.1974C37.791 48 39.3193 47.3679 40.4461 46.2426C41.573 45.1174 42.206 43.5913 42.206 42V6ZM24.1803 28C24.5764 28 24.9636 28.1173 25.293 28.3371C25.6224 28.5568 25.8791 28.8692 26.0307 29.2346C26.1823 29.6001 26.2219 30.0022 26.1446 30.3902C26.0674 30.7781 25.8766 31.1345 25.5965 31.4142C25.3164 31.6939 24.9595 31.8844 24.571 31.9616C24.1825 32.0387 23.7798 31.9991 23.4138 31.8478C23.0478 31.6964 22.735 31.44 22.515 31.1111C22.2949 30.7822 22.1774 30.3956 22.1774 30C22.1774 29.4696 22.3884 28.9609 22.764 28.5858C23.1396 28.2107 23.6491 28 24.1803 28ZM22.1774 21C22.1774 20.6044 22.2949 20.2178 22.515 19.8889C22.735 19.56 23.0478 19.3036 23.4138 19.1522C23.7798 19.0009 24.1825 18.9613 24.571 19.0384C24.9595 19.1156 25.3164 19.3061 25.5965 19.5858C25.8766 19.8655 26.0674 20.2219 26.1446 20.6098C26.2219 20.9978 26.1823 21.3999 26.0307 21.7654C25.8791 22.1308 25.6224 22.4432 25.293 22.6629C24.9636 22.8827 24.5764 23 24.1803 23C23.6491 23 23.1396 22.7893 22.764 22.4142C22.3884 22.0391 22.1774 21.5304 22.1774 21ZM33.1931 37.5C33.5915 37.5 33.9736 37.658 34.2553 37.9393C34.537 38.2206 34.6953 38.6022 34.6953 39C34.6953 39.3978 34.537 39.7794 34.2553 40.0607C33.9736 40.342 33.5915 40.5 33.1931 40.5H22.1774C21.779 40.5 21.3969 40.342 21.1152 40.0607C20.8335 39.7794 20.6753 39.3978 20.6753 39C20.6753 38.6022 20.8335 38.2206 21.1152 37.9393C21.3969 37.658 21.779 37.5 22.1774 37.5H33.1931ZM33.1931 32C32.797 32 32.4098 31.8827 32.0804 31.6629C31.751 31.4432 31.4943 31.1308 31.3427 30.7654C31.1912 30.3999 31.1515 29.9978 31.2288 29.6098C31.306 29.2219 31.4968 28.8655 31.7769 28.5858C32.057 28.3061 32.4139 28.1156 32.8024 28.0384C33.1909 27.9613 33.5936 28.0009 33.9596 28.1522C34.3256 28.3036 34.6384 28.56 34.8585 28.8889C35.0785 29.2178 35.196 29.6044 35.196 30C35.196 30.5304 34.985 31.0391 34.6094 31.4142C34.2338 31.7893 33.7243 32 33.1931 32ZM33.1931 23C32.797 23 32.4098 22.8827 32.0804 22.6629C31.751 22.4432 31.4943 22.1308 31.3427 21.7654C31.1912 21.3999 31.1515 20.9978 31.2288 20.6098C31.306 20.2219 31.4968 19.8655 31.7769 19.5858C32.057 19.3061 32.4139 19.1156 32.8024 19.0384C33.1909 18.9613 33.5936 19.0009 33.9596 19.1522C34.3256 19.3036 34.6384 19.56 34.8585 19.8889C35.0785 20.2178 35.196 20.6044 35.196 21C35.196 21.5304 34.985 22.0391 34.6094 22.4142C34.2338 22.7893 33.7243 23 33.1931 23ZM15.1674 32C14.7713 32 14.384 31.8827 14.0547 31.6629C13.7253 31.4432 13.4686 31.1308 13.317 30.7654C13.1654 30.3999 13.1257 29.9978 13.203 29.6098C13.2803 29.2219 13.4711 28.8655 13.7512 28.5858C14.0313 28.3061 14.3881 28.1156 14.7767 28.0384C15.1652 27.9613 15.5679 28.0009 15.9339 28.1522C16.2998 28.3036 16.6126 28.56 16.8327 28.8889C17.0528 29.2178 17.1703 29.6044 17.1703 30C17.1703 30.5304 16.9592 31.0391 16.5836 31.4142C16.208 31.7893 15.6986 32 15.1674 32ZM17.1703 39C17.1703 39.3956 17.0528 39.7822 16.8327 40.1111C16.6126 40.44 16.2998 40.6964 15.9339 40.8478C15.5679 40.9991 15.1652 41.0387 14.7767 40.9616C14.3881 40.8844 14.0313 40.6939 13.7512 40.4142C13.4711 40.1345 13.2803 39.7781 13.203 39.3902C13.1257 39.0022 13.1654 38.6001 13.317 38.2346C13.4686 37.8692 13.7253 37.5568 14.0547 37.3371C14.384 37.1173 14.7713 37 15.1674 37C15.6986 37 16.208 37.2107 16.5836 37.5858C16.9592 37.9609 17.1703 38.4696 17.1703 39ZM15.1674 23C14.7713 23 14.384 22.8827 14.0547 22.6629C13.7253 22.4432 13.4686 22.1308 13.317 21.7654C13.1654 21.3999 13.1257 20.9978 13.203 20.6098C13.2803 20.2219 13.4711 19.8655 13.7512 19.5858C14.0313 19.3061 14.3881 19.1156 14.7767 19.0384C15.1652 18.9613 15.5679 19.0009 15.9339 19.1522C16.2998 19.3036 16.6126 19.56 16.8327 19.8889C17.0528 20.2178 17.1703 20.6044 17.1703 21C17.1703 21.5304 16.9592 22.0391 16.5836 22.4142C16.208 22.7893 15.6986 23 15.1674 23ZM12.1631 4H36.1974C36.7286 4 37.2381 4.21071 37.6137 4.58579C37.9893 4.96086 38.2003 5.46957 38.2003 6V12.5C38.2003 12.6326 38.1475 12.7598 38.0536 12.8536C37.9597 12.9473 37.8324 13 37.6996 13H10.661C10.5282 13 10.4008 12.9473 10.3069 12.8536C10.213 12.7598 10.1602 12.6326 10.1602 12.5V6C10.1602 5.46957 10.3713 4.96086 10.7469 4.58579C11.1225 4.21071 11.6319 4 12.1631 4Z" fill="#09D9B9"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

-10
View File
@@ -1,10 +0,0 @@
<svg width="38" height="38" viewBox="0 0 38 38" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0)">
<path d="M31.9042 6.39667C31.7256 6.36022 31.5651 6.26329 31.4497 6.12224C31.3343 5.98119 31.2712 5.80465 31.2708 5.62242V3.16667C31.2708 2.32681 30.9372 1.52136 30.3433 0.927495C29.7495 0.33363 28.944 0 28.1042 0L8.3125 0C7.05272 0 5.84454 0.500445 4.95374 1.39124C4.06295 2.28204 3.5625 3.49022 3.5625 4.75V33.25C3.5625 34.5098 4.06295 35.718 4.95374 36.6088C5.84454 37.4996 7.05272 38 8.3125 38H31.2708C32.1107 38 32.9161 37.6664 33.51 37.0725C34.1039 36.4786 34.4375 35.6732 34.4375 34.8333V9.5C34.4377 8.76999 34.1856 8.06234 33.7239 7.49683C33.2623 6.93132 32.6194 6.54267 31.9042 6.39667ZM6.72917 4.75C6.72917 4.33007 6.89598 3.92735 7.19291 3.63041C7.48985 3.33348 7.89257 3.16667 8.3125 3.16667H27.7083C27.8133 3.16667 27.914 3.20837 27.9882 3.2826C28.0625 3.35684 28.1042 3.45752 28.1042 3.5625V5.9375C28.1042 6.04248 28.0625 6.14316 27.9882 6.2174C27.914 6.29163 27.8133 6.33333 27.7083 6.33333H8.3125C7.89257 6.33333 7.48985 6.16652 7.19291 5.86959C6.89598 5.57265 6.72917 5.16993 6.72917 4.75ZM28.2213 31.6413C28.1471 31.7305 28.0541 31.8022 27.949 31.8515C27.844 31.9007 27.7294 31.9263 27.6133 31.9263H10.3867C10.2708 31.9265 10.1563 31.9013 10.0513 31.8524C9.94621 31.8035 9.85319 31.7321 9.77874 31.6433C9.7043 31.5545 9.65025 31.4505 9.62042 31.3385C9.59058 31.2265 9.58569 31.1094 9.60608 30.9953C9.74825 30.1711 10.0074 29.3713 10.3756 28.6203C11.0833 27.2017 12.8646 26.3308 16.1199 25.1243C16.2567 24.7401 16.2523 24.3197 16.1073 23.9384C14.8331 22.338 14.2034 20.319 14.3418 18.278C14.3089 17.6458 14.4049 17.0136 14.6241 16.4198C14.8433 15.8259 15.1811 15.2829 15.6169 14.8238C16.0527 14.3647 16.5774 13.999 17.159 13.7492C17.7406 13.4994 18.367 13.3705 19 13.3705C19.633 13.3705 20.2594 13.4994 20.841 13.7492C21.4226 13.999 21.9473 14.3647 22.3831 14.8238C22.8189 15.2829 23.1567 15.8259 23.3759 16.4198C23.5951 17.0136 23.6911 17.6458 23.6582 18.278C23.7956 20.3354 23.156 22.3695 21.8658 23.978C21.7369 24.359 21.7515 24.774 21.907 25.1449C25.1354 26.334 26.9167 27.2032 27.6244 28.6283C27.9926 29.3793 28.2518 30.179 28.3939 31.0033C28.4128 31.1158 28.4072 31.231 28.3774 31.3412C28.3476 31.4513 28.2944 31.5537 28.2213 31.6413Z" fill="#09D9B9"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="38" height="38" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>close</title><path d="M14.3,12.179a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.442L12.177,9.7a.25.25,0,0,1-.354,0L2.561.442A1.5,1.5,0,0,0,.439,2.563L9.7,11.825a.25.25,0,0,1,0,.354L.439,21.442a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,0,0,2.122-2.121Z"/></svg>

Before

Width:  |  Height:  |  Size: 373 B

-11
View File
@@ -1,11 +0,0 @@
<svg width="52" height="52" viewBox="0 0 52 52" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0)">
<path d="M11.9167 35.1173V35.0415C11.9203 34.5082 11.7272 33.9923 11.3742 33.5925C11.0212 33.1928 10.5332 32.9372 10.0035 32.8748C8.4166 32.8894 6.88388 32.2982 5.71784 31.2217C5.23314 30.7067 4.85999 30.0972 4.62175 29.4313C4.38352 28.7655 4.28533 28.0576 4.33334 27.352C4.33392 25.866 4.92435 24.4409 5.97493 23.3899C7.02551 22.339 8.45031 21.748 9.93635 21.7468C10.3259 21.7476 10.7143 21.7883 11.0955 21.8682C11.4002 21.9299 11.7146 21.9259 12.0176 21.8564C12.3206 21.7869 12.6053 21.6535 12.8527 21.4652C13.1125 21.2662 13.3239 21.011 13.471 20.7187C13.6181 20.4264 13.6971 20.1045 13.702 19.7773C13.8775 7.31033 31.6853 3.82417 37.141 15.3465C37.3193 15.7321 37.6086 16.0557 37.9717 16.2761C38.3349 16.4964 38.7555 16.6035 39.1798 16.5837C40.3924 16.5229 41.6029 16.7396 42.7191 17.2171C43.8354 17.6947 44.828 18.4206 45.6213 19.3397C47.0197 20.9378 47.7517 23.0115 47.6667 25.1333C47.6219 26.8782 47.0072 28.5605 45.9164 29.9232C44.8256 31.2859 43.3188 32.2541 41.626 32.6798C41.1839 32.8078 40.7952 33.0757 40.5182 33.4433C40.2412 33.8109 40.0909 34.2584 40.0898 34.7187C40.0878 35.048 40.1626 35.3733 40.3082 35.6687C40.4538 35.9641 40.6663 36.2214 40.9288 36.4204C41.1912 36.6193 41.4964 36.7544 41.8202 36.8148C42.1439 36.8752 42.4773 36.8593 42.7938 36.7683C45.392 36.1382 47.7068 34.6616 49.3735 32.5713C51.0403 30.4809 51.9643 27.8954 52 25.2222C52.124 22.0321 51.022 18.9157 48.9203 16.5126C46.8187 14.1096 43.8768 12.6023 40.6987 12.3002C40.6142 12.292 40.5329 12.2642 40.461 12.2191C40.3892 12.1739 40.3289 12.1127 40.2848 12.0402C38.5715 9.17822 36.038 6.89685 33.0128 5.49171C29.9875 4.08657 26.61 3.62243 23.3179 4.15944C20.0258 4.69645 16.9708 6.20986 14.549 8.50354C12.1271 10.7972 10.4499 13.7654 9.73485 17.0235C9.71115 17.1394 9.65031 17.2444 9.56155 17.3226C9.4728 17.4008 9.36096 17.4479 9.24301 17.4568C7.6329 17.5735 6.07452 18.0759 4.69955 18.9218C3.32457 19.7677 2.17342 20.9321 1.34334 22.3167C0.397727 23.9167 -0.068528 25.7547 1.07624e-05 27.612C-0.0227125 28.85 0.202303 30.08 0.661829 31.2297C1.12135 32.3795 1.80611 33.4257 2.67584 34.307C4.56538 36.0481 6.99881 37.0822 9.56368 37.2342C9.86025 37.2644 10.1599 37.2322 10.4433 37.1397C10.7267 37.0472 10.9875 36.8964 11.2092 36.6971C11.4308 36.4977 11.6082 36.2541 11.7301 35.9821C11.8519 35.71 11.9155 35.4154 11.9167 35.1173Z" fill="#09D9B9"/>
<path d="M36.8334 32.8878C36.8247 32.1086 36.54 31.3576 36.0298 30.7685C35.5196 30.1794 34.8171 29.7903 34.047 29.6703C33.9184 29.6516 33.8008 29.5872 33.7156 29.489C33.6305 29.3907 33.5836 29.2652 33.5834 29.1352V26.9295C33.5834 24.9183 32.7844 22.9894 31.3622 21.5673C29.9401 20.1451 28.0112 19.3462 26 19.3462C23.9888 19.3462 22.0599 20.1451 20.6378 21.5673C19.2156 22.9894 18.4167 24.9183 18.4167 26.9295V29.1352C18.4166 29.2648 18.3699 29.3902 18.2852 29.4884C18.2005 29.5866 18.0834 29.6511 17.9552 29.6703C17.1846 29.7894 16.4813 30.1782 15.9706 30.7674C15.4599 31.3567 15.175 32.1081 15.1667 32.8878V44.8045C15.1667 45.6665 15.5091 46.4931 16.1186 47.1026C16.7281 47.7121 17.5547 48.0545 18.4167 48.0545H33.5834C34.4453 48.0545 35.272 47.7121 35.8814 47.1026C36.4909 46.4931 36.8334 45.6665 36.8334 44.8045V32.8878ZM26 42.0962C25.5715 42.0962 25.1526 41.9691 24.7963 41.731C24.44 41.4929 24.1623 41.1546 23.9983 40.7586C23.8343 40.3627 23.7914 39.9271 23.875 39.5068C23.9586 39.0865 24.1649 38.7004 24.468 38.3974C24.771 38.0944 25.157 37.8881 25.5773 37.8045C25.9976 37.7209 26.4333 37.7638 26.8292 37.9278C27.2251 38.0917 27.5635 38.3695 27.8015 38.7258C28.0396 39.0821 28.1667 39.501 28.1667 39.9295C28.1667 40.5041 27.9384 41.0552 27.5321 41.4616C27.1258 41.8679 26.5747 42.0962 26 42.0962ZM22.75 26.9295C22.75 26.0675 23.0924 25.2409 23.7019 24.6314C24.3114 24.0219 25.1381 23.6795 26 23.6795C26.862 23.6795 27.6886 24.0219 28.2981 24.6314C28.9076 25.2409 29.25 26.0675 29.25 26.9295V29.0962C29.25 29.2398 29.193 29.3776 29.0914 29.4792C28.9898 29.5808 28.852 29.6378 28.7084 29.6378H23.2917C23.148 29.6378 23.0103 29.5808 22.9087 29.4792C22.8071 29.3776 22.75 29.2398 22.75 29.0962V26.9295Z" fill="#09D9B9"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="52" height="52" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

-6
View File
@@ -1,6 +0,0 @@
<svg width="51" height="51" viewBox="0 0 51 51" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M43.0716 18.8465C41.8415 17.885 40.3256 17.3615 38.7642 17.359C38.3358 17.3613 37.9086 17.4069 37.4892 17.495C37.3952 17.5148 37.3082 17.5595 37.2375 17.6246C37.1669 17.6897 37.1151 17.7727 37.0876 17.8648C37.0599 17.9565 37.0578 18.054 37.0813 18.1469C37.1049 18.2397 37.1534 18.3244 37.2215 18.3918L45.509 26.6793C46.4891 27.6176 47.1612 28.8314 47.4364 30.16C47.6332 31.1822 47.5767 32.2371 47.2719 33.2324C46.967 34.2277 46.423 35.1333 45.6875 35.8699L44.8736 36.6859C44.8194 36.7393 44.7775 36.8038 44.7507 36.875C44.7239 36.9461 44.7129 37.0223 44.7185 37.0982C44.724 37.1744 44.7458 37.2486 44.7824 37.3157C44.8191 37.3828 44.8698 37.4412 44.931 37.487L45.3241 37.7824C45.4916 37.908 45.6326 38.0653 45.7393 38.2454C45.8459 38.4255 45.916 38.6248 45.9456 38.832C45.9752 39.0392 45.9637 39.2502 45.9118 39.4529C45.8598 39.6557 45.7684 39.8462 45.6429 40.0137C45.5173 40.1811 45.36 40.3222 45.1799 40.4288C44.9998 40.5354 44.8005 40.6055 44.5933 40.6351C44.3861 40.6647 44.1751 40.6532 43.9723 40.6013C43.7696 40.5493 43.5791 40.458 43.4116 40.3324L36.4501 35.1113L36.4267 35.0943L36.0017 34.8074C35.7295 34.6367 35.4338 34.5064 35.1241 34.4207C34.4236 34.2136 33.6742 34.245 32.9934 34.5099C32.3127 34.7748 31.7392 35.2581 31.3628 35.8842C30.9864 36.5102 30.8286 37.2435 30.914 37.969C30.9994 38.6944 31.3232 39.371 31.8346 39.8925L32.2469 40.3027C32.3463 40.4026 32.4021 40.5378 32.4021 40.6788C32.4021 40.8197 32.3463 40.955 32.2469 41.0549L30.7594 42.5424C30.7102 42.5918 30.6518 42.631 30.5874 42.6578C30.523 42.6845 30.454 42.6983 30.3843 42.6983C30.3146 42.6983 30.2456 42.6845 30.1812 42.6578C30.1169 42.631 30.0584 42.5918 30.0092 42.5424L11.7428 24.3014C11.6435 24.2018 11.5877 24.0669 11.5877 23.9263C11.5877 23.7857 11.6435 23.6509 11.7428 23.5513L22.5505 12.7499C22.5997 12.7002 22.6583 12.6607 22.7228 12.6338C22.7874 12.6068 22.8567 12.5929 22.9266 12.5929C22.9966 12.5929 23.0658 12.6068 23.1304 12.6338C23.195 12.6607 23.2535 12.7002 23.3027 12.7499L41.548 30.9952C41.6473 31.0947 41.703 31.2296 41.703 31.3702C41.703 31.5108 41.6473 31.6457 41.548 31.7453L40.273 33.0075C40.122 33.1577 40.0033 33.3372 39.9241 33.5349C39.845 33.7326 39.807 33.9443 39.8126 34.1572C39.8181 34.3701 39.8671 34.5796 39.9565 34.7729C40.0459 34.9662 40.1739 35.1392 40.3325 35.2813C40.6247 35.5453 41.0057 35.6895 41.3996 35.6852C41.7934 35.6808 42.1711 35.5283 42.4575 35.2579L43.7941 33.9999L43.8069 33.985C44.5028 33.2885 44.8937 32.3442 44.8937 31.3596C44.8937 30.375 44.5028 29.4307 43.8069 28.7342L25.5553 10.4889C24.8579 9.79207 23.9124 9.40063 22.9266 9.40063C21.9408 9.40063 20.9953 9.79207 20.298 10.4889L9.49025 21.2967C9.14464 21.6418 8.87046 22.0518 8.68339 22.503C8.49633 22.9542 8.40004 23.4379 8.40004 23.9263C8.40004 24.4148 8.49633 24.8985 8.68339 25.3497C8.87046 25.8009 9.14464 26.2108 9.49025 26.556L27.7355 44.8013C28.4336 45.4966 29.3788 45.8869 30.3641 45.8869C31.3494 45.8869 32.2946 45.4966 32.9927 44.8013L34.4802 43.3138C34.5807 43.2152 34.7156 43.1595 34.8564 43.1587C34.9263 43.1588 34.9956 43.1728 35.0601 43.1998C35.1247 43.2267 35.1832 43.2662 35.2325 43.3159L36.0188 44.1C36.2652 44.3465 36.5309 44.5697 36.7986 44.7928C37.9268 45.7437 39.2246 46.4726 40.6236 46.9412L50.0416 50.0798C50.1214 50.1059 50.2063 50.1128 50.2893 50.0999C50.3722 50.087 50.451 50.0547 50.5191 50.0056C50.5873 49.9565 50.6429 49.892 50.6814 49.8174C50.7199 49.7428 50.7402 49.6601 50.7407 49.5762V25.0749C50.7403 24.9925 50.7208 24.9113 50.684 24.8377C50.6472 24.764 50.5939 24.6997 50.5282 24.6499L43.0716 18.8465Z" fill="#09D9B9"/>
<path d="M16.7344 4.0863C17.1571 4.0863 17.5624 3.91839 17.8613 3.61951C18.1602 3.32062 18.3281 2.91524 18.3281 2.49255C18.3281 2.06986 18.1602 1.66449 17.8613 1.3656C17.5624 1.06672 17.1571 0.898804 16.7344 0.898804C12.3681 0.903865 8.18219 2.64059 5.0948 5.72798C2.00741 8.81537 0.270687 13.0013 0.265625 17.3676C0.265625 17.7902 0.433537 18.1956 0.732424 18.4945C1.03131 18.7934 1.43669 18.9613 1.85938 18.9613C2.28206 18.9613 2.68744 18.7934 2.98633 18.4945C3.28521 18.1956 3.45312 17.7902 3.45312 17.3676C3.45706 13.8464 4.8576 10.4705 7.34746 7.98064C9.83733 5.49078 13.2132 4.09024 16.7344 4.0863Z" fill="#09D9B9"/>
<path d="M10.2467 16.7876C10.2744 16.7185 10.2972 16.6475 10.3147 16.5751C10.4888 15.1441 11.1372 13.8127 12.1563 12.7932C13.1754 11.7737 14.5066 11.1248 15.9375 10.9502C16.0103 10.9315 16.0814 10.9066 16.15 10.8758C16.4181 10.8054 16.6628 10.665 16.8588 10.469C17.0548 10.273 17.1952 10.0284 17.2656 9.76022C17.318 9.56939 17.3331 9.37027 17.3102 9.17372C17.2853 8.9658 17.2194 8.76487 17.1165 8.58251C17.0135 8.40015 16.8755 8.23997 16.7104 8.11118C16.5453 7.9824 16.3563 7.88756 16.1543 7.83213C15.9524 7.7767 15.7415 7.76178 15.5337 7.78822C13.4019 8.05049 11.4189 9.01809 9.90023 10.5371C8.38158 12.0562 7.41448 14.0394 7.15275 16.1713C7.12689 16.3793 7.14228 16.5903 7.19804 16.7922C7.25381 16.9942 7.34885 17.1832 7.47774 17.3484C7.60662 17.5136 7.76682 17.6518 7.94916 17.755C8.1315 17.8582 8.3324 17.9245 8.54037 17.95C8.6052 17.9584 8.6705 17.9627 8.73587 17.9627C8.87255 17.9552 9.00762 17.9294 9.1375 17.8862C9.40243 17.8163 9.64434 17.678 9.83901 17.4852C10.0337 17.2924 10.1743 17.0518 10.2467 16.7876Z" fill="#09D9B9"/>
<path d="M18.4556 20.5935C18.3843 20.8571 18.383 21.1348 18.452 21.399C18.5209 21.6633 18.6577 21.9049 18.8488 22.1001L19.6223 22.8757C19.7066 22.9599 19.7603 23.07 19.7745 23.1883C19.7888 23.3066 19.7628 23.4263 19.7009 23.5281C19.324 24.1385 19.1445 24.8503 19.1869 25.5665C19.2294 26.2826 19.4917 26.9682 19.938 27.5299C20.3844 28.0915 20.9931 28.5018 21.6812 28.7048C22.3693 28.9078 23.1033 28.8936 23.783 28.6642L28.0968 27.2277C28.1641 27.2062 28.2366 27.2078 28.3029 27.2323C28.3692 27.2568 28.4254 27.3028 28.4625 27.3629C28.4997 27.423 28.5156 27.4938 28.5079 27.564C28.5001 27.6343 28.4691 27.6999 28.4197 27.7505L25.4001 30.768C25.1011 31.0669 24.9332 31.4725 24.9332 31.8953C24.9332 32.3181 25.1011 32.7236 25.4001 33.0226C25.6991 33.3216 26.1046 33.4895 26.5274 33.4895C26.9503 33.4895 27.3558 33.3216 27.6547 33.0226L28.3369 32.3405C28.386 32.2911 28.4445 32.2519 28.5089 32.2251C28.5732 32.1983 28.6422 32.1846 28.7119 32.1846C28.7816 32.1846 28.8507 32.1983 28.915 32.2251C28.9794 32.2519 29.0378 32.2911 29.087 32.3405L29.7691 33.0226C29.9162 33.1747 30.0921 33.2961 30.2866 33.3795C30.4811 33.4629 30.6903 33.5068 30.9019 33.5085C31.1135 33.5103 31.3233 33.4699 31.5192 33.3896C31.715 33.3094 31.8929 33.191 32.0424 33.0413C32.192 32.8916 32.3103 32.7136 32.3903 32.5177C32.4704 32.3217 32.5106 32.1119 32.5086 31.9002C32.5067 31.6886 32.4626 31.4795 32.379 31.2851C32.2954 31.0907 32.1739 30.9149 32.0216 30.768L31.2503 29.9945C31.1659 29.9103 31.1122 29.8002 31.098 29.6819C31.0837 29.5636 31.1097 29.4439 31.1716 29.3421C31.5483 28.7313 31.7276 28.0193 31.685 27.303C31.6423 26.5866 31.3798 25.9009 30.9333 25.3391C30.4868 24.7774 29.878 24.367 29.1897 24.1638C28.5015 23.9607 27.7674 23.9746 27.0874 24.2038L22.7758 25.6403C22.72 25.6594 22.66 25.6626 22.6026 25.6494C22.5452 25.6363 22.4925 25.6074 22.4506 25.566C22.3922 25.5064 22.3595 25.4263 22.3595 25.3428C22.3595 25.2594 22.3922 25.1793 22.4506 25.1197L25.4703 22.1001C25.7518 21.798 25.905 21.3984 25.8977 20.9855C25.8905 20.5726 25.7232 20.1786 25.4312 19.8866C25.1392 19.5946 24.7453 19.4274 24.3324 19.4201C23.9195 19.4128 23.5199 19.5661 23.2178 19.8476L22.5356 20.5297C22.4354 20.6286 22.3003 20.684 22.1595 20.684C22.0187 20.684 21.8836 20.6286 21.7834 20.5297L21.1034 19.8476C20.9079 19.6571 20.6662 19.5207 20.4021 19.4518C20.1379 19.3829 19.8604 19.3838 19.5968 19.4545C19.3137 19.5067 19.0531 19.6435 18.8494 19.8469C18.6457 20.0502 18.5084 20.3105 18.4556 20.5935Z" fill="#09D9B9"/>
</svg>

Before

Width:  |  Height:  |  Size: 7.6 KiB

-4
View File
@@ -1,4 +0,0 @@
<svg width="51" height="51" viewBox="0 0 51 51" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.0625 38.25C1.0625 39.3772 1.51027 40.4582 2.3073 41.2552C3.10433 42.0522 4.18533 42.5 5.3125 42.5H45.6875C46.8147 42.5 47.8957 42.0522 48.6927 41.2552C49.4897 40.4582 49.9375 39.3772 49.9375 38.25V20.1875C49.9375 20.0466 49.8815 19.9115 49.7819 19.8118C49.6823 19.7122 49.5471 19.6562 49.4062 19.6562H1.59375C1.45285 19.6562 1.31773 19.7122 1.2181 19.8118C1.11847 19.9115 1.0625 20.0466 1.0625 20.1875V38.25ZM36.125 33.4688H42.5C42.9227 33.4688 43.3281 33.6367 43.627 33.9355C43.9258 34.2344 44.0938 34.6398 44.0938 35.0625C44.0938 35.4852 43.9258 35.8906 43.627 36.1895C43.3281 36.4883 42.9227 36.6562 42.5 36.6562H36.125C35.7023 36.6562 35.2969 36.4883 34.998 36.1895C34.6992 35.8906 34.5312 35.4852 34.5312 35.0625C34.5312 34.6398 34.6992 34.2344 34.998 33.9355C35.2969 33.6367 35.7023 33.4688 36.125 33.4688ZM9.5625 24.9688H26.5625C26.9852 24.9688 27.3906 25.1367 27.6895 25.4355C27.9883 25.7344 28.1562 26.1398 28.1562 26.5625C28.1562 26.9852 27.9883 27.3906 27.6895 27.6895C27.3906 27.9883 26.9852 28.1562 26.5625 28.1562H9.5625C9.13981 28.1562 8.73443 27.9883 8.43555 27.6895C8.13666 27.3906 7.96875 26.9852 7.96875 26.5625C7.96875 26.1398 8.13666 25.7344 8.43555 25.4355C8.73443 25.1367 9.13981 24.9688 9.5625 24.9688ZM9.5625 33.4688H15.9375C16.3602 33.4688 16.7656 33.6367 17.0645 33.9355C17.3633 34.2344 17.5312 34.6398 17.5312 35.0625C17.5312 35.4852 17.3633 35.8906 17.0645 36.1895C16.7656 36.4883 16.3602 36.6562 15.9375 36.6562H9.5625C9.13981 36.6562 8.73443 36.4883 8.43555 36.1895C8.13666 35.8906 7.96875 35.4852 7.96875 35.0625C7.96875 34.6398 8.13666 34.2344 8.43555 33.9355C8.73443 33.6367 9.13981 33.4688 9.5625 33.4688Z" fill="#09D9B9"/>
<path d="M49.9375 12.75C49.9375 11.6228 49.4897 10.5418 48.6927 9.7448C47.8957 8.94777 46.8147 8.5 45.6875 8.5H5.3125C4.18533 8.5 3.10433 8.94777 2.3073 9.7448C1.51027 10.5418 1.0625 11.6228 1.0625 12.75V15.9375C1.0625 16.0784 1.11847 16.2135 1.2181 16.3132C1.31773 16.4128 1.45285 16.4688 1.59375 16.4688H49.4062C49.5471 16.4688 49.6823 16.4128 49.7819 16.3132C49.8815 16.2135 49.9375 16.0784 49.9375 15.9375V12.75Z" fill="#09D9B9"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

Some files were not shown because too many files have changed in this diff Show More