#post-quantum-cryptography #fips #signature #crystals-dilithium #pqc #fingerprint #signer-verifier

app li2utils

Simple signer/verifier for FIPS 204 / CRYSTALS-Dilithium post quantum cryptography (PQC). Not verified / audited (WIP)!

2 unstable releases

0.2.0 Feb 11, 2025
0.1.0 Feb 3, 2025

#304 in Cryptography

Download history 51/week @ 2025-01-28 61/week @ 2025-02-04 108/week @ 2025-02-11

220 downloads per month

CC0 license

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