├── .gitattributes ├── .gitignore ├── Caddyfile ├── Dockerfile ├── LICENSE.txt ├── README.md ├── Taskfile.yml ├── bin ├── deploy-sites ├── update-bundles ├── update-dns-fragments ├── update-keyrings └── update-sites ├── config ├── deploys ├── dns-zones ├── domains ├── keys └── thirdparty.ALL ├── dns └── fragments │ ├── include.dane.spodhuis.org │ └── include.pka-fp.spodhuis.org ├── keyrings ├── cross-signed │ ├── 4833892924C60A7AE666D32A1DA3E68F41CEECAC.asc │ ├── 5CAF09C9C79F88B5D526D4058AC8EE39F0C68907.asc │ └── ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04.asc └── minimal │ ├── 4833892924C60A7AE666D32A1DA3E68F41CEECAC.asc │ ├── 5CAF09C9C79F88B5D526D4058AC8EE39F0C68907.asc │ └── ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04.asc ├── lib └── python │ └── pdpzbase32.py ├── other └── standalone-update-website └── sites ├── globnix.org ├── .well-known │ └── openpgpkey │ │ ├── globnix.org │ │ ├── hu │ │ │ └── r6thk89hkz9zsaiqecoquhaucjatbz3o │ │ └── policy │ │ ├── hu │ │ └── r6thk89hkz9zsaiqecoquhaucjatbz3o │ │ └── policy └── index.html ├── grumpy-troll.org ├── .well-known │ └── openpgpkey │ │ ├── grumpy-troll.org │ │ ├── hu │ │ │ └── r6thk89hkz9zsaiqecoquhaucjatbz3o │ │ └── policy │ │ ├── hu │ │ └── r6thk89hkz9zsaiqecoquhaucjatbz3o │ │ └── policy └── index.html ├── pennock-tech.com ├── .well-known │ └── openpgpkey │ │ ├── hu │ │ ├── 1f7ykh5entmodikn9c8jss6xspfkc8nf │ │ └── 7nrpfxmxnxhn3k1twp6y8wbwa7zscg7d │ │ ├── pennock-tech.com │ │ ├── hu │ │ │ ├── 1f7ykh5entmodikn9c8jss6xspfkc8nf │ │ │ └── 7nrpfxmxnxhn3k1twp6y8wbwa7zscg7d │ │ └── policy │ │ └── policy └── index.html └── spodhuis.org ├── .well-known └── openpgpkey │ ├── hu │ ├── 96bqcjktdxra6hd6mor16dn1huc49irf │ └── r6thk89hkz9zsaiqecoquhaucjatbz3o │ ├── policy │ └── spodhuis.org │ ├── hu │ ├── 96bqcjktdxra6hd6mor16dn1huc49irf │ └── r6thk89hkz9zsaiqecoquhaucjatbz3o │ └── policy └── index.html /.gitattributes: -------------------------------------------------------------------------------- 1 | # GitHub determines file-types using 2 | # which can override the determinations using Git Attributes. 3 | # Exactly what I was hoping for as a best-case scenario. 4 | 5 | /dns/fragments/** linguist-language=DNS-Zone linguist-generated 6 | /keyrings/** linguist-language=Public-Key linguist-vendored 7 | /bundles/** linguist-language=Public-Key linguist-vendored 8 | /sites/** linguist-generated 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /bundles 2 | /bundle-dumps.* 3 | /keyrings/unfiltered 4 | -------------------------------------------------------------------------------- /Caddyfile: -------------------------------------------------------------------------------- 1 | # FIXME(YOU): 2 | # * use real domains here, for your deployment 3 | # + in the URIs opening each, and in the 'root' directive 4 | # + nb: /srv/repo comes from the Dockerfile, the rest of the `root` 5 | # directive is relative to this git repository. 6 | # * repeat the stanza if serving multiple domains, 7 | # * When ready, change from `tls internal` to tls which uses a public CA; 8 | # the commented-out example here uses Lets Encrypt's Staging, but to be 9 | # trusted by clients you'll need to switch to LE Production 10 | 11 | http://openpgpkey.example.org, https://openpgpkey.example.org { 12 | log 13 | file_server 14 | root * /srv/repo/sites/example.org 15 | 16 | tls internal 17 | #tls { 18 | # ca https://acme-staging-v02.api.letsencrypt.org/directory 19 | #} 20 | } 21 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | ARG GOPROXY='' 2 | 3 | FROM golang:1.17.3-alpine3.14 AS builder 4 | ARG GOPROXY 5 | 6 | LABEL maintainer="Phil Pennock " 7 | 8 | WORKDIR /tmp/build 9 | 10 | COPY . /tmp/openpgpkey/ 11 | 12 | RUN apk add --update git 13 | 14 | RUN git clone https://github.com/caddyserver/caddy && cd caddy \ 15 | && CGO_ENABLED=0 go install -ldflags -s ./cmd/caddy/... 16 | 17 | FROM alpine:3.14 18 | 19 | COPY --from=builder /go/bin/caddy /bin/ 20 | COPY --from=builder /tmp/openpgpkey/ /srv/repo 21 | 22 | VOLUME /root/.caddy 23 | 24 | WORKDIR /srv/repo 25 | CMD ["caddy", "run"] 26 | 27 | EXPOSE 80 28 | EXPOSE 443 29 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright © 2019,2020 Pennock Tech, LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | openpgpkey 2 | ========== 3 | 4 | OpenPGP Federated Keyserving support. 5 | Take control of making your public keys available to others! 6 | 7 | This repository has tools to help you manage making the public keys available 8 | to others in two different ways: 9 | 10 | 1. A standalone tool you can integrate into your existing website build steps, 11 | eg as a Gulp task. 12 | 2. This repo is a template you can fork and use to manage the keys, either for 13 | a separate website or for an overlay. Examples are included of how to go 14 | one step further and build a Docker image to be the webserver. 15 | 16 | 17 | ## Why 18 | 19 | Reliability. Safety. Accountability. Avoiding known current problems. 20 | 21 | OpenPGP is a standard for some tasks in cryptography, supporting signing 22 | things and encrypting things, without any central control authority saying who 23 | can do what. OpenPGP is not tied to any communications platform and there are 24 | multiple interoperable implementations. 25 | 26 | OpenPGP is old and has some warts; it is far from a perfect standard. But it 27 | is a standard and sees wide use in many problem spaces. Tools designed for 28 | one problem space, eg private communications, may be a better solution _there_ 29 | but folks running critical services find that OpenPGP is important for some 30 | tasks. It needs to work. 31 | 32 | Historically, “public keyservers” collected lots of public keys and made them 33 | available to all, without vetting. It was convenient, but it was a crutch. 34 | There are a few left, but far fewer than there used to be and the reliability 35 | of these volunteer (or other) run services has suffered. 36 | There are people actively trying to destroy these public-good services; the 37 | author of the tooling here used to run such a keyserver and was active in the 38 | community of volunteers. 39 | _(I left because of what I perceive as a large increase in legal risk in continuing to do so.)_ 40 | 41 | There are design notes for what future public keyservers might have to do, but 42 | the design trade-offs mean it's important for people who own PGP keys to be 43 | able to make the full keys available under their own control. 44 | More on that approach can be found in 45 | . 46 | 47 | So we need to make keys available, without relying upon the charity of others. 48 | We need this to not involve a lot of manual effort by each person trying to 49 | fetch or update a key. Putting keys somewhere on a download site is better 50 | than not making them available, but we need something predictable. 51 | 52 | Each OpenPGP key has one or more user identities as part of it; usually those 53 | contain an email address. Email addresses use the DNS to provide federation, 54 | and we can use that federation system, the DNS, to find places where keys in 55 | that domain can be fetched from. 56 | 57 | There are currently five designs for how to do this. Three require updates to 58 | DNS for changes in which keys are available, or even for updates to those 59 | keys. 60 | This has some benefits in some cases but is a non-starter for many people. 61 | One more design is public unauthenticated LDAP, which is perhaps not something 62 | folks will casually enter into. 63 | 64 | This leaves one design, which lets folks with a domain setup a website to 65 | provide keys in a fixed layout, with nothing special added to DNS beyond a 66 | host existing. The keys are fetched via HTTPS. This design is called 67 | “Web Key Directory”, WKD, which is supported by some client tooling and which 68 | is seeing increasing adoption in the open source community, for providing the 69 | keys of project members. 70 | 71 | The GnuPG project have a system for updating WKD keys via email, but that's 72 | only one approach. If you have authoritative knowledge of which keys should 73 | be served for which email addresses in your domain, then you can publish those 74 | keys. 75 | 76 | You can put these keys on the website which serves your domain apex, if you 77 | have such a thing, or you can use the `openpgpkey` hostname inside your domain 78 | to run a separate website. 79 | 80 | That's where this repository comes in. 81 | This repository is a way to track and manage the updates to keys for an 82 | organization, and deploy them. 83 | This is designed to be easy to fork and adapt for your use-cases, using this 84 | as a template. 85 | The tooling manages the life-cycle of the keys using very simple configuration 86 | files and includes one example of how to deploy live via rsync and another 87 | example of how to build a Docker image running a webserver for the separate 88 | website scenario. 89 | 90 | We also have a standalone tool for integrating into a different workflow, so 91 | that site building flows can make including the OpenPGP keys just a single 92 | build-step. 93 | 94 | * 95 | * 96 | 97 | 98 | ## What's included here 99 | 100 | Tools to manage the content of OpenPGP Web Key Directory websites, aka 101 | the openpgpkey well-known area. 102 | 103 | Optional ability to make a Docker image to act as a webserver for such a site. 104 | 105 | You should be able to "fork" this repo to create your organization's own 106 | canonical store, then change only the files in `config/` and use the tooling 107 | to regenerate the rest, for your own usage. 108 | 109 | The tools in `bin/` use configuration files in `config/` to update 110 | `keyrings/`, `sites/` and to deploy to set content live. 111 | 112 | All config files in `config/` allow for comment-lines starting with an 113 | `#` octothorpe. 114 | 115 | The `keyrings` directory is deleted and recreated by one of the tools. 116 | The `sites` directory is deleted and recreated by one of the tools. 117 | The `dns` directory (for PKA, not openpgpkey) is deleted and recreated by one 118 | of the tools. 119 | 120 | How the content gets served is entirely up to you, this repo does nothing to 121 | manage remote web-server configuration. It only manages content. 122 | 123 | In addition, the `bundles/` directory is deleted and recreated from from 124 | another tool; these files are not openpgpkey, but they are in the family of 125 | "things which get published for others to rely upon". 126 | 127 | The `other` directory contains "related tools" which might be of interest, but 128 | are not needed for these workflows. 129 | 130 | 131 | ### Config 132 | 133 | * `keys` lists the PGP keys to be exported; use the full fingerprint; 134 | * `domains` lists the domains for which we should generate site content; 135 | * `deploys` lists mappings of domains to deployment targets; a given domain 136 | can be deployed more than once. The configuration and tool coding is 137 | written to be flexible to support more mechanisms for deployment. 138 | * `dns-zones` lists DNS zones (domains in this context) for which we should 139 | generate fragments of zonefiles listing PGP-related material. 140 | * `bundle.*` are files named for the bundle they create, listing the PGP keys 141 | to be included in those bundles. 142 | * `thirdparty.*` are files listing additional keys, which will not be directly 143 | included in any results just because of being listed here, but signatures 144 | from these keys may be persisted in bundles too. 145 | 146 | 147 | ### Tools 148 | 149 | 1. `update-keyrings` requires that all keys to be exported are up-to-date in 150 | the current GnuPG keyring as reached with default options. 151 | It replaces the `keyrings/` area with fresh exports. 152 | 2. `update-sites` deletes the `sites/` area and re-creates it. 153 | 3. `update-dns-fragments` deletes the `dns/` area and re-creates it. 154 | 4. `deploy-sites` deploys the _content_ area of sites; it has no knowledge of 155 | administrative setup or web-server configuration. That is outside the 156 | scope of this tool (or this repo, with no current plans to bring it in 157 | scope). 158 | 5. `update-bundles` creates keyrings from configuration files with names 159 | starting `bundle.`; these bundles are expected to contain cross-signatures, 160 | so are not made (exclusively) from the versions of the files included in 161 | the repo. 162 | 163 | Each of the first three tools mutate the content of this repository, but will 164 | often re-create the exact same content, letting Git handle the lack of 165 | differences. The fourth tool should make no local changes. The fifth tool 166 | creates content excluded from this repository. 167 | 168 | For OpenPGP Web Key Directory content, you use the three tools, in order: 169 | `update-keyrings`, `update-sites`, `deploy-sites`. 170 | 171 | For DNS zonefile fragments, you use `update-keyrings` then 172 | `update-dns-fragments`. 173 | 174 | For bundles of distributable keyrings, you use `update-bundles`. 175 | 176 | #### Other 177 | 178 | * `other/standalone-update-website`: this is pretty much `deploy-sites` 179 | rewritten into Python with `lib/python/pdpzbase32.py` inline, so that it is 180 | a stdlib-only script for generating a website. 181 | + This tool does not use config files, it is explicitly pointed at one or 182 | more PGP key files to import, and it then deploys the content area. 183 | + This tool currently only supports the "direct method" layout, for use on a 184 | main web-site where OpenPGP keys are being added as additional content. 185 | So it does not generate a top-level stub file. 186 | + I wrote this adaptation to be able to use it elsewhere, but it's all based 187 | on this repository's code and I'm sharing it for wider use here. 188 | 189 | 190 | ### Customizing 191 | 192 | 1. Clone this repo. "Fork" it first, if in a GitHub workflow. 193 | 2. Optionally, import our keys :-) 194 | + `gpg --import keyrings/*` 195 | 3. Edit files in `config/` 196 | 4. Run through the tools to update the keyrings, then the sites. 197 | 5. Commit. 198 | 6. Push to your own git remote. 199 | 7. Deploy. 200 | + Perhaps with the `deploy-sites` script here 201 | + Perhaps with something else better suited to your environment 202 | + Perhaps even building a container image (see below) and running that 203 | 204 | 205 | ### Docker and Caddy 206 | 207 | These are optional, as a way to reduce setup time if you have a production 208 | Docker/Kubernetes/whatever hosting setup. You will need to be able to point 209 | DNS for `openpgpkey.$YOUR_DOMAIN` at something which will map ports 80 and 443 210 | to the running container. 211 | 212 | The two configuration files here are _examples_ which should be customized 213 | before use. 214 | 215 | Caddy is a web-server which is 216 | small and can automatically create and maintain HTTPS certs; this is 217 | controlled with the `Caddyfile` configuration. The example configuration here 218 | is for version 2 of Caddy. 219 | 220 | The `Caddyfile` will need to be manually updated to list the websites you wish 221 | to serve for. 222 | 223 | Your container image creation tools (`docker build`, `img build`, whatever) 224 | can be driven by `Dockerfile` to create a fairly small image (22MB) to act as 225 | a server. 226 | 227 | The `Dockerfile` currently just installs the "standard" Caddy image, only 228 | disabling telemetry. For a smaller image, you can edit the Caddy main build 229 | file to pull in fewer dependencies, or use `scratch` instead of an Alpine base 230 | image for the final image stage. 231 | 232 | The resulting Docker image is defined with a Volume at `/root/.caddy`: this is 233 | used to persist the Let's Encrypt state. **You ABSOLUTELY SHOULD persist the 234 | Let's Encrypt state with a volume**. Without this, every server startup will 235 | try to get a new certificate, with a new account. 236 | 237 | To use these for yourself, you should edit both: 238 | * Dockerfile: put a better maintainer label in, at least 239 | * Caddyfile: edit domains, and when ready switch to the staging ACME 240 | provider, and then to a production service 241 | (ie: start requesting Real certificates) 242 | 243 | #### Example 244 | 245 | This will run a web-server container, handling `openpgpkey.$YourDomain`, with 246 | a persistent volume so that Caddy can maintain state. 247 | 248 | We also remap the two exposed ports to explicit port numbers outside the 249 | container; if you arrange for the hostname `openpgpkey.$YourDomain` to forward 250 | ports 80 and 443 to this machine on the two mapped ports (5080 & 5443) then 251 | you can test that this works. 252 | 253 | ```console 254 | $ vi Dockerfile # change maintainer, review the rest 255 | $ vi Caddyfile # change server hostnames 256 | $ docker build -t openpgpkey-caddy:latest . 257 | $ docker run -it --rm \ 258 | -p 5080:80 -p 5443:443 \ 259 | -v "$HOME/DockerVolumes/openpgpkey-caddy:/root/.caddy" \ 260 | openpgpkey-caddy:latest 261 | ``` 262 | 263 | For testing on a local machine with docker, curl's `--connect-to` option will 264 | likely help: 265 | 266 | ```sh 267 | Site=openpgpkey.example.org 268 | curl -k --connect-to $Site:443:localhost:5443 https://$Site/ 269 | curl -k --connect-to $Site:443:localhost:5443 https://$Site/hu/policy 270 | gpg --with-wkd-hash --list-secret-keys 271 | curl -sk --connect-to $Site:443:localhost:5443 https://$Site/.well-known/openpgpkey/hu/${base32str} | gpg --show-keys 272 | ``` 273 | 274 | When you've tested that everything works, comment out the staging CA usage for 275 | the certificate and re-build the Docker image. 276 | 277 | #### More advanced 278 | 279 | A reasonable set of changes for a deployment is to change the service 280 | specification to `*:8000` in the Caddyfile and remove the `tls` section; 281 | change the Dockerfile to drop the Let's Encrypt setup and only `EXPOSE 8000`; 282 | change the run-time user to non-root; then run the resulting image behind a 283 | load-balancer which terminates TLS and forwards traffic across a trusted 284 | network to the Docker container, on whichever port you expose 8000 as. 285 | 286 | Hey presto, you can run without even container-root, and have a cloud 287 | environment scale up and down backends as needed to meet traffic demands for 288 | the billions of users of OpenPGP and WKD out there. 289 | 290 | 291 | ### Compliance 292 | 293 | The content layout _should_ be compatible with 294 | 295 | version `08`. 296 | 297 | ### Requirements and Constraints 298 | 299 | #### Used Tools 300 | 301 | * GnuPG; tested with version 2.2.19 in initial development, I expect this to 302 | advance. Some tools (eg, the DNS fragments export) is known to require 303 | "sufficiently recent" versions of GnuPG, so something old packaged with the 304 | OS might not be sufficient. I (Phil Pennock) use my packages in the apt 305 | repos at , installing into 306 | /opt/gnupg/. 307 | * Bash 308 | * Python (3) 309 | * rsync, for the bundled deploy mechanism (replaceable) 310 | * Docker / Caddy : entirely optional, for the demo container service 311 | 312 | I am not averse to rewriting the bash scripts into Python; working code beats 313 | adherence to local policies on maximum lengths for shell scripts. I'm not 314 | adverse to rewriting this all in Go, or Rust, or some other language. 315 | 316 | But what you have here is what I'm using. When you fork it for your own use, 317 | feel free to swap out whatever parts you think should be replaced. If you 318 | feel like sharing back upstream, please consider a pull-request. 319 | 320 | 321 | #### Design points to note 322 | 323 | An arbitrary unfiltered key or signature upon a key from a local keyring 324 | **MUST NEVER BE ADDED TO THE REPO**. 325 | 326 | Dan Gillmor (dkg) has a draft for abuse-resistant keyservers, 327 | , 328 | which defines the term "Toxic Data". 329 | 330 | The motivation for this repository came about in the aftermath of the collapse 331 | of the old SKS peering mesh of HKP keyservers, which the community relied upon 332 | for a long time. Since spam and abuse is already happening, targeting the 333 | keys of PGP ecosystem developers, it would be foolhardy to design a new 334 | append-only trust store which commits in unchecked data. Git is an 335 | append-only trust store, in this context. You can delete a file from the 336 | tree, but it remains part of history without a repository rewrite and 337 | force-pushes and garbage collection runs. 338 | 339 | So our core specifier is the fingerprint, and we use that to update the 340 | `keyrings/` area, which has "minimal" exports of each key: that is, the key, 341 | its sub-keys (all self-signed by the key itself), the uids (all self-signed) 342 | and nothing else. 343 | 344 | For the bundles, we use "clean" exports, which allows for a signature from 345 | another key, if that key is known to the keyring, and we arrange to ensure 346 | that the keyring which generates those exports only includes the keys in this 347 | repo and specified in the bundles. 348 | 349 | If, in future, we add an "auxiliary-keys" concept, of keys which we'll track 350 | and include the signatures of in bundles, we'll need to carefully consider 351 | what allow in for each auxiliary key: perhaps only signatures from the 352 | `config/aux-keys` and `config/keys` files? Or perhaps allow for signatures 353 | which have reciprocal signatures? "Accept Fred's signature on Wilma's key, 354 | but only because Fred's key has a signature by Wilma's key." 355 | 356 | 357 | ### Future 358 | 359 | We should consider for the bundle tooling if we should keep "fatter" keyrings 360 | in-repo: the toxic data notes in the design points above mean we'd need to 361 | carefully define what is included in "fatter"; it could include "the same 362 | cross-sigs which we include into the bundle"; this would at least ensure that 363 | there are not regressions in included cross-signatures, only ever trending up. 364 | 365 | -------------------------------------------------------------------------------- /Taskfile.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: '3' 3 | 4 | tasks: 5 | default: 6 | deps: [help] 7 | 8 | help: 9 | silent: true 10 | cmds: 11 | - | 12 | cat <&2 "commit-autoupdates: ERROR: changes which aren't auto-updates exist: %s\n" "$not_ours" 92 | exit 65 # sysexits EX_DATAERR 93 | silent: true 94 | 95 | git:commit-autoupdates: 96 | desc: "Commit our auto-update changes into Git" 97 | sources: 98 | - keyrings/**/* 99 | - sites/**/* 100 | - dns/**/* 101 | cmds: 102 | - task: git:check-noauto-changes 103 | - git add keyrings sites dns 104 | - | 105 | anything="$(git diff --name-only --staged keyrings sites dns)" 106 | if [[ -z "$anything" ]]; then 107 | printf >&2 "\ncommit-autoupdates: nothing to commit, SKIPPING COMMIT\n\n" 108 | exit 0 109 | fi 110 | git commit --only keyrings sites dns 111 | 112 | git:push: 113 | desc: "Push git repo" 114 | cmds: ["git push"] 115 | 116 | deploy:sites: 117 | desc: "Deploy to websites" 118 | cmds: ["./bin/deploy-sites"] 119 | 120 | -------------------------------------------------------------------------------- /bin/deploy-sites: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | # Do not use $_ to set ScriptPath, since script runners such as 'task' don't 3 | # change $_ before running the commands. 4 | # We do want a _resolved_ path to the script. 5 | ScriptPath="$0" 6 | StartDir="$(pwd)" 7 | case "$ScriptPath" in 8 | /*) true ;; 9 | ./*) ScriptPath="${StartDir}/${ScriptPath#./}" ;; 10 | *) ScriptPath="${StartDir}/${ScriptPath}" ;; 11 | esac 12 | readonly StartDir ScriptPath 13 | 14 | readonly ProgramName="$(basename "$0" .sh)" 15 | readonly TopDir="$(cd "$(dirname "$ScriptPath")"; cd ..; pwd)" 16 | readonly WellKnownTop='.well-known/openpgpkey' 17 | 18 | note() { printf >&2 '%s: %s\n' "$ProgramName" "$*"; } 19 | die() { note "$@"; exit 1; } 20 | 21 | which rsync >/dev/null 2>&1 || die "missing command rsync" 22 | test -f "$TopDir/config/deploys" || die "missing config/deploys" 23 | test -d "$TopDir/sites" || die "missing sites dir" 24 | 25 | deploy_rsync() { 26 | local site="${1:?}" target="${2:?}" 27 | local rsync_opts opt should_delete 28 | local rchmod 29 | shift 2 30 | 31 | should_delete=false 32 | rchmod='u=rwX,go=rX' 33 | for opt; do 34 | case "$opt" in 35 | rsync) true ;; 36 | delete) should_delete=true ;; 37 | group-write-dirs) rchmod='D775,F644' ;; 38 | *) die "unrecognized deploy option: '${opt}'" ;; 39 | esac 40 | done 41 | rsync_opts=(-crlv "--chmod=$rchmod") 42 | #rsync_opts+=(--dry-run) 43 | 44 | rsync "${rsync_opts[@]}" "$TopDir/sites/$site/" "$target/" 45 | if $should_delete; then 46 | rsync "${rsync_opts[@]}" --delete "$TopDir/sites/$site/.well-known/openpgpkey/" "$target/.well-known/openpgpkey/" 47 | fi 48 | } 49 | 50 | while read -r site deploy_to colon_options; do 51 | IFS=: read -a options <<<"$colon_options" 52 | echo "Site: $site" 53 | echo "To : $deploy_to" 54 | echo "Opts: ${options[*]}" 55 | 56 | method='' 57 | for k in "${options[@]}"; do 58 | case "$k" in 59 | rsync) method="$k" ;; 60 | esac 61 | done 62 | [[ -n "$method" ]] || die "no known deployment method for $site/$deploy_to" 63 | 64 | case "$method" in 65 | rsync) deploy_rsync "$site" "$deploy_to" "${options[@]}" ;; 66 | esac 67 | 68 | echo 69 | done < <(grep '^[^#]' "$TopDir/config/deploys") 70 | -------------------------------------------------------------------------------- /bin/update-bundles: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | # Do not use $_ to set ScriptPath, since script runners such as 'task' don't 3 | # change $_ before running the commands. 4 | # We do want a _resolved_ path to the script. 5 | ScriptPath="$0" 6 | StartDir="$(pwd)" 7 | case "$ScriptPath" in 8 | /*) true ;; 9 | ./*) ScriptPath="${StartDir}/${ScriptPath#./}" ;; 10 | *) ScriptPath="${StartDir}/${ScriptPath}" ;; 11 | esac 12 | readonly StartDir ScriptPath 13 | 14 | readonly ProgramName="$(basename "$0" .sh)" 15 | # nb: ScriptPath changes to the interpreter if invoked manually 16 | readonly TopDir="$(cd "$(dirname "$0")"; cd ..; pwd)" 17 | 18 | note() { printf >&2 '%s: %s\n' "$ProgramName" "$*"; } 19 | die() { note "$@"; exit 1; } 20 | 21 | : "${GNUPGHOME:=$HOME/.gnupg}" 22 | readonly initial_GNUPGHOME="$GNUPGHOME" 23 | 24 | cd "$TopDir/config" 25 | bundle_files=( bundle.* ) 26 | cd .. 27 | 28 | [[ "${#bundle_files[@]}" -gt 0 ]] || die "no bundles defined" 29 | if [[ "${#bundle_files[@]}" -eq 1 ]] && [[ "${bundle_files[0]}" == 'bundle.*' ]]; then 30 | if [[ -n "${OPENPGPKEY_NO_BUNDLES_OKAY:-}" ]]; then 31 | note "no bundles defined, exiting okay per environmental request" 32 | exit 0 33 | fi 34 | die "no bundles defined" 35 | fi 36 | 37 | rm -rf "$TopDir/bundles" 38 | mkdir -pv "$TopDir/bundles" 39 | 40 | # mktemp portability, still a thing in 2020. 41 | dumpsdir="$(mktemp -d "${TMPDIR:-/tmp}/bundle-dumps.XXXXXXXX")" || die "failed to create a temp dir" 42 | remove_tmp() { rm -rf -- "$dumpsdir"; } 43 | trap remove_tmp EXIT INT TERM 44 | 45 | # Each bundle is self-contained with full cross-sigs, where applicable. 46 | # The versions we've dumped into keys are minimal, lacking the cross-sigs, 47 | # and we don't necessarily have all the bundle keys in this repo. 48 | # So this works directly from your local keyring. 49 | update_one_bundle() { 50 | local bundleconf bundlesrc bundlename bundleout bundleeachdir 51 | local tmp src ghome kf 52 | local -a keys thirdparty_files third_keys 53 | bundleconf="${1:?need a bundle.foo file}" 54 | bundlesrc="$TopDir/config/$bundleconf" 55 | bundlename="${bundle#bundle.}" 56 | bundleout="$TopDir/bundles/${bundlename}.asc" 57 | bundleeachdir="$TopDir/bundles/each-${bundlename}" 58 | thirdparty_files=( 59 | "$TopDir/config/thirdparty.$bundlename" 60 | "$TopDir/config/thirdparty.ALL" 61 | ) 62 | tmp="$dumpsdir/$bundlename" 63 | mkdir -m 0700 -- "$tmp" 64 | 65 | keys=($(grep '^[^#]' -- "$bundlesrc" | sed $'s/[ \t]*#.*$//' | sort -u)) 66 | third_keys=() 67 | for kf in "${thirdparty_files[@]}"; do 68 | test -f "$kf" || continue 69 | third_keys+=($(grep '^[^#]' -- "$kf" | sed $'s/[ \t]*#.*$//' | sort -u)) 70 | done 71 | 72 | for key in "${keys[@]}"; do 73 | src="$TopDir/keyrings/cross-signed/${key}.asc" 74 | test -f "$src" || continue 75 | cp -- "$src" "$tmp/./" 76 | done 77 | export GNUPGHOME="$initial_GNUPGHOME" 78 | gpg > "$tmp/from-local-keyring.asc" \ 79 | -a --export-options no-export-attributes,export-clean \ 80 | --export "${keys[@]}" "${third_keys[@]}" 81 | 82 | export GNUPGHOME="$tmp" 83 | gpg --import -- "$tmp"/*.asc 84 | 85 | gpg > "$bundleout" \ 86 | -a --export-options export-clean --export "${keys[@]}" 87 | 88 | mkdir -- "$bundleeachdir" 89 | for key in "${keys[@]}"; do 90 | gpg > "$bundleeachdir/${key}.asc" \ 91 | -a --export-options export-clean --export "$key" 92 | done 93 | 94 | export GNUPGHOME="$initial_GNUPGHOME" 95 | } 96 | 97 | for bundle in "${bundle_files[@]}"; do 98 | update_one_bundle "$bundle" 99 | done 100 | 101 | tree "$dumpsdir" 2>/dev/null || ls -lR "$dumpsdir" 102 | 103 | cd "$TopDir/bundles" 104 | ls -l 105 | openssl dgst -sha256 ./*.asc | sed 's,(\./,(,' 106 | -------------------------------------------------------------------------------- /bin/update-dns-fragments: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | # 3 | # Make DNS zonefile fragments for keys. 4 | # 5 | # We only use the keys in keyrings, because we can only emit records for keys 6 | # which are in-zone, using the exact same bailiwick criteria as for openpgpkey 7 | # and website files. If a key is in a keyring bundle, that doesn't help us. 8 | # 9 | # We also don't need cross-key signatures and have no need to go out to external 10 | # keyrings, so the DNS content can be made deterministically based upon the 11 | # keyrings in repo with no external dependencies. Just like sites, but unlike 12 | # bundles. 13 | 14 | readonly ProgramName="$(basename "$0" .sh)" 15 | readonly TopDir="$(cd "$(dirname "$0")"; cd ..; pwd)" 16 | 17 | note() { printf >&2 '%s: %s\n' "$ProgramName" "$*"; } 18 | die() { note "$@"; exit 1; } 19 | 20 | python='python' 21 | if which python3 >/dev/null 2>&1; then python='python3'; fi 22 | 23 | test -f "$TopDir/config/dns-zones" || die "missing config/dns-zones" 24 | test -d "$TopDir/keyrings" || die "missing keyrings" 25 | $python -c 1 || die "missing python interpreter ($python)" 26 | 27 | readonly Zones=($(grep '^[^#]' "$TopDir/config/dns-zones")) 28 | 29 | [[ "${#Zones[@]}" -gt 0 ]] || die "no dns-zones defined" 30 | 31 | rm -rf "$TopDir/dns/fragments" 32 | mkdir -pv "$TopDir/dns/fragments" 33 | 34 | # mktemp portability, still a thing in 2020. 35 | top_tmp_dir="$(mktemp -d "${TMPDIR:-/tmp}/pgpkey.dns.XXXXXXXX")" || die "failed to create a temp dir" 36 | remove_tmp() { rm -rf -- "$top_tmp_dir"; } 37 | trap remove_tmp EXIT INT TERM 38 | 39 | export GNUPGHOME="$top_tmp_dir/gnupghome" 40 | mkdir -m 0700 -- "$GNUPGHOME" 41 | # Unbreak UTF-8 in display names: 42 | echo 'display-charset utf-8' > "$GNUPGHOME/gpg.conf" 43 | 44 | gpg --import -- "$TopDir/keyrings/minimal"/*.asc 45 | 46 | # I'd usually do this in Perl with a grotesque one-liner using -00 and a 47 | # schwartzian transform, but this repo already is bash+python, 48 | # so let's use Python here. 49 | # This, and its length, is a good sign that this tool should be rewritten 50 | # into Python. Working beats unwritten perfect. 51 | # 52 | # Beware multiple keys for the same UID, during transitions. 53 | # 54 | # Beware that sometimes GnuPG will export a multiline key with a blank line 55 | # before the closing parens. Aargh! 56 | 57 | sort_by_rrname() { "$python" -c ' 58 | import collections, sys 59 | all_entries = collections.defaultdict(list) 60 | entry = [] 61 | rrname = None 62 | in_parens = False 63 | for lineno0, line in enumerate(sys.stdin): 64 | fragment = line.rstrip() 65 | if not fragment and not in_parens: 66 | if entry: 67 | if not rrname: 68 | raise Exception("no rrname in stanza, line {}".format(lineno0+1)) 69 | all_entries[rrname].append(entry) 70 | entry = [] 71 | rrname = None 72 | continue 73 | entry.append(line) 74 | if line[0] not in ("$", ";", "#", " ", "\t"): 75 | if rrname is not None: 76 | raise Exception("two rrname lines in one stanza, line {}".format(lineno0+1)) 77 | rrname = line.split()[0] 78 | if fragment.endswith("("): 79 | in_parens = True 80 | if fragment.endswith(")"): 81 | in_parens = False 82 | 83 | for key in sorted(all_entries): 84 | for entry in all_entries[key]: 85 | for line in entry: 86 | print(line, end="") 87 | print() 88 | ' 89 | } 90 | 91 | for zone in "${Zones[@]}"; do 92 | unsorted_pka="$top_tmp_dir/include.pka-fp.$zone" 93 | sorted_pka="$TopDir/dns/fragments/include.pka-fp.$zone" 94 | unsorted_dane="$top_tmp_dir/include.dane.$zone" 95 | sorted_dane="$TopDir/dns/fragments/include.dane.$zone" 96 | 97 | gpg > "$unsorted_pka" \ 98 | --export-options export-pka --export-filter "keep-uid=uid =~ @$zone" --export 99 | sort_by_rrname < "$unsorted_pka" > "$sorted_pka" 100 | 101 | gpg > "$unsorted_dane" \ 102 | --export-options export-dane --export-filter "keep-uid=uid =~ @$zone" --export 103 | sort_by_rrname < "$unsorted_dane" > "$sorted_dane" 104 | done 105 | -------------------------------------------------------------------------------- /bin/update-keyrings: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | # Do not use $_ to set ScriptPath, since script runners such as 'task' don't 3 | # change $_ before running the commands. 4 | # We do want a _resolved_ path to the script. 5 | ScriptPath="$0" 6 | StartDir="$(pwd)" 7 | case "$ScriptPath" in 8 | /*) true ;; 9 | ./*) ScriptPath="${StartDir}/${ScriptPath#./}" ;; 10 | *) ScriptPath="${StartDir}/${ScriptPath}" ;; 11 | esac 12 | readonly StartDir ScriptPath 13 | 14 | readonly ProgramName="$(basename "$0" .sh)" 15 | readonly TopDir="$(cd "$(dirname "$ScriptPath")"; cd ..; pwd)" 16 | 17 | note() { printf >&2 '%s: %s\n' "$ProgramName" "$*"; } 18 | die() { note "$@"; exit 1; } 19 | 20 | : "${GNUPGHOME:=$HOME/.gnupg}" 21 | readonly initial_GNUPGHOME="$GNUPGHOME" 22 | thirdparty_files=( 23 | "$TopDir/config/thirdparty.ALL" 24 | ) 25 | 26 | test -f "$TopDir/config/keys" 27 | keys=($(grep '^[^#]' "$TopDir/config/keys" | sort -u)) 28 | 29 | # Trust that test -f check to have validated that $TopDir is safe to use before 30 | # nuking keyrings and recreating it. 31 | 32 | # Ensure that someone new updating these at least gets all the signature for 33 | # our own keys. This doesn't cover the true third-party sigs, that's FIXME. 34 | if [ -d "$TopDir/keyrings/cross-signed" ]; then 35 | gpg --import "$TopDir/keyrings/cross-signed"/*.asc 36 | fi 37 | 38 | rm -rf "$TopDir/keyrings" 39 | mkdir -pv "$TopDir/keyrings/minimal" 40 | mkdir -pv "$TopDir/keyrings/unfiltered" 41 | mkdir -pv "$TopDir/keyrings/cross-signed" 42 | 43 | note "First pass: minimal and unfiltered" 44 | for key in "${keys[@]}"; do 45 | note "Key: $key" 46 | gpg --export-options export-minimal -a --export "$key" > "keyrings/minimal/${key}.asc" 47 | gpg -a --export "$key" > "keyrings/unfiltered/${key}.asc" 48 | done 49 | 50 | workdir="$(mktemp -d "${TMPDIR:-/tmp}/wkd-keyrings.XXXXXXXX")" || die "failed to create a temp dir" 51 | remove_tmp() { rm -rf -- "$workdir"; } 52 | trap remove_tmp EXIT INT TERM 53 | 54 | third_keys=() 55 | for kf in "${thirdparty_files[@]}"; do 56 | test -f "$kf" || continue 57 | third_keys+=($(grep '^[^#]' -- "$kf" | sed $'s/[ \t]*#.*$//' | sort -u)) 58 | done 59 | gpg > "$workdir/thirdparty.asc" \ 60 | -a --export-options no-export-attributes,export-clean \ 61 | --export "${third_keys[@]}" 62 | 63 | gpgdir="$workdir/gnupghome" 64 | mkdir -m 0700 -- "$gpgdir" 65 | export GNUPGHOME="$gpgdir" 66 | gpg --import keyrings/unfiltered/*.asc 67 | gpg --import "$workdir/thirdparty.asc" 68 | 69 | note "Second pass: cross-signed" 70 | for key in "${keys[@]}"; do 71 | note "Key: $key" 72 | gpg --export-options export-clean -a --export "$key" > "keyrings/cross-signed/${key}.asc" 73 | done 74 | 75 | note "done updating keyrings/ directory" 76 | -------------------------------------------------------------------------------- /bin/update-sites: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | # Do not use $_ to set ScriptPath, since script runners such as 'task' don't 3 | # change $_ before running the commands. 4 | # We do want a _resolved_ path to the script. 5 | ScriptPath="$0" 6 | StartDir="$(pwd)" 7 | case "$ScriptPath" in 8 | /*) true ;; 9 | ./*) ScriptPath="${StartDir}/${ScriptPath#./}" ;; 10 | *) ScriptPath="${StartDir}/${ScriptPath}" ;; 11 | esac 12 | readonly StartDir ScriptPath 13 | 14 | readonly ProgramName="$(basename "$0" .sh)" 15 | # ScriptPath instead of $0 breaks if we invoke bash on this file manually: 16 | readonly TopDir="$(cd "$(dirname "$0")"; cd ..; pwd)" 17 | readonly WellKnownTop='.well-known/openpgpkey' 18 | 19 | note() { printf >&2 '%s: %s\n' "$ProgramName" "$*"; } 20 | die() { note "$@"; exit 1; } 21 | 22 | python='python' 23 | if which python3 >/dev/null 2>&1; then python='python3'; fi 24 | 25 | export PYTHONPATH="${TopDir}/lib/python${PYTHONPATH:+:}${PYTHONPATH:-}" 26 | 27 | test -f "$TopDir/config/keys" || die "missing config/keys" 28 | test -f "$TopDir/config/domains" || die "missing config/domains" 29 | $python -c 1 || die "missing python interpreter ($python)" 30 | $python -c 'import pdpzbase32' || die "missing python pdpzbase32 (from .personal)" 31 | 32 | test -d "$TopDir/sites" || die "missing sites dir" 33 | rm -rf "$TopDir/sites" 34 | mkdir -pv "$TopDir/sites" 35 | 36 | readonly Keys=($(grep '^[^#]' "$TopDir/config/keys")) 37 | readonly Domains=($(grep '^[^#]' "$TopDir/config/domains")) 38 | 39 | for domain in "${Domains[@]}"; do 40 | for wellknown in "$WellKnownTop/$domain" "$WellKnownTop"; do 41 | d="$TopDir/sites/$domain/$wellknown" 42 | mkdir -pv "$d/hu" 43 | touch "$d/policy" 44 | done 45 | cat >"$TopDir/sites/$domain/index.html" < 47 | No web-pages 48 |

No content on this site should be a web-page.
49 | (Except, by reduction, this one.)

50 |

This small website exists for OpenPGP Web Key Directory (aka WKD).

51 |

Given the email address example@${domain}, this site allows this next command to work:
52 | gpg --locate-external-keys example@${domain}

53 |

WKD is also used by some graphical applications, and some web-based applications; appropriate URLs should have CORS rules permitting full read access.

54 | 55 | EOHTML 56 | done 57 | 58 | # emails_from_colon_listing(): 59 | # On stdin, `gpg --with-colons` listing with uid lines 60 | # On stdout, the email addresses therein, unordered with dups. 61 | if which pcregrep >/dev/null 2>&1; then 62 | emails_from_colon_listing() { grep '^uid:' | cut -d : -f 10 | pcregrep -o1 '<([^@>]+@[^>]+)>'; } 63 | else 64 | # Well, we'll be about to cause a Python interpreter to be paged in anyway. 65 | emails_from_colon_listing() { $python -c ' 66 | import re, sys 67 | extract = re.compile(r"<([^@>]+@[^>]+)>") 68 | for fields in [line.split(":") for line in sys.stdin]: 69 | if fields[0] == "uid": 70 | m = extract.search(fields[9]) 71 | if m is not None: 72 | print(m.group(1)) 73 | ' 74 | } 75 | fi 76 | 77 | for key in "${Keys[@]}"; do 78 | # quiet for `please do a --check-trustdb` warnings 79 | emails=($( 80 | gpg --quiet --batch --with-colons --import-options show-only \ 81 | --import "keyrings/minimal/${key}.asc" | 82 | emails_from_colon_listing | 83 | sort -u 84 | )) 85 | note "Key $key emails: ${emails[*]}" 86 | 87 | for email in "${emails[@]}"; do 88 | domain="${email##*@}" 89 | lhs="${email%@*}" 90 | # Filter out domains which we're not handling here 91 | test -d "$TopDir/sites/$domain" || continue 92 | 93 | encoded_lhs="$($python -c ' 94 | import hashlib, sys, pdpzbase32 95 | print(pdpzbase32.encode(hashlib.sha1(sys.argv[1].lower().encode("ASCII")).digest()).decode("ASCII"))' "$lhs")" 96 | note "[$key] $email -> $domain :: $lhs :: $encoded_lhs" 97 | 98 | for wellknown in "$WellKnownTop/$domain" "$WellKnownTop"; do 99 | d="$TopDir/sites/$domain/$wellknown/hu" 100 | touch "$d/$encoded_lhs" 101 | gpg --dearmor < "keyrings/cross-signed/${key}.asc" >> "$d/$encoded_lhs" 102 | done 103 | done 104 | done 105 | -------------------------------------------------------------------------------- /config/deploys: -------------------------------------------------------------------------------- 1 | # Deploys via SSH to tower 2 | spodhuis.org tower:/www/openpgpkey.spodhuis.org/content rsync:delete 3 | pennock-tech.com tower:/www/openpgpkey.pennock-tech.com/content rsync:delete 4 | globnix.org tower:/www/openpgpkey.globnix.org/content rsync:delete 5 | grumpy-troll.org tower:/www/openpgpkey.grumpy-troll.org/content rsync:delete 6 | -------------------------------------------------------------------------------- /config/dns-zones: -------------------------------------------------------------------------------- 1 | spodhuis.org 2 | -------------------------------------------------------------------------------- /config/domains: -------------------------------------------------------------------------------- 1 | spodhuis.org 2 | pennock-tech.com 3 | grumpy-troll.org 4 | globnix.org 5 | -------------------------------------------------------------------------------- /config/keys: -------------------------------------------------------------------------------- 1 | # Main OpenPGP key, Phil Pennock, 2013-onwards, RSA 2 | ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04 3 | # New OpenPGP key, Phil Pennock, 2020-onwards, Curve 25519 4 | # (very limited cross-signatures) 5 | 4833892924C60A7AE666D32A1DA3E68F41CEECAC 6 | 7 | # Repoman, signs apt repo https://public-packages.pennock.tech/ 8 | 5CAF09C9C79F88B5D526D4058AC8EE39F0C68907 9 | -------------------------------------------------------------------------------- /config/thirdparty.ALL: -------------------------------------------------------------------------------- 1 | # Keys listed in this file are for third-party signatures. 2 | # 3 | # The keys themselves will not be directly included in a keyring just because 4 | # they're in this file; some other configuration might still include them. 5 | # (Ie, being here is insufficient to include the keys, not a barrier). 6 | # Signatures made by these keys, if those signatures are locally known, 7 | # _will_ be included in the bundles. 8 | # 9 | # This is thirdparty.ALL -- keys listed here will be accepted as third-party 10 | # signatures in ALL bundles. 11 | 12 | # General third-party trusted introducers 13 | A31D4F81EF4EBD07B456FA04D2BB0D0165D0FD58 # CA Cert Signing Authority (Root CA) 14 | 15 | # Linux kernel maintainers 16 | # (mostly picked from among those who signed David's key) 17 | 3AB057B7E78D945C8C5591FBD36F769BC11804F0 # Theodore Ts'o 18 | 50EBED48216A2F163FEE9C778DCE35563022E57A # Jonathan Corbet 19 | 647F28654894E3BD457199BE38DBBDC86092693E # Greg Kroah-Hartman 20 | 7EAAC9693E7D220546BE576CBDA06085493BACE4 # H. Peter Anvin 21 | ABAF11C65A2970B130ABE3C479BE3E4300411886 # Linus Torvalds 22 | D5606E73C8B46271BEAD9ADF814AE47C214854D6 # James Bottomley 23 | DE0E66E32F1FDD0902666B96E63EDCA9329DD07E # Konstantin Ryabitsev 24 | # 25 | # If you have to pick just one of these to trust, pdp thinks Konstantin's: 26 | # he's a kernel.org admin, maintainer of the kernel maintainer's PGP keyring 27 | # git repository (https://git.kernel.org/pub/scm/docs/kernel/pgpkeys.git), 28 | # and has done a lot of good work on the practical side of the PGP ecosystem. 29 | -------------------------------------------------------------------------------- /dns/fragments/include.dane.spodhuis.org: -------------------------------------------------------------------------------- 1 | $ORIGIN _openpgpkey.spodhuis.org. 2 | ; 4833892924C60A7AE666D32A1DA3E68F41CEECAC 3 | ; Phil Pennock 4 | 6555f290b6e653629d9d582660dd2fe730320e43e252f8e2e5ee1bdd TYPE61 \# 1498 ( 5 | 9833045e2504f516092b06010401da470f0101074043c292df50b30dcaadd549 6 | cf48fd9cbc06e43c3a9ca1cb788da0bd3c00ffc750b4285068696c2050656e6e 7 | 6f636b203c7068696c2e70656e6e6f636b4073706f64687569732e6f72673e89 8 | 02240413160801cc021b03030b090703150a080416030201021e010217801621 9 | 044833892924c60a7ae666d32a1da3e68f41ceecac05025f2dfdd15514800000 10 | 000012003a70726f6f66406d657461636f64652e62697a68747470733a2f2f74 11 | 7769747465722e636f6d2f7068696c70656e6e6f636b2f7374617475732f3132 12 | 39313839383036303836383539313632323a14800000000012001f70726f6f66 13 | 406d657461636f64652e62697a68747470733a2f2f6c6f627374652e72732f75 14 | 2f7068696c70656e6e6f636b3814800000000012001d70726f6f66406d657461 15 | 636f64652e62697a646e733a6772756d70792d74726f6c6c2e6f72673f747970 16 | 653d5458543414800000000012001970726f6f66406d657461636f64652e6269 17 | 7a646e733a73706f64687569732e6f72673f747970653d5458545f1480000000 18 | 0012004470726f6f66406d657461636f64652e62697a68747470733a2f2f6769 19 | 73742e6769746875622e636f6d2f7068696c70656e6e6f636b2f323566393332 20 | 6230303665626662623935366131613134626138306261633761391480000000 21 | 0012001e70726f6f66406d657461636f64652e62697a786d70703a7068696c2e 22 | 70656e6e6f636b4073706f64687569732e6f7267000a09101da3e68f41ceecac 23 | fe1c0100e88e7e6bf17f385da0849162301de0d85af12433a0391b8aa3f4e138 24 | c32d069000ff59121a544b3712447fa5055605e31ea9e2d548e700710a65b3d7 25 | 6b8f7249db02b833045e25054016092b06010401da470f010107406df5a87cd9 26 | b51890f84f7e597ab17e549f1ba093844178ea61ceac484b4a58e988ef041816 27 | 0800201621044833892924c60a7ae666d32a1da3e68f41ceecac05025e250540 28 | 021b02008109101da3e68f41ceecac762004191608001d16210436bea421261c 29 | 40a54fc9261c2e7665110f8a56ff05025e250540000a09102e7665110f8a56ff 30 | 0bb500ff4aee429d5659915336511a3b744c4c25fdd09fb8af2962c57e279b19 31 | 06ad5e040100a8616e0d4def13d7910c30a595e7fc92308de87404b96fa17325 32 | b6ef6cd7e9029f260100c2fe3edf9bbfce3c42317ca93bdbc4e52dd98bd2f782 33 | eb708edca1fbd7c345e50100dc69c0cc5a2481dc7908162d7c6d185c8866498e 34 | b87d159e0eb3877d68de2b02b838045ffbb3bc120a2b06010401975501050101 35 | 07407d12be588de6695c6a9cd407b6f80271d93f9567b24895596b9ed6f2ecc7 36 | a40903010807887e0418160800261621044833892924c60a7ae666d32a1da3e6 37 | 8f41ceecac05025ffbb3bc021b0c050909660180000a09101da3e68f41ceecac 38 | 1f0700fa035ef1afe175793bef4dc420ee022e312d395a78ce6e809677529ad5 39 | ab1d8c920100a79799f089889106118cb4b26efbbd64f013faf0cdb02ba6ca63 40 | 302cc8afdd05b8380463b3a8d4120a2b06010401975501050101074012f83398 41 | 2dfb667501ea43af1f8e7f45f4890198832c875e53335a6d8a14452003010807 42 | 887e0418160800261621044833892924c60a7ae666d32a1da3e68f41ceecac05 43 | 0263b3a8d4021b0c05090996c900000a09101da3e68f41ceecac10b600fe27c9 44 | 28608ec672f128964d92cc101c78e1eb074a5d4d2585cd270c505069d2b30100 45 | b808dadaeb81d7f9bf390693c44577cade0f55dcd1c658f23a5089ebdbabdc0e 46 | b838046798f434120a2b060104019755010501010740de7a30d5bf7067e2c0be 47 | d64165d0222b034608c04253cc554d5ceb56a0cd377c03010807887e04181608 48 | 00261621044833892924c60a7ae666d32a1da3e68f41ceecac05026798f43402 49 | 1b0c0509097b1980000a09101da3e68f41ceecac043e00fe2a21ed025f936551 50 | 15439c7d87f468e698a1b04034f1cf5b6af21f4cf39be54001009f8f08f6e63c 51 | d74ed4ae13a2264db35449e51523808d7a8b371a321fe5c2a10c 52 | ) 53 | 54 | $ORIGIN _openpgpkey.spodhuis.org. 55 | ; ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04 56 | ; Phil Pennock 57 | 6555f290b6e653629d9d582660dd2fe730320e43e252f8e2e5ee1bdd TYPE61 \# 9361 ( 58 | 99020d045266058a011000e78538531603a94300648095453a83fa510de80594 59 | dc452613c77038a5c422e32ce221254e83d13d7e1d98786c1e01900f44aadebf 60 | 143cda5bf9903bfc52f9423a7121f6f1f89697c36a08ab88402471373bc94982 61 | 240c91f328392a6ed5d357ef6cb4d62198ac7f912ac00c1576421a7a7e420d8c 62 | 717dacbbbf88c1197c4dc1d42ee27b0c386b983774e5d050655a27f43328464f 63 | 2865eab313da59722a79496876c2a00b295ef3754575adaa8fdb1ab7289b715f 64 | 3667f76c3ffc2b10b9f039812e78670de6aeeada2148ff21df1afce82c5d61bd 65 | 57cfc139211566668a3f34b3346c6d611e4894447889aa8dfa46831aac512109 66 | fca81f0bfdf07cee796575570f1959c64732e1c8b244fffde2369dc527dc1cd3 67 | de8bb7792c7a2d9a12e0d74ab542aa5324fcd870d763d71480bb9d0c0fddd985 68 | 22e41cb662f8065c544e98a8eda8e4e352abb993405300e8df5f9fc854103ecf 69 | 6e97609808d356d68af0f93c8e2d86d25df3c9d7dbc7afbba4b03747affddd53 70 | 4fbfab1acd16322a1f58b9e97be2b5dbcec9b90f96a5585ff7f51f71c45b2f9a 71 | d85f94d0a7161d33326fcb54f11e29f313e8c4704918d0754184eb6bfdc6b9e8 72 | 95623a50108bd020e3b49bb032b50a0f01da13b8328115ba990117dd911d1110 73 | d7e4619c2f1c1d7e48bc4f426f8b583f70dbc9dfd951642eb5b6eb0a868b3f0c 74 | eeea7ebcc88e09bd00a39d0011010001b4285068696c2050656e6e6f636b203c 75 | 7068696c2e70656e6e6f636b4073706f64687569732e6f72673e89026e041301 76 | 080058021b03021e01021780021901030b090703150a080416030201162104ac 77 | bb4324393ade3515da2dda4d1e900e14c1cc0405025b48e90a211866696e6765 78 | 723a7068696c2e70656e6e6f636b4073706f64687569732e6f7267000a09104d 79 | 1e900e14c1cc04c14f0ffd1c78f8371ecc2b7412bb687257ac3e63fb91311fa5 80 | bc55e4511f5464f1b10e81ff655b0dfaa8ec59178233d2425965c6ec2127e32b 81 | 5fd244cf1b431a1f6515d5bddc695ce97a94e47f68600bf2477f4d887fe87f93 82 | 305cf9599993bc63f626f825b64d96fbd23b9f5c536e867719164aa81cc0f9a0 83 | 2d71e2d6c7fa1f3f461195db932106e81b4fd642c3db28e44f2a8339b32c84b8 84 | 03bd9bd65bbcf2514475ff3b9c8b81e5da4331af9321c0f2a62f60ddbaeca103 85 | 541aa1f4e4a8f41e523a26e4f4b06c2aad98865fd7054339a379b4aa697eb1dc 86 | 1c88d4d4b5047223bc4122333bcf57468874893a8e43ca952d4348e04d58b781 87 | 87edbb79588ae57e1645ab86d4d5363b6b293d50fc213d2ed3f1e112e17ee3f3 88 | f326114612ee9c2252ae22160074ccf9021d057087e87bb776283e5b580f774f 89 | b7fb9a2a242c99bbe1e4e5cecef11c9513bce1ae24be670da82e1854c9449a13 90 | db25744a73c0ad28005a7bb0eb5071647741b87494aacaf8c87a010ddfffeb94 91 | 549aeea8ad8223a0f848c3fe048979454394194290d2a363789eefb8bb429266 92 | b56c2a6be7807c4b6b8b1837b9ee8c7afbdf570a517472fed600d58b29306d80 93 | ea28620b53c19bdb6427a23192c804dd6a8f239c13b1e4bf4163bec82dd0d233 94 | e2f70de18c76009c634cc1022e816c9371e4316b62ef9b5078218c0a9b4c309d 95 | 36cab52c4efef33a0facafb41f5068696c2050656e6e6f636b203c7064704073 96 | 706f64687569732e6f72673e89026204130108004c021b03021e01021780030b 97 | 090703150a080416030201162104acbb4324393ade3515da2dda4d1e900e14c1 98 | cc0405025b48e917181866696e6765723a7064704073706f64687569732e6f72 99 | 67000a09104d1e900e14c1cc0486881000c7d5d5d72d2316d925bad0bea33104 100 | 5434c2942ac7a41294ddaf399f5899e0d39d17ebfd117361c6a9b814502ed1db 101 | 0d5bb14725e5142e8f891c8275c19f10795df378d4cff1265cd93a0875c8b128 102 | c32381ac457e17dcfecbfe088558853f6e8206e8d84ad4bf58c34c9784b05a53 103 | d67cb5b2f6b092b83e034468d95f1e6d0bbde8b370f8565f0a52314e83ec8f79 104 | f3ec6b08dd2a73f2014bfd699349f0c4c6efbc4e00541c6d7fdb48c8e5c35f2c 105 | d2100c00767fdebf4e323612cf8832f3cd22d66698e841dfc7be538f2a30d88a 106 | 888ac201f8d3241fe49ee7a1653112f8eb7e83abe19697a1965e1a1162cecd9a 107 | b7b514f09815c9fb888bdef3a06760f70dfa23455a3dadbdfeb25e262d449165 108 | d412f8c6f13f7abfd05e4dde083a677047fee10ff18b41d4738f211dd2fc4f9d 109 | 8bd6878f51b81762d1f57d99f91ebea9bdae7798f9267d8ee9f8da0382f92d54 110 | 0baebe23dc4a564a973badd98d900a5be5199f0c95ed7c9bfdbcc38e10d0e8bf 111 | 8b55a0e22f65146baeee314c6830119f248e694e6e06df27779deff46b9d6245 112 | b468d42086c460282b17b063cb8ab248d6b39bcd1ada235ec44d36b0806cef62 113 | 165acff3281cf94530db46c06af9dee7b02c6c39f1bd811106852151ed69dcf6 114 | 8aea1734f0a6a1560d14d01fe66997a14a499eded5f995273f47ce717007b9ea 115 | c9d596c30ca9d8c611102c06c7088cb1a6b8330457c1307116092b06010401da 116 | 470f0101074025fe42b415d45d5aa21a9b75c50e0d97306da9a9ad4a0b217576 117 | 9d2c8b892c7689027f041801080009050257c13071021b02006a09104d1e900e 118 | 14c1cc045f20041916080006050257c13071000a091051104e668dd04481f9a1 119 | 0100a4bfa3774c78c38efa7a5437174334d3635777b14aa2ecbd6a078133ea07 120 | 4b8900ff6f2815755ca83adacfd7f96c59f05f6e34ec20cb29acf5329de38a3b 121 | d1a7a207a9fd10009197e53643afa09d11163970e4c2b3bd32d36ab6b1538de9 122 | dc62704f9403138bd67aa979fd8588ea1bbb87be380198667826f2835004d357 123 | 03a11373e520fb35153f9a773309291400b9d86585f72a8e8ce699b90c75419a 124 | 16c3f5a16dada2c7ead94928b5ccf6b1acbf224297b4e0cb77205c262e5c5885 125 | 3d99f6e0c5fe5a2d44e4d6e4f21c5a6b76c8761b74bd1762b1a9f79f4398a346 126 | 969ae04c16d64debb0690530fd23a4f0e8bcdeabfef18759372b9ac4bcf7aa1d 127 | 154b1c7dbd09c631bb250e98b6fa15ceb9326e315b3b52d3edb058193ce40859 128 | d342dfda2d9691d013acfc7b3465b0e5fb2c57fed4214f90f8dbaabb340f87ce 129 | 12bfb28a5a340e3f798b19c27b594e0f291e124c101385dd96b2068cb39d8b4e 130 | d0fe230b4c64032f4dcf56b357b756a4f294c923b49946c42e94bdfe4ea6f9d8 131 | 7ca70436ee8b04b28ea74218067fa110a15ab5bab5d8376e8b3d6228af3e022c 132 | c027ebcb4b5cdd61a9db28026d616f807666c54f27c2eb2b4e3722221e9bd71c 133 | 06ff079bc7f9413cc88ac910be175c0ba9d2410e8edb36ea371b3f16ef7def05 134 | 1c3e0d64833c179b5bb924fe4dc91f48d7d4c09dbfeccee70baeafc0dda832cb 135 | 957da664e4d165525c1a0e23438109dbd6a426fe5b4b06b56c54573742b6b8d4 136 | 866ed7c7adc6c39a0d1a539b25bf8bedb317941613847311c70b009f813cb748 137 | 417e7129565886ccb9020d0457c3da1b011000aa2cc0e9b80fbff555ac72298a 138 | 4ecefe934062bb17cfc0d240618ce7015345b7e184e3ae2fe9824d5e92add3b0 139 | 51cc3a6e8af6833e86eab455dcda7bc11dc09438fe904d43fcf6b382fdbc34df 140 | d07e29168f95025319b3ca2ff92a21788ae628638125dd1c30a6ccd147b9e734 141 | ee95a004c23e2d87d9a4a2071ac155ca720be779a68716af193092cc9ac177aa 142 | 72868782cccb08640abaa59d072a37d558fec1df20497dacc2af657f1e43a629 143 | 5fef3c94fea1f944e1ff8f3f9b53baf11613951733c5579d138c73168d1cb078 144 | dcf6e1dc0e677868059bbe076b4b5f5991eb6589cd0854466f1a7b3e77db28bf 145 | ad67cc6dc90af5a50fb1d72f019318f532088e8f9e4c9919a3c65549f8beb3c8 146 | 1e53c3b92ab1a0478920c1594cfa489cf7a450f75f718f0ff9e436a841852cc5 147 | 336ab11cc1370a42be854e2338491c6691e1b232fea5756e746347201c83363f 148 | 65a8feefb3083b72718ded020f76905dbe0705838a994bddcbb0b265aa1343b4 149 | 2c1dfd4b7e40d4fac44e751df959fb7fecbbd1448d414a64c12d02ed130e869f 150 | ee257d5720fce308cb5809b51955e90e1d7f5ae4940627cc7d3c875f22cddb2d 151 | 896b90f59b0b35836cb0cc7056ff67b7814cd849de0940458b625774919850e5 152 | 5fd8f58d7d8c3a4351483191999be5d9c745a1b09b2c76ef345e2aa379345dad 153 | 75e5ac50c89b6641107626f49fe5a7cee24c63001101000189043e0418010800 154 | 09050257c3da1b021b02022909104d1e900e14c1cc04c15d2004190108000605 155 | 0257c3da1b000a091013dad99c7e41519cc6fc0fff6688503eb4b0a1313767cb 156 | 5e3ee6319ff05a50e709daaf4c60fb96b93aaff7c041c68e0206a308c11738f6 157 | 5794f061750e23c43dc52ece7608d664730cd731bb29cf595f20e93653550686 158 | 69c0cab898e147f9711bb644f4741d8c0e041d31afaf5222bb26957e297f5027 159 | ba513b08863fa0f0630765d0450ee5b3cb0caa69bed13c51cac6a8b071aeed56 160 | decf988a066de9d2b121f13715920322bdd50fb9efe2a7e98268309f19e0225c 161 | b5d6b62122c1a4b73eaf90cc7859b41bd285695cde4da608596b190c28bcfc58 162 | e52a86b3a43089fae69c6492972680a2b0d971012465efc73f6fea5ca6fbb810 163 | f7febf2dd8e13e0592b02715b67c8a5a3bebbc939117483ceec51a92363df061 164 | 4236f96350cc1980c8e67a5c15f83f3d316726a1b570b327ee5d7aa0a712d248 165 | d4774f4af33b49313ab3a066921525f30792003fbbbff1cd3d6bd05d81687861 166 | 5eaafa15382a81ee3259523fa7fde521f4fc6c3adc1d265bdda0e0ee408632ce 167 | e49aa66e8e3e704a83ebfb069dfd626f23e4d7dedf1aa0f8ee824151ffab1dcd 168 | a05aca7c068b286b15fbe8e77fcf786f6dd8fdf82ef38332b7e2a7f2e3ab3ba8 169 | db0708962e4827d2ece63b9edb8bfe85eda310c12c5c31c018dc3842a1e5e479 170 | 8ab4411659776ada3db039af6efcc0f5d683f5396c77a71985f508e5a545e856 171 | a9792a47d649618d614d3d3f59200ad992c21932b9b4360ffe28876e97969598 172 | 70831f4991f9a02fe3795e8016ea82676b7b68cd2fb154ce69c5369334edb8be 173 | 7430f97431922085c2d7fcd5c85dfe85e18d6a4b83f2b5bc5d00586a2637dc92 174 | e5db4ab65599d07ff729e10690a7fd891a7c8f56d5345ea60616fc5e5fa728b5 175 | a2a84fee7b3c7a39804526e8fa5a90a06e669151b98aa57ecffbe26e3a8b20d2 176 | 7f81cf325800828fe3efc52cbdf9a92a4b5be0ee5996976ef812fce8232542fc 177 | 0108fc37093b562472841470480bf0a5d730be5007d557d31dfa50f1ad238cdd 178 | 4dcdff13afd223a3c3509ec6bee72e8f99fea5e348f80bc1cfb0c07b497f29b4 179 | 58a0f259c144fb731168f9e3f5ad5c9c06446d745d6e2b750539851f53b9f73e 180 | 585b917f074b82b84f4e7286c951bdcce91377d0a5e23e7cb44b23bbe9b81cd9 181 | 14379828a2ebddc4749efdd980e9c40059febf9e127fb923376893d250eb59c0 182 | f64eeff373b0c824c194cb5db7a19bef7158c90f46dd504fb5793207f19f1855 183 | a087a83c0118068f2dd0fd865d530d65d66424fa1589618e7a2e223c4deb8fa3 184 | 41ca7208a0464d0c42743903947ba35aab901a1bf6bac0f6bdf884f3298f1547 185 | 928c7f75e070a2c1967b72cb14e09c763b8f956b871537fa652b9f083c2c837d 186 | 4b1e2858392cfd2101eca3772868d281cce7d64dc6209445f018588a7e42bb0f 187 | fe683d7ac398121f1521220c07d816cce57f1ea296e9fdcb00b8380463b3a83b 188 | 120a2b06010401975501050101074065df60f6227e71fc9f211fc47c754580c0 189 | d366d401429158bb3a05eaf3da962d0301080789023c041801080026162104ac 190 | bb4324393ade3515da2dda4d1e900e14c1cc04050263b3a83b021b0c050903f7 191 | 2300000a09104d1e900e14c1cc04210a0fff5dee6c49f018eff425f86b20f0a5 192 | 5f8e8dc4b9ccaff8b9b311a96329f96e785d6fb829c1fcbf79198fb23b6f32bb 193 | 64ccce8968f7bfe1f453c962ddbe385de5b8113e79313b9c94837ffb2d88d1df 194 | 59a2dc0f1d7b2c6c1aebd502aae4da62c67ee99f388b2df0dc8e50d216165a8f 195 | 5358772d9effc51981ddb94abefdde2811dfea0d4c7698291e92a8888d709fb4 196 | 9d1ceb19f02af5ddc4f39cb5ca5c56a9b545a0b8c2302daa21291361ccb0b127 197 | 6c109fd534efe097b2bf7b2c4a5be9ca0279fcca5ceb2c0c4dacfe7abbc934e7 198 | 4490919fb3465b9e97ea4e0c814ea2f104c1783553512306725e872e3be15d29 199 | 0c818f1ef7a6ee924d75fd1d710a63c47848840e654dd2d472e3a40e4f662159 200 | e616739e4660ef13e8e458da682a452ccd4eca7c893a2b310f7a2dbb4d6e54c4 201 | 3dfeba2f2733ac004a6948250a8d8eaa6b7930a84549d310b3caa3323d1ec575 202 | 33c9e6ef8b180299ad033bbac3821447ee8f767f205596dc195c87008297c44f 203 | ca8f32e508cbc4cccd319c5e4a46670674a8dc56a2d8ff72f5151bc94976103d 204 | 67ad7232d0e7ff2c95e55d241f57d31e5a0bb3aee596595d6fff07ffd06a944b 205 | 913cf46bbadabcb13d27c347da72aec01d0e98333a7523a202bcc1d26689341a 206 | f9340e8a31638d4b3e68489f5b8e3a5935f03fe11eaa1c70825b80208a44ade8 207 | b627f4b3cc1722812007fd1f86123be4439bb9020d0463b3a85a011000c0618e 208 | d85336067be62fbc94fcbb0457f385dae096a265789685e5d8c49eb0d90d6923 209 | c48d4031a20a2ebc95f15a3c4954d4bed1afba1ab9d3a2ab579e68304ae21629 210 | 2e78f055cbff6cb9bfe83bd84eb23ddebc3c2674d7cc1be2844defecde606831 211 | e695569b30d443983a531d2cc8b240f911a7179fbe47c7b5cf59fe757ff9cd3f 212 | 812d63b8b4655a2b7e6a922da0cd1f7f90d15a47e18198b7034f2c0a10184d1c 213 | e7d6490c8613e3142533abeff76f28f588afcd9b1febef38e022aa269a1e8916 214 | fb04c272beb34a5d402a3a2bce0f13f7a60fed5d817b8cc67d3c66d2420a55ce 215 | 6e2ec8b8ea32b45aeb2005402465dc56d25d4bd09cc5319fa2b94b9c10157fe7 216 | fda86571f030d8b20b11fc1d813dd519d6a9cd9f402c12db7689b6dd81de25ad 217 | ec87480d73578f59c25752430cffa5ed848e4e824ad3d7f2334e3605174c46ef 218 | 9941f130eb4edc4e1dcb6f517e632da0c74e94a0116a5accc2915056b920bce0 219 | 8505827be9ef9179a900555b8ad30d1f2a5c5822d197980b496f7e7ab22bd59c 220 | b8525a77fc6a20e8e728dbea4568edf1592f919d1ea4f6218e9d1e06c90abfea 221 | fadf88423fc2632bf4e9a9765bb4548b427444ab9e221b0e9a667e31be9864ea 222 | e96c73f3023ac183b61af1c1ae0b35928f0f60e1a0b69f2c7bc29e05412e206b 223 | 6199f9487a09227ef1fbc076f4269da290ea7a3692b594fee68684dc83001101 224 | 000189023c041801080026162104acbb4324393ade3515da2dda4d1e900e14c1 225 | cc04050263b3a85a021b0c050903f72300000a09104d1e900e14c1cc049d320f 226 | fe351b132756b89bd4e544afd27bc58a02da67390cfede2a65cba592bd9de907 227 | ef45b64271730783b7e34854a0dff597cfdb25808ec57d02d87197b06b499326 228 | 7d766e561a37c9eed0853e2f074d617ce4c5b5a5a242464740a6a83351d02a96 229 | 5dbfda3c5ac3a7d1453f1675a1a5c6d3228a91e1c390508055fb782af0d3b543 230 | ef76b94682487112fa2872e2fb738176fe5eac35df170d376de36a441bb6adfe 231 | 26441c88cbb1e733e680db715940712959f42042d9bc62fae178fa98893dd6ba 232 | 95c257bf0fb706fbfb5f2e678d78431882bcbb79bd095b77b2e3ea03f62f3af7 233 | bab4fb091d1528e01899a2b0066999038ac285c5fd7b94c04c9ce394db07096f 234 | ce1e57eeab2882a488fd63d6ace204860f3b8aa7bd8572ff3f32ec8f2705bf13 235 | 8dc1eebdfcb5f0fcd045b1f3ffa7e488002a921941858618fa6d73239d9ac752 236 | 9864987351b06007be2d431a54c6021aec170a60555c4b15b301ac105877d7b4 237 | 0d5de1c2cf538bb8ffcccb9ac427ff9a5d1293c44c696cae5b29b74356b1d68d 238 | 65f4988cd7d99cd47631c3be340e3d96c1af9b2700ea8e313f619eaa66d3fd10 239 | 3b135c668f2390e430d2f9593cd073512ed970cbdc4ed157dd1a96509a394e2e 240 | 3deddd3aaa7ece2dee80e3a7c8447be04ff58444bd849b6c055de393ba169a86 241 | d9259c4877cf997efa60e402c82a7501c84266357e94d26598c69fa4f6770c0d 242 | ccb8380465935dbb120a2b06010401975501050101074060e6f43b89f3468217 243 | 0c48f000fbef6c084f0afdc7ac644333f6d94569c39a110301080789023c0418 244 | 01080026162104acbb4324393ade3515da2dda4d1e900e14c1cc04050265935d 245 | bb021b0c050903f72300000a09104d1e900e14c1cc048f720ffe240557b89dbf 246 | abc0092c38d8a4f04ad87661dc6d9853c36201a7111e115fee619444bb3e0e8f 247 | 40ee71c6cc63ff7947048f42af619677004fb25c121ed479ee5b1439c52ece87 248 | a29c783b4605fdd6043ef9b7a30a6fe7e5ec1343df4d78ee53fca84265975673 249 | 8ca376a798fe5845a312ee59b1e53c2e2f80efc736c336d49f598bdcb7cfa6ae 250 | 0de61f7f5077b14a556a9fe81a0ac8d4a5c397803b14309742b104db30e5fc98 251 | 28faa0c60b81cdc49677614c4a0354aa8cd3e35dde5646ae140eab92fa7b29e2 252 | 3aebb879bee726d031da7e52c370012cd481e58d290065918c2cbf8370eb8e96 253 | 165839dd519e992e51613a80c3fe34682fa4c31268e19f070b71f547d7d88176 254 | cfc38ab6e3c06cf4758547dde029f33a41b8609f932476707ae0573d147afff5 255 | 6d082e449eee4c45cc9f78abb16e97b5f8ce3675f259ff7d638837acb9a66f57 256 | d0f32c4a0b3b2d675173091aa3ce3e2d00318de188f13de2c056eb4007c3abdf 257 | 122bfcaf74390bfdb9e2132322f2085682c48532222cf3221b36fc07ff275373 258 | b135943dcd7498faeebf625d059d50337b69d999c84530c70201fe039bec019e 259 | b5e9fedfaab5d2a60e458e09e49c9544ec29d38a7bdf2dfa4cc6358e12047961 260 | 977abfa38bd3e04a2339d4cb8136e4db784010c35f015fc24c16d484c710b34f 261 | 10b446217a866d99a4b649ed4b5393c04a580030978b4dab3977b9020d046593 262 | 5de4011000a7a025d85a27a08b4b8acb748c4adf2512aa12526a61abe78fd1ea 263 | 7f806442ed8a41f141b985db934d34194d83667b5c0f3db149be0f943bae9097 264 | b569de4ea1563f28d3525b7e25eeed40bae47db954312a746a09c2d0116d17fd 265 | 48fb7ff618affb2f7cacde1ab9b358bddafd2941f81c56730a87854736c73ed6 266 | 0b4aa6676455e614380aa875d035df0e511b8a3a7c2624f3a13e63759d55f290 267 | 0336404f54bc6a8e713fa086ad19cf3f93dd44c2ed61ef07f94d918fcf56224b 268 | fca7b0629e7ef915fb8e505d883667be0557033fc9e54f8909408054f4d82014 269 | 8ca83b8bf8e7f3874bde449f045df814de72d013ab6dde749d8d89bcffa7a563 270 | 5c7c2592bee7e54e113076a5dacc8da6329a153a8285e7af35ba95b35aa06638 271 | 2ed112eb2bb1ad43fba33390889c010efffbe667b13fa86b4c49f7335c315d29 272 | f6e2aff4a8f3127a31635b43c7028a633d31052786d05ea785e379bfaccad565 273 | c27fc64e5dfa30ec2db227309cd296e4bf34be95ddd4b7cb28e7eff780518b44 274 | 6f7b6fe37a54c46c25a3e3963c29fee0b75baaf405054ab7e7fabf4e701eb8e7 275 | 10cf26f592be26ad15d16b22633ba008af4a3877b45f7f7e06f23f189076ec14 276 | 701781b31c81eeca29b1a76c656a41b149767e361501cebcb4b9a8c577b0f03f 277 | cf2a9b494434b4feb7cf432a143b7932b87de6dcf379b1656952a9221277290e 278 | 35ff64c823001101000189023c041801080026162104acbb4324393ade3515da 279 | 2dda4d1e900e14c1cc04050265935de4021b0c050903f72300000a09104d1e90 280 | 0e14c1cc042ddd0ffd189b4ee6adc85c3ee66a45b995513bc7e9c8183bdfc2e4 281 | b0bba1a3bd81884935ec54169f5cff1b1645113c08414fdf0eb4b1642e2da2ed 282 | 4c9081fde7db94581200d61cc153f52068d9c84d85570eee034514f979338286 283 | 603a4244bffd08f6a9d9925a42e7cf3692179fd189e8258132d9534c5159328e 284 | 47df4c8fd0b1a0b90d35c37eb5dd7db8ea0fc4e86d9e49acc0365218675878ec 285 | 5d21db847fdfaaa655711651bba5fbbadbf4bcc598866beada734e64ec6cc846 286 | a4ac1abceb510f320daaa2a053ddf708e59de5c778639fc80c080ba0d7a2fc15 287 | b2327c2e0b6f1267ec94ba3b95609357c51f2fe387074bec2c76b45973f8de0d 288 | 5293138f5bc3bd04727d4bb6be4e08f23dc2b9fb66217f0faf55c4946e516a42 289 | df4e8b1fe544257ae487434fcbc11bf8d059ade322fa774c3c5e4d42f1c903f0 290 | 1e25f057c2766d3c77e27d289a294dd2d939ca015746215bcf41281040e5a162 291 | 9b47628a722ca8b6791969704fd091d8b46864c6806bc7e70136943a4dcc297a 292 | 47c42e68d470196c79060c1474b1e70c7cc261467f49b128d093c35fb8d6fb8c 293 | a8566e66437ec5b7b115980d64ea4d3bc232df5748a642095d7a96c5a0c5c936 294 | 1cc895714196a6f8534738fd874abe90ecd5ee6ac215c9c887fdb5451aba1f3d 295 | d72f75cb74f89617e2e6969b83f2ed16fcf6655b1471fd7bfc51f3b7c982a9fd 296 | d0b5c3d9901a6207aab838046798f3e2120a2b060104019755010501010740de 297 | 6e5cff49b6848bc2a8a7a46a9be35cf7dd5fb6becd19cef51a860cbf8e3a5d03 298 | 01080789023c041801080026162104acbb4324393ade3515da2dda4d1e900e14 299 | c1cc0405026798f3e2021b0c050903d23900000a09104d1e900e14c1cc04661a 300 | 1000c7820c9781bf55d202a622da2377356ffcaffadd0e72d78a5459aab5e774 301 | e23b12fa3e45d281bd68307bf339b5b76fc629173bc835bb989025fbef1fd346 302 | 9243cd294de998e8c36f7acd6be8f8f7d95f0be6df8bfb50d534d9f919a0b1f1 303 | 3a2a535a9ebe75a0c277fa4e23393a495efea56d974d2ddda7ed914a35159cca 304 | 217de25da4704a8a430eb63da54e29d76f8ccb10d5ba634a542c4bf35986ef13 305 | 1c9384196d8a90a587649ab0194fd0e369473976c64b10a9627d050602ee5e6d 306 | 4591d1b36a3fb415efab2547a2dce1f46f8af2f40e89ec900c92aa510a08cfc5 307 | fb92d52e800dcbd7076ec76d768c4480a8ac1c1a6193733e64ba6084cce76b65 308 | 8eb77e7210c1402d3f5d59a574d7a327846bcb9b6e0d8113fc37187f9e0e112a 309 | 1250ef5cad86ad8d6d32783182cf075138e4dde3e864db30855a34c7692a4f8c 310 | 922a7052c1674f069bb312052ae6b8db79a05375ef02bbec3a27dc2e9c5f203f 311 | 5772a963f543a62d6826bedf18b4f6c2c203dd349d4f5cc26c54f0dcd62a0308 312 | fc156983ea19ac1099869433b006910f0646b980812c18c211cce3fc0a025fb9 313 | b3b072bf46989ce8768f1d7d3bc7a781586b63f03e0ba393c4740c04906b299d 314 | ee1d73d669839c0b5edb0e46bdf431db14d618301ac1669e95a1ce98d189e51b 315 | dc4cedab30b6b580fa1c019c5876c49504b9b945bba369acf47f978a85f7fc60 316 | 6461b9020d046798f3fd0110009ec1b55cd540c14652d2fe934e9194da1160bd 317 | 6ffc0e351a8816947cac8d31553d399404b33c15dbebe6abc4edb103e8a9bd8a 318 | 211acbc2bd5d3a05ce561a2903e2eda90121c0f9e079324ecfb45045aff90f71 319 | b8f4c0d0044c42a0a848eb713f39043e9eb4bb2be1d3e5e33f851c78a6598c9e 320 | 3263de61848be859c716cf6d89fd2ae943657bf0c8846a5c08765a8961604504 321 | bd17aa0838ed67bd690a890a28747fcfeb2d053de5a79c84a699ea02e32f956c 322 | 5efa709ff5fa86cf1e3feb1ae42d9bfc5feb15822793aefd3d6f60866ea2bd15 323 | d37ca318089e8331eb7e6ebfe0c20f38b7870650c803adf3f1f459fc942f1bc2 324 | d20777d68e3dbd7bb578bd812198541988d3de6dc9e47e31de73a53e77912a01 325 | ee385f71f70c8a61a0b49943159cfeef7a13fc9c0284bd23dfb62074b32fc194 326 | 89fc490b8b34a3bd6629b4486ec80d89712fbf46bd6924359ffb91f22f2a48b3 327 | 7b3f5df2c2cb703f1eee2f91480b09a27fc62bbe58492f9183ca26001400d971 328 | ece0363608bb6b7234ff2ca82bf81da223cadf3076c68f7dbe22976eb817184b 329 | 341f3f7fb14248adc0e4c315910dbf5d987503020e1acacdb2a2fb1b5037f092 330 | 13432fa088f88adb7c60be1c6abf2e1c081c5a9a8580387749b46f107255eded 331 | 240ce535e2408a2b2e1fd0e761754ca2e146017002793471a813ec7876dc3029 332 | b5628a24d5a1456d92c503ec19001101000189023c041801080026162104acbb 333 | 4324393ade3515da2dda4d1e900e14c1cc0405026798f3fd021b0c050903d239 334 | 00000a09104d1e900e14c1cc0466a71000cad9a04fb8c04540e0f3046222ecf6 335 | 741081ac5459c2cb6363b559afdc90a2f8962a76973501c9d8eadd7b4876d35b 336 | 233e02a216af5c12f0c53872869ef59f48bcd44810cc21175a7f48710f5271ae 337 | 71f19dc9674eb3765381ba2c898ce356e7c08a5130a0c96de8901ea49ea7107b 338 | 82d465f82c62a0d457bb8e2c69d49145cdcd6b02ffbfb7b7bc8cf561bdc4131c 339 | d05fec4eec754a79902197f5cb231f4f9499a95d06a2883c328471e17bd7fa7a 340 | 753dca135a9805431bcecfd620b870f2e2b5645579bf861cec6d84ece25d6d8f 341 | b4e8f254b2cc382ff81084f4789d66f36e60c4b92562e25b0c90c38c2705841b 342 | 5b1063ef87d566174e886cb855d99cd4382ca84523747fbcec616b25b22c2dbd 343 | f283fa884ab2688a2aba98d1c0e2f1292c510f95c9820bdd2a0f9562ab098148 344 | c7fdba58b77c738f0acb72776895d86a57325f8f99407606655b9e369b573ed8 345 | 562c376eb2921fd5218179a16175d3d7d1ea4e6823bfc63f5438b2819ceb5253 346 | 8c0cee4425665d407888b9beab17e6409ac8e2ceed4c3e810cb3e93c586aa4dc 347 | 63f65ec1ea73b7d83e07d8f7461e1bb7a18c8f181b3ba278093a34ecb86e898d 348 | 47d40717959a2978ebece7578ff3ad7a15b9c3990eb4dcfe1478fa5d344edc0d 349 | 7bbf4547096c6dd4f5b6b7fac4cd9b193df7c831a86f896ece3ac33074ae28b2 350 | 7f6de66fa2e778224570f82793aee19ff8 351 | ) 352 | 353 | $ORIGIN _openpgpkey.spodhuis.org. 354 | ; ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04 355 | ; Phil Pennock 356 | b78df455e7e2088f31b9bc5b5b4c34718b1e77f2846a846107f456dd TYPE61 \# 9361 ( 357 | 99020d045266058a011000e78538531603a94300648095453a83fa510de80594 358 | dc452613c77038a5c422e32ce221254e83d13d7e1d98786c1e01900f44aadebf 359 | 143cda5bf9903bfc52f9423a7121f6f1f89697c36a08ab88402471373bc94982 360 | 240c91f328392a6ed5d357ef6cb4d62198ac7f912ac00c1576421a7a7e420d8c 361 | 717dacbbbf88c1197c4dc1d42ee27b0c386b983774e5d050655a27f43328464f 362 | 2865eab313da59722a79496876c2a00b295ef3754575adaa8fdb1ab7289b715f 363 | 3667f76c3ffc2b10b9f039812e78670de6aeeada2148ff21df1afce82c5d61bd 364 | 57cfc139211566668a3f34b3346c6d611e4894447889aa8dfa46831aac512109 365 | fca81f0bfdf07cee796575570f1959c64732e1c8b244fffde2369dc527dc1cd3 366 | de8bb7792c7a2d9a12e0d74ab542aa5324fcd870d763d71480bb9d0c0fddd985 367 | 22e41cb662f8065c544e98a8eda8e4e352abb993405300e8df5f9fc854103ecf 368 | 6e97609808d356d68af0f93c8e2d86d25df3c9d7dbc7afbba4b03747affddd53 369 | 4fbfab1acd16322a1f58b9e97be2b5dbcec9b90f96a5585ff7f51f71c45b2f9a 370 | d85f94d0a7161d33326fcb54f11e29f313e8c4704918d0754184eb6bfdc6b9e8 371 | 95623a50108bd020e3b49bb032b50a0f01da13b8328115ba990117dd911d1110 372 | d7e4619c2f1c1d7e48bc4f426f8b583f70dbc9dfd951642eb5b6eb0a868b3f0c 373 | eeea7ebcc88e09bd00a39d0011010001b4285068696c2050656e6e6f636b203c 374 | 7068696c2e70656e6e6f636b4073706f64687569732e6f72673e89026e041301 375 | 080058021b03021e01021780021901030b090703150a080416030201162104ac 376 | bb4324393ade3515da2dda4d1e900e14c1cc0405025b48e90a211866696e6765 377 | 723a7068696c2e70656e6e6f636b4073706f64687569732e6f7267000a09104d 378 | 1e900e14c1cc04c14f0ffd1c78f8371ecc2b7412bb687257ac3e63fb91311fa5 379 | bc55e4511f5464f1b10e81ff655b0dfaa8ec59178233d2425965c6ec2127e32b 380 | 5fd244cf1b431a1f6515d5bddc695ce97a94e47f68600bf2477f4d887fe87f93 381 | 305cf9599993bc63f626f825b64d96fbd23b9f5c536e867719164aa81cc0f9a0 382 | 2d71e2d6c7fa1f3f461195db932106e81b4fd642c3db28e44f2a8339b32c84b8 383 | 03bd9bd65bbcf2514475ff3b9c8b81e5da4331af9321c0f2a62f60ddbaeca103 384 | 541aa1f4e4a8f41e523a26e4f4b06c2aad98865fd7054339a379b4aa697eb1dc 385 | 1c88d4d4b5047223bc4122333bcf57468874893a8e43ca952d4348e04d58b781 386 | 87edbb79588ae57e1645ab86d4d5363b6b293d50fc213d2ed3f1e112e17ee3f3 387 | f326114612ee9c2252ae22160074ccf9021d057087e87bb776283e5b580f774f 388 | b7fb9a2a242c99bbe1e4e5cecef11c9513bce1ae24be670da82e1854c9449a13 389 | db25744a73c0ad28005a7bb0eb5071647741b87494aacaf8c87a010ddfffeb94 390 | 549aeea8ad8223a0f848c3fe048979454394194290d2a363789eefb8bb429266 391 | b56c2a6be7807c4b6b8b1837b9ee8c7afbdf570a517472fed600d58b29306d80 392 | ea28620b53c19bdb6427a23192c804dd6a8f239c13b1e4bf4163bec82dd0d233 393 | e2f70de18c76009c634cc1022e816c9371e4316b62ef9b5078218c0a9b4c309d 394 | 36cab52c4efef33a0facafb41f5068696c2050656e6e6f636b203c7064704073 395 | 706f64687569732e6f72673e89026204130108004c021b03021e01021780030b 396 | 090703150a080416030201162104acbb4324393ade3515da2dda4d1e900e14c1 397 | cc0405025b48e917181866696e6765723a7064704073706f64687569732e6f72 398 | 67000a09104d1e900e14c1cc0486881000c7d5d5d72d2316d925bad0bea33104 399 | 5434c2942ac7a41294ddaf399f5899e0d39d17ebfd117361c6a9b814502ed1db 400 | 0d5bb14725e5142e8f891c8275c19f10795df378d4cff1265cd93a0875c8b128 401 | c32381ac457e17dcfecbfe088558853f6e8206e8d84ad4bf58c34c9784b05a53 402 | d67cb5b2f6b092b83e034468d95f1e6d0bbde8b370f8565f0a52314e83ec8f79 403 | f3ec6b08dd2a73f2014bfd699349f0c4c6efbc4e00541c6d7fdb48c8e5c35f2c 404 | d2100c00767fdebf4e323612cf8832f3cd22d66698e841dfc7be538f2a30d88a 405 | 888ac201f8d3241fe49ee7a1653112f8eb7e83abe19697a1965e1a1162cecd9a 406 | b7b514f09815c9fb888bdef3a06760f70dfa23455a3dadbdfeb25e262d449165 407 | d412f8c6f13f7abfd05e4dde083a677047fee10ff18b41d4738f211dd2fc4f9d 408 | 8bd6878f51b81762d1f57d99f91ebea9bdae7798f9267d8ee9f8da0382f92d54 409 | 0baebe23dc4a564a973badd98d900a5be5199f0c95ed7c9bfdbcc38e10d0e8bf 410 | 8b55a0e22f65146baeee314c6830119f248e694e6e06df27779deff46b9d6245 411 | b468d42086c460282b17b063cb8ab248d6b39bcd1ada235ec44d36b0806cef62 412 | 165acff3281cf94530db46c06af9dee7b02c6c39f1bd811106852151ed69dcf6 413 | 8aea1734f0a6a1560d14d01fe66997a14a499eded5f995273f47ce717007b9ea 414 | c9d596c30ca9d8c611102c06c7088cb1a6b8330457c1307116092b06010401da 415 | 470f0101074025fe42b415d45d5aa21a9b75c50e0d97306da9a9ad4a0b217576 416 | 9d2c8b892c7689027f041801080009050257c13071021b02006a09104d1e900e 417 | 14c1cc045f20041916080006050257c13071000a091051104e668dd04481f9a1 418 | 0100a4bfa3774c78c38efa7a5437174334d3635777b14aa2ecbd6a078133ea07 419 | 4b8900ff6f2815755ca83adacfd7f96c59f05f6e34ec20cb29acf5329de38a3b 420 | d1a7a207a9fd10009197e53643afa09d11163970e4c2b3bd32d36ab6b1538de9 421 | dc62704f9403138bd67aa979fd8588ea1bbb87be380198667826f2835004d357 422 | 03a11373e520fb35153f9a773309291400b9d86585f72a8e8ce699b90c75419a 423 | 16c3f5a16dada2c7ead94928b5ccf6b1acbf224297b4e0cb77205c262e5c5885 424 | 3d99f6e0c5fe5a2d44e4d6e4f21c5a6b76c8761b74bd1762b1a9f79f4398a346 425 | 969ae04c16d64debb0690530fd23a4f0e8bcdeabfef18759372b9ac4bcf7aa1d 426 | 154b1c7dbd09c631bb250e98b6fa15ceb9326e315b3b52d3edb058193ce40859 427 | d342dfda2d9691d013acfc7b3465b0e5fb2c57fed4214f90f8dbaabb340f87ce 428 | 12bfb28a5a340e3f798b19c27b594e0f291e124c101385dd96b2068cb39d8b4e 429 | d0fe230b4c64032f4dcf56b357b756a4f294c923b49946c42e94bdfe4ea6f9d8 430 | 7ca70436ee8b04b28ea74218067fa110a15ab5bab5d8376e8b3d6228af3e022c 431 | c027ebcb4b5cdd61a9db28026d616f807666c54f27c2eb2b4e3722221e9bd71c 432 | 06ff079bc7f9413cc88ac910be175c0ba9d2410e8edb36ea371b3f16ef7def05 433 | 1c3e0d64833c179b5bb924fe4dc91f48d7d4c09dbfeccee70baeafc0dda832cb 434 | 957da664e4d165525c1a0e23438109dbd6a426fe5b4b06b56c54573742b6b8d4 435 | 866ed7c7adc6c39a0d1a539b25bf8bedb317941613847311c70b009f813cb748 436 | 417e7129565886ccb9020d0457c3da1b011000aa2cc0e9b80fbff555ac72298a 437 | 4ecefe934062bb17cfc0d240618ce7015345b7e184e3ae2fe9824d5e92add3b0 438 | 51cc3a6e8af6833e86eab455dcda7bc11dc09438fe904d43fcf6b382fdbc34df 439 | d07e29168f95025319b3ca2ff92a21788ae628638125dd1c30a6ccd147b9e734 440 | ee95a004c23e2d87d9a4a2071ac155ca720be779a68716af193092cc9ac177aa 441 | 72868782cccb08640abaa59d072a37d558fec1df20497dacc2af657f1e43a629 442 | 5fef3c94fea1f944e1ff8f3f9b53baf11613951733c5579d138c73168d1cb078 443 | dcf6e1dc0e677868059bbe076b4b5f5991eb6589cd0854466f1a7b3e77db28bf 444 | ad67cc6dc90af5a50fb1d72f019318f532088e8f9e4c9919a3c65549f8beb3c8 445 | 1e53c3b92ab1a0478920c1594cfa489cf7a450f75f718f0ff9e436a841852cc5 446 | 336ab11cc1370a42be854e2338491c6691e1b232fea5756e746347201c83363f 447 | 65a8feefb3083b72718ded020f76905dbe0705838a994bddcbb0b265aa1343b4 448 | 2c1dfd4b7e40d4fac44e751df959fb7fecbbd1448d414a64c12d02ed130e869f 449 | ee257d5720fce308cb5809b51955e90e1d7f5ae4940627cc7d3c875f22cddb2d 450 | 896b90f59b0b35836cb0cc7056ff67b7814cd849de0940458b625774919850e5 451 | 5fd8f58d7d8c3a4351483191999be5d9c745a1b09b2c76ef345e2aa379345dad 452 | 75e5ac50c89b6641107626f49fe5a7cee24c63001101000189043e0418010800 453 | 09050257c3da1b021b02022909104d1e900e14c1cc04c15d2004190108000605 454 | 0257c3da1b000a091013dad99c7e41519cc6fc0fff6688503eb4b0a1313767cb 455 | 5e3ee6319ff05a50e709daaf4c60fb96b93aaff7c041c68e0206a308c11738f6 456 | 5794f061750e23c43dc52ece7608d664730cd731bb29cf595f20e93653550686 457 | 69c0cab898e147f9711bb644f4741d8c0e041d31afaf5222bb26957e297f5027 458 | ba513b08863fa0f0630765d0450ee5b3cb0caa69bed13c51cac6a8b071aeed56 459 | decf988a066de9d2b121f13715920322bdd50fb9efe2a7e98268309f19e0225c 460 | b5d6b62122c1a4b73eaf90cc7859b41bd285695cde4da608596b190c28bcfc58 461 | e52a86b3a43089fae69c6492972680a2b0d971012465efc73f6fea5ca6fbb810 462 | f7febf2dd8e13e0592b02715b67c8a5a3bebbc939117483ceec51a92363df061 463 | 4236f96350cc1980c8e67a5c15f83f3d316726a1b570b327ee5d7aa0a712d248 464 | d4774f4af33b49313ab3a066921525f30792003fbbbff1cd3d6bd05d81687861 465 | 5eaafa15382a81ee3259523fa7fde521f4fc6c3adc1d265bdda0e0ee408632ce 466 | e49aa66e8e3e704a83ebfb069dfd626f23e4d7dedf1aa0f8ee824151ffab1dcd 467 | a05aca7c068b286b15fbe8e77fcf786f6dd8fdf82ef38332b7e2a7f2e3ab3ba8 468 | db0708962e4827d2ece63b9edb8bfe85eda310c12c5c31c018dc3842a1e5e479 469 | 8ab4411659776ada3db039af6efcc0f5d683f5396c77a71985f508e5a545e856 470 | a9792a47d649618d614d3d3f59200ad992c21932b9b4360ffe28876e97969598 471 | 70831f4991f9a02fe3795e8016ea82676b7b68cd2fb154ce69c5369334edb8be 472 | 7430f97431922085c2d7fcd5c85dfe85e18d6a4b83f2b5bc5d00586a2637dc92 473 | e5db4ab65599d07ff729e10690a7fd891a7c8f56d5345ea60616fc5e5fa728b5 474 | a2a84fee7b3c7a39804526e8fa5a90a06e669151b98aa57ecffbe26e3a8b20d2 475 | 7f81cf325800828fe3efc52cbdf9a92a4b5be0ee5996976ef812fce8232542fc 476 | 0108fc37093b562472841470480bf0a5d730be5007d557d31dfa50f1ad238cdd 477 | 4dcdff13afd223a3c3509ec6bee72e8f99fea5e348f80bc1cfb0c07b497f29b4 478 | 58a0f259c144fb731168f9e3f5ad5c9c06446d745d6e2b750539851f53b9f73e 479 | 585b917f074b82b84f4e7286c951bdcce91377d0a5e23e7cb44b23bbe9b81cd9 480 | 14379828a2ebddc4749efdd980e9c40059febf9e127fb923376893d250eb59c0 481 | f64eeff373b0c824c194cb5db7a19bef7158c90f46dd504fb5793207f19f1855 482 | a087a83c0118068f2dd0fd865d530d65d66424fa1589618e7a2e223c4deb8fa3 483 | 41ca7208a0464d0c42743903947ba35aab901a1bf6bac0f6bdf884f3298f1547 484 | 928c7f75e070a2c1967b72cb14e09c763b8f956b871537fa652b9f083c2c837d 485 | 4b1e2858392cfd2101eca3772868d281cce7d64dc6209445f018588a7e42bb0f 486 | fe683d7ac398121f1521220c07d816cce57f1ea296e9fdcb00b8380463b3a83b 487 | 120a2b06010401975501050101074065df60f6227e71fc9f211fc47c754580c0 488 | d366d401429158bb3a05eaf3da962d0301080789023c041801080026162104ac 489 | bb4324393ade3515da2dda4d1e900e14c1cc04050263b3a83b021b0c050903f7 490 | 2300000a09104d1e900e14c1cc04210a0fff5dee6c49f018eff425f86b20f0a5 491 | 5f8e8dc4b9ccaff8b9b311a96329f96e785d6fb829c1fcbf79198fb23b6f32bb 492 | 64ccce8968f7bfe1f453c962ddbe385de5b8113e79313b9c94837ffb2d88d1df 493 | 59a2dc0f1d7b2c6c1aebd502aae4da62c67ee99f388b2df0dc8e50d216165a8f 494 | 5358772d9effc51981ddb94abefdde2811dfea0d4c7698291e92a8888d709fb4 495 | 9d1ceb19f02af5ddc4f39cb5ca5c56a9b545a0b8c2302daa21291361ccb0b127 496 | 6c109fd534efe097b2bf7b2c4a5be9ca0279fcca5ceb2c0c4dacfe7abbc934e7 497 | 4490919fb3465b9e97ea4e0c814ea2f104c1783553512306725e872e3be15d29 498 | 0c818f1ef7a6ee924d75fd1d710a63c47848840e654dd2d472e3a40e4f662159 499 | e616739e4660ef13e8e458da682a452ccd4eca7c893a2b310f7a2dbb4d6e54c4 500 | 3dfeba2f2733ac004a6948250a8d8eaa6b7930a84549d310b3caa3323d1ec575 501 | 33c9e6ef8b180299ad033bbac3821447ee8f767f205596dc195c87008297c44f 502 | ca8f32e508cbc4cccd319c5e4a46670674a8dc56a2d8ff72f5151bc94976103d 503 | 67ad7232d0e7ff2c95e55d241f57d31e5a0bb3aee596595d6fff07ffd06a944b 504 | 913cf46bbadabcb13d27c347da72aec01d0e98333a7523a202bcc1d26689341a 505 | f9340e8a31638d4b3e68489f5b8e3a5935f03fe11eaa1c70825b80208a44ade8 506 | b627f4b3cc1722812007fd1f86123be4439bb9020d0463b3a85a011000c0618e 507 | d85336067be62fbc94fcbb0457f385dae096a265789685e5d8c49eb0d90d6923 508 | c48d4031a20a2ebc95f15a3c4954d4bed1afba1ab9d3a2ab579e68304ae21629 509 | 2e78f055cbff6cb9bfe83bd84eb23ddebc3c2674d7cc1be2844defecde606831 510 | e695569b30d443983a531d2cc8b240f911a7179fbe47c7b5cf59fe757ff9cd3f 511 | 812d63b8b4655a2b7e6a922da0cd1f7f90d15a47e18198b7034f2c0a10184d1c 512 | e7d6490c8613e3142533abeff76f28f588afcd9b1febef38e022aa269a1e8916 513 | fb04c272beb34a5d402a3a2bce0f13f7a60fed5d817b8cc67d3c66d2420a55ce 514 | 6e2ec8b8ea32b45aeb2005402465dc56d25d4bd09cc5319fa2b94b9c10157fe7 515 | fda86571f030d8b20b11fc1d813dd519d6a9cd9f402c12db7689b6dd81de25ad 516 | ec87480d73578f59c25752430cffa5ed848e4e824ad3d7f2334e3605174c46ef 517 | 9941f130eb4edc4e1dcb6f517e632da0c74e94a0116a5accc2915056b920bce0 518 | 8505827be9ef9179a900555b8ad30d1f2a5c5822d197980b496f7e7ab22bd59c 519 | b8525a77fc6a20e8e728dbea4568edf1592f919d1ea4f6218e9d1e06c90abfea 520 | fadf88423fc2632bf4e9a9765bb4548b427444ab9e221b0e9a667e31be9864ea 521 | e96c73f3023ac183b61af1c1ae0b35928f0f60e1a0b69f2c7bc29e05412e206b 522 | 6199f9487a09227ef1fbc076f4269da290ea7a3692b594fee68684dc83001101 523 | 000189023c041801080026162104acbb4324393ade3515da2dda4d1e900e14c1 524 | cc04050263b3a85a021b0c050903f72300000a09104d1e900e14c1cc049d320f 525 | fe351b132756b89bd4e544afd27bc58a02da67390cfede2a65cba592bd9de907 526 | ef45b64271730783b7e34854a0dff597cfdb25808ec57d02d87197b06b499326 527 | 7d766e561a37c9eed0853e2f074d617ce4c5b5a5a242464740a6a83351d02a96 528 | 5dbfda3c5ac3a7d1453f1675a1a5c6d3228a91e1c390508055fb782af0d3b543 529 | ef76b94682487112fa2872e2fb738176fe5eac35df170d376de36a441bb6adfe 530 | 26441c88cbb1e733e680db715940712959f42042d9bc62fae178fa98893dd6ba 531 | 95c257bf0fb706fbfb5f2e678d78431882bcbb79bd095b77b2e3ea03f62f3af7 532 | bab4fb091d1528e01899a2b0066999038ac285c5fd7b94c04c9ce394db07096f 533 | ce1e57eeab2882a488fd63d6ace204860f3b8aa7bd8572ff3f32ec8f2705bf13 534 | 8dc1eebdfcb5f0fcd045b1f3ffa7e488002a921941858618fa6d73239d9ac752 535 | 9864987351b06007be2d431a54c6021aec170a60555c4b15b301ac105877d7b4 536 | 0d5de1c2cf538bb8ffcccb9ac427ff9a5d1293c44c696cae5b29b74356b1d68d 537 | 65f4988cd7d99cd47631c3be340e3d96c1af9b2700ea8e313f619eaa66d3fd10 538 | 3b135c668f2390e430d2f9593cd073512ed970cbdc4ed157dd1a96509a394e2e 539 | 3deddd3aaa7ece2dee80e3a7c8447be04ff58444bd849b6c055de393ba169a86 540 | d9259c4877cf997efa60e402c82a7501c84266357e94d26598c69fa4f6770c0d 541 | ccb8380465935dbb120a2b06010401975501050101074060e6f43b89f3468217 542 | 0c48f000fbef6c084f0afdc7ac644333f6d94569c39a110301080789023c0418 543 | 01080026162104acbb4324393ade3515da2dda4d1e900e14c1cc04050265935d 544 | bb021b0c050903f72300000a09104d1e900e14c1cc048f720ffe240557b89dbf 545 | abc0092c38d8a4f04ad87661dc6d9853c36201a7111e115fee619444bb3e0e8f 546 | 40ee71c6cc63ff7947048f42af619677004fb25c121ed479ee5b1439c52ece87 547 | a29c783b4605fdd6043ef9b7a30a6fe7e5ec1343df4d78ee53fca84265975673 548 | 8ca376a798fe5845a312ee59b1e53c2e2f80efc736c336d49f598bdcb7cfa6ae 549 | 0de61f7f5077b14a556a9fe81a0ac8d4a5c397803b14309742b104db30e5fc98 550 | 28faa0c60b81cdc49677614c4a0354aa8cd3e35dde5646ae140eab92fa7b29e2 551 | 3aebb879bee726d031da7e52c370012cd481e58d290065918c2cbf8370eb8e96 552 | 165839dd519e992e51613a80c3fe34682fa4c31268e19f070b71f547d7d88176 553 | cfc38ab6e3c06cf4758547dde029f33a41b8609f932476707ae0573d147afff5 554 | 6d082e449eee4c45cc9f78abb16e97b5f8ce3675f259ff7d638837acb9a66f57 555 | d0f32c4a0b3b2d675173091aa3ce3e2d00318de188f13de2c056eb4007c3abdf 556 | 122bfcaf74390bfdb9e2132322f2085682c48532222cf3221b36fc07ff275373 557 | b135943dcd7498faeebf625d059d50337b69d999c84530c70201fe039bec019e 558 | b5e9fedfaab5d2a60e458e09e49c9544ec29d38a7bdf2dfa4cc6358e12047961 559 | 977abfa38bd3e04a2339d4cb8136e4db784010c35f015fc24c16d484c710b34f 560 | 10b446217a866d99a4b649ed4b5393c04a580030978b4dab3977b9020d046593 561 | 5de4011000a7a025d85a27a08b4b8acb748c4adf2512aa12526a61abe78fd1ea 562 | 7f806442ed8a41f141b985db934d34194d83667b5c0f3db149be0f943bae9097 563 | b569de4ea1563f28d3525b7e25eeed40bae47db954312a746a09c2d0116d17fd 564 | 48fb7ff618affb2f7cacde1ab9b358bddafd2941f81c56730a87854736c73ed6 565 | 0b4aa6676455e614380aa875d035df0e511b8a3a7c2624f3a13e63759d55f290 566 | 0336404f54bc6a8e713fa086ad19cf3f93dd44c2ed61ef07f94d918fcf56224b 567 | fca7b0629e7ef915fb8e505d883667be0557033fc9e54f8909408054f4d82014 568 | 8ca83b8bf8e7f3874bde449f045df814de72d013ab6dde749d8d89bcffa7a563 569 | 5c7c2592bee7e54e113076a5dacc8da6329a153a8285e7af35ba95b35aa06638 570 | 2ed112eb2bb1ad43fba33390889c010efffbe667b13fa86b4c49f7335c315d29 571 | f6e2aff4a8f3127a31635b43c7028a633d31052786d05ea785e379bfaccad565 572 | c27fc64e5dfa30ec2db227309cd296e4bf34be95ddd4b7cb28e7eff780518b44 573 | 6f7b6fe37a54c46c25a3e3963c29fee0b75baaf405054ab7e7fabf4e701eb8e7 574 | 10cf26f592be26ad15d16b22633ba008af4a3877b45f7f7e06f23f189076ec14 575 | 701781b31c81eeca29b1a76c656a41b149767e361501cebcb4b9a8c577b0f03f 576 | cf2a9b494434b4feb7cf432a143b7932b87de6dcf379b1656952a9221277290e 577 | 35ff64c823001101000189023c041801080026162104acbb4324393ade3515da 578 | 2dda4d1e900e14c1cc04050265935de4021b0c050903f72300000a09104d1e90 579 | 0e14c1cc042ddd0ffd189b4ee6adc85c3ee66a45b995513bc7e9c8183bdfc2e4 580 | b0bba1a3bd81884935ec54169f5cff1b1645113c08414fdf0eb4b1642e2da2ed 581 | 4c9081fde7db94581200d61cc153f52068d9c84d85570eee034514f979338286 582 | 603a4244bffd08f6a9d9925a42e7cf3692179fd189e8258132d9534c5159328e 583 | 47df4c8fd0b1a0b90d35c37eb5dd7db8ea0fc4e86d9e49acc0365218675878ec 584 | 5d21db847fdfaaa655711651bba5fbbadbf4bcc598866beada734e64ec6cc846 585 | a4ac1abceb510f320daaa2a053ddf708e59de5c778639fc80c080ba0d7a2fc15 586 | b2327c2e0b6f1267ec94ba3b95609357c51f2fe387074bec2c76b45973f8de0d 587 | 5293138f5bc3bd04727d4bb6be4e08f23dc2b9fb66217f0faf55c4946e516a42 588 | df4e8b1fe544257ae487434fcbc11bf8d059ade322fa774c3c5e4d42f1c903f0 589 | 1e25f057c2766d3c77e27d289a294dd2d939ca015746215bcf41281040e5a162 590 | 9b47628a722ca8b6791969704fd091d8b46864c6806bc7e70136943a4dcc297a 591 | 47c42e68d470196c79060c1474b1e70c7cc261467f49b128d093c35fb8d6fb8c 592 | a8566e66437ec5b7b115980d64ea4d3bc232df5748a642095d7a96c5a0c5c936 593 | 1cc895714196a6f8534738fd874abe90ecd5ee6ac215c9c887fdb5451aba1f3d 594 | d72f75cb74f89617e2e6969b83f2ed16fcf6655b1471fd7bfc51f3b7c982a9fd 595 | d0b5c3d9901a6207aab838046798f3e2120a2b060104019755010501010740de 596 | 6e5cff49b6848bc2a8a7a46a9be35cf7dd5fb6becd19cef51a860cbf8e3a5d03 597 | 01080789023c041801080026162104acbb4324393ade3515da2dda4d1e900e14 598 | c1cc0405026798f3e2021b0c050903d23900000a09104d1e900e14c1cc04661a 599 | 1000c7820c9781bf55d202a622da2377356ffcaffadd0e72d78a5459aab5e774 600 | e23b12fa3e45d281bd68307bf339b5b76fc629173bc835bb989025fbef1fd346 601 | 9243cd294de998e8c36f7acd6be8f8f7d95f0be6df8bfb50d534d9f919a0b1f1 602 | 3a2a535a9ebe75a0c277fa4e23393a495efea56d974d2ddda7ed914a35159cca 603 | 217de25da4704a8a430eb63da54e29d76f8ccb10d5ba634a542c4bf35986ef13 604 | 1c9384196d8a90a587649ab0194fd0e369473976c64b10a9627d050602ee5e6d 605 | 4591d1b36a3fb415efab2547a2dce1f46f8af2f40e89ec900c92aa510a08cfc5 606 | fb92d52e800dcbd7076ec76d768c4480a8ac1c1a6193733e64ba6084cce76b65 607 | 8eb77e7210c1402d3f5d59a574d7a327846bcb9b6e0d8113fc37187f9e0e112a 608 | 1250ef5cad86ad8d6d32783182cf075138e4dde3e864db30855a34c7692a4f8c 609 | 922a7052c1674f069bb312052ae6b8db79a05375ef02bbec3a27dc2e9c5f203f 610 | 5772a963f543a62d6826bedf18b4f6c2c203dd349d4f5cc26c54f0dcd62a0308 611 | fc156983ea19ac1099869433b006910f0646b980812c18c211cce3fc0a025fb9 612 | b3b072bf46989ce8768f1d7d3bc7a781586b63f03e0ba393c4740c04906b299d 613 | ee1d73d669839c0b5edb0e46bdf431db14d618301ac1669e95a1ce98d189e51b 614 | dc4cedab30b6b580fa1c019c5876c49504b9b945bba369acf47f978a85f7fc60 615 | 6461b9020d046798f3fd0110009ec1b55cd540c14652d2fe934e9194da1160bd 616 | 6ffc0e351a8816947cac8d31553d399404b33c15dbebe6abc4edb103e8a9bd8a 617 | 211acbc2bd5d3a05ce561a2903e2eda90121c0f9e079324ecfb45045aff90f71 618 | b8f4c0d0044c42a0a848eb713f39043e9eb4bb2be1d3e5e33f851c78a6598c9e 619 | 3263de61848be859c716cf6d89fd2ae943657bf0c8846a5c08765a8961604504 620 | bd17aa0838ed67bd690a890a28747fcfeb2d053de5a79c84a699ea02e32f956c 621 | 5efa709ff5fa86cf1e3feb1ae42d9bfc5feb15822793aefd3d6f60866ea2bd15 622 | d37ca318089e8331eb7e6ebfe0c20f38b7870650c803adf3f1f459fc942f1bc2 623 | d20777d68e3dbd7bb578bd812198541988d3de6dc9e47e31de73a53e77912a01 624 | ee385f71f70c8a61a0b49943159cfeef7a13fc9c0284bd23dfb62074b32fc194 625 | 89fc490b8b34a3bd6629b4486ec80d89712fbf46bd6924359ffb91f22f2a48b3 626 | 7b3f5df2c2cb703f1eee2f91480b09a27fc62bbe58492f9183ca26001400d971 627 | ece0363608bb6b7234ff2ca82bf81da223cadf3076c68f7dbe22976eb817184b 628 | 341f3f7fb14248adc0e4c315910dbf5d987503020e1acacdb2a2fb1b5037f092 629 | 13432fa088f88adb7c60be1c6abf2e1c081c5a9a8580387749b46f107255eded 630 | 240ce535e2408a2b2e1fd0e761754ca2e146017002793471a813ec7876dc3029 631 | b5628a24d5a1456d92c503ec19001101000189023c041801080026162104acbb 632 | 4324393ade3515da2dda4d1e900e14c1cc0405026798f3fd021b0c050903d239 633 | 00000a09104d1e900e14c1cc0466a71000cad9a04fb8c04540e0f3046222ecf6 634 | 741081ac5459c2cb6363b559afdc90a2f8962a76973501c9d8eadd7b4876d35b 635 | 233e02a216af5c12f0c53872869ef59f48bcd44810cc21175a7f48710f5271ae 636 | 71f19dc9674eb3765381ba2c898ce356e7c08a5130a0c96de8901ea49ea7107b 637 | 82d465f82c62a0d457bb8e2c69d49145cdcd6b02ffbfb7b7bc8cf561bdc4131c 638 | d05fec4eec754a79902197f5cb231f4f9499a95d06a2883c328471e17bd7fa7a 639 | 753dca135a9805431bcecfd620b870f2e2b5645579bf861cec6d84ece25d6d8f 640 | b4e8f254b2cc382ff81084f4789d66f36e60c4b92562e25b0c90c38c2705841b 641 | 5b1063ef87d566174e886cb855d99cd4382ca84523747fbcec616b25b22c2dbd 642 | f283fa884ab2688a2aba98d1c0e2f1292c510f95c9820bdd2a0f9562ab098148 643 | c7fdba58b77c738f0acb72776895d86a57325f8f99407606655b9e369b573ed8 644 | 562c376eb2921fd5218179a16175d3d7d1ea4e6823bfc63f5438b2819ceb5253 645 | 8c0cee4425665d407888b9beab17e6409ac8e2ceed4c3e810cb3e93c586aa4dc 646 | 63f65ec1ea73b7d83e07d8f7461e1bb7a18c8f181b3ba278093a34ecb86e898d 647 | 47d40717959a2978ebece7578ff3ad7a15b9c3990eb4dcfe1478fa5d344edc0d 648 | 7bbf4547096c6dd4f5b6b7fac4cd9b193df7c831a86f896ece3ac33074ae28b2 649 | 7f6de66fa2e778224570f82793aee19ff8 650 | ) 651 | 652 | -------------------------------------------------------------------------------- /dns/fragments/include.pka-fp.spodhuis.org: -------------------------------------------------------------------------------- 1 | $ORIGIN _pka.spodhuis.org. 2 | ; ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04 3 | ; Phil Pennock 4 | 96bqcjktdxra6hd6mor16dn1huc49irf TYPE37 \# 26 0006 0000 00 14 ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04 5 | 6 | $ORIGIN _pka.spodhuis.org. 7 | ; 4833892924C60A7AE666D32A1DA3E68F41CEECAC 8 | ; Phil Pennock 9 | r6thk89hkz9zsaiqecoquhaucjatbz3o TYPE37 \# 26 0006 0000 00 14 4833892924C60A7AE666D32A1DA3E68F41CEECAC 10 | 11 | $ORIGIN _pka.spodhuis.org. 12 | ; ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04 13 | ; Phil Pennock 14 | r6thk89hkz9zsaiqecoquhaucjatbz3o TYPE37 \# 26 0006 0000 00 14 ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04 15 | 16 | -------------------------------------------------------------------------------- /keyrings/cross-signed/4833892924C60A7AE666D32A1DA3E68F41CEECAC.asc: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | mDMEXiUE9RYJKwYBBAHaRw8BAQdAQ8KS31CzDcqt1UnPSP2cvAbkPDqcoct4jaC9 4 | PAD/x1C0JFBoaWwgUGVubm9jayA8cGhpbEBwZW5ub2NrLXRlY2guY29tPokCZgQT 5 | AQgAUBYhBKy7QyQ5Ot41Fdot2k0ekA4UwcwEBQJeJQ6DMhpodHRwczovL3d3dy5z 6 | ZWN1cml0eS5zcG9kaHVpcy5vcmcvUEdQL3BvbGljeS9zZWxmAAoJEE0ekA4UwcwE 7 | oroP/2UMChInOTIkXmu6OeTaiWEAtdZGn+YTueQWp2z//MYlF/QF4Ou9YB6Vbzvu 8 | lfLASBvQJahaDR5sz71ENBoPLLX6BoGuCSY8g32fO/fV8i5MpBreGnNX15EsOB6R 9 | uAWqZKUe/smfq1rFkbnDbzWmRRY8kBE/70pzR5axp3Keaag2WCXh9/33QzDvvWoV 10 | l6aohqpdqfy2jbDooLyBgRXDgFnoTux+zXi3CKCvP7dphVSSWED7NMDGbkYo96jB 11 | z5ri0Sjvionov5Pwh7QBjrPoGXU8rUUht5r04suzEvsB0MBGwukC/vyxz+5qc7nX 12 | HK1fhk8YWf+F3xWoD7F4okxwDYcbB0lt52j1LMVedHIBi0brsA6j/IVv3vwt28fq 13 | RsrRM29eyg6RviWXQsK1EjhXgVwqa+U8JjfYhJgSkT5a245wCFzc4/Q6lNGT+j8i 14 | jB515U/k2GrOoALKBnLezGlm/ONeD/HQl1SqiA36frdLkb4Yiklo1qKtd4ZqLIqh 15 | jQq1muw6XCX1fNRe5KXg0ihw0hho74dsSeQDHKQniuI2bMntHiSvxDl8qU7NPY/X 16 | IkeY3VS6wmky5cZbC9zQA1nZnxHU5Zf3Vqn2GlVdaoN0vkDyg8VJKN5RdNQyKTFt 17 | cRq0BogKYvCi1uIJSe3P3G6nLugWDQOOHqO+LN68ZY+o7hg0iPwEExYIAKQCGwMD 18 | CwkHAxUKCAQWAwIBAh4BAheAAhkBFiEESDOJKSTGCnrmZtMqHaPmj0HO7KwFAl8t 19 | /eU0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnBlbm5vY2sudGVjaD90 20 | eXBlPVRYVDgUgAAAAAASAB1wcm9vZkBtZXRhY29kZS5iaXpkbnM6cGVubm9jay10 21 | ZWNoLmNvbT90eXBlPVRYVAAKCRAdo+aPQc7srC4KAQCqU62Gr1sUHyvWwBKcQieF 22 | TEiX3Locym6ZOlWi5IY60gEAvOULvEaBwMTvPJASqKf1O56HQWjjOX9ODxQbIsC+ 23 | 1QS0HFBoaWwgUGVubm9jayA8cGRwQGdudXBnLm5ldD6IiwQTFggAMwIbAwMLCQcD 24 | FQoIBBYDAgECHgECF4AWIQRIM4kpJMYKeuZm0yodo+aPQc7srAUCXiUHIwAKCRAd 25 | o+aPQc7srE+vAP9LwcOkOJy1u5y5ACbEFvKtmb4qbg/izuoL+o4XXgLA6wEA64oR 26 | 7IiyH/oIwwpxr9BNxD0JP6vLnFri3gucYn6IZw6JAmYEEwEIAFAWIQSsu0MkOTre 27 | NRXaLdpNHpAOFMHMBAUCXiUOgzIaaHR0cHM6Ly93d3cuc2VjdXJpdHkuc3BvZGh1 28 | aXMub3JnL1BHUC9wb2xpY3kvc2VsZgAKCRBNHpAOFMHMBCWkEACllgQOf2DgEkha 29 | B4wp3aoqvyJB6tc/pnwvD6kyeSFppHonht1XQDIoX8BZyb5yA3A37UJxMfanf4ja 30 | GGbVCaEEv/2/osQ/vyUzmkQkUFETc3kzb0tiEo50jyqF6HMOafTCVDlMCcbY3C2i 31 | efebeHhD0Y70LGznGLcgmvulXlzEIYTw+ofxcOify78nGRgb3/aJ2XfUbtnyXSmz 32 | 5J4EsfAxwIyYz8oj7zZeAvK9vq3UFaDFVaOZc2TBM8N9kJ7kLhay+ixZIHEmCKED 33 | 1iGdOSGGxVFLCdiP6Vaq13+FMmcisJV/soKpe75Sf+kl9+ZC2w5eXoB3gV28ftcu 34 | 1QIiycRtGyxw61F/SmkIk7ckg2aSZclrEqEDOmcVHMTvPnIqEFbKMXPjBEgObyi1 35 | e4pPLvtgseRlCbAH/airiS4vicXrSttq8mKxG4ZevaBH7Im3xArV4kWNvT26NVz1 36 | aaCckym/DB7clU0hJoX2svEZFgU7ozjm3loKuKbh72ubhrsfaQeK2E0B0MAWktDa 37 | m5f7VutKRGSr2m8kvSd7f8f5NGTgkasZ+amXaJesiKlBcPyeKdYjaBKczEbXXBTd 38 | 9evsDBZxEXNTzC19vHb9hTvDs5yXaEduvIOrVfFjyTD+VmQGBBeoGIecmcYcJpnI 39 | 0IcgIfq2cec2H+a9CFg1HNOoIsjt+LQoUGhpbCBQZW5ub2NrIDxwaGlsLnBlbm5v 40 | Y2tAc3BvZGh1aXMub3JnPokCZgQTAQgAUBYhBKy7QyQ5Ot41Fdot2k0ekA4UwcwE 41 | BQJeJQ6EMhpodHRwczovL3d3dy5zZWN1cml0eS5zcG9kaHVpcy5vcmcvUEdQL3Bv 42 | bGljeS9zZWxmAAoJEE0ekA4UwcwEQ44QANaOu5bVOlNvFI7VM8My4hZFx1FSCHDG 43 | NgEC1HRrEnkBgKbH5T5zi0lNZBu3k8dG9REjw+VSKu9C9jpJmtUt9ap4A5udK4wb 44 | inAN0ixPkN+oubNDgc7srl0gpqP9JEVKjd2CwmypOnSVrh9b+rAdyPG8Wax1z5sg 45 | 8xDBVM7pIsdV/XnItb+R66+elJmLcUvxMW/DDH8ywkiVxUuafaL0oHfycNtD8U/W 46 | PLmkgMlQl0omen17VZ23c3t9DmRDBy8GLI4vvF0Yz6BwYd5Rpmf3YlLzTajm2Ezc 47 | NtjrWuICV3pB6tTAfiAqSh3f/sxMwPPpmIA0dZjIW5+a35mHGzEC1X76lOh5qEtY 48 | yTVVV7AaoBsnwU2h+9369ZFjwU2/fELGmJBxx0Gb8kHZUEb5wz5svKkFWSeDjMBz 49 | /HrTeYaN3mumuaDn6iy5GPIdn3SKBRtV1CYoPQr0vfajPe31zZigtmqRQRgwB7Q7 50 | 3TkdxHNORfwBBq17XLooJHdNQmJieRI+42niBMF8GpCQYuGrm49tVh7Jn9WxGG0f 51 | 3kfw/aIXQv02vtTH7IXbkCN8XqCRyHLVULJAMo8Uuim0X0wvxdkmONqna7tID9Hg 52 | 3J8zgs3H+nM+7a+IcNLrLOExUGBazwgD4PgTP0+HWdZr9m6X8PlJdxrCYFsXpWZm 53 | vyr1nT8szfSJiQIkBBMWCAHMAhsDAwsJBwMVCggEFgMCAQIeAQIXgBYhBEgziSkk 54 | xgp65mbTKh2j5o9BzuysBQJfLf3RVRSAAAAAABIAOnByb29mQG1ldGFjb2RlLmJp 55 | emh0dHBzOi8vdHdpdHRlci5jb20vcGhpbHBlbm5vY2svc3RhdHVzLzEyOTE4OTgw 56 | NjA4Njg1OTE2MjI6FIAAAAAAEgAfcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly9s 57 | b2JzdGUucnMvdS9waGlscGVubm9jazgUgAAAAAASAB1wcm9vZkBtZXRhY29kZS5i 58 | aXpkbnM6Z3J1bXB5LXRyb2xsLm9yZz90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBt 59 | ZXRhY29kZS5iaXpkbnM6c3BvZGh1aXMub3JnP3R5cGU9VFhUXxSAAAAAABIARHBy 60 | b29mQG1ldGFjb2RlLmJpemh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BoaWxwZW5u 61 | b2NrLzI1ZjkzMmIwMDZlYmZiYjk1NmExYTE0YmE4MGJhYzdhORSAAAAAABIAHnBy 62 | b29mQG1ldGFjb2RlLmJpenhtcHA6cGhpbC5wZW5ub2NrQHNwb2RodWlzLm9yZwAK 63 | CRAdo+aPQc7srP4cAQDojn5r8X84XaCEkWIwHeDYWvEkM6A5G4qj9OE4wy0GkAD/ 64 | WRIaVEs3EkR/pQVWBeMeqeLVSOcAcQpls9drj3JJ2wK0G1BoaWwgUGVubm9jayA8 65 | cGRwQGV4aW0ub3JnPoiNBDAWCAA1FiEESDOJKSTGCnrmZtMqHaPmj0HO7KwFAmAZ 66 | 45gXHSBMZWZ0IHRoZSBFeGltIHByb2plY3QACgkQHaPmj0HO7Ky8DgEA1zqXiQ+m 67 | G16LtssHe+QziOUHktuD3iZ8+giw8AbNBAUBAO5F17N8rROgM7UibYyzK8SpaeFf 68 | sCNc4yGlVDuhAXkAtAxQaGlsIFBlbm5vY2uJApIEExYIAjoCGwMDCwkHAxUKCAQW 69 | AwIBAh4BAheAFiEESDOJKSTGCnrmZtMqHaPmj0HO7KwFAl8t9lJVFIAAAAAAEgA6 70 | cHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90d2l0dGVyLmNvbS9waGlscGVubm9j 71 | ay9zdGF0dXMvMTI5MTg5ODA2MDg2ODU5MTYyMjoUgAAAAAASAB9wcm9vZkBtZXRh 72 | Y29kZS5iaXpodHRwczovL2xvYnN0ZS5ycy91L3BoaWxwZW5ub2NrNBSAAAAAABIA 73 | GXByb29mQG1ldGFjb2RlLmJpemRuczpwZW5ub2NrLnRlY2g/dHlwZT1UWFQ4FIAA 74 | AAAAEgAdcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnBlbm5vY2stdGVjaC5jb20/dHlw 75 | ZT1UWFQ4FIAAAAAAEgAdcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOmdydW1weS10cm9s 76 | bC5vcmc/dHlwZT1UWFQ0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNw 77 | b2RodWlzLm9yZz90eXBlPVRYVF8UgAAAAAASAERwcm9vZkBtZXRhY29kZS5iaXpo 78 | dHRwczovL2dpc3QuZ2l0aHViLmNvbS9waGlscGVubm9jay8yNWY5MzJiMDA2ZWJm 79 | YmI5NTZhMWExNGJhODBiYWM3YTkUgAAAAAASAB5wcm9vZkBtZXRhY29kZS5iaXp4 80 | bXBwOnBoaWwucGVubm9ja0BzcG9kaHVpcy5vcmcACgkQHaPmj0HO7KwETQD/fUO2 81 | 74QwTLdI9DNuYmXZRqKn3g2s5YW5le8BGqYFDJcA/3kljNFJYtQnTRSut6WG77l3 82 | n107DM/iihlxqbx+R14FtBpQaGlsIFBlbm5vY2sgPHBkcEB6c2gub3JnPoiLBBMW 83 | CAAzFiEESDOJKSTGCnrmZtMqHaPmj0HO7KwFAl8vRLgCGwMDCwkHAxUKCAQWAwIB 84 | Ah4BAheAAAoJEB2j5o9BzuysasUA/ApCPc9B/gLG9mPdkHsQnHcANL6hvwKElvWn 85 | RECg+cXRAP9gGWfImnDVF8IuEEbqoALDfk7yNnx7XauyetFkcMCXB4kCZgQTAQgA 86 | UBYhBKy7QyQ5Ot41Fdot2k0ekA4UwcwEBQJfL0VLMhpodHRwczovL3d3dy5zZWN1 87 | cml0eS5zcG9kaHVpcy5vcmcvUEdQL3BvbGljeS9zZWxmAAoJEE0ekA4UwcwE+g0P 88 | /0jdPeUlEUJR2zsTXedIFqFmKm+8YG72NnMx+6few8xG87UE0kPWEbDpnTEv/DYE 89 | qhHs8qD+Hl3p6Fxnfl4HjPo7f2sHIG/+lcUBdjc3cyU47+0w2hgZMBmJyNMX2cOg 90 | GhdFOY3ZOzRtEuO9p/2ahoJ4QbxJ2MNLNhypXSqb2P0srI30WIZXb4jrL96RAqfq 91 | xwckoif58/yZNI55M81GmY7YFTl5/8cqu2izKB1z9OOTMqQ2aPysbshAfWRb7kZQ 92 | 72SXaJKzBqamd/Ofy6Uf4kPP9d7yvWitsudyY3Hdozv3no4KDz0WHbVPe7z+qm+h 93 | AEAnTakhTDP+sSy6G76jkAVVWMmA4bIKxq3r9fCyirIfCOOXEjyaLEtRe8GP7knc 94 | eIBkGcY+q+4+8Fy8ZjZeMZFWX2UZpJXMEZjye8a0ujtYstXKrlm9/EzZWnf9dWvB 95 | 2N6GM/Tj3CoLV3/5QePI/unrxo+ihIw5Zofc3ofNaOTppiKxxdLSJzD7/S5IWYAR 96 | MFXTAOof1mg1aWAOKkYjYxMEVXthrqt9XjKekkT31wek+R56QMgOYfnXkDICEi4Z 97 | DIAp8LaEn7BiFCeAOqZkW14wrVGbfI+jhb4n15ZVlI+ej5fINwdF5be1+uVj7WS1 98 | Qei/B7NJa3BxGHFMsTeC9OnuVXDMexAHHk9dwtXHyDOHuDMEXiUFQBYJKwYBBAHa 99 | Rw8BAQdAbfWofNm1GJD4T35ZerF+VJ8boJOEQXjqYc6sSEtKWOmI7wQYFggAIBYh 100 | BEgziSkkxgp65mbTKh2j5o9BzuysBQJeJQVAAhsCAIEJEB2j5o9BzuysdiAEGRYI 101 | AB0WIQQ2vqQhJhxApU/JJhwudmURD4pW/wUCXiUFQAAKCRAudmURD4pW/wu1AP9K 102 | 7kKdVlmRUzZRGjt0TEwl/dCfuK8pYsV+J5sZBq1eBAEAqGFuDU3vE9eRDDCllef8 103 | kjCN6HQEuW+hcyW272zX6QKfJgEAwv4+35u/zjxCMXypO9vE5S3Zi9L3gutwjtyh 104 | +9fDReUBANxpwMxaJIHceQgWLXxtGFyIZkmOuH0Vng6zh31o3isCuDgEX/uzvBIK 105 | KwYBBAGXVQEFAQEHQH0SvliN5mlcapzUB7b4AnHZP5VnskiVWWue1vLsx6QJAwEI 106 | B4h+BBgWCAAmFiEESDOJKSTGCnrmZtMqHaPmj0HO7KwFAl/7s7wCGwwFCQlmAYAA 107 | CgkQHaPmj0HO7KwfBwD6A17xr+F1eTvvTcQg7gIuMS05WnjOboCWd1Ka1asdjJIB 108 | AKeXmfCJiJEGEYy0sm77vWTwE/rwzbArpspjMCzIr90FuDgEY7Oo1BIKKwYBBAGX 109 | VQEFAQEHQBL4M5gt+2Z1AepDrx+Of0X0iQGYgyyHXlMzWm2KFEUgAwEIB4h+BBgW 110 | CAAmFiEESDOJKSTGCnrmZtMqHaPmj0HO7KwFAmOzqNQCGwwFCQmWyQAACgkQHaPm 111 | j0HO7KwQtgD+J8koYI7GcvEolk2SzBAceOHrB0pdTSWFzScMUFBp0rMBALgI2trr 112 | gdf5vzkGk8RFd8reD1Xc0cZY8jpQievbq9wOuDgEZ5j0NBIKKwYBBAGXVQEFAQEH 113 | QN56MNW/cGfiwL7WQWXQIisDRgjAQlPMVU1c61agzTd8AwEIB4h+BBgWCAAmFiEE 114 | SDOJKSTGCnrmZtMqHaPmj0HO7KwFAmeY9DQCGwwFCQl7GYAACgkQHaPmj0HO7KwE 115 | PgD+KiHtAl+TZVEVQ5x9h/Ro5pihsEA08c9bavIfTPOb5UABAJ+PCPbmPNdO1K4T 116 | oiZNs1RJ5RUjgI16izcaMh/lwqEM 117 | =L8JI 118 | -----END PGP PUBLIC KEY BLOCK----- 119 | -------------------------------------------------------------------------------- /keyrings/cross-signed/5CAF09C9C79F88B5D526D4058AC8EE39F0C68907.asc: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 34 | vvN68imtlla7LrcH5TYH 35 | =pjAr 36 | -----END PGP PUBLIC KEY BLOCK----- 37 | -------------------------------------------------------------------------------- /keyrings/cross-signed/ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04.asc: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 57 | OnBkcEBzcG9kaHVpcy5vcmcACgkQTR6QDhTBzASGiBAAx9XV1y0jFtklutC+ozEE 58 | VDTClCrHpBKU3a85n1iZ4NOdF+v9EXNhxqm4FFAu0dsNW7FHJeUULo+JHIJ1wZ8Q 59 | eV3zeNTP8SZc2ToIdcixKMMjgaxFfhfc/sv+CIVYhT9uggbo2ErUv1jDTJeEsFpT 60 | 1ny1svawkrg+A0Ro2V8ebQu96LNw+FZfClIxToPsj3nz7GsI3Spz8gFL/WmTSfDE 61 | xu+8TgBUHG1/20jI5cNfLNIQDAB2f96/TjI2Es+IMvPNItZmmOhB38e+U48qMNiK 62 | iIrCAfjTJB/knuehZTES+Ot+g6vhlpehll4aEWLOzZq3tRTwmBXJ+4iL3vOgZ2D3 63 | DfojRVo9rb3+sl4mLUSRZdQS+MbxP3q/0F5N3gg6Z3BH/uEP8YtB1HOPIR3S/E+d 64 | i9aHj1G4F2LR9X2Z+R6+qb2ud5j5Jn2O6fjaA4L5LVQLrr4j3EpWSpc7rdmNkApb 65 | 5RmfDJXtfJv9vMOOENDov4tVoOIvZRRrru4xTGgwEZ8kjmlObgbfJ3ed7/RrnWJF 66 | tGjUIIbEYCgrF7Bjy4qySNazm80a2iNexE02sIBs72IWWs/zKBz5RTDbRsBq+d7n 67 | sCxsOfG9gREGhSFR7Wnc9orqFzTwpqFWDRTQH+Zpl6FKSZ7e1fmVJz9HznFwB7nq 68 | ydWWwwyp2MYRECwGxwiMsaaIqAQTFggAUBYhBEgziSkkxgp65mbTKh2j5o9Bzuys 69 | BQJeJQ5tMhpodHRwczovL3d3dy5zZWN1cml0eS5zcG9kaHVpcy5vcmcvUEdQL3Bv 70 | bGljeS9zZWxmAAoJEB2j5o9BzuysjM4A/iaH0BOMFKHvgPyKr2e23fgacI2OKyNd 71 | GbEvFFAD3ikRAP9nAtZnL2OlscaXjDQzoBEnZvhgQjQAuGRWZhgySH/xArQsUGhp 72 | bCBQZW5ub2NrIDxwaGlsLnBlbm5vY2tAZ3J1bXB5LXRyb2xsLm9yZz6IawQQEQIA 73 | KwUCUnnV9gWDAeKFAB4aaHR0cDovL3d3dy5jYWNlcnQub3JnL2Nwcy5waHAACgkQ 74 | 0rsNAWXQ/VhpNQCfWaDslf87Yd/qYGS8Uoc8zZ5bsB0An2vZppSyGFgLqiars6/y 75 | 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 111 | ccB/isjFYEYp7Aa4qQASjCGkffNuYfo0JuTp8k7IUHPv3sb7TodYoWFgHh8z2Za6 112 | i2I5dKb+EgWs/eGDOrRyOdgbxgqJc3KpwMLSJwmagViQ+PiKcRV+uGZ57BSMsTwt 113 | 1vT0iKsQhM0IY0htxcYR8HPdaJnvLkD+wmNiDAXejp+BUZ8s+7W3VN0gyktjrN0I 114 | Msi420mVOCS64IKBeb9qCqO+IE4JDny79a1qKx82jAfLOkN1KYy8xYylXJTypLtA 115 | 16OiFB9Tsq6DR+BYXE2n07CEOko439HGZJIMthLamu0JjGAwPGKqYXyVA0pwFPBQ 116 | 0OXa00H6qCZz9FpVvRe1c035x/RdsmzqgVu38C8bGPZ+iKgEExYIAFAWIQRIM4kp 117 | JMYKeuZm0yodo+aPQc7srAUCXiUObTIaaHR0cHM6Ly93d3cuc2VjdXJpdHkuc3Bv 118 | ZGh1aXMub3JnL1BHUC9wb2xpY3kvc2VsZgAKCRAdo+aPQc7srHOPAQD8qT+hz2mx 119 | B9EZeRl9n846YZugBogboYG9czVELffWMAD+PzIQcrYHDF2ihndFF24iFqURPRWI 120 | KP2UPDTzzC1B1wS0JFBoaWwgUGVubm9jayA8cGhpbEBwZW5ub2NrLXRlY2guY29t 121 | PokCSQQTAQgAMwIbAwIeAQIXgAMLCQcDFQoIBBYDAgEWIQSsu0MkOTreNRXaLdpN 122 | HpAOFMHMBAUCW0jo+gAKCRBNHpAOFMHMBPQDD/9mNS3hjVL+DG1m2opXB92yyVcg 123 | 4GARpVmT9lRcpYk10MasaDh/plwt9cEZ4OKYVOJjEO6WWqMreBb17djr3vkB9jnh 124 | kTUyw4Y4vNcmdmlt5NnL89n4Eq5xm0TYMUfNyNoZEdtRFcH59WD9fk7TUhhPS8Jr 125 | PBV+TmKrIlpuPXx4Vpx9K97Pq4rV9TpQZGGRcjbwSNKecAdI0WqZ0cfEAWMHVq/C 126 | PMQzmBWSOjrqUw5JiPX1mQN7RuWrvpWXDiR1s2PYhVI7tgaz5nV478OW3MmmLlz5 127 | to5z4C70FFzI46ylw5XGwCZPNrIOrezTZC+4GGj98pz583eg7HXS+5bt2FYeckCl 128 | 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 293 | wzB0riiyf23mb6LneCJFcPgnk67hn/g= 294 | =ZDR+ 295 | -----END PGP PUBLIC KEY BLOCK----- 296 | -------------------------------------------------------------------------------- /keyrings/minimal/4833892924C60A7AE666D32A1DA3E68F41CEECAC.asc: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | mDMEXiUE9RYJKwYBBAHaRw8BAQdAQ8KS31CzDcqt1UnPSP2cvAbkPDqcoct4jaC9 4 | PAD/x1C0JFBoaWwgUGVubm9jayA8cGhpbEBwZW5ub2NrLXRlY2guY29tPoj8BBMW 5 | CACkAhsDAwsJBwMVCggEFgMCAQIeAQIXgAIZARYhBEgziSkkxgp65mbTKh2j5o9B 6 | zuysBQJfLf3lNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemRuczpwZW5ub2Nr 7 | LnRlY2g/dHlwZT1UWFQ4FIAAAAAAEgAdcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnBl 8 | bm5vY2stdGVjaC5jb20/dHlwZT1UWFQACgkQHaPmj0HO7KwuCgEAqlOthq9bFB8r 9 | 1sASnEInhUxIl9y6HMpumTpVouSGOtIBALzlC7xGgcDE7zyQEqin9Tueh0Fo4zl/ 10 | Tg8UGyLAvtUEtBxQaGlsIFBlbm5vY2sgPHBkcEBnbnVwZy5uZXQ+iIsEExYIADMC 11 | GwMDCwkHAxUKCAQWAwIBAh4BAheAFiEESDOJKSTGCnrmZtMqHaPmj0HO7KwFAl4l 12 | ByMACgkQHaPmj0HO7KxPrwD/S8HDpDictbucuQAmxBbyrZm+Km4P4s7qC/qOF14C 13 | wOsBAOuKEeyIsh/6CMMKca/QTcQ9CT+ry5xa4t4LnGJ+iGcOtChQaGlsIFBlbm5v 14 | Y2sgPHBoaWwucGVubm9ja0BzcG9kaHVpcy5vcmc+iQIkBBMWCAHMAhsDAwsJBwMV 15 | CggEFgMCAQIeAQIXgBYhBEgziSkkxgp65mbTKh2j5o9BzuysBQJfLf3RVRSAAAAA 16 | ABIAOnByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHdpdHRlci5jb20vcGhpbHBl 17 | bm5vY2svc3RhdHVzLzEyOTE4OTgwNjA4Njg1OTE2MjI6FIAAAAAAEgAfcHJvb2ZA 18 | bWV0YWNvZGUuYml6aHR0cHM6Ly9sb2JzdGUucnMvdS9waGlscGVubm9jazgUgAAA 19 | AAASAB1wcm9vZkBtZXRhY29kZS5iaXpkbnM6Z3J1bXB5LXRyb2xsLm9yZz90eXBl 20 | PVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpkbnM6c3BvZGh1aXMub3Jn 21 | P3R5cGU9VFhUXxSAAAAAABIARHByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vZ2lz 22 | dC5naXRodWIuY29tL3BoaWxwZW5ub2NrLzI1ZjkzMmIwMDZlYmZiYjk1NmExYTE0 23 | YmE4MGJhYzdhORSAAAAAABIAHnByb29mQG1ldGFjb2RlLmJpenhtcHA6cGhpbC5w 24 | ZW5ub2NrQHNwb2RodWlzLm9yZwAKCRAdo+aPQc7srP4cAQDojn5r8X84XaCEkWIw 25 | HeDYWvEkM6A5G4qj9OE4wy0GkAD/WRIaVEs3EkR/pQVWBeMeqeLVSOcAcQpls9dr 26 | j3JJ2wK0G1BoaWwgUGVubm9jayA8cGRwQGV4aW0ub3JnPoiNBDAWCAA1FiEESDOJ 27 | KSTGCnrmZtMqHaPmj0HO7KwFAmAZ45gXHSBMZWZ0IHRoZSBFeGltIHByb2plY3QA 28 | CgkQHaPmj0HO7Ky8DgEA1zqXiQ+mG16LtssHe+QziOUHktuD3iZ8+giw8AbNBAUB 29 | AO5F17N8rROgM7UibYyzK8SpaeFfsCNc4yGlVDuhAXkAtAxQaGlsIFBlbm5vY2uJ 30 | ApIEExYIAjoCGwMDCwkHAxUKCAQWAwIBAh4BAheAFiEESDOJKSTGCnrmZtMqHaPm 31 | j0HO7KwFAl8t9lJVFIAAAAAAEgA6cHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90 32 | d2l0dGVyLmNvbS9waGlscGVubm9jay9zdGF0dXMvMTI5MTg5ODA2MDg2ODU5MTYy 33 | MjoUgAAAAAASAB9wcm9vZkBtZXRhY29kZS5iaXpodHRwczovL2xvYnN0ZS5ycy91 34 | L3BoaWxwZW5ub2NrNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemRuczpwZW5u 35 | b2NrLnRlY2g/dHlwZT1UWFQ4FIAAAAAAEgAdcHJvb2ZAbWV0YWNvZGUuYml6ZG5z 36 | OnBlbm5vY2stdGVjaC5jb20/dHlwZT1UWFQ4FIAAAAAAEgAdcHJvb2ZAbWV0YWNv 37 | ZGUuYml6ZG5zOmdydW1weS10cm9sbC5vcmc/dHlwZT1UWFQ0FIAAAAAAEgAZcHJv 38 | b2ZAbWV0YWNvZGUuYml6ZG5zOnNwb2RodWlzLm9yZz90eXBlPVRYVF8UgAAAAAAS 39 | AERwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL2dpc3QuZ2l0aHViLmNvbS9waGls 40 | cGVubm9jay8yNWY5MzJiMDA2ZWJmYmI5NTZhMWExNGJhODBiYWM3YTkUgAAAAAAS 41 | AB5wcm9vZkBtZXRhY29kZS5iaXp4bXBwOnBoaWwucGVubm9ja0BzcG9kaHVpcy5v 42 | cmcACgkQHaPmj0HO7KwETQD/fUO274QwTLdI9DNuYmXZRqKn3g2s5YW5le8BGqYF 43 | DJcA/3kljNFJYtQnTRSut6WG77l3n107DM/iihlxqbx+R14FtBpQaGlsIFBlbm5v 44 | Y2sgPHBkcEB6c2gub3JnPoiLBBMWCAAzFiEESDOJKSTGCnrmZtMqHaPmj0HO7KwF 45 | Al8vRLgCGwMDCwkHAxUKCAQWAwIBAh4BAheAAAoJEB2j5o9BzuysasUA/ApCPc9B 46 | /gLG9mPdkHsQnHcANL6hvwKElvWnRECg+cXRAP9gGWfImnDVF8IuEEbqoALDfk7y 47 | Nnx7XauyetFkcMCXB7gzBF4lBUAWCSsGAQQB2kcPAQEHQG31qHzZtRiQ+E9+WXqx 48 | flSfG6CThEF46mHOrEhLSljpiO8EGBYIACAWIQRIM4kpJMYKeuZm0yodo+aPQc7s 49 | rAUCXiUFQAIbAgCBCRAdo+aPQc7srHYgBBkWCAAdFiEENr6kISYcQKVPySYcLnZl 50 | EQ+KVv8FAl4lBUAACgkQLnZlEQ+KVv8LtQD/Su5CnVZZkVM2URo7dExMJf3Qn7iv 51 | KWLFfiebGQatXgQBAKhhbg1N7xPXkQwwpZXn/JIwjeh0BLlvoXMltu9s1+kCnyYB 52 | AML+Pt+bv848QjF8qTvbxOUt2YvS94LrcI7cofvXw0XlAQDcacDMWiSB3HkIFi18 53 | bRhciGZJjrh9FZ4Os4d9aN4rArg4BF/7s7wSCisGAQQBl1UBBQEBB0B9Er5YjeZp 54 | XGqc1Ae2+AJx2T+VZ7JIlVlrntby7MekCQMBCAeIfgQYFggAJhYhBEgziSkkxgp6 55 | 5mbTKh2j5o9BzuysBQJf+7O8AhsMBQkJZgGAAAoJEB2j5o9BzuysHwcA+gNe8a/h 56 | dXk7703EIO4CLjEtOVp4zm6AlndSmtWrHYySAQCnl5nwiYiRBhGMtLJu+71k8BP6 57 | 8M2wK6bKYzAsyK/dBbg4BGOzqNQSCisGAQQBl1UBBQEBB0AS+DOYLftmdQHqQ68f 58 | jn9F9IkBmIMsh15TM1ptihRFIAMBCAeIfgQYFggAJhYhBEgziSkkxgp65mbTKh2j 59 | 5o9BzuysBQJjs6jUAhsMBQkJlskAAAoJEB2j5o9BzuysELYA/ifJKGCOxnLxKJZN 60 | kswQHHjh6wdKXU0lhc0nDFBQadKzAQC4CNra64HX+b85BpPERXfK3g9V3NHGWPI6 61 | UInr26vcDrg4BGeY9DQSCisGAQQBl1UBBQEBB0DeejDVv3Bn4sC+1kFl0CIrA0YI 62 | wEJTzFVNXOtWoM03fAMBCAeIfgQYFggAJhYhBEgziSkkxgp65mbTKh2j5o9Bzuys 63 | BQJnmPQ0AhsMBQkJexmAAAoJEB2j5o9BzuysBD4A/ioh7QJfk2VRFUOcfYf0aOaY 64 | obBANPHPW2ryH0zzm+VAAQCfjwj25jzXTtSuE6ImTbNUSeUVI4CNeos3GjIf5cKh 65 | DA== 66 | =N9BZ 67 | -----END PGP PUBLIC KEY BLOCK----- 68 | -------------------------------------------------------------------------------- /keyrings/minimal/5CAF09C9C79F88B5D526D4058AC8EE39F0C68907.asc: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | mQENBFef+wEBCACfAoCkz+gd2mtZ7IJLh0oGr61LP11o3yFGHF9zPOc+Usw4bY7v 4 | MT8Wjfp1IIthxcWM5Vi0Zf+VuvZerf0e+6po+2xQAG/OnD74ZO1soiUD8pm3lczv 5 | HQhWQ4FWAf6qSyngRxlhO2nbqpfnKbtEDtHa2EdfwIcuX5y0YLtWoDB6Dm0ANdP7 6 | LXNgkU9f3tp1cty12tFxjBYy6ISrh8WuMV5IxKKZv9JFzayxyocnId7rxfrhEi0w 7 | y0GY9b5x7+8rCE18TBIknSyg4aC901Yl9Qa5jpGO9lh8xnV2ljx4128mKwPObn4h 8 | x6j+ZI98iHqgOZXvZU1ndG9Na+Rs8Jt4Hg9hABEBAAG0RlJlcG9zaXRvcnkgTWdt 9 | dCAoZG8gbm90IHRydXN0IHRvIHNpZ24ga2V5cykgPHJlcG9tYW5AcGVubm9jay10 10 | ZWNoLmNvbT6JAWsEEwEIAFUCGwMECwkIBwUVCgkICwQWAwIBAh4BAheAGBhoa3Bz 11 | Oi8va2V5cy5vcGVucGdwLm9yZxYhBFyvCcnHn4i11SbUBYrI7jnwxokHBQJkysLK 12 | BQkRzU3JAAoJEIrI7jnwxokH6XUH/1CVEzgCsU2ly17dC8NgZOkw3wUyymrEgB8x 13 | vMQhSuDOiNkLQBcl5gjLYAXJFVjwPwlt+8ER38oxflFdBVm4sF3JU2HzJ0Zp9FTS 14 | C4zBkmxBMh+TZRF7IzjPNgOBVnNBUi5EeOP57xBjmMI7vl8MaPelBWAW2P3V6idX 15 | F5SdwYu+2ZSPm8f/Q2PjtJ2Pw9qBWewXUFkBoRHU6t21Ua4RcCgyM+SQ+bWoiYak 16 | PHVzQxDJzvW9w4//38pR4+KTXCTngX5B1PNDr6+MlkoZ9yjp3xsxMZtrFCB8I8ye 17 | hoyaPGJt2dJbryys2JlX/4T1iP6WZveZ41weLLoyzoyLtDdioYM= 18 | =lltp 19 | -----END PGP PUBLIC KEY BLOCK----- 20 | -------------------------------------------------------------------------------- /keyrings/minimal/ACBB4324393ADE3515DA2DDA4D1E900E14C1CC04.asc: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | 3 | 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 263 | +CeTruGf+A== 264 | =KNGn 265 | -----END PGP PUBLIC KEY BLOCK----- 266 | -------------------------------------------------------------------------------- /lib/python/pdpzbase32.py: -------------------------------------------------------------------------------- 1 | # Zooko's Base32 encoding 2 | 3 | """ 4 | pdpzbase32: crypto-common base32 encoding variant 5 | """ 6 | 7 | # https://philzimmermann.com/docs/human-oriented-base-32-encoding.txt 8 | 9 | __author__ = 'phil@pennock-tech.com (Phil Pennock)' 10 | 11 | import functools 12 | import binascii 13 | 14 | ZOOKO32_ALPHABET = b'ybndrfg8ejkmcpqxot1uwisza345h769' 15 | 16 | 17 | @functools.lru_cache(maxsize=4) 18 | def _forward_table(alphabet): 19 | tab = [bytes((i,)) for i in alphabet] 20 | return [a + b for a in tab for b in tab] 21 | 22 | 23 | @functools.lru_cache(maxsize=4) 24 | def _reverse_table(alphabet): 25 | return {v: k for k, v in enumerate(alphabet)} 26 | 27 | 28 | # _bytes_from_decode_data: From Python 3.7.0 base64.py {{{ 29 | 30 | bytes_types = (bytes, bytearray) # Types acceptable as binary data 31 | 32 | 33 | def _bytes_from_decode_data(s): 34 | if isinstance(s, str): 35 | try: 36 | return s.encode('ascii') 37 | except UnicodeEncodeError: 38 | raise ValueError('string argument should contain only ASCII characters') 39 | if isinstance(s, bytes_types): 40 | return s 41 | try: 42 | return memoryview(s).tobytes() 43 | except TypeError: 44 | raise TypeError("argument should be a bytes-like object or ASCII " 45 | "string, not %r" % s.__class__.__name__) from None 46 | 47 | # From Python 3.7.0 base64.py }}} 48 | 49 | 50 | def encode(s): 51 | if not isinstance(s, bytes_types): 52 | s = memoryview(s).tobytes() 53 | leftover = len(s) % 5 54 | if leftover: 55 | s = s + b'\0' * (5 - leftover) 56 | encoded = bytearray() 57 | from_bytes = int.from_bytes 58 | tab = _forward_table(ZOOKO32_ALPHABET) 59 | for i in range(0, len(s), 5): 60 | c = from_bytes(s[i: i + 5], 'big') 61 | encoded += ( 62 | tab[c >> 30] + 63 | tab[(c >> 20) & 0x3ff] + 64 | tab[(c >> 10) & 0x3ff] + 65 | tab[c & 0x3ff] 66 | ) 67 | # FIXME: handle padding, still not clear on how, the zooko doc waves it away 68 | return bytes(encoded) 69 | 70 | 71 | def decode(s): 72 | s = _bytes_from_decode_data(s) 73 | if len(s) % 8: 74 | raise binascii.Error('Incorrect padding') 75 | rev = _reverse_table(ZOOKO32_ALPHABET) 76 | decoded = bytearray() 77 | for i in range(0, len(s), 8): 78 | quanta = s[i: i + 8] 79 | acc = 0 80 | try: 81 | for c in quanta: 82 | acc = (acc << 5) + rev[c] 83 | except KeyError: 84 | raise binascii.Error('Non-base32 digit found') from None 85 | decoded += acc.to_bytes(5, 'big') 86 | # FIXME: do we need padding handling? 87 | return bytes(decoded) 88 | 89 | 90 | def _main(): 91 | import argparse 92 | parser = argparse.ArgumentParser() 93 | parser.add_argument('-e', '--encode', action='store_true', help='Encode to zbase32') 94 | parser.add_argument('-d', '--decode', action='store_true', help='Decode from zbase32') 95 | parser.add_argument('rest', nargs=argparse.REMAINDER) 96 | options = parser.parse_args() 97 | if options.encode: 98 | for a in options.rest: 99 | print(encode(a.encode('ASCII'))) 100 | elif options.decode: 101 | for a in options.rest: 102 | print(decode(a)) 103 | else: 104 | raise Exception('need either --encode or --decode') 105 | 106 | 107 | if __name__ == '__main__': 108 | _main() 109 | 110 | # vim: set sw=4 foldmethod=marker : 111 | -------------------------------------------------------------------------------- /other/standalone-update-website: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright © 2020 Pennock Tech, LLC 4 | # Available under a MIT-style license as found in LICENSE.txt 5 | 6 | """ 7 | standalone-update-website: update PGP WKD within a website tree 8 | 9 | Writes content per the "direct method" layout of 10 | draft-koch-openpgp-webkey-service version 09. 11 | 12 | Much of this is based on my pdpzbase32.py library, but wrapped up with some 13 | layout and GnuPG handling logic to specifically handle the WKD tree layout. 14 | This package should not depend upon any Python outside of stdlib. 15 | """ 16 | 17 | # https://philzimmermann.com/docs/human-oriented-base-32-encoding.txt 18 | 19 | __author__ = 'phil@pennock-tech.com (Phil Pennock)' 20 | 21 | import argparse 22 | import binascii 23 | import functools 24 | import hashlib 25 | import pathlib 26 | import os 27 | import re 28 | import subprocess 29 | import sys 30 | import tempfile 31 | 32 | ZOOKO32_ALPHABET = b'ybndrfg8ejkmcpqxot1uwisza345h769' 33 | 34 | 35 | class Error(Exception): 36 | """Base class for exceptions from this script.""" 37 | pass 38 | 39 | 40 | class Exit(Error): 41 | """An exception which should abort the script without a stack trace.""" 42 | pass 43 | 44 | 45 | @functools.lru_cache(maxsize=4) 46 | def _forward_table(alphabet): 47 | tab = [bytes((i,)) for i in alphabet] 48 | return [a + b for a in tab for b in tab] 49 | 50 | 51 | @functools.lru_cache(maxsize=4) 52 | def _reverse_table(alphabet): 53 | return {v: k for k, v in enumerate(alphabet)} 54 | 55 | 56 | # _bytes_from_decode_data: From Python 3.7.0 base64.py {{{ 57 | 58 | bytes_types = (bytes, bytearray) # Types acceptable as binary data 59 | 60 | 61 | def _bytes_from_decode_data(s): 62 | if isinstance(s, str): 63 | try: 64 | return s.encode('ascii') 65 | except UnicodeEncodeError: 66 | raise ValueError('string argument should contain only ASCII characters') 67 | if isinstance(s, bytes_types): 68 | return s 69 | try: 70 | return memoryview(s).tobytes() 71 | except TypeError: 72 | raise TypeError("argument should be a bytes-like object or ASCII " 73 | "string, not %r" % s.__class__.__name__) from None 74 | 75 | # From Python 3.7.0 base64.py }}} 76 | 77 | 78 | def encode(s): 79 | if not isinstance(s, bytes_types): 80 | s = memoryview(s).tobytes() 81 | leftover = len(s) % 5 82 | if leftover: 83 | s = s + b'\0' * (5 - leftover) 84 | encoded = bytearray() 85 | from_bytes = int.from_bytes 86 | tab = _forward_table(ZOOKO32_ALPHABET) 87 | for i in range(0, len(s), 5): 88 | c = from_bytes(s[i: i + 5], 'big') 89 | encoded += ( 90 | tab[c >> 30] + 91 | tab[(c >> 20) & 0x3ff] + 92 | tab[(c >> 10) & 0x3ff] + 93 | tab[c & 0x3ff] 94 | ) 95 | # FIXME: handle padding, still not clear on how, the zooko doc waves it away 96 | return bytes(encoded) 97 | 98 | 99 | def decode(s): 100 | s = _bytes_from_decode_data(s) 101 | if len(s) % 8: 102 | raise binascii.Error('Incorrect padding') 103 | rev = _reverse_table(ZOOKO32_ALPHABET) 104 | decoded = bytearray() 105 | for i in range(0, len(s), 8): 106 | quanta = s[i: i + 8] 107 | acc = 0 108 | try: 109 | for c in quanta: 110 | acc = (acc << 5) + rev[c] 111 | except KeyError: 112 | raise binascii.Error('Non-base32 digit found') from None 113 | decoded += acc.to_bytes(5, 'big') 114 | # FIXME: do we need padding handling? 115 | return bytes(decoded) 116 | 117 | 118 | class Email: 119 | """An email address, with WKD encoding support.""" 120 | 121 | def __init__(self, full): 122 | self.original = full 123 | # WKD also lower-cases the LHS, so in this operating context, 124 | # lower-casing the entire email address is correct. 125 | self.lower = full.lower() 126 | self.lhs, self.domain = self.lower.rsplit('@', 1) 127 | 128 | def __str__(self): 129 | return self.lower 130 | 131 | def __repr__(self): 132 | return f'[<{self.lower}>,{self.wkd_local}]' 133 | 134 | def __lt__(self, other): 135 | return self.lower < other.lower 136 | 137 | def encoded_lhs(self): 138 | h = hashlib.sha1(self.lhs.encode('ASCII')) 139 | return encode(h.digest()).decode('ASCII') 140 | 141 | @property 142 | def wkd_local(self): 143 | return self.encoded_lhs() 144 | 145 | 146 | class GPGHandler: 147 | def __init__(self, *, options, cmd_env): 148 | self.options = options 149 | self.cmd_env = cmd_env 150 | 151 | def _cmd(self, *extras): 152 | cmd_list = [self.options.gpg_command, '--quiet', '--batch'] 153 | for extra in extras: 154 | cmd_list.extend(extra) 155 | return cmd_list 156 | 157 | def key_import(self, key_files): 158 | subprocess.run( 159 | self._cmd(['--import', '--'], key_files), 160 | check=True, env=self.cmd_env) 161 | 162 | def keyring_list(self): 163 | subprocess.run(self._cmd(['--list-keys']), env=self.cmd_env, check=True) 164 | 165 | def raw_emails_in_keyring(self): 166 | lister = subprocess.Popen( 167 | self._cmd(['--with-colons', '--list-keys']), 168 | stdout=subprocess.PIPE, 169 | universal_newlines=True, 170 | env=self.cmd_env) 171 | extract = re.compile(r"<([^@>]+@[^>]+)>") 172 | while True: 173 | line = lister.stdout.readline() 174 | if not line: 175 | break 176 | # All modern GnuPG uses the uid: field here, but some ancient GnuPG 1 177 | # puts the email in the pub: field instead. 178 | if not (line.startswith('uid:') or line.startswith('pub:')): 179 | continue 180 | try: 181 | uid_str = line.split(':')[9] 182 | if not uid_str: 183 | continue 184 | m = extract.search(uid_str) 185 | if m: 186 | yield Email(m.group(1)) 187 | except Exception: 188 | continue 189 | 190 | def emails_in_keyring(self): 191 | emails = set() 192 | for email in self.raw_emails_in_keyring(): 193 | emails.add(email) 194 | return sorted(emails) 195 | 196 | def export_binary_key(self, *, email, out): 197 | # Needs to be binary export for WKD 198 | subprocess.run( 199 | self._cmd(['--export', '--', email.lower]), 200 | stdout=out, check=True, env=self.cmd_env) 201 | 202 | 203 | def _main(): 204 | parser = argparse.ArgumentParser( 205 | description=__doc__, 206 | formatter_class=argparse.RawDescriptionHelpFormatter) 207 | parser.add_argument('-d', '--domain', 208 | type=str, required=True, nargs='+', 209 | help='which domain name to look for in key uids') 210 | parser.add_argument('-o', '--output-dir', 211 | type=str, required=True, metavar='DIR', 212 | help='where to write the output tree') 213 | parser.add_argument('-k', '--keys-file', 214 | type=str, required=True, nargs='+', 215 | metavar='FILE', 216 | help='one or more PGP key files to scan') 217 | parser.add_argument('-v', '--verbose', 218 | action='count', default=0, 219 | help='Be more verbose') 220 | parser.add_argument('--gpg-command', 221 | type=str, default='gpg', 222 | help='Change the gpg command to invoke [%(default)s]') 223 | options = parser.parse_args() 224 | 225 | if options.verbose >= 2: 226 | print('python: ' + sys.version) 227 | print(repr(sys.argv)) 228 | print('key files: ' + repr(options.keys_file)) 229 | 230 | allowed_domains = set(d.lower() for d in options.domain) 231 | output_dir = pathlib.Path(options.output_dir) 232 | 233 | wkd_wellknown = output_dir / '.well-known' / 'openpgpkey' 234 | hu_dir = wkd_wellknown / 'hu' 235 | hu_dir.mkdir(parents=True, exist_ok=True) 236 | 237 | with open(wkd_wellknown / 'policy', 'w') as policy: 238 | # We don't want to write any data, we want it to exist, truncated. 239 | # We just _need_ the pass, but Python linters complain "policy" is unused 240 | # if we just do that. So issue one extra syscall. 241 | policy.tell() # dummy 242 | # without the dummy, we just need: pass 243 | 244 | with tempfile.TemporaryDirectory() as gnupghome: 245 | sub_env = os.environ.copy() 246 | sub_env['GNUPGHOME'] = gnupghome 247 | gpg = GPGHandler(options=options, cmd_env=sub_env) 248 | gpg.key_import(options.keys_file) 249 | 250 | if options.verbose >= 3: 251 | print('', end='', flush=True) 252 | try: 253 | gpg.keyring_list() 254 | except Exception as e: 255 | # Don't abort, this is a verboseness introspection aid only. 256 | print(f'getting PGP key listing from GnuPG failed: {e}', file=sys.stderr) 257 | 258 | for email in gpg.emails_in_keyring(): 259 | if email.domain not in allowed_domains: 260 | if options.verbose >= 3: 261 | print(f'Skipping for bad domain: {email}') 262 | continue 263 | with open(hu_dir / email.wkd_local, 'wb') as out: 264 | gpg.export_binary_key(email=email, out=out) 265 | if options.verbose: 266 | print(f'pgp: created {email.wkd_local} for {email}') 267 | 268 | 269 | if __name__ == '__main__': 270 | try: 271 | rv = _main() 272 | sys.exit(rv) 273 | except Exit as e: 274 | print(e, file=sys.stderr) 275 | sys.exit(1) 276 | 277 | 278 | # vim: set sw=4 foldmethod=marker : 279 | -------------------------------------------------------------------------------- /sites/globnix.org/.well-known/openpgpkey/globnix.org/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/globnix.org/.well-known/openpgpkey/globnix.org/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o -------------------------------------------------------------------------------- /sites/globnix.org/.well-known/openpgpkey/globnix.org/policy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/globnix.org/.well-known/openpgpkey/globnix.org/policy -------------------------------------------------------------------------------- /sites/globnix.org/.well-known/openpgpkey/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/globnix.org/.well-known/openpgpkey/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o -------------------------------------------------------------------------------- /sites/globnix.org/.well-known/openpgpkey/policy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/globnix.org/.well-known/openpgpkey/policy -------------------------------------------------------------------------------- /sites/globnix.org/index.html: -------------------------------------------------------------------------------- 1 | 2 | No web-pages 3 |

No content on this site should be a web-page.
4 | (Except, by reduction, this one.)

5 |

This small website exists for OpenPGP Web Key Directory (aka WKD).

6 |

Given the email address example@globnix.org, this site allows this next command to work:
7 | gpg --locate-external-keys example@globnix.org

8 |

WKD is also used by some graphical applications, and some web-based applications; appropriate URLs should have CORS rules permitting full read access.

9 | 10 | -------------------------------------------------------------------------------- /sites/grumpy-troll.org/.well-known/openpgpkey/grumpy-troll.org/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/grumpy-troll.org/.well-known/openpgpkey/grumpy-troll.org/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o -------------------------------------------------------------------------------- /sites/grumpy-troll.org/.well-known/openpgpkey/grumpy-troll.org/policy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/grumpy-troll.org/.well-known/openpgpkey/grumpy-troll.org/policy -------------------------------------------------------------------------------- /sites/grumpy-troll.org/.well-known/openpgpkey/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/grumpy-troll.org/.well-known/openpgpkey/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o -------------------------------------------------------------------------------- /sites/grumpy-troll.org/.well-known/openpgpkey/policy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/grumpy-troll.org/.well-known/openpgpkey/policy -------------------------------------------------------------------------------- /sites/grumpy-troll.org/index.html: -------------------------------------------------------------------------------- 1 | 2 | No web-pages 3 |

No content on this site should be a web-page.
4 | (Except, by reduction, this one.)

5 |

This small website exists for OpenPGP Web Key Directory (aka WKD).

6 |

Given the email address example@grumpy-troll.org, this site allows this next command to work:
7 | gpg --locate-external-keys example@grumpy-troll.org

8 |

WKD is also used by some graphical applications, and some web-based applications; appropriate URLs should have CORS rules permitting full read access.

9 | 10 | -------------------------------------------------------------------------------- /sites/pennock-tech.com/.well-known/openpgpkey/hu/1f7ykh5entmodikn9c8jss6xspfkc8nf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/pennock-tech.com/.well-known/openpgpkey/hu/1f7ykh5entmodikn9c8jss6xspfkc8nf -------------------------------------------------------------------------------- /sites/pennock-tech.com/.well-known/openpgpkey/hu/7nrpfxmxnxhn3k1twp6y8wbwa7zscg7d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/pennock-tech.com/.well-known/openpgpkey/hu/7nrpfxmxnxhn3k1twp6y8wbwa7zscg7d -------------------------------------------------------------------------------- /sites/pennock-tech.com/.well-known/openpgpkey/pennock-tech.com/hu/1f7ykh5entmodikn9c8jss6xspfkc8nf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/pennock-tech.com/.well-known/openpgpkey/pennock-tech.com/hu/1f7ykh5entmodikn9c8jss6xspfkc8nf -------------------------------------------------------------------------------- /sites/pennock-tech.com/.well-known/openpgpkey/pennock-tech.com/hu/7nrpfxmxnxhn3k1twp6y8wbwa7zscg7d: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/pennock-tech.com/.well-known/openpgpkey/pennock-tech.com/hu/7nrpfxmxnxhn3k1twp6y8wbwa7zscg7d -------------------------------------------------------------------------------- /sites/pennock-tech.com/.well-known/openpgpkey/pennock-tech.com/policy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/pennock-tech.com/.well-known/openpgpkey/pennock-tech.com/policy -------------------------------------------------------------------------------- /sites/pennock-tech.com/.well-known/openpgpkey/policy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/pennock-tech.com/.well-known/openpgpkey/policy -------------------------------------------------------------------------------- /sites/pennock-tech.com/index.html: -------------------------------------------------------------------------------- 1 | 2 | No web-pages 3 |

No content on this site should be a web-page.
4 | (Except, by reduction, this one.)

5 |

This small website exists for OpenPGP Web Key Directory (aka WKD).

6 |

Given the email address example@pennock-tech.com, this site allows this next command to work:
7 | gpg --locate-external-keys example@pennock-tech.com

8 |

WKD is also used by some graphical applications, and some web-based applications; appropriate URLs should have CORS rules permitting full read access.

9 | 10 | -------------------------------------------------------------------------------- /sites/spodhuis.org/.well-known/openpgpkey/hu/96bqcjktdxra6hd6mor16dn1huc49irf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/spodhuis.org/.well-known/openpgpkey/hu/96bqcjktdxra6hd6mor16dn1huc49irf -------------------------------------------------------------------------------- /sites/spodhuis.org/.well-known/openpgpkey/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/spodhuis.org/.well-known/openpgpkey/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o -------------------------------------------------------------------------------- /sites/spodhuis.org/.well-known/openpgpkey/policy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/spodhuis.org/.well-known/openpgpkey/policy -------------------------------------------------------------------------------- /sites/spodhuis.org/.well-known/openpgpkey/spodhuis.org/hu/96bqcjktdxra6hd6mor16dn1huc49irf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/spodhuis.org/.well-known/openpgpkey/spodhuis.org/hu/96bqcjktdxra6hd6mor16dn1huc49irf -------------------------------------------------------------------------------- /sites/spodhuis.org/.well-known/openpgpkey/spodhuis.org/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/spodhuis.org/.well-known/openpgpkey/spodhuis.org/hu/r6thk89hkz9zsaiqecoquhaucjatbz3o -------------------------------------------------------------------------------- /sites/spodhuis.org/.well-known/openpgpkey/spodhuis.org/policy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PennockTech/openpgpkey-control/f62ff8a0d2ce4ad19d1883fa8874e7068e9bbe83/sites/spodhuis.org/.well-known/openpgpkey/spodhuis.org/policy -------------------------------------------------------------------------------- /sites/spodhuis.org/index.html: -------------------------------------------------------------------------------- 1 | 2 | No web-pages 3 |

No content on this site should be a web-page.
4 | (Except, by reduction, this one.)

5 |

This small website exists for OpenPGP Web Key Directory (aka WKD).

6 |

Given the email address example@spodhuis.org, this site allows this next command to work:
7 | gpg --locate-external-keys example@spodhuis.org

8 |

WKD is also used by some graphical applications, and some web-based applications; appropriate URLs should have CORS rules permitting full read access.

9 | 10 | --------------------------------------------------------------------------------