GPGSIGS(1)

πŸ’… GPGSIGS(1) β€” the group chat version

ok so real talk, this is gpgsigs from the User Contributed Perl Documentation ✨ it's a lil Perl bestie that lives in your terminal and helps you not lose your whole entire mind at a keysigning party πŸŽ€


✨ NAME ✨

gpgsigs β€” annotate a list of GnuPG keys with the signatures you've already done, bestie πŸ’–


πŸ¦‹ SYNOPSIS πŸ¦‹

gpgsigs [options] keyid[,keyid[,...]] keytxt [outfile]

that's the whole vibe. options, then your keyid(s), then your keytxt, and optionally where you wanna dump the output πŸ’…


🌸 DESCRIPTION 🌸

okay so picture this: you're at a keysigning party and everyone's standing around with their little key slips and it's giving chaos 😭. gpgsigs was literally written to help you get through signing keys at one of those. it reads an input file full of keys in gpg --list-keys format, and it prepends every single line with a tag that tells you whether you've already signed that uid or not. no cap. every line. 🫢

and the ✨magic✨ part: when the file has ALGO Checksum: lines and placeholders written as __ __, it slots the checksum right in there for you. iconic.

ALGO can be set to any of these algorithms, and yes we're listing all of them because we don't gatekeep:

  • MD5
  • SHA1
  • SHA256
  • RIPEMD160

πŸ‘‘ OPTIONS πŸ‘‘

  • -r β€” runs gpg --recv-keys before creating the output. like, go fetch first, then write πŸ’…
  • -f charset β€” converts keytxt from charset. the default? ISO-8859-1. that's the starting charset bestie, don't @ me 🌈
  • -t charset β€” converts the UIDs to charset. the default is derived from LC_ALL, LC_CTYPE, and LANG β€” and if literally all of those are unset, the default is ISO-8859-1. so it's a whole vibe check on your environment first, then it falls back 🧚
  • --refresh β€” refreshes the UID lists per key from gpg. super useful when UIDs were added or revoked since you generated that input text. it's giving "keep up, bestie" πŸ”₯
  • --latex β€” generates LaTeX output, and yes it includes photo IDs πŸ“Έ. this one implies --refresh, so it refreshes whether you asked or not.
⚠️ heads up bestie: this writes jpg files to the current directory. the current one. right there. no warning, no folder, just vibes and jpgs πŸ’€
  • keyid β€” use this keyid for annotation. it can be 8 or 16 bytes, or a full fingerprint. multiple keyids? separate them with a comma (,). yes, a comma. exactly that one πŸŽ€
  • keytxt β€” read input from keytxt. that's the whole job. it's the input. love that for it πŸ“–
  • outfile β€” write output to outfile. and if you don't give one? default is stdout, so it just spills out into your terminal like a little waterfall πŸ’§

πŸ’œ ENVIRONMENT πŸ’œ

  • HOME β€” the default home directory. yes, that HOME. house of the home 🏠
  • GNUPGBIN β€” the gpg binary. default: "gpg". so if you've got gpg living somewhere weird, this is where you tell it 🫢
  • GNUPGHOME β€” the default working directory for gpg. default: "$HOME/.gnupg". that lil folder. the one. 🌸

🌈 EXAMPLES 🌈

these key signing parties are out here using gpgsigs, and honestly? taste πŸ‘‘


πŸ’€ BUGS πŸ’€

so GnuPG is known to change its output format quite often 😭 like it wakes up and chooses chaos. this version has been tested with gpg 1.4.18 and gpg 2.0.26. YMMV β€” your mileage may vary, bestie, and it may vary a LOT πŸ™ˆ


πŸ¦‹ SEE ALSO πŸ¦‹

go read those too, they're part of the friend group πŸ’–


giving credit where credit is due, as we always do:

  • (c) 2004 Uli Martens <uli@youam.net>
  • (c) 2004, 2005 Peter Palfrader <peter@palfrader.org>
  • (c) 2004, 2005, 2006, 2007 Christoph Berg <cb@df7cb.de>
  • (c) 2014, 2015 Guilhem Moulin <guilhem@debian.org>

⭐ LICENSE ⭐

All rights reserved. periodt. πŸ’…

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.
🚨 okay this next part is ALL CAPS ON PURPOSE and it is not a drill, do not skip it:

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


and that's the whole page, bestie 🫢 this iconic lil manpage is running on perl v5.40.1 and it's dated 2026-02-09 β€” go forth and sign some keys, you absolute main character πŸ‘‘βœ¨

πŸ“¦ where this page comes from