diff --git a/README.rst b/README.rst index df57f55..ffa28ba 100644 --- a/README.rst +++ b/README.rst @@ -7,103 +7,70 @@ Porter Overview -------- -NuCypher Porter can be described as the *“Infura for NuCypher”*. Porter is a web-based service that performs -nucypher-based protocol operations on behalf of applications. +Porter can be described as the *“Infura for TACo”*. Porter is a +web-based service that performs TACo-based protocol operations for +applications. -Its goal is to simplify and abstract the complexities surrounding the nucypher protocol to negate the need for -applications to interact with the network directly. Porter enables applications to behave like a "light-client" -by delegating network intensive operations like peering and node discovery to Porter. Porter facilitates cross-platform -support for the `nucypher protocol `_. +Its goal is to simplify and abstract the complexities surrounding the +TACo protocol to negate the need for applications to interact with it +via a Python client. Porter introduces the TACo protocol to +cross-platform functionality, including web and mobile applications. .. image:: ./porter_diagram.png :target: ./porter_diagram.png -Running Porter --------------- +Any publicly available Porter can be used to interface with the +Threshold Network, or some application developers opt to run their +own. -There are a variety of possible infrastructure setups for running the Porter service, and two scenarios for running -the Porter service are provided here: +Running a Porter Instance +------------------------- -#. Run the Porter service directly via docker, docker-compose, or the CLI (see `Run Porter Directly`_) -#. Run the Porter service with a reverse proxy via docker-compose (see `Run Porter with Reverse Proxy`_) +Security Considerations +*********************** +- **HTTPS:** To run the Porter service over HTTPS, it will require a + TLS key and a TLS certificate. +- **CORS:** Allowed origins for `Cross-Origin Resource Sharing + (CORS) `_ +- **Authentication:** Usage restriction via authentication protocols, + e.g. basic authentication etc. -Run Porter Directly -******************* .. note:: - If running the Porter service using Docker or Docker Compose, it will run on port 80 (HTTP). If - running via the CLI the default port is 9155, unless specified otherwise via the ``--http-port`` option. + Ideally, you would run Porter behind a reverse proxy (e.g. `nginx `_) for additional + functionality such as HTTPS, CORS, authentication etc. -Security -^^^^^^^^ -* **CORS:** Allowed origins for `Cross-Origin Resource Sharing (CORS) `_ - is not enabled by default and can be enabled either via the ``--allow-origins`` option for the CLI, - or the ``PORTER_CORS_ALLOW_ORIGINS`` environment variable for docker-compose. +Run via Docker +************** - The value is expected to be a comma-delimited list of strings/regular expressions for origins to allow requests from. To allow all origins, - simply use "*". +By default, Porter runs on port ``9155``. - .. note:: - - Origin values can be a string (for exact matches) or regular expressions (for more complex matches). - - As part of CORS, the scheme (``https`` or ``http``) is also checked, so using only ``example.com`` is incorrect - to allow an origin from that specific domain. For exact matches, you can use ``https://example.com`` for HTTPS or - ``http://example.com`` for HTTP. For non-default ports (i.e. not 443 or 80), the ports should be specified - e.g. ``https://example.com:8000`` or ``http://example.com:8001``. - - For regular expressions, to allow all sub-domains of ``example.com``, you could use ``.*\.example\.com$`` which - incorporates wildcards for scheme and sub-domain. To allow multiple top-level domains you could use - ``.*\.example\.(com|org)$`` which allows any origins from both ``example.com`` and ``example.org`` domains. - -via Docker -^^^^^^^^^^ - -Run Porter within Docker without acquiring or installing the ``nucypher-porter`` codebase. - -#. Get the latest image: +#. Get the latest ``porter`` image: .. code:: bash $ docker pull nucypher/porter:latest -#. Run Porter service - - For HTTP service (on default port 80): +#. Run Porter HTTP Service on port 80 .. code:: bash $ docker run -d --rm \ - --name porter-http \ + --name porter \ -v ~/.local/share/nucypher/:/root/.local/share/nucypher \ -p 80:9155 \ + --restart=unless-stopped \ nucypher/porter:latest \ nucypher-porter run \ - --eth-provider \ - --network - - * With CORS enabled to allow all origins: + --eth-endpoint \ + --domain - .. code:: bash - - $ docker run -d --rm \ - --name porter-http-cors \ - -v ~/.local/share/nucypher/:/root/.local/share/nucypher \ - -v :/etc/porter/tls \ - -p 443:9155 \ - nucypher/porter:latest \ - nucypher-porter run \ - --eth-provider \ - --network \ - --allow-origins "*" - - .. note:: - - The commands above are for illustrative purposes and can be modified as necessary. + The command above is for illustrative purposes and can be modified as + necessary. #. Porter will be available on default port 80 (HTTP). @@ -111,74 +78,17 @@ Run Porter within Docker without acquiring or installing the ``nucypher-porter`` .. code:: bash - $ docker logs -f + $ docker logs -f porter #. Stop Porter service .. code:: bash - $ docker stop - - -via Docker Compose -^^^^^^^^^^^^^^^^^^ - -Docker Compose will start the Porter service within a Docker container. - -#. There is no need to install ``nucypher-porter`` after acquiring the codebase since Docker will be used. - -#. Set the required environment variables: - - * Web3 Provider URI environment variable - - .. code:: bash - - $ export WEB3_PROVIDER_URI= - - .. note:: - - Local ipc is not supported when running via Docker. - - - * Network Name environment variable - - .. code:: bash - - $ export NUCYPHER_NETWORK= - - * *(Optional)* Enable CORS. For example, to only allow access from your sub-domains for ``example.com``: - - .. code:: bash - - $ export PORTER_CORS_ALLOW_ORIGINS=".*\.example\.com$" - - -#. Run Porter service - - For HTTP service (on default port 80): - - .. code:: bash - - $ docker-compose -f deploy/docker/docker-compose.yml up -d porter-http + $ docker stop porter - Porter will be available on default ports 80 (HTTP). - -#. View Porter logs - - .. code:: bash - - $ docker-compose -f deploy/docker/docker-compose.yml logs -f - -#. Stop Porter service - - .. code:: bash - - $ docker-compose -f deploy/docker/docker-compose.yml down - - -via CLI -^^^^^^^ +Run via CLI +*********** Acquire the ``nucypher-porter`` code base, and install using pip. Either: @@ -197,134 +107,27 @@ For a full list of CLI options after installation ``nucypher-porter``, run: .. code:: console - $ nucypher-porter run --help - - -* Run Porter service - - * Run via HTTP - - .. code:: console - - $ nucypher-porter run --eth-provider --network - - - ______ - (_____ \ _ - _____) )__ ____| |_ ____ ____ - | ____/ _ \ / ___) _)/ _ )/ ___) - | | | |_| | | | |_( (/ /| | - |_| \___/|_| \___)____)_| - - the Pipe for PRE Application network operations - - Network: - Provider: ... - Running Porter Web Controller at http://127.0.0.1:9155 - - To enable CORS, use the ``--allow-origins`` option: - - .. code:: console - - $ nucypher-porter run --eth-provider --network --allow-origins ".*\.example\.com$" - - - ______ - (_____ \ _ - _____) )__ ____| |_ ____ ____ - | ____/ _ \ / ___) _)/ _ )/ ___) - | | | |_| | | | |_( (/ /| | - |_| \___/|_| \___)____)_| - - the Pipe for PRE Application network operations - - Network: - Provider: ... - CORS Allow Origins: ['.*\\.example\\.com$'] - Running Porter Web Controller at http://127.0.0.1:9155 - - -Run Porter with Reverse Proxy -***************************** - -This type of Porter execution illustrates the use of a reverse proxy that is a go between or intermediate server that -handles requests from clients to an internal Porter service. An NGINX reverse proxy instance is -used in this case. It will handle functionality such as TLS, CORS, and authentication so that the Porter service -itself does not have to, and allows for more complex configurations than provided by Porter itself. More information -about the NGINX reverse proxy docker image used and additional configuration options -is available `here `_. - - -via Docker Compose -^^^^^^^^^^^^^^^^^^ - -Docker Compose will be used to start the NGINX reverse proxy and the Porter service containers. - -#. There is no need to install ``nucypher-porter`` after acquiring the codebase since Docker will be used. + $ nucypher-porter run --help -#. Set the required environment variables: - * Web3 Provider URI environment variable - - .. code:: bash - - $ export WEB3_PROVIDER_URI= - - .. note:: - - Local ipc is not supported when running via Docker. - - - * Network Name environment variable - - .. code:: bash - - $ export NUCYPHER_NETWORK= - - * The reverse proxy is set up to run over HTTPS by default, and therefore requires a TLS directory containing - the TLS key and certificate for the reverse proxy. The directory is expected to contain two files: - - * ``porter.local.key`` - the TLS key - * ``porter.local.crt`` - the TLS certificate - - Set the TLS directory environment variable - - .. code:: bash - - $ export TLS_DIR= - - * *(Optional)* The CORS configuration is set in the ``nucypher-porter/deploy/docker/nginx/porter.local_location`` file. - - .. important:: - - By default, CORS for the reverse proxy is configured to allow all origins - -#. *(Optional)* Build the docker images: - - .. code:: bash - - $ docker-compose -f deploy/docker/nginx/docker-compose.yml build - -#. Run the NGINX reverse proxy and Porter service - - .. code:: bash - - $ docker-compose -f deploy/docker/nginx/docker-compose.yml up -d +* Run Porter service via HTTP +.. code:: console -#. The NGINX reverse proxy will be publicly accessible via the default HTTPS port 443, and will route requests to the - internal Porter service. + $ nucypher-porter run --eth-endpoint --domain -#. View Porter service logs - .. code:: bash + ______ + (_____ \ _ + _____) )__ ____| |_ ____ ____ + | ____/ _ \ / ___) _)/ _ )/ ___) + | | | |_| | | | |_( (/ /| | + |_| \___/|_| \___)____)_| - $ docker-compose -f deploy/docker/nginx/docker-compose.yml logs -f nginx-porter + the Pipe for TACo Application operations -#. Stop Porter service and NGINX reverse proxy - - .. code:: bash - - $ docker-compose -f deploy/docker/nginx/docker-compose.yml down + TACo Domain: + ETH Endpoint URI: ... + Running Porter Web Controller at http://127.0.0.1:9155 API @@ -387,17 +190,92 @@ More examples shown below. and it is dependent on the tool being used. +POST /cbd_decrypt +***************** +Use TACo nodes to decrypt data that was encrypted with associated conditions. + +Parameters +^^^^^^^^^^ ++-----------------------------------+----------------------+------------------------------------------------+ +| **Parameter** | **Type** | **Description** | ++===================================+======================+================================================+ +| ``threshold`` | Integer | | Threshold of nodes needed to respond | +| | | | successfully. | ++-----------------------------------+----------------------+------------------------------------------------+ +| ``encrypted_decryption_requests`` | Dict[String, String] | | Base64 encoded encrypted decryption requests | +| | | | keyed by node staking provider address. | ++-----------------------------------+----------------------+------------------------------------------------+ + +Returns +^^^^^^^ +The result of the decryption operations performed: + + * ``decryption_results`` - The list of results from the decryption operations performed; contains a mapping of + Node staking provider address/decryption fragment pairs. The decryption fragments are base64 encoded. + + +Example Request +^^^^^^^^^^^^^^^ +.. code:: bash + + curl -X POST /cbd_decrypt \ + -H "Content-Type: application/json" \ + -d '{"threshold":5, + "encrypted_decryption_requests":{ + "0x04aDC6465Efa53BBD096B2aD2E3dD7DB6EA9c3F4":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfMbyHGdQtnqB66KWQfoEDjs/zxIqIQYM/jFDldmfNIv1RmHxGYJrcXRfF22ewFeTlPEhWmO7T6m15o1c7uas81pzsekF7/WqtTHHuStL7EuQU8Y5VKryUAx86eg6He5lQTZhQx85ZSxiCbDyHd1m8LxT31rM0Mgk7ZDOnYwK/JyNMMRo1hC9/Cl3btEsn/YKnYL4owiUmnXUM2uh+oPJ2h+C/De0KG6cmLlGu9uJOzbAbOrBjB4hoY5p4W70ecqJU8zAvs3deEbuHaa9FE7CUdsq56ugf/vtA+bzdQxIalBCJQLaqSYB/OQl2SaN+WQ/Bp4sToqUWwsDTs9dm7qyFkffqynIyrjhs+fmYI6L3LNa3bXwrKnovR4pv8QTJ67vlyO6C4/jCSjZ2CEP6vv5dlwvyE+2Tots0nJzEoPK2baz2pi2a171f612ethXEApY8OhJCNpMSlEWAATZ741gnYl7mMvP3xwgevu0i+3YD5rTkEJlVh5rQrflIRqRmw4f6qdftcFVDcMipgGoess8qHmmNw7qkKVlQQqv2tzzUtHlenjQ/mtqwE3X1PdsoYnpR/ywUYr+8nGZ7xO6g9REz74dufuccm1+HK67zS58vBy4r1vx/SHj2h9ShR9y+Rakmn35MV1frpUSDZL3w7K+PeifKgF", + "0x18EC3906D608b2b0B0f240C84AdC6d28671a48ce":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfNu9h6h+nBMsSqFXAbjIzGrD5f2rmKN2pDqD6p+I7iJEu2+qi6Is5EveAVJsW/kkgPPSc5V7OzJUnB2ycOnRzs+Gl+vlzihwdDm64Lo5TMQuZAnW6l8O7lgcd7PO/8q4GfeH73LGaQUuhpDjkjZ1Jga7mASps3o+FxIsbMbUjHBK7FydJO0tvc9sS8tDFT5xPrLvKtr8Et+l3I2bguyfFwCuLw74yaV7Cqxx6x0pzhUeZ4BaAIgGyf1R7l2EPxeLaF+6F3yyUK1wy35BE6YfdPYh4J3Y4Tu3ccgIOORJrOQwypVrRgLy7nLzlJJuv5T+Ej7ZyFqOSevnUlccMTEHCvgRAWcq+tBO9hgTO7yNo25EoX/EUJJwZ+0S6g/kaPNkVT6jmpwdmKWULSqZ/2MRAuE4qvBhLFBbondCgnZHVYndwcefjB8OfLPeRkc5YRFkHQcxqySb1uPaoM0++3l9/cmXxotxv9TwksVoEHwWgEHGTEgcdlz9QEgryn9pISTPYGWv0/+A7tPXV88Z5owTYQprNzxgtCpyOiFhhA+H4NBZ2rSX01cNKjPzqGbB3LKWgNdbSp7HaG7BEkVSAMcCiX9xWMcfgnhCi8f3lbhGTIXJ4WvD81yIUdlPlBFsVAaLBisNUPauMphiwbCBnTRjTVaawBr", + "0xABbacaDabA000000000000000000000000000009":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfPFriRyxW2nCZaPCfU6je/sRhv1WOKi9NOUi46s4EKPxGpkqLMk6yLrn1+xhhlfQZ7rOZ/PmWTdtnMDPfRmRwOp976wVZm8xuo76DKcL5vI/m+x6KmOtQFQL2uNu0iCS0reZ9gP87/EvzP3G1aqgIGQQrQf5jAcdfXFCnseMDcZX/Do7ElRqBVoXxYT+jsyEcPTglfU2oWrQGuJs5kO5Lm3PJUI1zLWbmSrloGPELHzPHtGQ8t3XcToDrEiSaXXRU698ErCXE9TPVctuk26AYOTikAylfEsjkocmJn8w1op0C2ccDbS7zg889BLM18f17cfIU2CEiANkoJA7Bth/beDkM00icnaZ0ZhOcqaTV48+T2pEEW/FhNSkBG1LECIxUBiJLJJYj5FpO2S1O2MHlNEVFF2BQmmw24qzE2REpB1dSoRZU4HBBqeS4IDbekGoBZ3IbGCK1xoBQwEnAQPN0Eyi8vAqYNRmSRj77n+OPJybwdUpd9Yvh/UC0nhNz7GgaZTwtN1/7kn4IY8/8Q37lyhihOdaNJATaFpJEqqz4pRoHsI3FwCTbK7N4KQTXXnR8o7x28GxfC7sX+Ff8Ybvii1nRBm9N54k+Y9HM7ihGxpnEv2hs3GAk55XjuIqJ1DJlJVBAIJioABFG6e2q8ALqHWnxOO", + "0xAbbAcAdaBA000000000000000000000000000007":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfPr1njsR8BdPtJTcPxFUKatB5/PP0UgUKRY/hOKm0Btl/PKvlbMYQYeL2+4NJCRNev+RfZN1R8SVeJbLgZC2v8edwO0YqUWVqu4VU73VqcCn242Z/7zvwHIc7cFlLIIiZ8jboQonT49XUpvjQCRv2KlRRoR/dAs5gAVnxd/4TZNLWFh+HwQEptbh3rADbZlxptAT2rk4Lxtl4oLgSFCzvRRhptusdLEyI1a8Qn55AoeDtaARI5c7PU3TBdhK6zLJym850IM3cAAr+H1ChadRT3ntrji4ppO6umUQTpXVBSm0u4O37tWshGX/37ER+urs5D7JAdOS7bJT8o37eHZMWIeUFtxsakhowl4jUtaVayZKD64+RDDYC4UtUQVWpjhbc8x0hsLhKqqIo8EliyA97EQoLskRh4KK3aOmlAfNckQhuu8H6580vzAxLt5uVQtiVr3UbJpMqU3kj1GDe1ecTYl3NSvEhhy9M70MRttYu0JULvmv28spAZuIi05qtNTagSy32UvPMtob95THs7JOVN4BxlgqBEQTQF5Q4hKjfm1GTa01S86ZDXAO7ZpBHOHbzvOVgD/RLE6vQ/9UPvXClHI3DU0tbbpW080G04KvtN6SxMne0AmtO3Me9N3/UyGacKm1IrRR79mJb50novbESghDJET", + "0xB5Fa888B41F1A252757118F427Be483E1e0d611e":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfPUP8mf6pA6n4PW589wNPomu/GF30cnjrgelkReVE3HtIe+AaPoIG4xFS/JCKLORjwREMbaP901RIef8fAQIFRaX8dFrwYhSfG4BgG68gl4zFwQIJys2fiqmYd2qCXtcjulnj0mlCQ/xA94lTQ0g+TgB1s1pnbn6WYmNqFUsKfpGp7g+/cRMC/zpOG4AD+Ozyr9IN5XSAE3bO3G3Ui8pGA+fSsUGA+EQx/ab/IcwGbjw8U0eUIwGWLokCu5kpJ1UzN9fr/+0tKZZsX7fONV/dXrj5Fy56Lqbf1HrWv1RIpKNYUSKXn4QfKqv9OS6yOUW38zv0h2NFOnFQlGmgjIM4KD/6Ytvp3Ne5B+SDRIIRgN8kOT88fXs3CI9I0P/pRJanrCJ2KxoVnySHKX1BTxmLPh/NLQK0xCsUw7h5lawZmsJX7G8JdD1qJKUgQ2m9o5ZMWV9kc9kQmKg1pS2LV79g/VNtFVj7ad/P8XSANUvarGpXyEctojTUsXiD2QzTvZE8hrwmoFnVMHvp2RDg9aX36MZK7K9vhP/W55TPsYhZ+1I3/B9d47JYMGo6WseSN8oIJnlqk4LUp1vnYiIRE5yoUG1quK+XwEcgqWePAfRqF9W19f8AUZth4+E47t0GLUVA38GD8RdxhZu8bGzhffXLwQ3J/G", + "0xaBBACADABA000000000000000000000000000005":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfOyePokgnuuvse3eOxLCuJ6QBq6r799898Ib6mLhZ7RBHRtrdErimC2fXDIiVQ5UfxhLUpCMx20fBgGvzi9SZiKz0K06xrX1WvEVb9shK3PSh20mLG/PIwI108aI/jBJJsO5/rnCk0gUTarWY3+PQHnGbLagaaxJvdXtJ/8/C/RiL8ieNGOn19g8osdKTVxMNy4zZ4lMXW+C/VMBMQWPxR2n5VuMoFUrHidnHADxYMfv1/mdwHOK6AqNphX+hfmx0PxMt6kMipdOWHC15LqCy+wtlm1eMu5CuakC/DZqAPXX6fSxApIK5DD3zjWaRRFThDdwfZy3Q0I58l9D+NSUU59n1hgxO04e53BOU+AJ7X71iLEhgsdt36M7u4cm9s0l+r+F/CWlsf3UwBjJS0xGgOIfzHlpmsqHTADmphBx3eP6CZbIRBZ/JBDhCRyqxlfEonuYXg/mVXeBjunglu6roqGJ1p/AyPSMAlWnGcTNsoC07nR5hdNWL/fraZZcTAEOg043ZEZzKvqIZhZyvqCZ1dKtaChU8C9+ax9+UnI7SWS8dI1Lc2TTBVk3XLLqtMXZtbCKausve6sHS5Xm9t/YV5pY0WPfvOeFZ03NPQ0PlTv1JRqVj9VOCMxL7W43eEXOjj1cusd08XzBrWlhEVNZC5G8lxI", + "0xaBBAcadabA000000000000000000000000000008":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfPgCj9zBXVXdvc7ULeIUPEdxuTTt0dUpUajPVhFLyks20VAkv92h96ZRmVDLRdP41stCKbQwfmDxZphJSNl58A/tCPBwcr2xMjjDmDwxTmKtshdM1XX/t7PE2eFInMHASoSwYv6PMhFcFvQ7mKS+nQQldafGT/9i4cu4mGoOsY2KZhNd53NU2k6bQrFuinQP5Wr7EPw8l+pTtBPzUXxVH7iRBwVj4UVnzUMUxv4yFFnyPxJ95GXkgkPE3e+XMs+LpCc1i/iqgOi8Rnm3YmF8YYgT7sGM+5BqhFncYLoqz5JVVkwO0Ep6U3cVI6iidMFxWhAH1NiwUTGVwAiisaOHgy5jRS5BS/vqoWGNN7bmSbWtU7TBd8ahPGGybRejwofy8/1dUi8Vxu5hB9VhgLfIF4bXWwEIjUtRqgZRbE/q3wdyCnOmnz39Sf5QrSvS7haZ2ZK1WN94h28oCiHFG8PMdSA0TVCyBeJe2nx5WkKdOdaFfmozXx5A0xjlvTW+D5uqFnw8aAwWu1fIuY70Dabk9lOfARPOGa5QySMLtWLE47uH96BisHhHOXVNMUTmpwNbqqLyCgFhqpnRIbqAYIMdAhbD8XhhCEqWfNRIpZYbbPZu4eKWmLhLy7kKKy0/KZC2TVd9QP5f3n7pRjJE/Qu1X2iPoO5", + "0xaBbaCadaBA000000000000000000000000000006":"RVRScQACAACTAMQgwhlSChp/epwy4evVaXSy1MTn0IjTeH+KlEqHr18tOm/FAfOlQRtUlA1X52lcI5y6O+leZhH7BbIzawqMht+UBjjAYg9AdYGL8Az0kR5hwPzFFJ/qLYecUGZQm4Fbp4CIUoeJ/AsbPCUTw9VlceLlNGVxd+pe8Ej6hr76sCiiFpmo+mTvX3aKlj5WpJUiNEJCyZKTffBdK+kkQKLmb4xo4JPfmSHWr71KhYO5+L9Ctc4styA96fYopp31WHlcWlcYaNGAS8RCvsDK9GBvpxTad32se2+L0J2Zu9C0TjKnuRZ+mscGZxtgOkqH9p1fGchZFliwEzDHrcJhwS0tfqCPIwTveVgKIk/1uNlUAX81rkIR7vZCinIExQXfozUzqy1PotLntS1q4ZjKmOcI1GBbIEfcuB7ZvudeMf8+dqraEkgvjPR9oyUZ+YWZMYE0wlMVqVgwZFAGw7xFkRqbWUn6089LESJ55gqeskN+3PCq4yF6rdlfUrW2KC0KECV1nxmeZP+e9Wxze5wRu7LOgsoF3EKwcrRPtJi7xpSOCRQJFaDp+ZcNFYtSv78pxWaSClfjks5Tk20zbXXmjyPdPGvGdxBQfBxfY7ut5mRuKW4awY1mA+3KT0sJqgolIW4bDI5EP2Kvmvg6ynva5zLQhwiGQNCIi/9S4n51W+L0W8/6vkXeYehfcvRMtYpbtfxTDMhvHGzfJx+t" + }}' + + +Example Response +^^^^^^^^^^^^^^^^ +.. code:: + + Status: 200 OK + + +.. code:: json + + { + "result":{ + "decryption_results":{ + "encrypted_decryption_responses":{ + "0xaBbaCadaBA000000000000000000000000000006":"RVRScwACAACSAMUC0QOCuW22G1u9q8ultJf7GmknsSt3tgFbbDXH8wYzebij5wobdpUIQmO5AiEriFWAEzdZwYhdlEDdG8Av+gzVkZNYGmPdjUk0Q7C6VEJpMB0CXDZr0H3oqNnMOHzCAbwbmYimxw0Wb12xTtaPPh4GUNnTiSegI3Bp1Ug5F7LF97cBepi/WwxxX8yC2XiAGawwEtXV8/Ll4gEbhW1RK/pqq97qH1QQeXVL7MtryvgkhRKOOdjEJ2m/gaEQOlzt5ChM1BLOiR35tfVc+UABYB9jy/F5lMt84Ac31sAhJZzWGFfQV+JUgkJGN2isIUQukYgiHpCA1oQ99CJcve3mZSSpZLFdxrrpshNe+rPWVqZTs0C5Qh0cl98jvQZQumD567CscofLhKQJV4g4mkyFlv9eKNkqSEEcSx2bmTr8rGqEQFqIGcUJbCzPebgGXzHjrcH23l9jY0h53k1LY2IzYndOXqNv0Wf+cYMEPx4x1eDhkQucmypsGcAEjo4uFbXnFkk/kiHas+HtoommlAPWeyXmDfPEhVMPkU2P8lf7OuYnQpBrZF5d1nnIN9cXRWW2EHceiSmllRMkN4NnqWy5B/rJ5UudCDJaf3gbhEhV0VEzJAKRGbPE5kau2JyPSdPFLiYYIhRTy6Sw1XQVUe9v6sy1ykTmSav0TeO1NWph7SyZQGJotm5fPPSvSuFG5AoMc2zD8kPY2eBSNMncvCCu7L0pxyVPSMJyE80OEQEXA8W2kfSQKfbr8nLQf0D5H4nI7XuN2ecgpjWfglKlD8W8rlbdWQ2ydLQYSmeko8cXInOMHrOSckuWnpjw/92eWWnkXkiqTOhHtwNf39eDBbXCQGZDLZEPis9MP+yiuUaR88rftkRprNSXJW7cP3Q4FXvKI+xZuEOCWqiOuxokR6S2DRRt2neDNO8TP6HrjjAIrG+3LfvoH5j920DHn3SnhPRH3febMQw=", + "0x40896f32bD685E6F5C74A5b6ab4d8c7953cbFA53":"RVRScwACAACSAMUC0ec0FnIRxE4p3kjRVzmuEMWZKlk9wADuNeeW4mJoI5GiS7G0/dL8ZIlkLv2BiQXNJAuY3IZTZvkT1ppFRrBK8s65OjzBWvS+Mmarf9nj6qJovkS8szLsMV8qKSwF5KIrHC0RUYHqTSiAL0azkie5VRevY/F9QiG9yX4FGg2wzaHUEv0e14m8bbk/+a+tpQRFkgX3psjModOEoxHSqbEm9oRkVgySj0KEaXjwyPhbGhGDMjoEHuE/t3dw9/3ykKRPonDyG28SEJlTe9rDKbfxqqCxUjd3bgmyFym0APcPyh8EeA9mdGa5PWcuxe0HT0ff2aGV518MUBfk+DQ3l784B7mSRkSqpwgO0vEldeiujihUU5BGDskBL5qzuoJNzC0Giy7YcbMRIgAFsFZ9CjBN5xj3bftJewzrE4JRMMtdskhUJiEJ4ii3gwEmhR3qRnA8lLb8425JnI8cCsV6TwPy+kjYiHDw2BSQw6cm84wz99rqLCZ51CeWgLvs/nph/EISPpMhdA5Gju7F3HZF+Vlx64WIQPz+r/WGLhWaHcTKDTLajPVTFKFtWQodcIl84KjIvRVGFtbpx4PsZtLNdBotfQSX8KGCvZ9Sr58Ccq54A0u1Y6JWjC7B2uOowqd/xepXqNR0FFLHGIk5YYe0uNmX5uJA16yTJs/VNu5kqdWr0dvFXafmMk5M4JSioRk90ERRFhQXtUks4HR49sRCA18r7Tk4xANDC3ePO+XJ1CnH4v49076N4DckKIcf7V23wFW3veS1mwMWPauhlk+xndnyNENl1N+d6cx1hAy5G+AlK2s35RKWdafQ3+f049qk6zDwXiU7h+7CpQEXxP1iK/EZzZDVuSAjRvhqzUTtUR+sAheVNGgIUbjXmgeu/3o2kTcNhOaMS6PT9Z1ogSzDap8DDl9ihE6sSPYAnexdhrtSr9aPGixD9MX4YaQQ2ovW5+gvao0=", + "0xD27a0b270FBB5b090C5bBdD98e439EA992605436":"RVRScwACAACSAMUC0Y8NgrSrmQwHk4kjLqjEkyQg6A7OiGWDTuZH7U6LkApsw+cBJQTtI+TKJaWl1rOHGGfwoUEf7qJyBiNSRc/mGqMGX9C4Ufgbd+O7ld6P8zxbcFJKoirVyeXMZGz9jfMFsSBzjmSuZbtepPmcVcgOcouJaofNi6VfwwMJtjueMfM8M3f7W/cWZIPH+OXQFTw+tVrP1Tu0S1rU+SvHDLfnRf9cqhyEAZrhONdLUQMDOMzf1ksI3hsZV8LtDq0b1Ov3rshoqQzVgyeSUGP6l+GYTqdeS0fRhuGY071oDjKNssYQ/14JiyJsUEbolg6gG7onbPTjuoz0lLSTYUV+9rWdh2nTcj8gwk/ywKmSXA3s0449II5hZkKd6HH+5jTUvMP/ak/aCk6UWPTezV1a1jfhBnmDbxTxG9Ejjhiaa2iH1Uk6eGJ2t/r5N2e5nQxnIJyx6VYVS3FNMDOPT2DJaTpJxK0lP5bpLo2u/kxZNZALgahayb1TXKXVqe0XJMjLDehPeL75/dcNXCjwKMIet9HCjav8iOvsZoGkZPnd6oAIXq/O3GMEUzn3jgVyETOk03TjtnyoYDK9whP2C7Xa07+a5LNx4YofjFGdAE9zmqTI7Am9sttj5uCeFobEldYgv6mWFAWSCbnW+vYqAldGNRamH8ZUw/je1wmndFjBo0KPFNFypB7Nlygxu2luhgqkqttq5z1tq+HG9IRASh8VyoRdSlCFnmHtWavac4J7sWIfpBfIGXeTj96PXL1MmehTvPAukv/qQ2F304OHdeC/HUUT64ukfufqQtTeZ/m64kDC/pDOkXiAiy8hPnU87+fWKpl8kOTufRx7Qo2EHenjaJF+bOV76uhFmICyY7jTSkS8W6O78M2MQcSCPCqF1tcxz9I98zgUsh7hkHFWTE1AHB6eq+x5s32k2K5wdomzObUHSymhH5clhgibDilhULnSnTw8MYk=", + "0xAbbAcAdaBA000000000000000000000000000007":"RVRScwACAACSAMUC0b9T7D+3J8vVFlHo1bbeGyZnrh50uRri0h4oO9XkFC3fCveLQM9F5vS/4BBEh3bk5S8MRszX1DMfHcDuOzMFw36bA3pd87pELVsd7IYwKsqyNb5JuMDskdShT5tQEaardEs8Hbwv2xFQeZpTdQxhAzZL/cOBrOTuq9JfB1LwvMEgGf/uvBRup2UxhYuYunNUB4gEiHHlbI1TO5AURJq7R2PKNV4dmggv8X3kUdvvK3hz0IaIBvswoZhXSu3wCzVvM9wJrq6vuVEnhvh3TbcaS6kM1Q8n2cmjc13eiG/OmkAWiAbXz7wLewVTV9nHP7qZvpqoy/hJiOsl5pZ1wls42DuH5YUu1Mp2pAofSvxLTl1xR+1y4gUhOUsoX+vnjEvb5ZftK4/720btc+T9giQ8gptnJKR6QKLMZOAaU17Q2cVKRHd4kAdF90/afQc2yVmjjmiC6zNKUaJJIBDO1J63C7afBMXxyh0tQ1n92w3YrUC27so/dlCUfqe4PL6HjGzOa/Y5El7T4tM0P+wEbGs14XM+cbMl7Ub58mFtTXR0nlOfFHtEDG+QnywTAXxXCw3jR1PiVZ6PWKtNIZeKMvVO8fXI6YFRuYNoHhtA9ogft2qo3/YD/QeCegrPI9brqbhXGrbavyaKV1qqUwPCOKLmfDIwvcucr7pKGc9vgrhiQp8lltAqslu8pa1DBG0pducVAYReH9WwD+dJEjmEh5LHLm/4ddR9KVXxn1bpGTkpw9Zp5hhBADzs2XCZmhGmSrb/H53u9mBIXxvaH9tBJeNSo3TTcds6bvVnoN70qYwe72UZVunZh2ThwldZLNuQLlbbDC5xF695eL6GuNgmdYQqVPq77BSfCGEXvFKbtd3ecNYmqNtsf+Yo8014SYKw5qBGSB12szH0w8MEXu5cel+4PcDApi/z2TXhgSzH+DIcLdHlBRIY2D/sIw98wlOW6gt/3lw=", + "0xaBBAcadabA000000000000000000000000000008":"RVRScwACAACSAMUC0Qqm6cDZHHBJgK86+MehwqBFWz4guKcJMFhX/RjrpwH7HR0Z0iLTjLxevluC5PnyuqDJFysvLsliulKIDYlWi5ryFxpYP533QQtLfoaAUXd9ypm/yzlg4VkRHpr6cRTBYxjlLYCpUsTqPNOnbm1YWT/UnIBtzPAoHDkZLXYX+yKbuMjsgs66gPfOheMIZAjcLyNby9kSqWBYxejDm0IyqJmh5JxHSnsmpCpQcexV0300KQ01fPHjuxo5C29IK7NzlVW9gSQtCm7jL1lEitvlKIghpsA7lRWZ1atDFT9AqbFBaHH42knhdSaYD10NmW6eL27L0Is69ydaihZnlv70DezQKEVJsXVQltwkFovfbJVWBWvuURhiOHavnJ9mqJ610VGxPNMiACnhvWK3L6zsdO/CuEdh070QtCMUH4zin5TYI/dbc9Zy1yBTzUhAE0xHRLI4H4Rs9w6Vw1vzE+VndCa5Ey0WVD6Bx+/0/CGkSc3j9/lbsxRMDswMjWIa2J7RhP5/FzwiBWTz7WSsOq/IT71m2578uKSsxQxzdqFgrqCW6Pm/5OMigN/e/R1SkyH2u8gJG7gwzkTJqsUQl54Y/GRk3LS3Wco+dSIr/EnwW5EwDZ2P0ADkRcdDjQjub7Ao0Ut40p/m2noiJKhK2+0JO7c0aMsKP7+xNS5Hc3m1nGpcz2AvM7s0HWRX54U3brKSZ6P66NcoHHxeP60B87ephPeSfyAkK9+m7l7xpahmJy7bJAv5vkAJcYtOcJvNO6Pk3S83qzYjKyKKf8MLZSP2REp/mqs98iIw6C2cNJSZ822zN+ifPY3WQ0yWpweEU1CSMMfgepuQCVAxxC08k5Xfx8SV4Shw1ZgDcgcKVv5vJmb1Pcfoe4fkr8805IXEY1pd/UHOJYAEK1HygQH0o1QtgHQxrGr1lCbUE3nGQZYwQj15n+Yo3sbhyHsmUp+bP5looDg=" + }, + "errors":{ + } + } + }, + "version":"1.0.0" + } + +.. note:: + + Only a threshold of responses are returned if the request is successful. + + + GET /get_ursulas **************** -Sample available Ursulas for a policy as part of Alice's ``grant`` workflow. Returns a list of Ursulas -and their associated information that is used for the policy. +Sample available TACo nodes (Ursulas). Returns a list of TACo node staking provider +and associated information. Parameters ^^^^^^^^^^ +----------------------------------+---------------+-----------------------------------------------+ | **Parameter** | **Type** | **Description** | +==================================+===============+===============================================+ -| ``quantity`` | Integer | Number of total Ursulas to return. | +| ``quantity`` | Integer | Number of total TACo nodes to return. | +----------------------------------+---------------+-----------------------------------------------+ | ``include_ursulas`` *(Optional)* | List[String] | | List of Ursula checksum addresses to | | | | | give preference to. If any of these Ursulas | @@ -477,12 +355,15 @@ Example Response } +PRE +*** + POST /retrieve_cfrags -********************* -Get data re-encrypted by the network as part of Bob's ``retrieve`` workflow. +^^^^^^^^^^^^^^^^^^^^^ +Get data proxy re-encrypted by TACo nodes (Ursulas). Parameters -^^^^^^^^^^ +++++++++++ +-------------------------------------------+---------------+----------------------------------------+ | **Parameter** | **Type** | **Description** | +===========================================+===============+========================================+ @@ -504,7 +385,7 @@ Parameters +-------------------------------------------+---------------+----------------------------------------+ - * A single *retrieval kit* is an encapsulation of the information necessary to obtain cfrags from Ursulas. + * A single *retrieval kit* is an encapsulation of the information necessary to obtain cfrags from TACo nodes. It contains a capsule and the checksum addresses of the Ursulas from which the requester has already received cfrags, i.e. the Ursulas in the treasure map to skip. @@ -532,7 +413,7 @@ Parameters Returns -^^^^^^^ ++++++++ The result of the re-encryption operations performed: * ``retrieval_results`` - The list of results from the re-encryption operations performed; contains a mapping of @@ -541,7 +422,7 @@ The result of the re-encryption operations performed: *retrieval kit*, the corresponding list of cfrags could be empty or less than the expected threshold. Example Request -^^^^^^^^^^^^^^^ ++++++++++++++++ .. code:: bash curl -X POST /retrieve_cfrags \ @@ -555,7 +436,7 @@ Example Request Example Response -^^^^^^^^^^^^^^^^ +++++++++++++++++ .. code:: Status: 200 OK diff --git a/porter/main.py b/porter/main.py index aaaa725..883f932 100644 --- a/porter/main.py +++ b/porter/main.py @@ -284,6 +284,7 @@ def retrieve_cfrags() -> Response: response = controller(method_name='retrieve_cfrags', control_request=request) return response + # TODO: do we want to rename this endpoint to not include "cbd"? @porter_flask_control.route("/cbd_decrypt", methods=["POST"]) def cbd_decrypt() -> Response: """Porter control endpoint for executing a CBD decryption request.""" diff --git a/porter_diagram.png b/porter_diagram.png index a6a360e..6e533ee 100644 Binary files a/porter_diagram.png and b/porter_diagram.png differ diff --git a/porter_diagram.svg b/porter_diagram.svg index 932f2ef..ae32667 100644 --- a/porter_diagram.svg +++ b/porter_diagram.svg @@ -1,23 +1,23 @@ + viewBox="0 0 1773.588 1194.0533" + height="336.9884mm" + width="500.54593mm" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="base" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:export-bgcolor="#ffffffff" /> @@ -306,15 +310,19 @@ image/svg+xml - + + - - - - - - - - - - - - - - - - - - - - - - - + style="font-size:27.5px;line-height:1.25;font-family:sans-serif;stroke-width:0.878906"> - + d="m -62.85881,479.83432 v 14.68506 h 2.526855 q 1.354981,0 1.922607,0.531 0.585938,0.5127 0.585938,1.35498 0,0.82398 -0.585938,1.35499 -0.567626,0.51269 -1.922607,0.51269 h -8.789062 q -1.354981,0 -1.940918,-0.51269 -0.567627,-0.53101 -0.567627,-1.3733 0,-0.82397 0.567627,-1.33667 0.585937,-0.531 1.940918,-0.531 h 2.508544 v -14.68506 h -4.064941 v 3.55225 q 0,1.35498 -0.531006,1.94091 -0.512695,0.56763 -1.35498,0.56763 -0.823975,0 -1.354981,-0.56763 -0.512695,-0.58593 -0.512695,-1.94091 v -7.32422 l 19.445801,0.0183 v 7.30591 q 0,1.35498 -0.531006,1.94091 -0.512695,0.56763 -1.354981,0.56763 -0.823974,0 -1.35498,-0.56763 -0.512695,-0.58593 -0.512695,-1.94091 v -3.55225 z m 25.268554,12.39624 h -9.118652 l -0.915527,2.28882 h 0.915527 q 1.35498,0 1.922607,0.531 0.585938,0.5127 0.585938,1.35498 0,0.82398 -0.585938,1.35499 -0.567627,0.51269 -1.922607,0.51269 h -5.053711 q -1.35498,0 -1.922607,-0.51269 -0.585938,-0.53101 -0.585938,-1.3733 0,-0.84228 0.604248,-1.37329 0.604248,-0.531 1.99585,-0.49438 l 5.895996,-14.68506 h -2.453613 q -1.354981,0 -1.940918,-0.5127 -0.567627,-0.531 -0.567627,-1.37329 0,-0.84228 0.567627,-1.35498 0.585937,-0.531 1.940918,-0.531 l 8.111572,0.0183 7.470703,18.43872 q 1.318359,0 1.739502,0.29297 0.842285,0.60425 0.842285,1.59301 0,0.82398 -0.567627,1.35499 -0.567627,0.51269 -1.922607,0.51269 h -5.053711 q -1.354981,0 -1.940918,-0.51269 -0.567627,-0.53101 -0.567627,-1.3733 0,-0.82397 0.567627,-1.33667 0.585937,-0.531 1.940918,-0.531 h 0.915527 z m -1.556396,-3.75366 -3.02124,-7.43408 -3.039551,7.43408 z m 25.360107,-11.44409 q 0.347901,-0.47608 0.750733,-0.71411 0.421142,-0.23804 0.897216,-0.23804 0.823975,0 1.33667,0.56762 0.531006,0.56763 0.531006,1.92261 v 3.18604 q 0,1.35498 -0.531006,1.94092 -0.512695,0.56762 -1.33667,0.56762 -0.750732,0 -1.208496,-0.42114 -0.457763,-0.42114 -0.67749,-1.57471 -0.128174,-0.76904 -0.512695,-1.19018 -0.750733,-0.82398 -2.105713,-1.31836 -1.33667,-0.49439 -2.691651,-0.49439 -1.68457,0 -3.094482,0.73242 -1.409912,0.73243 -2.490234,2.38038 -1.080323,1.64795 -1.080323,3.91845 v 2.43531 q 0,2.70996 1.959229,4.5227 1.977539,1.81275 5.474853,1.81275 2.087403,0 3.533936,-0.56763 0.842285,-0.32959 1.794434,-1.30005 0.585937,-0.58594 0.915527,-0.75073 0.32959,-0.18311 0.750732,-0.18311 0.750733,0 1.31836,0.56763 0.5676267,0.56763 0.5676267,1.33667 0,0.76904 -0.7690427,1.64795 -1.116944,1.28174 -2.874756,2.01416 -2.362061,0.98877 -5.218506,0.98877 -3.33252,0 -6.005859,-1.37329 -2.160645,-1.09864 -3.68042,-3.4607 -1.519776,-2.38037 -1.519776,-5.18188 v -2.54517 q 0,-2.92969 1.354981,-5.45654 1.373291,-2.54517 3.790283,-3.91846 2.416992,-1.37329 5.126953,-1.37329 1.629639,0 3.039551,0.38452 1.428223,0.36621 2.655029,1.13526 z m 26.367188,13.23852 q 0,2.16065 -1.208496,4.19312 -1.190186,2.01416 -3.570557,3.22265 -2.3620606,1.19019 -4.9438477,1.19019 -2.56347655,0 -4.9072266,-1.17188 -2.34375,-1.19018 -3.5705566,-3.22265 -1.2268066,-2.03247 -1.2268066,-4.24805 0,-2.2522 1.2451172,-4.41284 1.2451171,-2.17896 3.5705566,-3.42407 2.34374999,-1.24512 4.888916,-1.24512 2.5634766,0 4.9255371,1.28174 2.3803716,1.26343 3.5888676,3.42407 1.208496,2.14233 1.208496,4.41284 z m -3.7536624,0.0183 q 0,-1.81274 -1.3000488,-3.33252 -1.7761231,-2.05078 -4.6691895,-2.05078 -2.54516601,0 -4.2480469,1.62964 -1.7028808,1.62964 -1.7028808,3.77197 0,1.75782 1.7211914,3.2959 1.72119139,1.51978 4.2297363,1.51978 2.5268555,0 4.2480469,-1.51978 1.7211914,-1.53808 1.7211914,-3.31421 z m 48.7609864,-0.0183 q 0,2.16065 -1.208496,4.19312 -1.190186,2.01416 -3.570557,3.22265 -2.36206,1.19019 -4.943847,1.19019 -2.563477,0 -4.907227,-1.17188 -2.34375,-1.19018 -3.570557,-3.22265 -1.226806,-2.03247 -1.226806,-4.24805 0,-2.2522 1.245117,-4.41284 1.245117,-2.17896 3.570557,-3.42407 2.34375,-1.24512 4.888916,-1.24512 2.563476,0 4.925537,1.28174 2.380371,1.26343 3.588867,3.42407 1.208496,2.14233 1.208496,4.41284 z m -3.753662,0.0183 q 0,-1.81274 -1.300049,-3.33252 -1.776123,-2.05078 -4.669189,-2.05078 -2.545166,0 -4.248047,1.62964 -1.702881,1.62964 -1.702881,3.77197 0,1.75782 1.721191,3.2959 1.721192,1.51978 4.229737,1.51978 2.526855,0 4.248046,-1.51978 1.721192,-1.53808 1.721192,-3.31421 z m 11.846924,5.91431 v 6.15234 h 2.252197 q 1.35498,0 1.922607,0.5127 0.585938,0.531 0.585938,1.37329 0,0.82397 -0.585938,1.33667 -0.567627,0.531 -1.922607,0.531 h -6.646729 q -1.35498,0 -1.940918,-0.531 -0.567627,-0.5127 -0.567627,-1.33667 0,-0.84229 0.585938,-1.37329 0.585937,-0.5127 1.922607,-0.5127 h 0.64087 v -16.95556 h -0.64087 q -1.35498,0 -1.940918,-0.5127 -0.567627,-0.531 -0.567627,-1.37329 0,-0.82397 0.567627,-1.33667 0.585938,-0.53101 1.940918,-0.53101 h 4.394532 v 1.28174 q 1.318359,-0.89721 2.728271,-1.33667 1.409912,-0.43945 2.893067,-0.43945 3.845214,0 6.555175,2.61841 2.709961,2.6001 2.709961,5.96924 0,3.71704 -3.204345,6.13403 -2.67334,2.01416 -6.02417,2.01416 -1.446534,0 -2.856446,-0.42114 -1.409912,-0.42115 -2.801513,-1.26343 z m 11.132812,-6.44531 q 0,-0.78736 -0.622558,-1.99585 -0.622559,-1.22681 -1.922608,-2.03247 -1.281738,-0.82398 -3.02124,-0.82398 -2.801514,0 -4.449463,2.10571 -1.116943,1.44654 -1.116943,2.78321 0,1.50146 1.593017,2.92969 1.611328,1.40991 3.973389,1.40991 2.380371,0 3.973389,-1.40991 1.593017,-1.40992 1.593017,-2.96631 z m 25.451659,2.10571 H 86.866531 q 0.585938,1.46484 2.069092,2.36206 1.501465,0.89722 4.046631,0.89722 2.087402,0 5.548096,-0.89722 1.428222,-0.36621 1.97754,-0.36621 0.75073,0 1.26343,0.531 0.51269,0.53101 0.51269,1.33667 0,0.73243 -0.54931,1.24512 -0.73243,0.67749 -3.570561,1.30005 -2.838135,0.60425 -5.456543,0.60425 -4.504395,0 -7.214356,-2.54517 -2.69165,-2.54516 -2.69165,-6.2622 0,-3.95508 2.911377,-6.42701 2.929687,-2.49023 6.738281,-2.49023 2.288819,0 4.193115,0.80566 1.922608,0.80567 2.856446,1.73951 1.318361,1.35498 2.178951,3.35083 0.58594,1.3916 0.58594,3.22265 z m -4.156493,-3.75366 q -0.860596,-1.61133 -2.252197,-2.39868 -1.391602,-0.80567 -3.314209,-0.80567 -1.904297,0 -3.295899,0.80567 -1.391601,0.78735 -2.270507,2.39868 z m 16.461183,-6.46363 v 2.34375 q 2.36206,-1.70288 3.71704,-2.2705 1.37329,-0.56763 2.56348,-0.56763 1.83105,0 3.55224,1.35498 1.17188,0.91553 1.17188,1.86768 0,0.80566 -0.56763,1.37329 -0.54932,0.54931 -1.33667,0.54931 -0.6958,0 -1.46484,-0.6958 -0.76905,-0.6958 -1.37329,-0.6958 -0.78736,0 -2.36206,0.98877 -1.5564,0.98877 -3.90015,2.96631 v 5.65796 h 5.34668 q 1.35498,0 1.92261,0.531 0.58593,0.5127 0.58593,1.35498 0,0.82398 -0.58593,1.35499 -0.56763,0.51269 -1.92261,0.51269 h -11.33423 q -1.35498,0 -1.94092,-0.51269 -0.56762,-0.53101 -0.56762,-1.3733 0,-0.82397 0.56762,-1.33667 0.58594,-0.531 1.94092,-0.531 h 2.23389 v -9.11865 h -1.35498 q -1.35498,0 -1.94092,-0.5127 -0.56763,-0.531 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58594,-0.53101 1.94092,-0.53101 z m 26.66016,16.62598 v -0.87891 q -1.40992,0.75074 -3.1128,1.11695 -1.70288,0.38452 -3.09448,0.38452 -3.02124,0 -4.90723,-1.59302 -1.88598,-1.61133 -1.88598,-3.55224 0,-2.36206 2.39868,-4.37623 2.41699,-2.03247 6.66504,-2.03247 1.70288,0 3.93677,0.36622 v -0.89722 q 0,-0.84229 -0.73243,-1.37329 -0.71411,-0.53101 -2.74658,-0.53101 -1.66626,0 -4.32129,0.65918 -0.98877,0.23804 -1.53808,0.23804 -0.75074,0 -1.28174,-0.53101 -0.5127,-0.54931 -0.5127,-1.3916 0,-0.47607 0.18311,-0.82397 0.1831,-0.3479 0.51269,-0.54932 0.32959,-0.21973 1.37329,-0.5127 1.39161,-0.38452 2.83814,-0.60424 1.44653,-0.23804 2.61841,-0.23804 3.49731,0 5.41992,1.51977 1.94092,1.50147 1.94092,4.11988 v 7.72705 h 0.64087 q 1.35498,0 1.9226,0.531 0.58594,0.5127 0.58594,1.35498 0,0.82398 -0.58594,1.35499 -0.56762,0.51269 -1.9226,0.51269 z m 0,-6.71997 q -2.2522,-0.43945 -4.1565,-0.43945 -2.28882,0 -3.93677,1.11694 -1.02539,0.71411 -1.02539,1.44653 0,0.53101 0.49439,0.8606 0.91552,0.60425 2.50854,0.60425 1.35498,0 3.05786,-0.53101 1.7212,-0.531 3.05787,-1.44653 z m 18.20068,-6.15234 v 7.52563 q 0,1.2085 0.49438,1.59302 0.76905,0.60425 2.74659,0.60425 2.87475,0 5.31005,-1.22681 0.93384,-0.47607 1.46485,-0.47607 0.73242,0 1.26343,0.54931 0.54931,0.54932 0.54931,1.33667 0,0.73242 -0.58594,1.26343 -0.89721,0.8606 -3.55224,1.59302 -2.63672,0.71411 -4.44946,0.71411 -3.49732,0 -5.25513,-1.50147 -1.7395,-1.51977 -1.7395,-3.71704 v -8.25805 h -1.35498 q -1.35498,0 -1.94092,-0.5127 -0.56763,-0.531 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58594,-0.53101 1.94092,-0.53101 h 1.35498 v -3.38745 q 0,-1.35498 0.51269,-1.9226 0.53101,-0.58594 1.37329,-0.58594 0.82398,0 1.33667,0.58594 0.53101,0.56762 0.53101,1.9226 v 3.38745 h 6.9397 q 1.35498,0 1.9226,0.53101 0.58594,0.5127 0.58594,1.35498 0,0.82398 -0.58594,1.35498 -0.56762,0.5127 -1.9226,0.5127 z m 24.77417,-10.87647 v 3.97339 h -4.46777 v -3.97339 z m 0.51269,7.1228 v 12.87232 h 4.5044 q 1.35498,0 1.92261,0.531 0.58593,0.5127 0.58593,1.35498 0,0.82398 -0.58593,1.35499 -0.56763,0.51269 -1.92261,0.51269 h -12.76245 q -1.35498,0 -1.94092,-0.51269 -0.56763,-0.53101 -0.56763,-1.3733 0,-0.82397 0.56763,-1.33667 0.58594,-0.531 1.94092,-0.531 h 4.50439 v -9.11865 h -3.02124 q -1.33667,0 -1.92261,-0.5127 -0.58593,-0.531 -0.58593,-1.37329 0,-0.82397 0.56762,-1.33667 0.58594,-0.53101 1.94092,-0.53101 z m 30.39551,8.62427 q 0,2.16065 -1.20849,4.19312 -1.19019,2.01416 -3.57056,3.22265 -2.36206,1.19019 -4.94385,1.19019 -2.56348,0 -4.90723,-1.17188 -2.34375,-1.19018 -3.57055,-3.22265 -1.22681,-2.03247 -1.22681,-4.24805 0,-2.2522 1.24512,-4.41284 1.24512,-2.17896 3.57056,-3.42407 2.34375,-1.24512 4.88891,-1.24512 2.56348,0 4.92554,1.28174 2.38037,1.26343 3.58887,3.42407 1.20849,2.14233 1.20849,4.41284 z m -3.75366,0.0183 q 0,-1.81274 -1.30005,-3.33252 -1.77612,-2.05078 -4.66919,-2.05078 -2.54516,0 -4.24805,1.62964 -1.70288,1.62964 -1.70288,3.77197 0,1.75782 1.72119,3.2959 1.7212,1.51978 4.22974,1.51978 2.52686,0 4.24805,-1.51978 1.72119,-1.53808 1.72119,-3.31421 z m 12.70752,-8.64258 v 1.26343 q 1.02539,-0.8789 2.2522,-1.31836 1.24511,-0.43945 2.69165,-0.43945 3.33252,0 5.27343,2.06909 1.53809,1.64795 1.53809,4.32129 v 6.97632 q 1.19019,0 1.75781,0.531 0.56763,0.5127 0.56763,1.35498 0,0.82398 -0.58594,1.35499 -0.56762,0.51269 -1.92261,0.51269 h -3.38745 q -1.35498,0 -1.94091,-0.51269 -0.56763,-0.53101 -0.56763,-1.3733 0,-0.82397 0.56763,-1.33667 0.56762,-0.531 1.75781,-0.531 v -7.08618 q 0,-1.22681 -0.65918,-1.79444 -0.8606,-0.73242 -2.58179,-0.73242 -1.30005,0 -2.28882,0.5127 -0.97046,0.49438 -2.47192,2.12402 v 6.97632 q 1.44653,0 1.86767,0.27466 0.89722,0.54931 0.89722,1.61132 0,0.82398 -0.58594,1.35499 -0.56762,0.51269 -1.9226,0.51269 h -4.26636 q -1.35498,0 -1.94092,-0.51269 -0.56763,-0.53101 -0.56763,-1.3733 0,-1.02539 0.87891,-1.59301 0.43945,-0.27466 1.88599,-0.27466 v -9.11865 q -1.19019,0 -1.75782,-0.53101 -0.56762,-0.53101 -0.56762,-1.35498 0,-0.82397 0.56762,-1.33667 0.58594,-0.53101 1.94092,-0.53101 z" + id="text1" + style="font-weight:bold;font-size:37.5px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New, Bold';fill:#4d4d4d;stroke-width:0.9375" + aria-label="TACo operation" /> + d="m -29.414623,758.49292 v 14.68506 h 2.526855 q 1.354981,0 1.922608,0.531 0.585937,0.5127 0.585937,1.35498 0,0.82398 -0.585937,1.35499 -0.567627,0.51269 -1.922608,0.51269 h -8.789062 q -1.354981,0 -1.940918,-0.51269 -0.567627,-0.53101 -0.567627,-1.3733 0,-0.82397 0.567627,-1.33667 0.585937,-0.531 1.940918,-0.531 h 2.508545 v -14.68506 h -4.064942 v 3.55225 q 0,1.35498 -0.531006,1.94091 -0.512695,0.56763 -1.35498,0.56763 -0.823975,0 -1.354981,-0.56763 -0.512695,-0.58593 -0.512695,-1.94091 v -7.32422 l 19.445801,0.0183 v 7.30591 q 0,1.35498 -0.531006,1.94091 -0.512695,0.56763 -1.35498,0.56763 -0.823975,0 -1.354981,-0.56763 -0.512695,-0.58593 -0.512695,-1.94091 v -3.55225 z m 25.2685544,12.39624 h -9.1186524 l -0.915527,2.28882 h 0.915527 q 1.354981,0 1.922608,0.531 0.585937,0.5127 0.585937,1.35498 0,0.82398 -0.585937,1.35499 -0.567627,0.51269 -1.922608,0.51269 h -5.053711 q -1.35498,0 -1.922607,-0.51269 -0.585938,-0.53101 -0.585938,-1.3733 0,-0.84228 0.604248,-1.37329 0.604248,-0.531 1.99585,-0.49438 l 5.895996,-14.68506 h -2.453613 q -1.354981,0 -1.940918,-0.5127 -0.567627,-0.531 -0.567627,-1.37329 0,-0.84228 0.567627,-1.35498 0.585937,-0.531 1.940918,-0.531 l 8.111572,0.0183 7.47070308,18.43872 q 1.31835942,0 1.73950192,0.29297 0.8422852,0.60425 0.8422852,1.59301 0,0.82398 -0.567627,1.35499 -0.5676269,0.51269 -1.92260738,0.51269 H -4.1643791 q -1.3549805,0 -1.940918,-0.51269 -0.5676269,-0.53101 -0.5676269,-1.3733 0,-0.82397 0.5676269,-1.33667 0.5859375,-0.531 1.940918,-0.531 h 0.9155273 z m -1.5563965,-3.75366 -3.0212402,-7.43408 -3.0395507,7.43408 z M 19.657642,755.69141 q 0.347901,-0.47608 0.750733,-0.71412 0.421142,-0.23803 0.897217,-0.23803 0.823974,0 1.33667,0.56762 0.531005,0.56763 0.531005,1.92261 v 3.18604 q 0,1.35498 -0.531005,1.94092 -0.512696,0.56762 -1.33667,0.56762 -0.750733,0 -1.208497,-0.42114 -0.457763,-0.42114 -0.67749,-1.57471 -0.128174,-0.76904 -0.512695,-1.19018 -0.750732,-0.82398 -2.105713,-1.31836 -1.33667,-0.49439 -2.69165,-0.49439 -1.684571,0 -3.094483,0.73242 -1.4099119,0.73243 -2.4902341,2.38038 -1.0803223,1.64795 -1.0803223,3.91845 v 2.43531 q 0,2.70996 1.9592285,4.5227 1.9775389,1.81274 5.4748539,1.81274 2.087402,0 3.533935,-0.56762 0.842285,-0.32959 1.794434,-1.30005 0.585937,-0.58594 0.915527,-0.75073 0.32959,-0.18311 0.750733,-0.18311 0.750732,0 1.318359,0.56763 0.567627,0.56763 0.567627,1.33667 0,0.76904 -0.769043,1.64795 -1.116943,1.28174 -2.874756,2.01416 -2.362061,0.98877 -5.218506,0.98877 -3.332519,0 -6.0058592,-1.37329 -2.1606445,-1.09864 -3.6804199,-3.4607 -1.5197754,-2.38037 -1.5197754,-5.18188 v -2.54517 q 0,-2.92969 1.3549805,-5.45654 1.373291,-2.54517 3.7902832,-3.91846 2.4169918,-1.37329 5.1269528,-1.37329 1.629639,0 3.039551,0.38452 1.428223,0.36621 2.655029,1.13526 z m 26.367188,13.23852 q 0,2.16065 -1.208496,4.19312 -1.190186,2.01416 -3.570557,3.22265 -2.36206,1.19019 -4.943848,1.19019 -2.563476,0 -4.907226,-1.17188 -2.34375,-1.19018 -3.570557,-3.22265 -1.226806,-2.03247 -1.226806,-4.24805 0,-2.2522 1.245117,-4.41284 1.245117,-2.17896 3.570556,-3.42407 2.34375,-1.24512 4.888916,-1.24512 2.563477,0 4.925538,1.28174 2.380371,1.26343 3.588867,3.42407 1.208496,2.14233 1.208496,4.41284 z m -3.753662,0.0183 q 0,-1.81274 -1.300049,-3.33252 -1.776123,-2.05078 -4.66919,-2.05078 -2.545166,0 -4.248046,1.62964 -1.702881,1.62964 -1.702881,3.77197 0,1.75782 1.721191,3.2959 1.721192,1.51978 4.229736,1.51978 2.526856,0 4.248047,-1.51978 1.721192,-1.53808 1.721192,-3.31421 z m 38.232422,-8.64258 v 2.34375 q 2.36206,-1.70288 3.717041,-2.2705 1.373291,-0.56763 2.563476,-0.56763 1.831055,0 3.552246,1.35498 1.171875,0.91553 1.171875,1.86768 0,0.80566 -0.567627,1.37329 -0.549316,0.54931 -1.33667,0.54931 -0.6958,0 -1.464843,-0.6958 -0.769043,-0.6958 -1.373291,-0.6958 -0.787354,0 -2.362061,0.98877 -1.556396,0.98877 -3.900146,2.96631 v 5.65796 h 5.346679 q 1.354981,0 1.922608,0.531 0.585937,0.5127 0.585937,1.35498 0,0.82398 -0.585937,1.35499 -0.567627,0.51269 -1.922608,0.51269 H 74.516041 q -1.354981,0 -1.940918,-0.51269 -0.567627,-0.53101 -0.567627,-1.3733 0,-0.82397 0.567627,-1.33667 0.585937,-0.531 1.940918,-0.531 h 2.233887 v -9.11865 h -1.354981 q -1.35498,0 -1.940918,-0.5127 -0.567627,-0.53101 -0.567627,-1.37329 0,-0.82397 0.567627,-1.33667 0.585938,-0.53101 1.940918,-0.53101 z m 32.70264,10.21729 H 97.807056 q 0.585938,1.46484 2.069092,2.36206 1.501462,0.89722 4.046632,0.89722 2.0874,0 5.54809,-0.89722 1.42823,-0.36621 1.97754,-0.36621 0.75074,0 1.26343,0.531 0.5127,0.53101 0.5127,1.33667 0,0.73243 -0.54932,1.24512 -0.73242,0.67749 -3.57056,1.30005 -2.83813,0.60425 -5.45654,0.60425 -4.504394,0 -7.214355,-2.54517 -2.69165,-2.54516 -2.69165,-6.2622 0,-3.95508 2.911377,-6.42701 2.929687,-2.49023 6.738278,-2.49023 2.28882,0 4.19312,0.80566 1.92261,0.80567 2.85644,1.73951 1.31836,1.35498 2.17896,3.35083 0.58594,1.3916 0.58594,3.22265 z m -4.1565,-3.75366 q -0.86059,-1.61133 -2.2522,-2.39868 -1.3916,-0.80567 -3.3142,-0.80567 -1.9043,0 -3.2959,0.80567 -1.391604,0.78735 -2.27051,2.39868 z m 21.29517,-2.06909 q -0.91553,-0.56763 -1.92261,-0.84229 -1.00708,-0.29297 -2.10571,-0.29297 -2.17896,0 -3.4607,0.71411 -0.56762,0.31128 -0.56762,0.67749 0,0.42115 0.76904,0.82398 0.58594,0.29297 2.61841,0.56762 3.73535,0.5127 5.20019,1.0254 1.92261,0.67749 2.96631,2.01416 1.0437,1.33667 1.0437,2.81982 0,2.01416 -1.77612,3.36914 -2.54517,1.95923 -6.61011,1.95923 -1.62964,0 -3.02124,-0.29297 -1.37329,-0.27466 -2.52685,-0.82397 -0.27466,0.23803 -0.58594,0.36621 -0.31128,0.12817 -0.64087,0.12817 -0.87891,0 -1.40991,-0.56763 -0.5127,-0.58593 -0.5127,-1.94091 v -1.26343 q 0,-1.35498 0.5127,-1.92261 0.531,-0.58594 1.37329,-0.58594 0.67749,0 1.13525,0.38452 0.45777,0.36621 0.71412,1.28174 0.86059,0.73242 2.06909,1.11695 1.20849,0.36621 2.7832,0.36621 2.58179,0 4.01001,-0.80567 0.67749,-0.40283 0.67749,-0.84228 0,-0.73242 -0.97046,-1.2085 -0.97046,-0.47607 -4.01001,-0.80566 -4.5227,-0.47608 -6.04248,-1.83106 -1.51977,-1.33667 -1.51977,-3.2959 0,-2.01416 1.70288,-3.35083 2.30713,-1.83105 6.04248,-1.83105 1.30005,0 2.49023,0.25635 1.2085,0.23803 2.30713,0.75073 0.3479,-0.25635 0.64087,-0.38452 0.31128,-0.12818 0.56763,-0.12818 0.76904,0 1.28173,0.58594 0.5127,0.56763 0.5127,1.92261 v 0.91553 q 0,1.2268 -0.29297,1.66626 -0.58594,0.84228 -1.59302,0.84228 -0.67749,0 -1.19018,-0.42114 -0.5127,-0.42114 -0.65918,-1.11694 z m 26.42212,-4.39454 v 12.87232 q 1.19018,0 1.75781,0.531 0.56763,0.53101 0.56763,1.35498 0,0.82398 -0.58594,1.35499 -0.56763,0.51269 -1.92261,0.51269 h -3.57055 v -0.8606 q -1.61133,0.73243 -3.07618,1.09864 -1.46484,0.36621 -2.7832,0.36621 -1.84936,0 -3.20435,-0.76904 -1.35498,-0.78736 -2.14233,-2.16065 -0.56763,-0.98877 -0.56763,-2.47192 v -8.07495 h -0.64087 q -1.35498,0 -1.94091,-0.5127 -0.56763,-0.53101 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58593,-0.53101 1.94091,-0.53101 h 4.39454 v 11.16944 q 0,1.19018 0.56762,1.75781 0.58594,0.54932 1.77613,0.54932 1.13525,0 2.4353,-0.43946 1.31836,-0.45776 3.24097,-1.62964 v -7.6538 h -1.35499 q -1.35498,0 -1.94091,-0.5127 -0.56763,-0.53101 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58593,-0.53101 1.94091,-0.53101 z m 16.40625,-7.1228 v 19.99512 h 4.50439 q 1.35498,0 1.92261,0.531 0.58594,0.5127 0.58594,1.35498 0,0.82398 -0.58594,1.35499 -0.56763,0.51269 -1.92261,0.51269 h -12.76245 q -1.35498,0 -1.94092,-0.51269 -0.56762,-0.53101 -0.56762,-1.3733 0,-0.82397 0.56762,-1.33667 0.58594,-0.531 1.94092,-0.531 h 4.5044 v -16.24146 h -3.02124 q -1.33667,0 -1.92261,-0.51269 -0.58594,-0.53101 -0.58594,-1.37329 0,-0.82398 0.56763,-1.33667 0.58593,-0.53101 1.94092,-0.53101 z m 19.70215,10.87647 v 7.52563 q 0,1.2085 0.49438,1.59302 0.76904,0.60425 2.74658,0.60425 2.87476,0 5.31006,-1.22681 0.93384,-0.47607 1.46484,-0.47607 0.73243,0 1.26343,0.54931 0.54932,0.54932 0.54932,1.33667 0,0.73242 -0.58594,1.26343 -0.89722,0.8606 -3.55224,1.59302 -2.63672,0.71411 -4.44947,0.71411 -3.49731,0 -5.25512,-1.50147 -1.73951,-1.51977 -1.73951,-3.71704 v -8.25805 h -1.35498 q -1.35498,0 -1.94091,-0.5127 -0.56763,-0.53101 -0.56763,-1.37329 0,-0.82397 0.56763,-1.33667 0.58593,-0.53101 1.94091,-0.53101 h 1.35498 v -3.38745 q 0,-1.35498 0.5127,-1.9226 0.531,-0.58594 1.37329,-0.58594 0.82397,0 1.33667,0.58594 0.53101,0.56762 0.53101,1.9226 v 3.38745 h 6.93969 q 1.35498,0 1.92261,0.53101 0.58594,0.5127 0.58594,1.35498 0,0.82397 -0.58594,1.35498 -0.56763,0.5127 -1.92261,0.5127 z" + id="text1-2" + style="font-weight:bold;font-size:37.5px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New, Bold';fill:#4d4d4d;stroke-width:0.9375" + aria-label="TACo result" />