# Usage
## Table of Contents
- [Hex / UTF-8 string / binary / byte array conversion](#hex--utf-8-string--binary--byte-array-conversion)
- [Timestamp / date conversion](#timestamp--date-conversion)
- [Number 10/2/8/16 base conversion](#number-102816-base-conversion)
- [Hex / base32 conversion](#hex--base32-conversion)
- [Hex / base58 conversion](#hex--base58-conversion)
- [Hex / base64 conversion](#hex--base64-conversion)
- [URL encode / decode](#url-encode--decode)
- [Number codec](#number-codec)
- [Hash (MD5, SHA-1, SHA-2, SHA-3, RIPEMD, CRC, Blake2b, Blake3, SM3, Twox)](#hash-md5-sha-1-sha-2-sha-3-ripemd-crc-blake2b-blake3-sm3-twox)
- [UTF-8 string / unicode conversion](#utf-8-string--unicode-conversion)
- [HTML entity encode / decode](#html-entity-encode--decode)
- [Regex match](#regex-match)
- [Pbkdf2](#pbkdf2)
- [Case conversion (upper, lower, title, camel, pascal, snake, shouty snake, kebab, sarcasm)](#case-conversion-upper-lower-title-camel-pascal-snake-shouty-snake-kebab-sarcasm)
- [AES encrypt / decrypt](#aes-encrypt--decrypt)
- [ECDSA (Secp256k1, NIST P-256, NIST P-384, SM2)](#ecdsa-secp256k1-nist-p-256-nist-p-384-sm2)
- [SM4 encrypt / decrypt](#sm4-encrypt--decrypt)
- [EdDSA (Ed25519)](#eddsa-ed25519)
- [sr25519 signature](#sr25519-signature)
- [QR Code](#qr-code)
- [JWT encode / decode / verify](#jwt-encode--decode--verify)
- [UUID generation and parsing](#uuid-generation-and-parsing)
## Hex / UTF-8 string / binary / byte array conversion
|Sub command| Desc | Example |
|-----------|-------------------------------------|-------------------------------------------------------|
| h2s |Convert hex to UTF-8 string<br>v0.1.0| $ dtool h2s 0x61626364<br>abcd |
| s2h |Convert UTF-8 string to hex<br>v0.1.0| $ dtool s2h abcd<br>0x61626364 |
| h2b | Convert hex to binary<br>v0.1.0 | $ dtool h2b 0x61626364<br>abcd |
| b2h | Convert binary to hex<br>v0.1.0 | $ dtool b2h abcd<br>0x61626364 |
| h2a | Convert hex to byte array<br>v0.7.0 | $ dtool h2a 0x61626364<br>[97, 98, 99, 100] |
| a2h | Convert byte array to hex<br>v0.7.0 |$ dtool a2h '[97, 98, 99, 100]'<br>0x61626364|
## Timestamp / date conversion
|Sub command| Desc | Example |
|-----------|-----------------------------------------------------------|----------------------------------------------------------------------|
| ts2d | Convert timestamp to date<br>v0.1.0 | $ dtool ts2d -z 0 0<br>1970-01-01 00:00:00 |
| d2ts | Convert date to timestamp<br>v0.1.0 | $ dtool d2ts -z 8 '1970-01-01 08:00:00'<br>0 |
| d2ts |Convert date to timestamp<br>Input rfc2822 format<br>v0.1.0|$ dtool d2ts 'Mon, 23 Dec 2019 17:41:26 +0800'<br>1577094086|
| d2ts |Convert date to timestamp<br>Input rfc3339 format<br>v0.1.0| $ dtool d2ts '2019-12-23T17:48:54+08:00'<br>1577094534 |
| ts | Current timestamp<br>v0.12.0 | $ dtool ts <br>1647064300 |
## Number 10/2/8/16 base conversion
|Sub command| Desc | Example |
|-----------|---------------------------------------------|--------------------------------------------------------|
| ns | Number system<br>Input decimal<br>v0.1.0 | $ dtool ns 256<br>256<br>0b100000000<br>0o400<br>0x100 |
| ns | Number system<br>Input octal<br>v0.1.0 |$ dtool ns 0o400<br>256<br>0b100000000<br>0o400<br>0x100|
| ns | Number system<br>Output decimal<br>v0.1.0 | $ dtool ns -d 256<br>256 |
| ns | Number system<br>Output binary<br>v0.1.0 | $ dtool ns -b 256<br>0b100000000 |
| ns | Number system<br>Output octal<br>v0.1.0 | $ dtool ns -o 256<br>0o400 |
| ns |Number system<br>Output hexadecimal<br>v0.1.0| $ dtool ns -x 256<br>0x100 |
## Hex / base32 conversion
| Sub command | Desc | Example |
|-------------|---------------------------------|--------------------------------------------------------------------------------------------------------|
| h2b32 | Convert hex to base32<br>v0.1.0 | $ dtool h2b32 0x0075774f5d9963c021009a58d7d2d8e83771dd6c7a<br>AB2XOT25TFR4AIIATJMNPUWY5A3XDXLMPI====== |
| b322h | Convert base32 to hex<br>v0.1.0 | $ dtool b322h 12dvBhvPEPniQmBmgvj4qpJEodT7P<br>0x0075774f5d9963c021009a58d7d2d8e83771dd6c7a |
## Hex / base58 conversion
|Sub command| Desc | Example |
|-----------|-------------------------------------|-------------------------------------------------------------------------------------------------|
| h2b58 | Convert hex to base58<br>v0.1.0 | $ dtool h2b58 0x0075774f5d9963c021009a58d7d2d8e83771dd6c7a<br>12dvBhvPEPniQmBmgvj4qpJEodT7P |
| h2b58c |Convert hex to base58 check<br>v0.1.0|$ dtool h2b58c 0x0075774f5d9963c021009a58d7d2d8e83771dd6c7a<br>1Bi6zFVNtntP5MtDraNrAD7e469ifsQMwF|
| b582h | Convert base58 to hex<br>v0.1.0 | $ dtool b582h 12dvBhvPEPniQmBmgvj4qpJEodT7P<br>0x0075774f5d9963c021009a58d7d2d8e83771dd6c7a |
| b58c2h |Convert base58 check to hex<br>v0.1.0|$ dtool b58c2h 1Bi6zFVNtntP5MtDraNrAD7e469ifsQMwF<br>0x0075774f5d9963c021009a58d7d2d8e83771dd6c7a|
## Hex / base64 conversion
|Sub command| Desc | Example |
|-----------|-------------------------------|------------------------------|
| h2b64 |Convert hex to base64<br>v0.1.0|$ dtool h2b64 0x616263<br>YWJj|
| b642h |Convert base64 to hex<br>v0.1.0|$ dtool b642h YWJj<br>0x616263|
## URL encode / decode
|Sub command| Desc | Example |
|-----------|--------------------|-----------------------|
| ue |URL encode<br>v0.1.0|$ dtool ue a+b<br>a%2Bb|
| ud |URL decode<br>v0.1.0|$ dtool ud a%2Bb<br>a+b|
## Number codec
|Sub command| Desc | Example |
|-----------|----------------------------------|---------------------------------------------------------|
| ne | Number encode<br>u8<br>v0.1.0 | $ dtool ne -tu8 1<br>0x01 |
| ne | Number encode<br>u16<br>v0.1.0 | $ dtool ne -tu16 1<br>0x0100 |
| ne | Number encode<br>u16<br>v0.1.0 | $ dtool ne -tu16 -ebig 1<br>0x0001 |
| ne | Number encode<br>u32<br>v0.1.0 | $ dtool ne -tu32 1<br>0x01000000 |
| ne | Number encode<br>u32<br>v0.1.0 | $ dtool ne -tu32 -ebig 1<br>0x00000001 |
| ne | Number encode<br>u64<br>v0.1.0 | $ dtool ne -tu64 1<br>0x0100000000000000 |
| ne | Number encode<br>u128<br>v0.1.0 |$ dtool ne -tu128 1<br>0x01000000000000000000000000000000|
| ne |Number encode<br>Compact<br>v0.1.0| $ dtool ne -tc 6<br>0x18 |
| ne |Number encode<br>Compact<br>v0.1.0| $ dtool ne -tc 251<br>0xed03 |
| nd | Number decode<br>u8<br>v0.1.0 | $ dtool nd -tu8 0x01<br>1 |
| nd | Number decode<br>u16<br>v0.1.0 | $ dtool nd -tu16 0x0100<br>1 |
| nd | Number decode<br>u32<br>v0.1.0 | $ dtool nd -tu32 0x01000000<br>1 |
| nd | Number decode<br>u64<br>v0.1.0 | $ dtool nd -tu64 0x0100000000000000<br>1 |
| nd | Number decode<br>u128<br>v0.1.0 |$ dtool nd -tu128 0x01000000000000000000000000000000<br>1|
| nd |Number decode<br>Compact<br>v0.1.0| $ dtool nd -tc 0x18<br>6 |
| nd |Number decode<br>Compact<br>v0.1.0| $ dtool nd -tc 0xed03<br>251 |
## Hash (MD5, SHA-1, SHA-2, SHA-3, RIPEMD, CRC, Blake2b, Blake3, SM3, Twox)
|Sub command| Desc | Example |
|-----------|-----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| hash | Hex to hash<br>MD5<br>v0.2.0 | $ dtool hash -a md5 0x616263<br>0x900150983cd24fb0d6963f7d28e17f72 |
| hash | Hex to hash<br>SHA-1<br>v0.2.0 | $ dtool hash -a sha1 0x616263<br>0xa9993e364706816aba3e25717850c26c9cd0d89d |
| hash | Hex to hash<br>SHA-2 224<br>v0.2.0 | $ dtool hash -a sha2_224 0x616263<br>0x23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7 |
| hash | Hex to hash<br>SHA-2 256<br>v0.2.0 | $ dtool hash -a sha2_256 0x616263<br>0xba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f2\\<br>0015ad |
| hash | Hex to hash<br>SHA-2 384<br>v0.2.0 | $ dtool hash -a sha2_384 0x616263<br>0xcb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43\\<br>ff5bed8086072ba1e7cc2358baeca134c825a7 |
| hash | Hex to hash<br>SHA-2 512<br>v0.2.0 | $ dtool hash -a sha2_512 0x616263<br>0xddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b\\<br>55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac9\\<br>4fa54ca49f |
| hash |Hex to hash<br>SHA-2 512 truncate 224<br>v0.2.0| $ dtool hash -a sha2_512_224 0x616263<br>0x4634270f707b6a54daae7530460842e20e37ed265ceee9a43e8924aa |
| hash |Hex to hash<br>SHA-2 512 truncate 256<br>v0.2.0| $ dtool hash -a sha2_512_256 0x616263<br>0x53048e2681941ef99b2e29b76b4c7dabe4c2d0c634fc6d46e0e2f13107\\<br>e7af23 |
| hash | Hex to hash<br>SHA-3 224<br>v0.2.0 | $ dtool hash -a sha3_224 0x616263<br>0xe642824c3f8cf24ad09234ee7d3c766fc9a3a5168d0c94ad73b46fdf |
| hash | Hex to hash<br>SHA-3 256<br>v0.2.0 | $ dtool hash -a sha3_256 0x616263<br>0x3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511\\<br>431532 |
| hash | Hex to hash<br>SHA-3 384<br>v0.2.0 | $ dtool hash -a sha3_384 0x616263<br>0xec01498288516fc926459f58e2c6ad8df9b473cb0fc08c2596da7cf0e4\\<br>9be4b298d88cea927ac7f539f1edf228376d25 |
| hash | Hex to hash<br>SHA-3 512<br>v0.2.0 | $ dtool hash -a sha3_512 0x616263<br>0xb751850b1a57168a5693cd924b6b096e08f621827444f70d884f5d0240\\<br>d2712e10e116e9192af3c91a7ec57647e3934057340b4cf408d5a56592f8\\<br>274eec53f0 |
| hash | Hex to hash<br>SHA-3 keccak 224<br>v0.2.0 | $ dtool hash -a sha3_k_224 0x616263<br>0xc30411768506ebe1c2871b1ee2e87d38df342317300a9b97a95ec6a8 |
| hash | Hex to hash<br>SHA-3 keccak 256<br>v0.2.0 | $ dtool hash -a sha3_k_256 0x616263<br>0x4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa1\\<br>2d6c45 |
| hash | Hex to hash<br>SHA-3 keccak 384<br>v0.2.0 | $ dtool hash -a sha3_k_384 0x616263<br>0xf7df1165f033337be098e7d288ad6a2f74409d7a60b49c36642218de16\\<br>1b1f99f8c681e4afaf31a34db29fb763e3c28e |
| hash | Hex to hash<br>SHA-3 keccak 512<br>v0.2.0 |$ dtool hash -a sha3_k_512 0x616263<br>0x18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77ce\\<br>a3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa51\\<br>1a9d00bb96 |
| hash | Hex to hash<br>RIPEMD-160<br>v0.2.0 | $ dtool hash -a ripemd_160 0x616263<br>0x8eb208f7e05d987a9b044a8e98c6b087f15a0bfc |
| hash | Hex to hash<br>CRC32<br>v0.5.0 | $ dtool hash -a crc_32 0x616263<br>0x352441c2 |
| hash | Hex to hash<br>Blake2b 160<br>v0.5.0 | $ dtool hash -a blake2b_160 0x616263<br>0x384264f676f39536840523f284921cdc68b6846b |
| hash | Hex to hash<br>Blake2b 256<br>v0.5.0 | $ dtool hash -a blake2b_256 0x616263<br>0xbddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068\\<br>d52319 |
| hash | Hex to hash<br>Blake2b 384<br>v0.5.0 | $ dtool hash -a blake2b_384 0x616263<br>0x6f56a82c8e7ef526dfe182eb5212f7db9df1317e57815dbda46083fc30\\<br>f54ee6c66ba83be64b302d7cba6ce15bb556f4 |
| hash | Hex to hash<br>Blake2b 512<br>v0.5.0 |$ dtool hash -a blake2b_512 0x616263<br>0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdb\\<br>ffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386\\<br>edd4009923|
| hash | Hex to hash<br>Blake3<br>v0.5.0 | $ dtool hash -a blake3 0x616263<br>0x6437b3ac38465133ffb63b75273a8db548c558465d79db03fd359c6cd5bd9d85 |
| hash | Hex to hash<br>SM3<br>v0.7.0 | $ dtool hash -a sm3 0x616263<br>0x66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f\\<br>4ba8e0 |
| hash | Hex to hash<br>TwoX<br>v0.10.0 | $ dtool hash -a twox -s 1 0x616263<br>0x0889329981caa9be |
## UTF-8 string / unicode conversion
|Sub command| Desc | Example |
|-----------|--------------------------------------------------------|-------------------------------------------------------------|
| s2u | UTF-8 string to unicode<br>Default format<br>v0.3.0 | $ dtool s2u abc<br>\u61\u62\u63 |
| s2u | UTF-8 string to unicode<br>HTML format<br>v0.3.0 | $ dtool s2u -f html abc<br>&#x61;&#x62;&#x63; |
| s2u |UTF-8 string to unicode<br>HTML decimal format<br>v0.3.0| $ dtool s2u -f html_d abc<br>&#97;&#98;&#99; |
| s2u | UTF-8 string to unicode<br>RUST format<br>v0.3.0 | $ dtool s2u -f rust abc<br>\u{61}\u{62}\u{63} |
| s2u | UTF-8 string to unicode<br>Emoji<br>v0.3.0 | $ dtool s2u 💯<br>\u1f4af |
| u2s |Unicode to UTF-8 string<br>From default format<br>v0.3.0| $ dtool u2s '\u61\u62\u63'<br>abc |
| u2s | Unicode to UTF-8 string<br>HTML format<br>v0.3.0 |$ dtool u2s '&#x61;&#x62;&#x63;'<br>abc|
| u2s |Unicode to UTF-8 string<br>HTML decimal format<br>v0.3.0| $ dtool u2s '&#97;&#98;&#99;'<br>abc |
| u2s | Unicode to UTF-8 string<br>RUST format<br>v0.3.0 | $ dtool u2s '\u{61}\u{62}\u{63}'<br>abc |
| u2s | Unicode to UTF-8 string<br>Emoji<br>v0.3.0 | $ dtool u2s '\u1f4af'<br>💯 |
## HTML entity encode / decode
|Sub command| Desc | Example |
|-----------|----------------------------|-----------------------------------------------------|
| he |HTML entity encode<br>v0.4.0|$ dtool he '<b>'<br>&lt;b&gt;|
| hd |HTML entity decode<br>v0.4.0|$ dtool hd '&lt;b&gt;'<br><b>|
## Regex match
|Sub command| Desc | Example |
|-----------|---------------------|--------------------------------------------------------------------------------------------------------------------------------|
| re |Regex match<br>v0.4.0|$ dtool re -p 'a(.)c' abcadc<br>abc<br> group#1: b<br>adc<br> group#1: d|
## Pbkdf2
|Sub command| Desc | Example |
|-----------|----------------|---------------------------------------------------------------------------------------------------------------------------------------|
| pbkdf2 |Pbkdf2<br>v0.5.0|$ dtool pbkdf2 -a sha2_256 -s 0x646566 -i 2 -l 256 0x616263<br>0x51a30556d0d133d859d3f3da86f861b7b12546c4f9a193ebb374397467\\<br>872514|
## Case conversion (upper, lower, title, camel, pascal, snake, shouty snake, kebab, sarcasm)
|Sub command| Desc | Example |
|-----------|----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
| case | Case conversion<br>Upper case<br>v0.5.0 | $ dtool case -t upper 'good tool'<br>GOOD TOOL |
| case | Case conversion<br>Lower case<br>v0.5.0 | $ dtool case -t lower 'GOOD TOOL'<br>good tool |
| case | Case conversion<br>Title case<br>v0.5.0 | $ dtool case -t title 'GOOD TOOL'<br>Good Tool |
| case | Case conversion<br>Camel case<br>v0.5.0 | $ dtool case -t camel 'GOOD TOOL'<br>goodTool |
| case | Case conversion<br>Pascal case<br>v0.5.0 | $ dtool case -t pascal 'GOOD TOOL'<br>GoodTool |
| case | Case conversion<br>Snake case<br>v0.5.0 | $ dtool case -t snake GoodTool<br>good_tool |
| case |Case conversion<br>Shouty snake case<br>v0.5.0| $ dtool case -t shouty_snake GoodTool<br>GOOD_TOOL |
| case | Case conversion<br>Kebab case<br>v0.5.0 | $ dtool case -t kebab GoodTool<br>good-tool |
| case | Case conversion<br>Sarcasm case<br>v0.9.0 | $ dtool case -t sarcasm good tool<br>gOoD tOoL |
| case | Case conversion<br>All cases<br>v0.11.0 |$ dtool case good tool<br>GOOD TOOL<br>good tool<br>Good Tool<br>goodTool<br>GoodTool<br>good_tool<br>GO\\<br>OD_TOOL<br>good-tool<br>gOoD tOoL<br>|
## AES encrypt / decrypt
|Sub command| Desc | Example |
|-----------|----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| aes_enc |AES encrypt<br>KeySize 128 ECB<br>v0.6.0| $ dtool aes_enc -k 01010101010101010101010101010101 -m ecb 0\\<br>x616263646162636461626364616263<br>0xe89c98329f3e8b6da3e714fbba2be6d1 |
| aes_enc |AES encrypt<br>KeySize 192 ECB<br>v0.6.0| $ dtool aes_enc -k 01010101010101010101010101010101010101010\\<br>1010101 -m ecb 0x616263646162636461626364616263<br>0x88fe17738e31914c9166f9b101d1b028 |
| aes_enc |AES encrypt<br>KeySize 256 ECB<br>v0.6.0| $ dtool aes_enc -k 01010101010101010101010101010101010101010\\<br>10101010101010101010101 -m ecb 0x616263646162636461626364616\\<br>263<br>0x3e6bcc9d26c494b1c6971316020acd3a |
| aes_enc |AES encrypt<br>KeySize 128 CBC<br>v0.6.0| $ dtool aes_enc -k 01010101010101010101010101010101 -i 03030\\<br>303030303030303030303030303 -m cbc 0x61626364616263646162636\\<br>4616263<br>0x350678b99c37ab5f68f560551e960572 |
| aes_enc |AES encrypt<br>KeySize 192 CBC<br>v0.6.0| $ dtool aes_enc -k 01010101010101010101010101010101010101010\\<br>1010101 -i 03030303030303030303030303030303 -m cbc 0x6162636\\<br>46162636461626364616263<br>0xbbc8ff4de1a197e67a5f8f4d7a35f9a0 |
| aes_enc |AES encrypt<br>KeySize 256 CBC<br>v0.6.0|$ dtool aes_enc -k 01010101010101010101010101010101010101010\\<br>10101010101010101010101 -i 03030303030303030303030303030303 \\<br>-m cbc 0x616263646162636461626364616263<br>0x3309a7511f007e993676a90a06391d28|
| aes_enc |AES encrypt<br>KeySize 128 CTR<br>v0.6.0| $ dtool aes_enc -k 01010101010101010101010101010101 -i 03030\\<br>303030303030303030303030303 -m ctr 0x616263<br>0x075e64 |
| aes_enc |AES encrypt<br>KeySize 192 CTR<br>v0.6.0| $ dtool aes_enc -k 01010101010101010101010101010101010101010\\<br>1010101 -i 03030303030303030303030303030303 -m ctr 0x616263<br>0xbad37a |
| aes_enc |AES encrypt<br>KeySize 256 CTR<br>v0.6.0| $ dtool aes_enc -k 01010101010101010101010101010101010101010\\<br>10101010101010101010101 -i 03030303030303030303030303030303 \\<br>-m ctr 0x616263<br>0x9e5062 |
| aes_dec |AES decrypt<br>KeySize 128 ECB<br>v0.6.0| $ dtool aes_dec -k 01010101010101010101010101010101 -m ecb 0\\<br>xe89c98329f3e8b6da3e714fbba2be6d1<br>0x616263646162636461626364616263 |
| aes_dec |AES decrypt<br>KeySize 192 ECB<br>v0.6.0| $ dtool aes_dec -k 01010101010101010101010101010101010101010\\<br>1010101 -m ecb 0x88fe17738e31914c9166f9b101d1b028<br>0x616263646162636461626364616263 |
| aes_dec |AES decrypt<br>KeySize 256 ECB<br>v0.6.0| $ dtool aes_dec -k 01010101010101010101010101010101010101010\\<br>10101010101010101010101 -m ecb 0x3e6bcc9d26c494b1c6971316020\\<br>acd3a<br>0x616263646162636461626364616263 |
| aes_dec |AES decrypt<br>KeySize 128 CBC<br>v0.6.0| $ dtool aes_dec -k 01010101010101010101010101010101 -i 03030\\<br>303030303030303030303030303 -m cbc 0x350678b99c37ab5f68f5605\\<br>51e960572<br>0x616263646162636461626364616263 |
| aes_dec |AES decrypt<br>KeySize 192 CBC<br>v0.6.0| $ dtool aes_dec -k 01010101010101010101010101010101010101010\\<br>1010101 -i 03030303030303030303030303030303 -m cbc 0xbbc8ff4\\<br>de1a197e67a5f8f4d7a35f9a0<br>0x616263646162636461626364616263 |
| aes_dec |AES decrypt<br>KeySize 256 CBC<br>v0.6.0|$ dtool aes_dec -k 01010101010101010101010101010101010101010\\<br>10101010101010101010101 -i 03030303030303030303030303030303 \\<br>-m cbc 0x3309a7511f007e993676a90a06391d28<br>0x616263646162636461626364616263|
| aes_dec |AES decrypt<br>KeySize 128 CTR<br>v0.6.0| $ dtool aes_dec -k 01010101010101010101010101010101 -i 03030\\<br>303030303030303030303030303 -m ctr 0x075e64<br>0x616263 |
| aes_dec |AES decrypt<br>KeySize 192 CTR<br>v0.6.0| $ dtool aes_dec -k 01010101010101010101010101010101010101010\\<br>1010101 -i 03030303030303030303030303030303 -m ctr 0xbad37a<br>0x616263 |
| aes_dec |AES decrypt<br>KeySize 256 CTR<br>v0.6.0| $ dtool aes_dec -k 01010101010101010101010101010101010101010\\<br>10101010101010101010101 -i 03030303030303030303030303030303 \\<br>-m ctr 0x9e5062<br>0x616263 |
## ECDSA (Secp256k1, NIST P-256, NIST P-384, SM2)
|Sub command| Desc | Example |
|-----------|------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ec_gk |Elliptic-curve generate key pair (Secret<br> key, Public key)<br>Secp256k1<br>v0.7.0| $ dtool ec_gk -c secp256k1 -C<br>(0x9cbe9cd5d7759ca46296f64e3e8211ef5ccaf86b5cb7169711554d1ed\\<br>2ed68ca, 0x0379ce37925295f3103855da38ee2bf0e06a60ec9d86806d0\\<br>efd2de3649a74b40d) |
| ec_gk | Elliptic-curve generate key pair (Secret<br> key, Public key)<br>P-256<br>v0.7.0 | $ dtool ec_gk -c p256<br>(0xf0b3b41add2d79932cdf2a4ba083c16e72647ddcd8718e2187d1567ed\\<br>5a611c9, 0x045c79019e39199effa07576de6e3745fa1dba402854314ae\\<br>f05790e9e827cf7782ac5feb26e28039f94d73078c57b5f29be14ef9da57\\<br>cb53e16e2839bdbbee630) |
| ec_gk | Elliptic-curve generate key pair (Secret<br> key, Public key)<br>SM2<br>v0.7.0 | $ dtool ec_gk -c sm2<br>(0x80a61373e34f7215feceb8dd06bb3731ea362ff5355a7226d4e12d076\\<br>a7eb588, 0x044b2dd8bf6dbbfb14db3e4d17bd7a3e8758eb4232049bec9\\<br>31d1038f4afaae46ac3c771f929bbf35a28b0363789fb19127cea3318f4c\\<br>8902a0034ca5f1b7667d1) |
| ec_sign | Elliptic-curve sign<br>Secp256k1<br>v0.7.0 | $ dtool ec_sign -c secp256k1 -s 0x9cb4f775e9b67118242cea1528\\<br>5555c287a7e3d2f86ba238c1fe87284b898e9a 0x616263<br>0x7c77b65a27984b0e124a0ae2eec6bbf2b338a5c999b943abda576108f9\\<br>2e95364b0b983da055493c87fd138fe5673992b2a48ef85d9ad30c98fc1a\\<br>fcc5fc7bc0 |
| ec_sign | Elliptic-curve sign<br>P-256<br>v0.7.0 | $ dtool ec_sign -c p256 -s 0xf0b3b41add2d79932cdf2a4ba083c16\\<br>e72647ddcd8718e2187d1567ed5a611c9 0x616263<br>0x495f62f272440bd0621d27e97d60c57a0cdaef1cc2434c454eae833bb2\\<br>111cabb91a79328ee766f720a888b14e0f6037eb8a397dcd9bc9f4c18b9b\\<br>923a81cc69 |
| ec_sign | Elliptic-curve sign<br>SM2<br>v0.7.0 | $ dtool ec_sign -c sm2 -s 0x80a61373e34f7215feceb8dd06bb3731\\<br>ea362ff5355a7226d4e12d076a7eb588 0x616263<br>0x0a4d089d3177234ed34aa7f30c6a7a7954539f68825bedbe82be65aefd\\<br>b733c921207be31b8071bbfd5c99044ebde49d3c38e9972063b844f65f4a\\<br>cfc7d6dff2 |
| ec_verify | Elliptic-curve verify<br>Secp256k1<br>v0.7.0 | $ dtool ec_verify -c secp256k1 -p 0x03391aa7238b79e1aad1e038\\<br>c95306171a8ac7499357dc99586f96c5f3b9618d60 -S 0x7c77b65a2798\\<br>4b0e124a0ae2eec6bbf2b338a5c999b943abda576108f92e95364b0b983d\\<br>a055493c87fd138fe5673992b2a48ef85d9ad30c98fc1afcc5fc7bc0 0x6\\<br>16263<br>true |
| ec_verify | Elliptic-curve verify<br>P-256<br>v0.7.0 | $ dtool ec_verify -c p256 -p 0x045c79019e39199effa07576de6e3\\<br>745fa1dba402854314aef05790e9e827cf7782ac5feb26e28039f94d7307\\<br>8c57b5f29be14ef9da57cb53e16e2839bdbbee630 -S 0x495f62f272440\\<br>bd0621d27e97d60c57a0cdaef1cc2434c454eae833bb2111cabb91a79328\\<br>ee766f720a888b14e0f6037eb8a397dcd9bc9f4c18b9b923a81cc69 0x61\\<br>6263<br>true |
| ec_verify | Elliptic-curve verify<br>P-384<br>v0.7.0 |$ dtool ec_verify -c p384 -p 0x044978c6c7be1a5c5194983a945d2\\<br>d8c81ae4b421dd89d12c6dd1756d2387fa2601993657eeb93d289a57625a\\<br>70c2830db5f06f988a3e4549e26e8b6d27c7f1e6e8949d6ce5bf3f88a0f5\\<br>eebaa14499d4379bc81cca6e9ff17d18b8efb370fffe3 -S 0xa0d387bc5\\<br>d5de4979750f531f337fd1d04384ab4a9d251a18852c1ce1a16e2e46a277\\<br>8764d0b3ee090babbc5092ea57a108ddabf9a9fcf8efaad7c0862da2bedd\\<br>de806745c0c3972d738c416d55cfde19b85e39ab54151c87b537c4df7d17\\<br>7ff 0x616263<br>true|
| ec_verify | Elliptic-curve verify<br>SM2<br>v0.7.0 | $ dtool ec_verify -c sm2 -p 0x044b2dd8bf6dbbfb14db3e4d17bd7a\\<br>3e8758eb4232049bec931d1038f4afaae46ac3c771f929bbf35a28b03637\\<br>89fb19127cea3318f4c8902a0034ca5f1b7667d1 -S 0x0a4d089d317723\\<br>4ed34aa7f30c6a7a7954539f68825bedbe82be65aefdb733c921207be31b\\<br>8071bbfd5c99044ebde49d3c38e9972063b844f65f4acfc7d6dff2 0x616\\<br>263<br>true |
| ec_pk | Elliptic-curve calculate public key<br>Secp256k1<br>v0.7.0 | $ dtool ec_pk -c secp256k1 -s 0x9cb4f775e9b67118242cea152855\\<br>55c287a7e3d2f86ba238c1fe87284b898e9a<br>0x04391aa7238b79e1aad1e038c95306171a8ac7499357dc99586f96c5f3\\<br>b9618d6035af9529d80a85ebecb1120d1cfaf1591b7c686907b0a3d18858\\<br>a95e86976747 |
| ec_pk | Elliptic-curve calculate public key<br>Secp256k1 Compressed public key<br>v0.7.0 | $ dtool ec_pk -c secp256k1 -s 0x9cb4f775e9b67118242cea152855\\<br>55c287a7e3d2f86ba238c1fe87284b898e9a -C<br>0x03391aa7238b79e1aad1e038c95306171a8ac7499357dc99586f96c5f3\\<br>b9618d60 |
| ec_pk | Elliptic-curve calculate public key<br>P-256<br>v0.7.0 | $ dtool ec_pk -c p256 -s 0xf0b3b41add2d79932cdf2a4ba083c16e7\\<br>2647ddcd8718e2187d1567ed5a611c9<br>0x045c79019e39199effa07576de6e3745fa1dba402854314aef05790e9e\\<br>827cf7782ac5feb26e28039f94d73078c57b5f29be14ef9da57cb53e16e2\\<br>839bdbbee630 |
| ec_pk | Elliptic-curve calculate public key<br>SM2<br>v0.7.0 | $ dtool ec_pk -c sm2 -s 0x80a61373e34f7215feceb8dd06bb3731ea\\<br>362ff5355a7226d4e12d076a7eb588<br>0x044b2dd8bf6dbbfb14db3e4d17bd7a3e8758eb4232049bec931d1038f4\\<br>afaae46ac3c771f929bbf35a28b0363789fb19127cea3318f4c8902a0034\\<br>ca5f1b7667d1 |
## SM4 encrypt / decrypt
|Sub command| Desc | Example |
|-----------|----------------------------|-------------------------------------------------------------------------------------------------------------------------|
| sm4_enc |SM4 encrypt<br>CTR<br>v0.6.0|$ dtool sm4_enc -k 01010101010101010101010101010101 -i 03030\\<br>303030303030303030303030303 -m ctr 0x616263<br>0x8cd7ea|
| sm4_dec |SM4 decrypt<br>CTR<br>v0.7.0|$ dtool sm4_dec -k 01010101010101010101010101010101 -i 03030\\<br>303030303030303030303030303 -m ctr 0x8cd7ea<br>0x616263|
## EdDSA (Ed25519)
|Sub command| Desc | Example |
|-----------|-------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ed_gk |EdDSA generate key pair (Mini secret key<br>, Public key)<br>v0.8.0| $ dtool ed_gk<br>(0xb850164d1feec8698acca329947c9885bd1d94034d2fbbe6080598adb\\<br>e15b298, 0x892c89a4cd631d08da314607223814775604535a05f50e959\\<br>d21209d01740eba) |
| ed_sign | EdDSA sign<br>Use mini secret key<br>v0.8.0 | $ dtool ed_sign -m 0xb850164d1feec8698acca329947c9885bd1d940\\<br>34d2fbbe6080598adbe15b298 0x616263<br>0x52131a69ebb236703de0c3589689202eebd1d16c40990c3ad8b3582631\\<br>a7a267db745dbb9156d8626187e40f42f6cfe884b6d3ce0cdc04603afeed\\<br>089703ac0e |
| ed_verify | EdDSA verify<br>v0.8.0 |$ dtool ed_verify -p 0x892c89a4cd631d08da3146072238147756045\\<br>35a05f50e959d21209d01740eba -S 0x52131a69ebb236703de0c358968\\<br>9202eebd1d16c40990c3ad8b3582631a7a267db745dbb9156d8626187e40\\<br>f42f6cfe884b6d3ce0cdc04603afeed089703ac0e 0x616263<br>true|
| ed_pk | EdDSA calculate public key<br>Use mini secret key<br>v0.8.0 | $ dtool ed_pk -m 0xb850164d1feec8698acca329947c9885bd1d94034\\<br>d2fbbe6080598adbe15b298<br>0x892c89a4cd631d08da314607223814775604535a05f50e959d21209d01\\<br>740eba |
## sr25519 signature
|Sub command| Desc | Example |
|-----------|---------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sr_gk |sr25519 generate key pair (Mini secret k<br>ey, Public key)<br>v0.8.0| $ dtool sr_gk<br>(0xc243239f434f7a4b0ab8d4600537001e6479c807c3d3623f99c8ad9f2\\<br>a588837, 0x6a8ee649b31efe7aabd8d5af58f85c60f12c48f8aa880cb50\\<br>ae4cd57109e9d6c) |
| sr_sign | sr25519 sign<br>Use mini secret key<br>v0.8.0 | $ dtool sr_sign -m 0xc243239f434f7a4b0ab8d4600537001e6479c80\\<br>7c3d3623f99c8ad9f2a588837 0x616263<br>0xced639526bb840107f33b7e6588219bae8657707f0537dce9969338748\\<br>673d54b92e0efba5477a1494696e5cf3f5e7a40f03271b1ef2e2030ef60d\\<br>6be1caa784 |
| sr_sign | sr25519 sign<br>Use secret key<br>v0.8.0 |$ dtool sr_sign -s 0xb0f4e5710d79bf6a46391e1c6e50a883af76763\\<br>6d55bcad178aa7ec7f1aa750dee6c27bbe26656a29f06ea1612461a86a19\\<br>0db16b31ddd6b78354fb6ba57bf7d 0x616263<br>0xced639526bb840107f33b7e6588219bae8657707f0537dce9969338748\\<br>673d54b92e0efba5477a1494696e5cf3f5e7a40f03271b1ef2e2030ef60d\\<br>6be1caa784|
| sr_verify | sr25519 verify<br>v0.8.0 | $ dtool sr_verify -p 0x6a8ee649b31efe7aabd8d5af58f85c60f12c4\\<br>8f8aa880cb50ae4cd57109e9d6c -S 0xced639526bb840107f33b7e6588\\<br>219bae8657707f0537dce9969338748673d54b92e0efba5477a1494696e5\\<br>cf3f5e7a40f03271b1ef2e2030ef60d6be1caa784 0x616263<br>true |
| sr_sk | sr25519 calculate secret key from mini s<br>ecret key<br>v0.8.0 | $ dtool sr_sk -m 0xc243239f434f7a4b0ab8d4600537001e6479c807c\\<br>3d3623f99c8ad9f2a588837<br>0xb0f4e5710d79bf6a46391e1c6e50a883af767636d55bcad178aa7ec7f1\\<br>aa750dee6c27bbe26656a29f06ea1612461a86a190db16b31ddd6b78354f\\<br>b6ba57bf7d |
| sr_pk | sr25519 calculate public key<br>Use mini secret key<br>v0.8.0 | $ dtool sr_pk -m 0xc243239f434f7a4b0ab8d4600537001e6479c807c\\<br>3d3623f99c8ad9f2a588837<br>0x6a8ee649b31efe7aabd8d5af58f85c60f12c48f8aa880cb50ae4cd5710\\<br>9e9d6c |
| sr_pk | sr25519 calculate public key<br>Use secret key<br>v0.8.0 | $ dtool sr_pk -s 0xb0f4e5710d79bf6a46391e1c6e50a883af767636d\\<br>55bcad178aa7ec7f1aa750dee6c27bbe26656a29f06ea1612461a86a190d\\<br>b16b31ddd6b78354fb6ba57bf7d<br>0x6a8ee649b31efe7aabd8d5af58f85c60f12c48f8aa880cb50ae4cd5710\\<br>9e9d6c |
## QR Code
|Sub command| Desc | Example |
|-----------|-------------------------------------|----------------------|
| s2qr |Convert string to QR code (PNG)<br>Generate QR code for 'hello'<br>v0.15.0|$ dtool s2qr hello|
| qr2s |Convert QR code image to string<br>v0.15.0|$ dtool qr2s|
## JWT encode / decode / verify
|Sub command| Desc | Example |
|-----------|-------------------------------------|-------------------------------------------------------|
|jwt_decode |Decode JWT token (without verification)<br>v0.16.0|$ dtool jwt_decode eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c<br>Header: {"typ": "JWT", "alg": "HS256"}<br>Payload: {"iat": 1516239022, "name": "John Doe", "sub": "1234567890"}|
|jwt_encode |Encode JWT token<br>HS256 algorithm<br>v0.16.0|$ dtool jwt_encode -a HS256 -s mysecret '{"sub":"123","name":"Test"}'<br>eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...|
|jwt_encode |Encode JWT token<br>With expiration (3600 seconds)<br>v0.16.0|$ dtool jwt_encode -a HS256 -s mysecret -e 3600 '{"sub":"123"}'<br>eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...|
|jwt_verify |Verify JWT token<br>Valid signature<br>v0.16.0|$ dtool jwt_verify -a HS256 -s mysecret eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...<br>Valid: true<br>Payload: {"sub": "123", "name": "Test"}|
|jwt_verify |Verify JWT token<br>Invalid signature<br>v0.16.0|$ dtool jwt_verify -a HS256 -s wrongsecret eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...<br>Valid: false<br>Error: InvalidSignature|
## UUID generation and parsing
|Sub command| Desc | Example |
|-----------|-------------------------------------|-------------------------------------------------------|
|uuid_gen |Generate UUID v4 (random)<br>Default version<br>v0.16.0|$ dtool uuid_gen<br>550e8400-e29b-41d4-a716-446655440000|
|uuid_gen |Generate UUID v1<br>Timestamp-based<br>v0.16.0|$ dtool uuid_gen -v 1<br>a3bb189e-8bf9-11e3-baa8-0800200c9a66|
|uuid_gen |Generate UUID v5<br>Namespace + name (DNS)<br>v0.16.0|$ dtool uuid_gen -v 5 -n dns -s example.com<br>cfbff0d1-9375-5685-968c-48ce8b15ae17|
|uuid_gen |Generate UUID v5<br>Namespace + name (URL)<br>v0.16.0|$ dtool uuid_gen -v 5 -n url -s https://example.com<br>3d813cbb-47fb-32ba-91df-831e1593ac29|
|uuid_gen |Generate UUID v7<br>Sortable timestamp-based<br>v0.16.0|$ dtool uuid_gen -v 7<br>018c2b88-5a00-7000-8000-000000000000|
|uuid_parse |Parse UUID<br>Show version and variant<br>v0.16.0|$ dtool uuid_parse 550e8400-e29b-41d4-a716-446655440000<br>Version: 4 (Random)<br>Variant: RFC 4122<br>Valid: true|