2 unstable releases
0.2.0 | Feb 11, 2025 |
---|---|
0.1.0 | Feb 3, 2025 |
#304 in Cryptography
220 downloads per month
28KB
120 lines
Li₂utils
There is a significant lack of simple FIPS 204 (CRYSTALS-Dilithium) signature generators/verifiers.
This simple toolset is written in Rust and contains three tools: li2sign
, li2verify
, and li2fingerprint
.
This is provided for your convenience, and contains no audit, assurance, or fitness for any purpose whatsoever.
This toolset relies completely on the great fips204
Rust library by the RustCrypto Developers, and uses ML‐DSA‐44 parameters.
You can install the toolset from Crates.io by issuing: cargo install li2utils
li2sign
Usage: li2sign
Takes data from stdin
and uses the private key from ./private_key.bin
if present; otherwise, it generates a new private key and stores it in that file. Then, it signs the given data, and outputs the signature to stdout
and the public key to stderr
.
li2verify
Usage: li2verify <public_key_hex> <signature_hex>
Takes data from stdin
and verifies it against public_key_hex
and signature_hex
. Outputs "Signature is valid.
" to stdin
or "Signature is invalid.
" to stderr
. On invalid signature, the program exits with 1
.
li2fingerprint
Usage: li2fingerprint <public_key_hex>
Calculates SHAKE256 hash of the public_key_hex
to provide 21-byte fingerprint in chunks of 3 bytes in hexadecimal (inspired by OpenPGP but with raw public key without the packet structure). By diverging from the PGP format, these fingerprints can be easily distinguished from PGP keys.
Example usage
Generate signature
Command:
echo -n "Hello world"|li2sign
Output:
Public Key (hex): 6cb7df9d333e2eeed36e0e44406d1ba8afca195e1c8b2140a2897adfa5081687ffa1a1a0d0f86359bcefc4d4d03a66f4dd201a770b531b8f4fa7e2d33d327b5c3ee05fb8b577e86a003c8317e2d24c86b2d65555e960ea41b2e2bdc59358918757e26df0ec34c3e0475d5d3a86a960d7e9f457cc9e222b4e2bc43f067cbf9e42c63650c11a6b0ccc0061a50647224a7aa25c3109c4c49a49ba80244953e8ecbf64d143d0f8e2cbc498339d7f00fa4f83b65b1e750dcd954cd9dfedc4d90c880ff2499a637fb771ab9a27936d951609c206f6fdf04e6f61702a64f37f9a3e8167036e56e79b210b65ac567c4def2fbdb4e6b21c02e43186711ea991f4b538040800ac078f4ea60264c3e53d16f3180995695ee6c51a10e9f39d05bc27f82a7c0400ca7ae7a7033f731c1c06cd5217ab7efe4f733d10b4efe13ff43186b11ceec5ab0af6dfee9ebb55ee764379836c95b4510f43c675c44c795ff6b15adcd4165a65ec39482c583fac787553c83d17a4876faa9e90dfdccc293d6db1278fa7685a1e55bd33f2c4a26a1319956eb9ba695b3f37f515da8f7c45c05faabab86e93f73df6fb86e999ebcad6702687bfdb1426ef233ce86dc043da1776db823934f8777685a63437daad78f541046b6c6b28b3464fbf46807cc1e6863f7a0eaf0f0ba465300cdf6ba67b1bd3d9749b83035c6a021c64f3695bacaaf05331ab9d33a8480b35cbce2b109ca5ed5999c8a2e73c655a1283362136c5433c4bbe4dbe3f89b8f5bfe5430556c021dcdcd05d89936f7e0e029822b3f65a1e99ff6179db75ef8bd35a245d715da051ad2e3d034b904efe4352b531a09db322c1b116cecd7382c91ae6769ff38d571e9455cd527978b6d64e7580a1555a9fd7d3b674ee6e92bc62a986cd19f3f8d222efe5dca69a7129ac1d1782b84a6246832fa1ea750d1019ff0faa054a0d84ba195cf79c99411b4a8be2277403380f9fa7c810b4ca6d189818f529c18f4f212e2c21530752549ae18b3662ad16ea409234620a76d9e62635ea88c1878cc86740bd09ce8704b2f4164b57a54603864a9f4f3786250b78a862fff71865bb29ac65c9bc0d76f80960f8b6fa1296e9c0c248e999febfac8bec083b2c70fcc367d75b221f9f6984e391f8920ef104be2093364db7d1ef3c1fc5dd0c81917c74fc83c54c61b0aa063a3725b4742464bfad742e55812e55288e72ef5e4275d95d4f4744e73b80193591ed6b104af30e9698713ea9b09daae3789ac5565269575f38a298e5b17f9966045a13a6056e83f349088d9f1555e0688fe34736013d6e645bb890af9f6861a498d65faf643e0bec6422140c2ec7a6aac4fe51ab75a8debc96e45c81a5b888c47658da62e0bee84eb421a4e70e28d90d3b6920ca4eb9345b41cdf6f633c02a0051ce4d57d21ceb2e7687d943d6a31f589cdfc56e30d92bd8c9f32dc80e065add59a7512150796efbb28cc2b04114459fee2ede7e8c985340993a68faca3529a5e84de8402000da944088d30b3d920af13783b92a7a83f9b9c1fa2cec70e6c56f4ee59c3310bad473a110f0c389b6d2d0e0de0df211b78347f575df70448db21586649b213202d72ad0ddf42a3546924b3986f0d9a2c436aeeb4e6bda74fa6692e7b7d629500944c280c4ab895cf8244e5eb54205865d880c016fc42b1b0d5538c8483a1c106d53a41d6c50497a316d5aba2c61fcd0991aa56453d2e730aac4df8752999e8876c9b8b5cb7a453737c7b4a4e3428615d5ee3a3a7d8b5aad762e0dbf8dabf77c813c2401348aa9d4a7b86580910ccfc8b9a3f73f63c261d41aa4ca8f77918b6a98435f7918e8677f4b4cf3022fb601
5c4bb6c2a5dd508d6274fe076b43e9e66772419f71d342ffc4f4db74966e05d1d5deb6d7b74dc738a62e9aaf4c27783587e71d49e76c14a88a6eee4f8466f0f8d9da41954ba691c065e81931033cc4883929aecd3330fe5864099e0db4e0be119372d91654877fae71e7f49e00cc2fcfefae8cc3a48b2ef727de6723d0fd245ae1708163765a6be31ea7c8351d2e969e4e7d184d2cf7f455191120c9fd6845960503db297c47a4561140fbb1ad098c9aa333c9d1dbccb50c9ac71844da024680460911c49d678b37068bec8ba863e3ce9b40e6244e6df51e25297f5a4edb55c4183fd85422516247175ef7ef0c1d219b01adfba2bd7d795ad4f0094b552cf3eec867901f1c88f5d6f27b3274a5682a16ef0887d2fd7ceeae7c2d6be340ee8cee6d0e2e1db4e7f442dcd2e86bec744e0a73b7dad5e12aad05a17185b54a181ae07f8b81dfd16d467a790e2c5dd242d5785b70efbdd0d37efa621e9d58ba9eb76dc4d360fcdaaf4c9a330c94847f120e08e2acbeb9066aad8bd0a6159ad045b6ce47d90e194074eb39644a35dbd83bbacf86321edc690eb8cac1f1f183ebe6be9aaa3bf5aa9c51827f3790655082172b00339574b9c52c13a85895b1b4c7f916cefa9154e8aff38b1fb1093b96f286dade6fcc9c4945a2467e84f84039ba0c2cc900b83ebe085fc33142b39c7bbff9b5b34332bdf7954d7d80369ff227d358cf5dff6a12a9cc6cc32e8bdfee36ad173864765fa8a6b5fa3b9ed0e427e267aa4c18f28aa2e261fc64f8cdd6cc99f0dab4a94390e732cd16f5e574627c8330271e41e22298161da6e6f3d36324ff9948ed198d3fb7f255405a23eae587af54086a92f8bc40fb050ade91121081a38402988f52737b1eff23f969d082f6ca9a2ca824642a44986e6d978a87c858252adeb498bfd85db868be2ee87969c929116cc01156f4bc8367c8d23238cfcf80f7e1297aa120e66cc92e742cc9f34c7a8fa4a50024a645998e9faec98189479006c428534e5e9a33894022e64459ab19dbb16b877635abac00d7b6d574278bf1feb52c4e6cced8ad807080716bb8c120ea2ec274c5023cb71f5fdea183cfe95deb4858a9e4e818cf0ea9583b95b06de5996c11dc48151f73fa14f128db5266ad7bd02d9821ae11e39d0d51e0bcc2df8982670b5f1a15b220a7aeb7de5780506adebea0c8193d298dbc17c21f15df0848b9b61c3bb86227853b9cc2455fd8ae6325e4c2c7197403fe13ac7e648d1fb80165899fa7f0d74ccdadc865da1860e8fd32dbce079cc916d4e737b83cec611a14e524cb68b5cfbe1b324446aea792b5663adbbe769224018d2ac620752b8726fcc1b20efb4ed81a1719201a9d4e5836f4c8040352c7a3a244aa6893e02fb487e2555ba9c571258cc3b749ea93457c45b2737d80292ca86015790c9661672f5ed52000481f9278c7a7af0496a7b70a7f09a5aef3b5c6349534dc8cc2fd24b580078a1fcbdb0d4a5c9620d3e1d912686d0e5ac278fb1d27f1318ebd6ac503e6b9915404c60b274673d33b822c456ceac95f9a013517ba06228ffa11ce3d83c2361f4d54725623b008f6193792cda2072306d9a0f3e60652c9a3c40d977a66632eccacb8042b5323a47d75a6989a26f6267d979f0aaa985d5ad92becfc5125fd358324017423d1335e29cd24ec078c9395fb1e1f7c6381521099f32428b9534cc100d36ba4effaa48e8367cd3ec92c847b8f28b2438c92f5393dfb5cf034bde28619576225058ddd3cb0d54b3c9f5b81c9619829abfcc1c070ba707f467fae35ba20747f0303cfb53316177a48e4dfb581ead59a3e00532cceffbf64638e68de886baf68120bde0e323481f075ca07d6d65c154918ac9b4510d3ad52ad0fde33d35af8c3aee0ba657e1dcf45d09aea5dbd08a07203f6e5e2df38fa94025344b652b7f6641238610cadcf30f50a79e43c3c15c985ad5b428af21cbd4e21895d2c0948f053182ed75716da62893b37d532479ecef82867f732065db460ac75c6391634ed84dc0ffa28b11cb202ebcbcdb140ae0183241f6ee7121cbb1d58af1bcfffd0c41415e1b41873f327fd9a814d8061920678b4aa5695def4f619f692df03122ea531a4f0782bde05b1ac5f10d0111f32757433ba69885834ef13659c017e3f5795f8e51bb83e5c4bd3a4442bffaf28ea2559d91886644fa26ecafa8907089853132e98a109736848f0bb50ce295453c44eb2541fa03b99bd44e62871f50bb848e0d0dfacc29d51028e738e9222d695cdbba47f2bea1800a95d9e57189233826d4f1dc02da0ce1e9a0c8cb4614e9a4c8faed4a0710d594a3afd688383aebef088202f57e560d1385540c6931e22e5f1eac3f9b510fcb3c3a8f0444e80c9508623b2af74e3a143da5208d1c803f7fc94de46eac580bfc78435b1a0222b2176dd838c3f0564a179b0589fb3a5f5759701e079679ea56acd46a4ad291b7171b2c5bf65cf6551b9504cd58fe8130c41dca879df479caee008a32ba769d73e1d8a8d78b6af7b72faa19013c91fc0352f819399686b1410ec146debca2ad5517b772f0dde083569fdc6028547bd775a0fa23b5e29c40b9993e2c3229cd433c92cf5583c81960480793b03310f277a00712cf74c894e59918e84560a02fe253bbe8e7fb36a40f4d4be0f6ff141b1a7692c1b3c7631988d1b101136c2de58602670a74678783e776cddda7c5b119faa150f1bd5541bdcf72d0e0b69b0ddb85cab35c180b899781575e5aa6161bd62f7a9af40b47fb266fbeb4d10f88d3e18ff7f6fdbc770418f9c3b199dea9d3b079a098735d163fcae1d75af2e87b2f7167620f2922e2d2fa9c95ac2cd60697c3889630cb09cf94aa897a8347bea705e539a7deae6dba9b96fabe42601ceed8e7336611d4923b3e1be35e685484f204a0dd680f8b42b79e3f1f4fcba804ad601c4c24e3ed67d973e413314fb35fbb54bf7e6a055a12b1f1dec9fecb8ecf3325234df95ecace3d81ef1ceac2a1a81d892b7743d6e14a9482764cc95fe6773222de21d84997e90668504b14dae8d37c77f1b405e2e2390683cec98b4bbb92779ba69ba0118d15f3d843c06de893e0c5f755c54c12451d357b660396208c9e705cbe177fa236de1294038be098b900b51f341976e9917b534e3e17e5cad7006d3bd22a1c98f5be8453c6d7c792b887d8e21f30d0ceb25974c406348e544fe08b631b78efc617e93c810ab896dfa1b835788c3fae6ed3b9d0372696fdf862fecc3232133b6e04cb755b77ca020bc441e0462c5365c9c1cf86ebdef1de90e1b212a5c5d65899196b5c5e0edf10006070a5c616d8494b1b6c0c8dbedf22a494b5560697183939cb5c5c8d0d6f7fa22234e4f535f809db6c4d1d5ee000000000000000000000000000000000000000f1f303d
Verify signature
Command:
echo -n "Hello world"|li2verify 6cb7df9d333e2eeed36e0e44406d1ba8afca195e1c8b2140a2897adfa5081687ffa1a1a0d0f86359bcefc4d4d03a66f4dd201a770b531b8f4fa7e2d33d327b5c3ee05fb8b577e86a003c8317e2d24c86b2d65555e960ea41b2e2bdc59358918757e26df0ec34c3e0475d5d3a86a960d7e9f457cc9e222b4e2bc43f067cbf9e42c63650c11a6b0ccc0061a50647224a7aa25c3109c4c49a49ba80244953e8ecbf64d143d0f8e2cbc498339d7f00fa4f83b65b1e750dcd954cd9dfedc4d90c880ff2499a637fb771ab9a27936d951609c206f6fdf04e6f61702a64f37f9a3e8167036e56e79b210b65ac567c4def2fbdb4e6b21c02e43186711ea991f4b538040800ac078f4ea60264c3e53d16f3180995695ee6c51a10e9f39d05bc27f82a7c0400ca7ae7a7033f731c1c06cd5217ab7efe4f733d10b4efe13ff43186b11ceec5ab0af6dfee9ebb55ee764379836c95b4510f43c675c44c795ff6b15adcd4165a65ec39482c583fac787553c83d17a4876faa9e90dfdccc293d6db1278fa7685a1e55bd33f2c4a26a1319956eb9ba695b3f37f515da8f7c45c05faabab86e93f73df6fb86e999ebcad6702687bfdb1426ef233ce86dc043da1776db823934f8777685a63437daad78f541046b6c6b28b3464fbf46807cc1e6863f7a0eaf0f0ba465300cdf6ba67b1bd3d9749b83035c6a021c64f3695bacaaf05331ab9d33a8480b35cbce2b109ca5ed5999c8a2e73c655a1283362136c5433c4bbe4dbe3f89b8f5bfe5430556c021dcdcd05d89936f7e0e029822b3f65a1e99ff6179db75ef8bd35a245d715da051ad2e3d034b904efe4352b531a09db322c1b116cecd7382c91ae6769ff38d571e9455cd527978b6d64e7580a1555a9fd7d3b674ee6e92bc62a986cd19f3f8d222efe5dca69a7129ac1d1782b84a6246832fa1ea750d1019ff0faa054a0d84ba195cf79c99411b4a8be2277403380f9fa7c810b4ca6d189818f529c18f4f212e2c21530752549ae18b3662ad16ea409234620a76d9e62635ea88c1878cc86740bd09ce8704b2f4164b57a54603864a9f4f3786250b78a862fff71865bb29ac65c9bc0d76f80960f8b6fa1296e9c0c248e999febfac8bec083b2c70fcc367d75b221f9f6984e391f8920ef104be2093364db7d1ef3c1fc5dd0c81917c74fc83c54c61b0aa063a3725b4742464bfad742e55812e55288e72ef5e4275d95d4f4744e73b80193591ed6b104af30e9698713ea9b09daae3789ac5565269575f38a298e5b17f9966045a13a6056e83f349088d9f1555e0688fe34736013d6e645bb890af9f6861a498d65faf643e0bec6422140c2ec7a6aac4fe51ab75a8debc96e45c81a5b888c47658da62e0bee84eb421a4e70e28d90d3b6920ca4eb9345b41cdf6f633c02a0051ce4d57d21ceb2e7687d943d6a31f589cdfc56e30d92bd8c9f32dc80e065add59a7512150796efbb28cc2b04114459fee2ede7e8c985340993a68faca3529a5e84de8402000da944088d30b3d920af13783b92a7a83f9b9c1fa2cec70e6c56f4ee59c3310bad473a110f0c389b6d2d0e0de0df211b78347f575df70448db21586649b213202d72ad0ddf42a3546924b3986f0d9a2c436aeeb4e6bda74fa6692e7b7d629500944c280c4ab895cf8244e5eb54205865d880c016fc42b1b0d5538c8483a1c106d53a41d6c50497a316d5aba2c61fcd0991aa56453d2e730aac4df8752999e8876c9b8b5cb7a453737c7b4a4e3428615d5ee3a3a7d8b5aad762e0dbf8dabf77c813c2401348aa9d4a7b86580910ccfc8b9a3f73f63c261d41aa4ca8f77918b6a98435f7918e8677f4b4cf3022fb601 5c4bb6c2a5dd508d6274fe076b43e9e66772419f71d342ffc4f4db74966e05d1d5deb6d7b74dc738a62e9aaf4c27783587e71d49e76c14a88a6eee4f8466f0f8d9da41954ba691c065e81931033cc4883929aecd3330fe5864099e0db4e0be119372d91654877fae71e7f49e00cc2fcfefae8cc3a48b2ef727de6723d0fd245ae1708163765a6be31ea7c8351d2e969e4e7d184d2cf7f455191120c9fd6845960503db297c47a4561140fbb1ad098c9aa333c9d1dbccb50c9ac71844da024680460911c49d678b37068bec8ba863e3ce9b40e6244e6df51e25297f5a4edb55c4183fd85422516247175ef7ef0c1d219b01adfba2bd7d795ad4f0094b552cf3eec867901f1c88f5d6f27b3274a5682a16ef0887d2fd7ceeae7c2d6be340ee8cee6d0e2e1db4e7f442dcd2e86bec744e0a73b7dad5e12aad05a17185b54a181ae07f8b81dfd16d467a790e2c5dd242d5785b70efbdd0d37efa621e9d58ba9eb76dc4d360fcdaaf4c9a330c94847f120e08e2acbeb9066aad8bd0a6159ad045b6ce47d90e194074eb39644a35dbd83bbacf86321edc690eb8cac1f1f183ebe6be9aaa3bf5aa9c51827f3790655082172b00339574b9c52c13a85895b1b4c7f916cefa9154e8aff38b1fb1093b96f286dade6fcc9c4945a2467e84f84039ba0c2cc900b83ebe085fc33142b39c7bbff9b5b34332bdf7954d7d80369ff227d358cf5dff6a12a9cc6cc32e8bdfee36ad173864765fa8a6b5fa3b9ed0e427e267aa4c18f28aa2e261fc64f8cdd6cc99f0dab4a94390e732cd16f5e574627c8330271e41e22298161da6e6f3d36324ff9948ed198d3fb7f255405a23eae587af54086a92f8bc40fb050ade91121081a38402988f52737b1eff23f969d082f6ca9a2ca824642a44986e6d978a87c858252adeb498bfd85db868be2ee87969c929116cc01156f4bc8367c8d23238cfcf80f7e1297aa120e66cc92e742cc9f34c7a8fa4a50024a645998e9faec98189479006c428534e5e9a33894022e64459ab19dbb16b877635abac00d7b6d574278bf1feb52c4e6cced8ad807080716bb8c120ea2ec274c5023cb71f5fdea183cfe95deb4858a9e4e818cf0ea9583b95b06de5996c11dc48151f73fa14f128db5266ad7bd02d9821ae11e39d0d51e0bcc2df8982670b5f1a15b220a7aeb7de5780506adebea0c8193d298dbc17c21f15df0848b9b61c3bb86227853b9cc2455fd8ae6325e4c2c7197403fe13ac7e648d1fb80165899fa7f0d74ccdadc865da1860e8fd32dbce079cc916d4e737b83cec611a14e524cb68b5cfbe1b324446aea792b5663adbbe769224018d2ac620752b8726fcc1b20efb4ed81a1719201a9d4e5836f4c8040352c7a3a244aa6893e02fb487e2555ba9c571258cc3b749ea93457c45b2737d80292ca86015790c9661672f5ed52000481f9278c7a7af0496a7b70a7f09a5aef3b5c6349534dc8cc2fd24b580078a1fcbdb0d4a5c9620d3e1d912686d0e5ac278fb1d27f1318ebd6ac503e6b9915404c60b274673d33b822c456ceac95f9a013517ba06228ffa11ce3d83c2361f4d54725623b008f6193792cda2072306d9a0f3e60652c9a3c40d977a66632eccacb8042b5323a47d75a6989a26f6267d979f0aaa985d5ad92becfc5125fd358324017423d1335e29cd24ec078c9395fb1e1f7c6381521099f32428b9534cc100d36ba4effaa48e8367cd3ec92c847b8f28b2438c92f5393dfb5cf034bde28619576225058ddd3cb0d54b3c9f5b81c9619829abfcc1c070ba707f467fae35ba20747f0303cfb53316177a48e4dfb581ead59a3e00532cceffbf64638e68de886baf68120bde0e323481f075ca07d6d65c154918ac9b4510d3ad52ad0fde33d35af8c3aee0ba657e1dcf45d09aea5dbd08a07203f6e5e2df38fa94025344b652b7f6641238610cadcf30f50a79e43c3c15c985ad5b428af21cbd4e21895d2c0948f053182ed75716da62893b37d532479ecef82867f732065db460ac75c6391634ed84dc0ffa28b11cb202ebcbcdb140ae0183241f6ee7121cbb1d58af1bcfffd0c41415e1b41873f327fd9a814d8061920678b4aa5695def4f619f692df03122ea531a4f0782bde05b1ac5f10d0111f32757433ba69885834ef13659c017e3f5795f8e51bb83e5c4bd3a4442bffaf28ea2559d91886644fa26ecafa8907089853132e98a109736848f0bb50ce295453c44eb2541fa03b99bd44e62871f50bb848e0d0dfacc29d51028e738e9222d695cdbba47f2bea1800a95d9e57189233826d4f1dc02da0ce1e9a0c8cb4614e9a4c8faed4a0710d594a3afd688383aebef088202f57e560d1385540c6931e22e5f1eac3f9b510fcb3c3a8f0444e80c9508623b2af74e3a143da5208d1c803f7fc94de46eac580bfc78435b1a0222b2176dd838c3f0564a179b0589fb3a5f5759701e079679ea56acd46a4ad291b7171b2c5bf65cf6551b9504cd58fe8130c41dca879df479caee008a32ba769d73e1d8a8d78b6af7b72faa19013c91fc0352f819399686b1410ec146debca2ad5517b772f0dde083569fdc6028547bd775a0fa23b5e29c40b9993e2c3229cd433c92cf5583c81960480793b03310f277a00712cf74c894e59918e84560a02fe253bbe8e7fb36a40f4d4be0f6ff141b1a7692c1b3c7631988d1b101136c2de58602670a74678783e776cddda7c5b119faa150f1bd5541bdcf72d0e0b69b0ddb85cab35c180b899781575e5aa6161bd62f7a9af40b47fb266fbeb4d10f88d3e18ff7f6fdbc770418f9c3b199dea9d3b079a098735d163fcae1d75af2e87b2f7167620f2922e2d2fa9c95ac2cd60697c3889630cb09cf94aa897a8347bea705e539a7deae6dba9b96fabe42601ceed8e7336611d4923b3e1be35e685484f204a0dd680f8b42b79e3f1f4fcba804ad601c4c24e3ed67d973e413314fb35fbb54bf7e6a055a12b1f1dec9fecb8ecf3325234df95ecace3d81ef1ceac2a1a81d892b7743d6e14a9482764cc95fe6773222de21d84997e90668504b14dae8d37c77f1b405e2e2390683cec98b4bbb92779ba69ba0118d15f3d843c06de893e0c5f755c54c12451d357b660396208c9e705cbe177fa236de1294038be098b900b51f341976e9917b534e3e17e5cad7006d3bd22a1c98f5be8453c6d7c792b887d8e21f30d0ceb25974c406348e544fe08b631b78efc617e93c810ab896dfa1b835788c3fae6ed3b9d0372696fdf862fecc3232133b6e04cb755b77ca020bc441e0462c5365c9c1cf86ebdef1de90e1b212a5c5d65899196b5c5e0edf10006070a5c616d8494b1b6c0c8dbedf22a494b5560697183939cb5c5c8d0d6f7fa22234e4f535f809db6c4d1d5ee000000000000000000000000000000000000000f1f303d
Output:
Signature is valid.
Fingerprint a public key
Command:
li2fingerprint 6cb7df9d333e2eeed36e0e44406d1ba8afca195e1c8b2140a2897adfa5081687ffa1a1a0d0f86359bcefc4d4d03a66f4dd201a770b531b8f4fa7e2d33d327b5c3ee05fb8b577e86a003c8317e2d24c86b2d65555e960ea41b2e2bdc59358918757e26df0ec34c3e0475d5d3a86a960d7e9f457cc9e222b4e2bc43f067cbf9e42c63650c11a6b0ccc0061a50647224a7aa25c3109c4c49a49ba80244953e8ecbf64d143d0f8e2cbc498339d7f00fa4f83b65b1e750dcd954cd9dfedc4d90c880ff2499a637fb771ab9a27936d951609c206f6fdf04e6f61702a64f37f9a3e8167036e56e79b210b65ac567c4def2fbdb4e6b21c02e43186711ea991f4b538040800ac078f4ea60264c3e53d16f3180995695ee6c51a10e9f39d05bc27f82a7c0400ca7ae7a7033f731c1c06cd5217ab7efe4f733d10b4efe13ff43186b11ceec5ab0af6dfee9ebb55ee764379836c95b4510f43c675c44c795ff6b15adcd4165a65ec39482c583fac787553c83d17a4876faa9e90dfdccc293d6db1278fa7685a1e55bd33f2c4a26a1319956eb9ba695b3f37f515da8f7c45c05faabab86e93f73df6fb86e999ebcad6702687bfdb1426ef233ce86dc043da1776db823934f8777685a63437daad78f541046b6c6b28b3464fbf46807cc1e6863f7a0eaf0f0ba465300cdf6ba67b1bd3d9749b83035c6a021c64f3695bacaaf05331ab9d33a8480b35cbce2b109ca5ed5999c8a2e73c655a1283362136c5433c4bbe4dbe3f89b8f5bfe5430556c021dcdcd05d89936f7e0e029822b3f65a1e99ff6179db75ef8bd35a245d715da051ad2e3d034b904efe4352b531a09db322c1b116cecd7382c91ae6769ff38d571e9455cd527978b6d64e7580a1555a9fd7d3b674ee6e92bc62a986cd19f3f8d222efe5dca69a7129ac1d1782b84a6246832fa1ea750d1019ff0faa054a0d84ba195cf79c99411b4a8be2277403380f9fa7c810b4ca6d189818f529c18f4f212e2c21530752549ae18b3662ad16ea409234620a76d9e62635ea88c1878cc86740bd09ce8704b2f4164b57a54603864a9f4f3786250b78a862fff71865bb29ac65c9bc0d76f80960f8b6fa1296e9c0c248e999febfac8bec083b2c70fcc367d75b221f9f6984e391f8920ef104be2093364db7d1ef3c1fc5dd0c81917c74fc83c54c61b0aa063a3725b4742464bfad742e55812e55288e72ef5e4275d95d4f4744e73b80193591ed6b104af30e9698713ea9b09daae3789ac5565269575f38a298e5b17f9966045a13a6056e83f349088d9f1555e0688fe34736013d6e645bb890af9f6861a498d65faf643e0bec6422140c2ec7a6aac4fe51ab75a8debc96e45c81a5b888c47658da62e0bee84eb421a4e70e28d90d3b6920ca4eb9345b41cdf6f633c02a0051ce4d57d21ceb2e7687d943d6a31f589cdfc56e30d92bd8c9f32dc80e065add59a7512150796efbb28cc2b04114459fee2ede7e8c985340993a68faca3529a5e84de8402000da944088d30b3d920af13783b92a7a83f9b9c1fa2cec70e6c56f4ee59c3310bad473a110f0c389b6d2d0e0de0df211b78347f575df70448db21586649b213202d72ad0ddf42a3546924b3986f0d9a2c436aeeb4e6bda74fa6692e7b7d629500944c280c4ab895cf8244e5eb54205865d880c016fc42b1b0d5538c8483a1c106d53a41d6c50497a316d5aba2c61fcd0991aa56453d2e730aac4df8752999e8876c9b8b5cb7a453737c7b4a4e3428615d5ee3a3a7d8b5aad762e0dbf8dabf77c813c2401348aa9d4a7b86580910ccfc8b9a3f73f63c261d41aa4ca8f77918b6a98435f7918e8677f4b4cf3022fb601
Output:
AB2866 D227FC 057236 75F233 48C9AF 1B9C6C CB3E48
Original author: Ville Sundell (with the help of generative AI), released in the public domain under CC0.
Dependencies
~4MB
~36K SLoC