From 143458ecdcb82cd18dee9e1c93d006ec92f8af99 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sun, 25 Jul 2021 17:51:24 -0600 Subject: [PATCH] Add notary public key registry (see IPENtool) --- apiconfig.php | 12 +++ composer.json | 3 +- composer.lock | 176 +++++++++++++++++++++++++++++++- database.mwb | Bin 6922 -> 8697 bytes database.mwb.bak | Bin 6927 -> 8531 bytes endpoints/notary.fetchkey.php | 43 ++++++++ endpoints/notary.publishkey.php | 48 +++++++++ 7 files changed, 280 insertions(+), 2 deletions(-) create mode 100644 endpoints/notary.fetchkey.php create mode 100644 endpoints/notary.publishkey.php diff --git a/apiconfig.php b/apiconfig.php index 23eceb6..31061ed 100644 --- a/apiconfig.php +++ b/apiconfig.php @@ -84,5 +84,17 @@ $APIS = [ "domain" => "/\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/", "nocache (optional)" => "" ] + ], + "notary/publishkey" => [ + "load" => "notary.publishkey.php", + "vars" => [ + "key" => "/-----BEGIN PGP PUBLIC KEY BLOCK-----(\n.*)+-----END PGP PUBLIC KEY BLOCK-----/" + ] + ], + "notary/fetchkey" => [ + "load" => "notary.fetchkey.php", + "vars" => [ + "fingerprint" => "/[a-fA-F0-9]+/" + ] ] ]; diff --git a/composer.json b/composer.json index 104d5f9..366c2ec 100644 --- a/composer.json +++ b/composer.json @@ -5,6 +5,7 @@ "geoip2/geoip2": "^2.11", "shippo/shippo-php": "^1.4", "easypost/easypost-php": "^3.5", - "bogdaan/open-location-code": "dev-master" + "bogdaan/open-location-code": "dev-master", + "singpolyma/openpgp-php": "^0.5.0" } } diff --git a/composer.lock b/composer.lock index ac1d71e..c34d5bb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "56a7b51650928bd0c6c4eb301df2ccd9", + "content-hash": "d376050c7d4fdf9dd835d99448acdf0b", "packages": [ { "name": "bogdaan/open-location-code", @@ -493,6 +493,115 @@ }, "time": "2020-11-02T17:00:53+00:00" }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.32", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "f5c4c19880d45d0be3e7d24ae8ac434844a898cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/f5c4c19880d45d0be3e7d24ae8ac434844a898cd", + "reference": "f5c4c19880d45d0be3e7d24ae8ac434844a898cd", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.32" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2021-06-12T12:12:59+00:00" + }, { "name": "shippo/shippo-php", "version": "v1.4.4", @@ -551,6 +660,71 @@ }, "time": "2020-09-14T13:26:17+00:00" }, + { + "name": "singpolyma/openpgp-php", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/singpolyma/openpgp-php.git", + "reference": "69292f6a46ed7f687083bfb8974b161a41ab213c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/singpolyma/openpgp-php/zipball/69292f6a46ed7f687083bfb8974b161a41ab213c", + "reference": "69292f6a46ed7f687083bfb8974b161a41ab213c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0", + "phpseclib/phpseclib": "^2.0 !=2.0.8" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-mcrypt": "required if you use encryption cast5" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Unlicense" + ], + "authors": [ + { + "name": "Arto Bendiken", + "email": "arto.bendiken@gmail.com" + }, + { + "name": "Stephen Paul Weber", + "email": "singpolyma@singpolyma.net" + } + ], + "description": "Pure-PHP implementation of the OpenPGP Message Format (RFC 4880)", + "support": { + "issues": "https://github.com/singpolyma/openpgp-php/issues", + "source": "https://github.com/singpolyma/openpgp-php/tree/0.5.0" + }, + "funding": [ + { + "url": "https://github.com/singpolyma", + "type": "github" + }, + { + "url": "https://liberapay.com/singpolyma", + "type": "liberapay" + }, + { + "url": "https://www.patreon.com/singpolyma", + "type": "patreon" + } + ], + "time": "2021-05-26T00:35:20+00:00" + }, { "name": "symfony/polyfill-mbstring", "version": "v1.22.1", diff --git a/database.mwb b/database.mwb index 8e5aa8d073fa620c845d75c6b1fd4eebf330146b..136c143841b821b8416b6fa3c1bdf77933aea149 100644 GIT binary patch delta 8242 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 NX;Ee<(_0v2{ukG6Uh4n= diff --git a/database.mwb.bak b/database.mwb.bak index a661c3465371d382e4e3daec2a33009fde8b72c7..6eab250db13ade9ce7d32bd2d6c2fc29bf6f1fd6 100644 GIT binary patch delta 8076 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 P1qJmBYPy7B3ebN6c1l&f delta 6455 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 $fp]; +} else if (strlen($fp) == 16) { + $where = ["fingerprint_short" => $fp]; +} else { + $where = ["fingerprint[~]" => "%$fp"]; +} + +$results = $database->select("notary_registry", '*', $where); + +$out = []; + +foreach ($results as $r) { + $out[] = [ + "fingerprint" => $r["fingerprint"], + "name" => $r["name"], + "email" => $r["email"], + "location" => $r["location"], + "commissionexpires" => (is_null($r["commissionexpires"]) ? null : strtotime($r["commissionexpires"])), + "idnumber" => $r["idnumber"], + "state" => $r["state"], + "publickey" => $r["publickey"] + ]; +} + +exitWithJson([ + "status" => "OK", + "query" => $fp, + "count" => count($results), + "results" => $out +]); \ No newline at end of file diff --git a/endpoints/notary.publishkey.php b/endpoints/notary.publishkey.php new file mode 100644 index 0000000..95b104f --- /dev/null +++ b/endpoints/notary.publishkey.php @@ -0,0 +1,48 @@ +packets as $pkt) { + if ($pkt instanceof OpenPGP_PublicKeyPacket) { + $fingerprint = $pkt->fingerprint; + } else if ($pkt instanceof OpenPGP_UserIDPacket) { + $name = $pkt->name ?? $name; + $email = $pkt->email ?? $email; + } +} + +if ($database->has("notary_registry", ["fingerprint" => $fingerprint])) { + sendJsonResp("A public key with fingerprint $fingerprint has already been submitted to the registry. If you need to make changes to the information in the registry, put your old and new information in a PDF file, sign it with your private key, and email the PDF to notary@netsyms.com.", "ERROR"); +} + +$database->insert("notary_registry", [ + "fingerprint" => $fingerprint, + "fingerprint_short" => substr($fingerprint, -16), + "fingerprint_tiny" => substr($fingerprint, -8), + "name" => $name, + "email" => $email, + "location" => $location, + "commissionexpires" => $commissionexpires, + "idnumber" => $idnumber, + "state" => $state, + "publickey" => $pubkey +]); + +sendJsonResp("Your public key and notary profile have been submitted to the registry.", "OK"); \ No newline at end of file