From 1d222b803664264b0500280d6bdbb3671e415983 Mon Sep 17 00:00:00 2001 From: Ian Oliver Date: Mon, 29 May 2023 16:43:06 +0300 Subject: [PATCH] First upload of GA10 --- README | 96 ++++++++ ga10/Makefile | 22 ++ ga10/README | 85 +++++++ ga10/a10.service | 14 ++ ga10/config.yaml | 33 +++ ga10/configuration/configuration.go | 84 +++++++ ga10/datalayer/count.go | 23 ++ ga10/datalayer/initialisation.go | 9 + ga10/datalayer/internaldbs.go | 12 + ga10/datalayer/mongo.go | 40 ++++ ga10/datalayer/mqtt.go | 46 ++++ ga10/ga10.go | 105 +++++++++ ga10/go.mod | 36 +++ ga10/go.sum | 128 +++++++++++ .../restapi/endpointOpaqueObjects.go | 106 +++++++++ .../restapi/endpointsAttestVerify.go | 118 ++++++++++ ga10/interfaces/restapi/endpointsClaims.go | 102 +++++++++ ga10/interfaces/restapi/endpointsElements.go | 156 +++++++++++++ .../restapi/endpointsExpectedValues.go | 215 ++++++++++++++++++ ga10/interfaces/restapi/endpointsHealth.go | 96 ++++++++ ga10/interfaces/restapi/endpointsLog.go | 41 ++++ ga10/interfaces/restapi/endpointsPolicies.go | 154 +++++++++++++ ga10/interfaces/restapi/endpointsProtocols.go | 52 +++++ ga10/interfaces/restapi/endpointsResults.go | 102 +++++++++ ga10/interfaces/restapi/endpointsRules.go | 48 ++++ ga10/interfaces/restapi/endpointsSession.go | 150 ++++++++++++ ga10/interfaces/restapi/initrestapi.go | 143 ++++++++++++ ga10/interfaces/webui/attest.go | 109 +++++++++ ga10/interfaces/webui/claims.go | 24 ++ ga10/interfaces/webui/elements.go | 38 ++++ ga10/interfaces/webui/expectedvalues.go | 47 ++++ ga10/interfaces/webui/homepages.go | 76 +++++++ ga10/interfaces/webui/initwebapi.go | 192 ++++++++++++++++ ga10/interfaces/webui/log.go | 35 +++ ga10/interfaces/webui/opaqueobjects.go | 22 ++ ga10/interfaces/webui/policies.go | 20 ++ ga10/interfaces/webui/protocols.go | 17 ++ ga10/interfaces/webui/results.go | 65 ++++++ ga10/interfaces/webui/rules.go | 17 ++ ga10/interfaces/webui/sessions.go | 128 +++++++++++ ga10/interfaces/webui/templatefunctions.go | 37 +++ ga10/interfaces/webui/templates/about.html | 47 ++++ ga10/interfaces/webui/templates/attest.html | 88 +++++++ .../webui/templates/attestsummary.html | 48 ++++ ga10/interfaces/webui/templates/base.html | 75 ++++++ ga10/interfaces/webui/templates/claim.html | 73 ++++++ .../webui/templates/claim_ERROR.html | 5 + .../interfaces/webui/templates/claim_ima.html | 19 ++ ga10/interfaces/webui/templates/claims.html | 31 +++ .../webui/templates/editelement.html | 96 ++++++++ ga10/interfaces/webui/templates/element.html | 63 +++++ ga10/interfaces/webui/templates/elements.html | 20 ++ .../webui/templates/elementsummarylist.html | 11 + ga10/interfaces/webui/templates/ev.html | 27 +++ ga10/interfaces/webui/templates/evs.html | 27 +++ .../webui/templates/evsummarylist.html | 9 + .../webui/templates/genericList.html | 11 + ga10/interfaces/webui/templates/help.html | 7 + ga10/interfaces/webui/templates/home.html | 157 +++++++++++++ ga10/interfaces/webui/templates/ima.html | 10 + ga10/interfaces/webui/templates/log.html | 51 +++++ .../webui/templates/opaqueobject.html | 21 ++ .../webui/templates/opaqueobjects.html | 22 ++ ga10/interfaces/webui/templates/policies.html | 18 ++ ga10/interfaces/webui/templates/policy.html | 24 ++ .../webui/templates/policysummarylist.html | 7 + .../interfaces/webui/templates/protocols.html | 24 ++ ga10/interfaces/webui/templates/result.html | 51 +++++ ga10/interfaces/webui/templates/results.html | 37 +++ .../webui/templates/resultvalue.html | 24 ++ ga10/interfaces/webui/templates/rules.html | 28 +++ ga10/interfaces/webui/templates/scraps | 45 ++++ ga10/interfaces/webui/templates/session.html | 175 ++++++++++++++ ga10/interfaces/webui/templates/sessions.html | 31 +++ ga10/interfaces/webui/templates/tpm2.html | 14 ++ ga10/interfaces/webui/templates/tpm2key.html | 11 + ga10/interfaces/webui/templates/txt.html | 9 + ga10/interfaces/webui/templates/uefi.html | 10 + ga10/logging/logging.go | 74 ++++++ ga10/operations/attestation.go | 98 ++++++++ ga10/operations/claims.go | 97 ++++++++ ga10/operations/elements.go | 122 ++++++++++ ga10/operations/expectedValues.go | 170 ++++++++++++++ ga10/operations/log.go | 28 +++ ga10/operations/opaqueobjects.go | 77 +++++++ ga10/operations/operrors.go | 16 ++ ga10/operations/policies.go | 122 ++++++++++ ga10/operations/protocols.go | 35 +++ ga10/operations/results.go | 90 ++++++++ ga10/operations/rules.go | 44 ++++ ga10/operations/sessions.go | 196 ++++++++++++++++ ga10/operations/signingFunctions.go | 79 +++++++ ga10/operations/verification.go | 137 +++++++++++ ga10/otherconfigfiles/local.yaml | 32 +++ ga10/otherconfigfiles/nconfig.yaml | 32 +++ ga10/protocols/a10httprestv2/public.go | 131 +++++++++++ ga10/protocols/nullprotocol/public.go | 41 ++++ ga10/protocols/registerProtocols.go | 16 ++ ga10/rules/nullrule/public.go | 57 +++++ ga10/rules/registerRules.go | 25 ++ ga10/rules/tpm2rules/public.go | 106 +++++++++ ga10/structures/claims.go | 31 +++ ga10/structures/common.go | 5 + ga10/structures/elements.go | 46 ++++ ga10/structures/expectedValues.go | 13 ++ ga10/structures/logs.go | 14 ++ ga10/structures/opaqueobjects.go | 8 + ga10/structures/policies.go | 10 + ga10/structures/protocols.go | 16 ++ ga10/structures/results.go | 35 +++ ga10/structures/rules.go | 16 ++ ga10/structures/sessions.go | 32 +++ ga10/structures/types.go | 3 + ga10/temporary.crt | 24 ++ ga10/temporary.key | 28 +++ ga10/tests/exampledatabase/elements.json | 2 + .../tests/exampledatabase/expectedvalues.json | 2 + ga10/tests/exampledatabase/policies.json | 6 + ga10/tests/pkcs11test/go.mod | 5 + ga10/tests/pkcs11test/go.sum | 2 + ga10/tests/pkcs11test/p.go | 25 ++ ga10/tests/pkcs11test/yubihsm_pkcs1.conf | 4 + ga10/tests/testscripts/attest.sh | 22 ++ ga10/tests/testscripts/get.sh | 21 ++ ga10/tests/testscripts/verify_laptop.sh | 91 ++++++++ ga10/tests/testscripts/verify_pi.sh | 74 ++++++ ga10/utilities/hashes.go | 33 +++ ga10/utilities/identifiers.go | 9 + ga10/utilities/timestamps.go | 15 ++ ta10 | 1 + README.md => v0.11.0python_final/README.md | 0 .../a10rest}/Dockerfile.local | 0 .../a10rest}/README.md | 0 .../a10rest}/a10rest.conf | 0 .../a10rest}/a10rest.py | 0 .../a10rest}/blueprints/dbimportexport.py | 0 .../a10rest}/blueprints/v2.py | 0 .../a10rest}/requirements.txt | 0 .../a10server}/.pypirc_2 | 0 .../a10server}/README.md | 0 .../a10server}/a10/__init__.py | 0 .../a10server}/a10/asvr/__init__.py | 0 .../a10server}/a10/asvr/analytics/__init__.py | 0 .../a10/asvr/analytics/elementanalytics.py | 0 .../a10server}/a10/asvr/attestation.py | 0 .../a10server}/a10/asvr/claims.py | 0 .../a10server}/a10/asvr/db/__init__.py | 0 .../a10server}/a10/asvr/db/announce.py | 0 .../a10server}/a10/asvr/db/configuration.py | 0 .../a10server}/a10/asvr/db/core.py | 0 .../a10server}/a10/asvr/db/log.py | 0 .../a10server}/a10/asvr/db/mqtt.py | 0 .../a10server}/a10/asvr/elements.py | 0 .../a10server}/a10/asvr/expectedvalues.py | 0 .../a10server}/a10/asvr/hashes.py | 0 .../a10server}/a10/asvr/logread.py | 0 .../a10server}/a10/asvr/pcrschemas.py | 0 .../a10server}/a10/asvr/policies.py | 0 .../a10/asvr/protocols/A10ArduinoUSB.py | 0 .../a10/asvr/protocols/A10ContainerImage.py | 0 .../a10/asvr/protocols/A10DummyProtocol.py | 0 .../a10/asvr/protocols/A10HttpRest.py | 0 .../a10/asvr/protocols/A10Keylime.py | 0 .../a10/asvr/protocols/A10ProtocolBase.py | 0 .../a10/asvr/protocols/A10tpm2send.py | 0 .../a10server}/a10/asvr/protocols/Lannion.py | 0 .../a10server}/a10/asvr/protocols/__init__.py | 0 .../a10/asvr/protocols/protocol_dispatcher.py | 0 .../a10server}/a10/asvr/results.py | 0 .../a10server}/a10/asvr/rules/__init__.py | 0 .../a10server}/a10/asvr/rules/baserule.py | 0 .../a10server}/a10/asvr/rules/inteltxt.py | 0 .../a10server}/a10/asvr/rules/nullrules.py | 0 .../asvr/rules/oldrules/arduinoa10rules.py | 0 .../a10/asvr/rules/oldrules/claimrules.py | 0 .../a10/asvr/rules/oldrules/container.py | 0 .../a10/asvr/rules/oldrules/image_rules.py | 0 .../a10/asvr/rules/oldrules/testquote.py | 0 .../asvr/rules/oldrules/tpm2rules_original.py | 0 .../a10/asvr/rules/rule_dispatcher.py | 0 .../a10server}/a10/asvr/rules/tpm2rules.py | 0 .../a10server}/a10/asvr/rules/uefi.py | 0 .../a10server}/a10/asvr/sessions.py | 0 .../a10server}/a10/asvr/types.py | 0 .../a10server}/build/lib/a10/__init__.py | 0 .../a10server}/build/lib/a10/asvr/__init__.py | 0 .../build/lib/a10/asvr/analytics/__init__.py | 0 .../a10/asvr/analytics/elementanalytics.py | 0 .../build/lib/a10/asvr/attestation.py | 0 .../a10server}/build/lib/a10/asvr/claims.py | 0 .../build/lib/a10/asvr/db/__init__.py | 0 .../build/lib/a10/asvr/db/announce.py | 0 .../build/lib/a10/asvr/db/configuration.py | 0 .../a10server}/build/lib/a10/asvr/db/core.py | 0 .../a10server}/build/lib/a10/asvr/db/log.py | 0 .../a10server}/build/lib/a10/asvr/db/mqtt.py | 0 .../a10server}/build/lib/a10/asvr/elements.py | 0 .../build/lib/a10/asvr/expectedvalues.py | 0 .../a10server}/build/lib/a10/asvr/hashes.py | 0 .../a10server}/build/lib/a10/asvr/logread.py | 0 .../build/lib/a10/asvr/pcrschemas.py | 0 .../a10server}/build/lib/a10/asvr/policies.py | 0 .../lib/a10/asvr/protocols/A10ArduinoUSB.py | 0 .../a10/asvr/protocols/A10ContainerImage.py | 0 .../a10/asvr/protocols/A10DummyProtocol.py | 0 .../lib/a10/asvr/protocols/A10HttpRest.py | 0 .../lib/a10/asvr/protocols/A10Keylime.py | 0 .../lib/a10/asvr/protocols/A10ProtocolBase.py | 0 .../lib/a10/asvr/protocols/A10tpm2send.py | 0 .../build/lib/a10/asvr/protocols/Lannion.py | 0 .../build/lib/a10/asvr/protocols/__init__.py | 0 .../a10/asvr/protocols/protocol_dispatcher.py | 0 .../a10server}/build/lib/a10/asvr/results.py | 0 .../build/lib/a10/asvr/rules/__init__.py | 0 .../build/lib/a10/asvr/rules/baserule.py | 0 .../build/lib/a10/asvr/rules/inteltxt.py | 0 .../build/lib/a10/asvr/rules/nullrules.py | 0 .../lib/a10/asvr/rules/rule_dispatcher.py | 0 .../build/lib/a10/asvr/rules/tpm2rules.py | 0 .../build/lib/a10/asvr/rules/uefi.py | 0 .../a10server}/build/lib/a10/asvr/sessions.py | 0 .../a10server}/build/lib/a10/asvr/types.py | 0 .../a10server}/doc/Makefile | 0 .../build/doctrees/a10.asvr.analytics.doctree | Bin ...10.asvr.analytics.elementanalytics.doctree | Bin .../doctrees/a10.asvr.attestation.doctree | Bin .../build/doctrees/a10.asvr.claims.doctree | Bin .../doctrees/a10.asvr.db.announce.doctree | Bin .../a10.asvr.db.configuration.doctree | Bin .../build/doctrees/a10.asvr.db.core.doctree | Bin .../doc/build/doctrees/a10.asvr.db.doctree | Bin .../build/doctrees/a10.asvr.db.log.doctree | Bin .../build/doctrees/a10.asvr.db.mqtt.doctree | Bin .../doc/build/doctrees/a10.asvr.doctree | Bin .../build/doctrees/a10.asvr.elements.doctree | Bin .../doctrees/a10.asvr.expectedvalues.doctree | Bin .../build/doctrees/a10.asvr.hashes.doctree | Bin .../build/doctrees/a10.asvr.policies.doctree | Bin .../a10.asvr.protocols.A10ArduinoUSB.doctree | Bin ...0.asvr.protocols.A10ContainerImage.doctree | Bin ...10.asvr.protocols.A10DummyProtocol.doctree | Bin .../a10.asvr.protocols.A10HttpRest.doctree | Bin ...a10.asvr.protocols.A10ProtocolBase.doctree | Bin .../build/doctrees/a10.asvr.protocols.doctree | Bin ...asvr.protocols.protocol_dispatcher.doctree | Bin .../build/doctrees/a10.asvr.results.doctree | Bin .../doctrees/a10.asvr.rules.baserule.doctree | Bin .../doc/build/doctrees/a10.asvr.rules.doctree | Bin .../doctrees/a10.asvr.rules.nullrules.doctree | Bin .../a10.asvr.rules.rule_dispatcher.doctree | Bin .../doctrees/a10.asvr.rules.tpm2rules.doctree | Bin .../doctrees/a10.asvr.rules.uefi.doctree | Bin .../a10server}/doc/build/doctrees/a10.doctree | Bin .../doctrees/a10.structures.claim.doctree | Bin .../doctrees/a10.structures.constants.doctree | Bin .../a10.structures.convenience.doctree | Bin .../doc/build/doctrees/a10.structures.doctree | Bin .../doctrees/a10.structures.identity.doctree | Bin .../doctrees/a10.structures.result.doctree | Bin .../a10.structures.returncode.doctree | Bin .../a10.structures.timestamps.doctree | Bin .../doc/build/doctrees/environment.pickle | Bin .../doc/build/doctrees/index.doctree | Bin .../doc/build/doctrees/modules.doctree | Bin .../a10server}/doc/build/html/.buildinfo | 0 ...10.asvr.analytics.elementanalytics.rst.txt | 0 .../html/_sources/a10.asvr.analytics.rst.txt | 0 .../_sources/a10.asvr.attestation.rst.txt | 0 .../html/_sources/a10.asvr.claims.rst.txt | 0 .../_sources/a10.asvr.db.announce.rst.txt | 0 .../a10.asvr.db.configuration.rst.txt | 0 .../html/_sources/a10.asvr.db.core.rst.txt | 0 .../html/_sources/a10.asvr.db.log.rst.txt | 0 .../html/_sources/a10.asvr.db.mqtt.rst.txt | 0 .../build/html/_sources/a10.asvr.db.rst.txt | 0 .../html/_sources/a10.asvr.elements.rst.txt | 0 .../_sources/a10.asvr.expectedvalues.rst.txt | 0 .../html/_sources/a10.asvr.hashes.rst.txt | 0 .../html/_sources/a10.asvr.policies.rst.txt | 0 .../a10.asvr.protocols.A10ArduinoUSB.rst.txt | 0 ...0.asvr.protocols.A10ContainerImage.rst.txt | 0 ...10.asvr.protocols.A10DummyProtocol.rst.txt | 0 .../a10.asvr.protocols.A10HttpRest.rst.txt | 0 ...a10.asvr.protocols.A10ProtocolBase.rst.txt | 0 ...asvr.protocols.protocol_dispatcher.rst.txt | 0 .../html/_sources/a10.asvr.protocols.rst.txt | 0 .../html/_sources/a10.asvr.results.rst.txt | 0 .../doc/build/html/_sources/a10.asvr.rst.txt | 0 .../_sources/a10.asvr.rules.baserule.rst.txt | 0 .../_sources/a10.asvr.rules.nullrules.rst.txt | 0 .../html/_sources/a10.asvr.rules.rst.txt | 0 .../a10.asvr.rules.rule_dispatcher.rst.txt | 0 .../_sources/a10.asvr.rules.tpm2rules.rst.txt | 0 .../html/_sources/a10.asvr.rules.uefi.rst.txt | 0 .../doc/build/html/_sources/a10.rst.txt | 0 .../_sources/a10.structures.claim.rst.txt | 0 .../_sources/a10.structures.constants.rst.txt | 0 .../a10.structures.convenience.rst.txt | 0 .../_sources/a10.structures.identity.rst.txt | 0 .../_sources/a10.structures.result.rst.txt | 0 .../a10.structures.returncode.rst.txt | 0 .../html/_sources/a10.structures.rst.txt | 0 .../a10.structures.timestamps.rst.txt | 0 .../doc/build/html/_sources/index.rst.txt | 0 .../doc/build/html/_sources/modules.rst.txt | 0 .../doc/build/html/_static/basic.css | 0 .../doc/build/html/_static/classic.css | 0 .../doc/build/html/_static/doctools.js | 0 .../html/_static/documentation_options.js | 0 .../doc/build/html/_static/file.png | Bin .../doc/build/html/_static/jquery.js | 0 .../doc/build/html/_static/language_data.js | 0 .../doc/build/html/_static/minus.png | Bin .../doc/build/html/_static/plus.png | Bin .../doc/build/html/_static/pygments.css | 0 .../doc/build/html/_static/searchtools.js | 0 .../doc/build/html/_static/sidebar.js | 0 .../doc/build/html/_static/underscore.js | 0 .../a10.asvr.analytics.elementanalytics.html | 0 .../doc/build/html/a10.asvr.analytics.html | 0 .../doc/build/html/a10.asvr.attestation.html | 0 .../doc/build/html/a10.asvr.claims.html | 0 .../doc/build/html/a10.asvr.db.announce.html | 0 .../build/html/a10.asvr.db.configuration.html | 0 .../doc/build/html/a10.asvr.db.core.html | 0 .../doc/build/html/a10.asvr.db.html | 0 .../doc/build/html/a10.asvr.db.log.html | 0 .../doc/build/html/a10.asvr.db.mqtt.html | 0 .../doc/build/html/a10.asvr.elements.html | 0 .../build/html/a10.asvr.expectedvalues.html | 0 .../doc/build/html/a10.asvr.hashes.html | 0 .../a10server}/doc/build/html/a10.asvr.html | 0 .../doc/build/html/a10.asvr.policies.html | 0 .../a10.asvr.protocols.A10ArduinoUSB.html | 0 .../a10.asvr.protocols.A10ContainerImage.html | 0 .../a10.asvr.protocols.A10DummyProtocol.html | 0 .../html/a10.asvr.protocols.A10HttpRest.html | 0 .../a10.asvr.protocols.A10ProtocolBase.html | 0 .../doc/build/html/a10.asvr.protocols.html | 0 ...10.asvr.protocols.protocol_dispatcher.html | 0 .../doc/build/html/a10.asvr.results.html | 0 .../build/html/a10.asvr.rules.baserule.html | 0 .../doc/build/html/a10.asvr.rules.html | 0 .../build/html/a10.asvr.rules.nullrules.html | 0 .../html/a10.asvr.rules.rule_dispatcher.html | 0 .../build/html/a10.asvr.rules.tpm2rules.html | 0 .../doc/build/html/a10.asvr.rules.uefi.html | 0 .../a10server}/doc/build/html/a10.html | 0 .../doc/build/html/a10.structures.claim.html | 0 .../build/html/a10.structures.constants.html | 0 .../html/a10.structures.convenience.html | 0 .../doc/build/html/a10.structures.html | 0 .../build/html/a10.structures.identity.html | 0 .../doc/build/html/a10.structures.result.html | 0 .../build/html/a10.structures.returncode.html | 0 .../build/html/a10.structures.timestamps.html | 0 .../a10server}/doc/build/html/genindex.html | 0 .../a10server}/doc/build/html/index.html | 0 .../a10server}/doc/build/html/modules.html | 0 .../a10server}/doc/build/html/objects.inv | Bin .../doc/build/html/py-modindex.html | 0 .../a10server}/doc/build/html/search.html | 0 .../a10server}/doc/build/html/searchindex.js | 0 .../a10.asvr.analytics.elementanalytics.rst | 0 .../doc/source/a10.asvr.analytics.rst | 0 .../doc/source/a10.asvr.attestation.rst | 0 .../a10server}/doc/source/a10.asvr.claims.rst | 0 .../doc/source/a10.asvr.db.announce.rst | 0 .../doc/source/a10.asvr.db.configuration.rst | 0 .../doc/source/a10.asvr.db.core.rst | 0 .../a10server}/doc/source/a10.asvr.db.log.rst | 0 .../doc/source/a10.asvr.db.mqtt.rst | 0 .../a10server}/doc/source/a10.asvr.db.rst | 0 .../doc/source/a10.asvr.elements.rst | 0 .../doc/source/a10.asvr.expectedvalues.rst | 0 .../a10server}/doc/source/a10.asvr.hashes.rst | 0 .../doc/source/a10.asvr.policies.rst | 0 .../a10.asvr.protocols.A10ArduinoUSB.rst | 0 .../a10.asvr.protocols.A10ContainerImage.rst | 0 .../a10.asvr.protocols.A10DummyProtocol.rst | 0 .../source/a10.asvr.protocols.A10HttpRest.rst | 0 .../a10.asvr.protocols.A10ProtocolBase.rst | 0 ...a10.asvr.protocols.protocol_dispatcher.rst | 0 .../doc/source/a10.asvr.protocols.rst | 0 .../doc/source/a10.asvr.results.rst | 0 .../a10server}/doc/source/a10.asvr.rst | 0 .../doc/source/a10.asvr.rules.baserule.rst | 0 .../doc/source/a10.asvr.rules.nullrules.rst | 0 .../a10server}/doc/source/a10.asvr.rules.rst | 0 .../source/a10.asvr.rules.rule_dispatcher.rst | 0 .../doc/source/a10.asvr.rules.tpm2rules.rst | 0 .../doc/source/a10.asvr.rules.uefi.rst | 0 .../a10server}/doc/source/a10.rst | 0 .../doc/source/a10.structures.claim.rst | 0 .../doc/source/a10.structures.constants.rst | 0 .../doc/source/a10.structures.convenience.rst | 0 .../doc/source/a10.structures.identity.rst | 0 .../doc/source/a10.structures.result.rst | 0 .../doc/source/a10.structures.returncode.rst | 0 .../a10server}/doc/source/a10.structures.rst | 0 .../doc/source/a10.structures.timestamps.rst | 0 .../a10server}/doc/source/conf.py | 0 .../a10server}/doc/source/index.rst | 0 .../a10server}/doc/source/modules.rst | 0 .../a10server}/reinstall | 0 .../a10server}/requirements.txt | 0 .../a10server}/setup.py | 0 .../a10structures}/.pypirc_2 | 0 .../a10structures}/README.md | 0 .../a10structures}/a10/__init__.py | 0 .../a10structures}/a10/structures/__init__.py | 0 .../a10structures}/a10/structures/claim.py | 0 .../a10/structures/constants.py | 0 .../a10/structures/convenience.py | 0 .../a10structures}/a10/structures/identity.py | 0 .../a10structures}/a10/structures/result.py | 0 .../a10/structures/returncode.py | 0 .../a10/structures/timestamps.py | 0 .../a10structures}/a10/utilities/__init__.py | 0 .../a10/utilities/tpmoperations.py | 0 .../a10structures}/build/lib/a10/__init__.py | 0 .../build/lib/a10/structures/__init__.py | 0 .../build/lib/a10/structures/claim.py | 0 .../build/lib/a10/structures/constants.py | 0 .../build/lib/a10/structures/convenience.py | 0 .../build/lib/a10/structures/identity.py | 0 .../build/lib/a10/structures/result.py | 0 .../build/lib/a10/structures/returncode.py | 0 .../build/lib/a10/structures/timestamps.py | 0 .../build/lib/a10/utilities/__init__.py | 0 .../build/lib/a10/utilities/tpmoperations.py | 0 .../a10structures}/doc/Makefile | 0 .../build/doctrees/a10.asvr.analytics.doctree | Bin ...10.asvr.analytics.elementanalytics.doctree | Bin .../doctrees/a10.asvr.attestation.doctree | Bin .../build/doctrees/a10.asvr.claims.doctree | Bin .../doctrees/a10.asvr.db.announce.doctree | Bin .../a10.asvr.db.configuration.doctree | Bin .../build/doctrees/a10.asvr.db.core.doctree | Bin .../doc/build/doctrees/a10.asvr.db.doctree | Bin .../build/doctrees/a10.asvr.db.log.doctree | Bin .../build/doctrees/a10.asvr.db.mqtt.doctree | Bin .../doc/build/doctrees/a10.asvr.doctree | Bin .../build/doctrees/a10.asvr.elements.doctree | Bin .../doctrees/a10.asvr.expectedvalues.doctree | Bin .../build/doctrees/a10.asvr.hashes.doctree | Bin .../build/doctrees/a10.asvr.policies.doctree | Bin .../a10.asvr.protocols.A10ArduinoUSB.doctree | Bin ...0.asvr.protocols.A10ContainerImage.doctree | Bin ...10.asvr.protocols.A10DummyProtocol.doctree | Bin .../a10.asvr.protocols.A10HttpRest.doctree | Bin ...a10.asvr.protocols.A10ProtocolBase.doctree | Bin .../build/doctrees/a10.asvr.protocols.doctree | Bin ...asvr.protocols.protocol_dispatcher.doctree | Bin .../build/doctrees/a10.asvr.results.doctree | Bin .../doctrees/a10.asvr.rules.baserule.doctree | Bin .../doc/build/doctrees/a10.asvr.rules.doctree | Bin .../doctrees/a10.asvr.rules.nullrules.doctree | Bin .../a10.asvr.rules.rule_dispatcher.doctree | Bin .../doctrees/a10.asvr.rules.tpm2rules.doctree | Bin .../doctrees/a10.asvr.rules.uefi.doctree | Bin .../doc/build/doctrees/a10.doctree | Bin .../doctrees/a10.structures.claim.doctree | Bin .../doctrees/a10.structures.constants.doctree | Bin .../a10.structures.convenience.doctree | Bin .../doc/build/doctrees/a10.structures.doctree | Bin .../doctrees/a10.structures.identity.doctree | Bin .../doctrees/a10.structures.result.doctree | Bin .../a10.structures.returncode.doctree | Bin .../a10.structures.timestamps.doctree | Bin .../doc/build/doctrees/environment.pickle | Bin .../doc/build/doctrees/index.doctree | Bin .../doc/build/doctrees/modules.doctree | Bin .../a10structures}/doc/build/html/.buildinfo | 0 ...10.asvr.analytics.elementanalytics.rst.txt | 0 .../html/_sources/a10.asvr.analytics.rst.txt | 0 .../_sources/a10.asvr.attestation.rst.txt | 0 .../html/_sources/a10.asvr.claims.rst.txt | 0 .../_sources/a10.asvr.db.announce.rst.txt | 0 .../a10.asvr.db.configuration.rst.txt | 0 .../html/_sources/a10.asvr.db.core.rst.txt | 0 .../html/_sources/a10.asvr.db.log.rst.txt | 0 .../html/_sources/a10.asvr.db.mqtt.rst.txt | 0 .../build/html/_sources/a10.asvr.db.rst.txt | 0 .../html/_sources/a10.asvr.elements.rst.txt | 0 .../_sources/a10.asvr.expectedvalues.rst.txt | 0 .../html/_sources/a10.asvr.hashes.rst.txt | 0 .../html/_sources/a10.asvr.policies.rst.txt | 0 .../a10.asvr.protocols.A10ArduinoUSB.rst.txt | 0 ...0.asvr.protocols.A10ContainerImage.rst.txt | 0 ...10.asvr.protocols.A10DummyProtocol.rst.txt | 0 .../a10.asvr.protocols.A10HttpRest.rst.txt | 0 ...a10.asvr.protocols.A10ProtocolBase.rst.txt | 0 ...asvr.protocols.protocol_dispatcher.rst.txt | 0 .../html/_sources/a10.asvr.protocols.rst.txt | 0 .../html/_sources/a10.asvr.results.rst.txt | 0 .../doc/build/html/_sources/a10.asvr.rst.txt | 0 .../_sources/a10.asvr.rules.baserule.rst.txt | 0 .../_sources/a10.asvr.rules.nullrules.rst.txt | 0 .../html/_sources/a10.asvr.rules.rst.txt | 0 .../a10.asvr.rules.rule_dispatcher.rst.txt | 0 .../_sources/a10.asvr.rules.tpm2rules.rst.txt | 0 .../html/_sources/a10.asvr.rules.uefi.rst.txt | 0 .../doc/build/html/_sources/a10.rst.txt | 0 .../_sources/a10.structures.claim.rst.txt | 0 .../_sources/a10.structures.constants.rst.txt | 0 .../a10.structures.convenience.rst.txt | 0 .../_sources/a10.structures.identity.rst.txt | 0 .../_sources/a10.structures.result.rst.txt | 0 .../a10.structures.returncode.rst.txt | 0 .../html/_sources/a10.structures.rst.txt | 0 .../a10.structures.timestamps.rst.txt | 0 .../doc/build/html/_sources/index.rst.txt | 0 .../doc/build/html/_sources/modules.rst.txt | 0 .../doc/build/html/_static/basic.css | 0 .../doc/build/html/_static/classic.css | 0 .../doc/build/html/_static/doctools.js | 0 .../html/_static/documentation_options.js | 0 .../doc/build/html/_static/file.png | Bin .../doc/build/html/_static/jquery.js | 0 .../doc/build/html/_static/language_data.js | 0 .../doc/build/html/_static/minus.png | Bin .../doc/build/html/_static/plus.png | Bin .../doc/build/html/_static/pygments.css | 0 .../doc/build/html/_static/searchtools.js | 0 .../doc/build/html/_static/sidebar.js | 0 .../doc/build/html/_static/underscore.js | 0 .../a10.asvr.analytics.elementanalytics.html | 0 .../doc/build/html/a10.asvr.analytics.html | 0 .../doc/build/html/a10.asvr.attestation.html | 0 .../doc/build/html/a10.asvr.claims.html | 0 .../doc/build/html/a10.asvr.db.announce.html | 0 .../build/html/a10.asvr.db.configuration.html | 0 .../doc/build/html/a10.asvr.db.core.html | 0 .../doc/build/html/a10.asvr.db.html | 0 .../doc/build/html/a10.asvr.db.log.html | 0 .../doc/build/html/a10.asvr.db.mqtt.html | 0 .../doc/build/html/a10.asvr.elements.html | 0 .../build/html/a10.asvr.expectedvalues.html | 0 .../doc/build/html/a10.asvr.hashes.html | 0 .../doc/build/html/a10.asvr.html | 0 .../doc/build/html/a10.asvr.policies.html | 0 .../a10.asvr.protocols.A10ArduinoUSB.html | 0 .../a10.asvr.protocols.A10ContainerImage.html | 0 .../a10.asvr.protocols.A10DummyProtocol.html | 0 .../html/a10.asvr.protocols.A10HttpRest.html | 0 .../a10.asvr.protocols.A10ProtocolBase.html | 0 .../doc/build/html/a10.asvr.protocols.html | 0 ...10.asvr.protocols.protocol_dispatcher.html | 0 .../doc/build/html/a10.asvr.results.html | 0 .../build/html/a10.asvr.rules.baserule.html | 0 .../doc/build/html/a10.asvr.rules.html | 0 .../build/html/a10.asvr.rules.nullrules.html | 0 .../html/a10.asvr.rules.rule_dispatcher.html | 0 .../build/html/a10.asvr.rules.tpm2rules.html | 0 .../doc/build/html/a10.asvr.rules.uefi.html | 0 .../a10structures}/doc/build/html/a10.html | 0 .../doc/build/html/a10.structures.claim.html | 0 .../build/html/a10.structures.constants.html | 0 .../html/a10.structures.convenience.html | 0 .../doc/build/html/a10.structures.html | 0 .../build/html/a10.structures.identity.html | 0 .../doc/build/html/a10.structures.result.html | 0 .../build/html/a10.structures.returncode.html | 0 .../build/html/a10.structures.timestamps.html | 0 .../doc/build/html/genindex.html | 0 .../a10structures}/doc/build/html/index.html | 0 .../doc/build/html/modules.html | 0 .../a10structures}/doc/build/html/objects.inv | Bin .../doc/build/html/py-modindex.html | 0 .../a10structures}/doc/build/html/search.html | 0 .../doc/build/html/searchindex.js | 0 .../a10.asvr.analytics.elementanalytics.rst | 0 .../doc/source/a10.asvr.analytics.rst | 0 .../doc/source/a10.asvr.attestation.rst | 0 .../doc/source/a10.asvr.claims.rst | 0 .../doc/source/a10.asvr.db.announce.rst | 0 .../doc/source/a10.asvr.db.configuration.rst | 0 .../doc/source/a10.asvr.db.core.rst | 0 .../doc/source/a10.asvr.db.log.rst | 0 .../doc/source/a10.asvr.db.mqtt.rst | 0 .../a10structures}/doc/source/a10.asvr.db.rst | 0 .../doc/source/a10.asvr.elements.rst | 0 .../doc/source/a10.asvr.expectedvalues.rst | 0 .../doc/source/a10.asvr.hashes.rst | 0 .../doc/source/a10.asvr.policies.rst | 0 .../a10.asvr.protocols.A10ArduinoUSB.rst | 0 .../a10.asvr.protocols.A10ContainerImage.rst | 0 .../a10.asvr.protocols.A10DummyProtocol.rst | 0 .../source/a10.asvr.protocols.A10HttpRest.rst | 0 .../a10.asvr.protocols.A10ProtocolBase.rst | 0 ...a10.asvr.protocols.protocol_dispatcher.rst | 0 .../doc/source/a10.asvr.protocols.rst | 0 .../doc/source/a10.asvr.results.rst | 0 .../a10structures}/doc/source/a10.asvr.rst | 0 .../doc/source/a10.asvr.rules.baserule.rst | 0 .../doc/source/a10.asvr.rules.nullrules.rst | 0 .../doc/source/a10.asvr.rules.rst | 0 .../source/a10.asvr.rules.rule_dispatcher.rst | 0 .../doc/source/a10.asvr.rules.tpm2rules.rst | 0 .../doc/source/a10.asvr.rules.uefi.rst | 0 .../a10structures}/doc/source/a10.rst | 0 .../doc/source/a10.structures.claim.rst | 0 .../doc/source/a10.structures.constants.rst | 0 .../doc/source/a10.structures.convenience.rst | 0 .../doc/source/a10.structures.identity.rst | 0 .../doc/source/a10.structures.result.rst | 0 .../doc/source/a10.structures.returncode.rst | 0 .../doc/source/a10.structures.rst | 0 .../doc/source/a10.structures.timestamps.rst | 0 .../a10structures}/doc/source/conf.py | 0 .../a10structures}/doc/source/index.rst | 0 .../a10structures}/doc/source/modules.rst | 0 .../a10structures}/reinstall | 0 .../a10structures}/requirements.txt | 0 .../a10structures}/setup.py | 0 {apps => v0.11.0python_final/apps}/README.md | 0 .../apps}/asmqttviewer/' | 0 .../apps}/asmqttviewer/Dockerfile | 0 .../apps}/asmqttviewer/README.md | 0 .../apps}/asmqttviewer/a10.conf | 0 .../apps}/asmqttviewer/asmqttviewer.py | 0 .../apps}/asmqttviewer/requirements.txt | 0 .../apps}/attdsl2/README.md | 0 .../apps}/attdsl2/att_language.lark | 0 .../apps}/attdsl2/attall.py | 0 .../apps}/attdsl2/attgrammar.py | 0 .../apps}/attdsl2/attlanguage.py | 0 .../apps}/attdsl2/attreport.py | 0 .../apps}/attdsl2/eva_language.lark | 0 .../apps}/attdsl2/examplescripts/a.att | 0 .../apps}/attdsl2/examplescripts/a.eva | 0 .../apps}/attdsl2/examplescripts/a2.att | 0 .../apps}/attdsl2/examplescripts/a2.eva | 0 .../apps}/attdsl2/examplescripts/a3.eva | 0 .../apps}/attdsl2/examplescripts/a4.eva | 0 .../apps}/attdsl2/examplescripts/example.att | 0 .../apps}/attdsl2/examplescripts/iot.att | 0 .../apps}/attdsl2/examplescripts/iot.eva | 0 .../apps}/attdsl2/examplescripts/new.eva | 0 .../apps}/attdsl2/examplescripts/pis.att | 0 .../apps}/attdsl2/examplescripts/q.eva | 0 .../apps}/attdsl2/examplescripts/roosa.att | 0 .../apps}/attdsl2/examplescripts/roosa.eva | 0 .../apps}/attdsl2/report.txt | 0 .../apps}/d10/README.md | 0 .../apps}/d10/att_language.lark | 0 .../apps}/d10/attall.py | 0 .../apps}/d10/attgrammar.py | 0 .../apps}/d10/attlanguage.py | 0 .../apps}/d10/attreport.py | 0 .../apps}/d10/d10.conf | 0 {apps => v0.11.0python_final/apps}/d10/d10.py | 0 .../apps}/d10/d10api.py | 0 .../apps}/d10/d10conf.py | 0 .../apps}/d10/d10db.py | 0 .../apps}/d10/d10flask.conf | 0 .../apps}/d10/eva_language.lark | 0 .../apps}/d10/examples/a.att | 0 .../apps}/d10/examples/a.eva | 0 .../apps}/d10/examples/a2.att | 0 .../apps}/d10/examples/a2.eva | 0 .../apps}/d10/examples/a3.eva | 0 .../apps}/d10/examples/a4.eva | 0 .../apps}/d10/examples/example.att | 0 .../apps}/d10/examples/iot.att | 0 .../apps}/d10/examples/iot.eva | 0 .../apps}/d10/examples/new.eva | 0 .../apps}/d10/examples/pis.att | 0 .../apps}/d10/examples/q.eva | 0 .../apps}/d10/examples/roosa.att | 0 .../apps}/d10/examples/roosa.eva | 0 .../apps}/d10/examples/upload.py | 0 .../apps}/d10/report.txt | 0 .../apps}/d10/rest.py | 0 .../apps}/d10/templates/404.html | 0 .../apps}/d10/templates/base.html | 0 .../apps}/d10/templates/home.html | 0 .../apps}/d10/templates/list.html | 0 {apps => v0.11.0python_final/apps}/d10/ui.py | 0 .../apps}/d10/yamlversions/att.yaml | 0 .../apps}/d10/yamlversions/eva.yaml | 0 .../apps}/d10/yamlversions/p.py | 0 .../apps}/enroller/README.md | 0 .../apps}/enroller/client/Dockerfile.local | 0 .../enroller/client/Dockerfile.provision | 0 .../enroller/client/Dockerfile.updateelement | 0 .../client/constructTPM2JSONobject.py | 0 .../apps}/enroller/client/enrol.json | 0 .../apps}/enroller/client/enrol.py | 0 .../apps}/enroller/client/enrolupdate.py | 0 .../client/exampleEnrollDocument.json | 0 .../apps}/enroller/client/provision | 0 .../apps}/enroller/client/updateelement | 0 .../enroller/minimalclient/provisionMinimal | 0 .../apps}/enroller/server/Dockerfile.local | 0 .../apps}/enroller/server/eapp.conf | 0 .../apps}/enroller/server/penrollserver.py | 0 .../apps}/enroller/server/requirements.txt | 0 .../apps}/enroller/server/tenrollserver.py | 0 .../apps}/mobileattester/.gitignore | 0 .../apps}/mobileattester/README.md | 0 .../apps}/mobileattester/app/.gitignore | 0 .../apps}/mobileattester/app/build.gradle | 0 .../mobileattester/app/proguard-rules.pro | 0 .../mobileattester/ExampleInstrumentedTest.kt | 0 .../app/src/main/AndroidManifest.xml | 0 .../example/mobileattester/MainActivity.kt | 0 .../data/location/LocationHandler.kt | 0 .../mobileattester/data/model/Claim.kt | 0 .../mobileattester/data/model/Element.kt | 0 .../data/model/ElementResult.kt | 0 .../data/model/ExpectedValue.kt | 0 .../mobileattester/data/model/Policy.kt | 0 .../example/mobileattester/data/model/Rule.kt | 0 .../example/mobileattester/data/model/Spec.kt | 0 .../data/network/AttestationDataHandler.kt | 0 .../data/network/AttestationDataService.kt | 0 .../data/network/DataServiceValues.kt | 0 .../mobileattester/data/network/Networking.kt | 0 .../data/repository/AttestationRepo.kt | 0 .../mobileattester/data/util/AttestUtil.kt | 0 .../mobileattester/data/util/DataHandlers.kt | 0 .../mobileattester/data/util/EngineUtil.kt | 0 .../data/util/LocationEditor.kt | 0 .../mobileattester/data/util/MapManager.kt | 0 .../data/util/OverviewProvider.kt | 0 .../mobileattester/data/util/UpdateUtil.kt | 0 .../data/util/abs/AsyncRunner.kt | 0 .../data/util/abs/BatchedDataHandler.kt | 0 .../data/util/abs/Filterable.kt | 0 .../mobileattester/data/util/abs/OLD.kt | 0 .../com/example/mobileattester/di/Injector.kt | 0 .../ui/components/ElementInfoWindow.kt | 0 .../mobileattester/ui/components/SearchBar.kt | 0 .../mobileattester/ui/components/Tag.kt | 0 .../ui/components/anim/Animation.kt | 0 .../ui/components/common/Async.kt | 0 .../ui/components/common/Buttons.kt | 0 .../ui/components/common/Center.kt | 0 .../ui/components/common/Headers.kt | 0 .../ui/components/common/Selectors.kt | 0 .../ui/components/common/Text.kt | 0 .../example/mobileattester/ui/pages/Attest.kt | 0 .../example/mobileattester/ui/pages/Claim.kt | 0 .../mobileattester/ui/pages/Element.kt | 0 .../mobileattester/ui/pages/Elements.kt | 0 .../example/mobileattester/ui/pages/Home.kt | 0 .../example/mobileattester/ui/pages/Maps.kt | 0 .../example/mobileattester/ui/pages/More.kt | 0 .../example/mobileattester/ui/pages/Policy.kt | 0 .../example/mobileattester/ui/pages/Result.kt | 0 .../mobileattester/ui/pages/Scanner.kt | 0 .../example/mobileattester/ui/theme/Color.kt | 0 .../mobileattester/ui/theme/Elevation.kt | 0 .../example/mobileattester/ui/theme/Shape.kt | 0 .../example/mobileattester/ui/theme/Theme.kt | 0 .../example/mobileattester/ui/theme/Type.kt | 0 .../example/mobileattester/ui/util/Date.kt | 0 .../mobileattester/ui/util/Extensions.kt | 0 .../mobileattester/ui/util/FilterBuilder.kt | 0 .../mobileattester/ui/util/Navigation.kt | 0 .../example/mobileattester/ui/util/Parsing.kt | 0 .../mobileattester/ui/util/Permissions.kt | 0 .../mobileattester/ui/util/Preferences.kt | 0 .../com/example/mobileattester/ui/util/Ui.kt | 0 .../ui/viewmodel/AttestationViewModel.kt | 0 .../ic_baseline_location_on_32_green.xml | 0 .../ic_baseline_location_on_32_red.xml | 0 .../drawable-v24/ic_launcher_foreground.xml | 0 .../drawable/ic_baseline_arrow_back_24.xml | 0 .../res/drawable/ic_baseline_circle_32.xml | 0 .../drawable/ic_baseline_location_on_32.xml | 0 .../main/res/drawable/ic_baseline_server.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../app/src/main/res/drawable/layout_bg.xml | 0 .../res/layout/layout_element_info_window.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../app/src/main/res/values-night/themes.xml | 0 .../app/src/main/res/values/colors.xml | 0 .../app/src/main/res/values/strings.xml | 0 .../app/src/main/res/values/themes.xml | 0 .../example/mobileattester/ExampleUnitTest.kt | 0 .../mobileattester/ui/util/ParsingKtTest.kt | 0 .../apps}/mobileattester/build.gradle | 0 .../apps}/mobileattester/gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../apps}/mobileattester/gradlew | 0 .../apps}/mobileattester/gradlew.bat | 0 .../media/Screenshot_1639475937.png | Bin .../media/Screenshot_1639476478.png | Bin .../media/Screenshot_1639476558.png | Bin .../media/Screenshot_1639476952.png | Bin .../apps}/mobileattester/settings.gradle | 0 .../securesensormanagementsystem/.gitignore | 0 .../securesensormanagementsystem/README.md | 0 .../documentation/.DS_Store | Bin .../documentation/README.md | 0 .../documentation/STRUCTURE.md | 0 .../documentation/pics/.DS_Store | Bin .../pics/IoTElementInheritance.JPG | Bin .../pics/aggregator_sequence_diagram.png | Bin .../documentation/pics/device_flow.drawio.png | Bin .../pics/system_sequence_diagram.JPG | Bin .../SensorManagementLibrary/BasicSensor.py | 0 .../SensorManagementLibrary/Device.py | 0 .../SensorManagementLibrary/IoTElement.py | 0 .../SensorManagementLibrary/README.md | 0 .../SensorManagementLibrary/__init__.py | 0 .../apps/Aggregator/aggregation.py | 0 .../apps/Aggregator/aggregation_config.json | 0 .../apps/ManagementAttestor/Manager.py | 0 .../apps/ManagementAttestor/attestor.py | 0 .../ManagementAttestor/manager_config.json | 0 .../apps/sensors/ExampleSensor/RngSensor.py | 0 .../iot.sensors.rng_sensor.service | 0 .../sensors/ExampleSensor/sensor_config.json | 0 .../apps/sensors/IRSensor/IRSensor.py | 0 .../IRSensor/iot.sensors.ir_sensor.service | 0 .../apps/sensors/IRSensor/sensor_config.json | 0 .../apps/sensors/LuxSensor/LuxSensor.py | 0 .../LuxSensor/iot.sensors.lux_sensor.service | 0 .../apps/sensors/LuxSensor/sensor_config.json | 0 .../apps/sensors/TGHPASensor/TGHPASensor.py | 0 .../iot.sensors.TGHPA_sensor.service | 0 .../sensors/TGHPASensor/sensor_config.json | 0 .../apps/sensors/TOFSensor/TofSensor.py | 0 .../TOFSensor/iot.sensors.TOF_sensor.service | 0 .../apps/sensors/TOFSensor/sensor_config.json | 0 .../sensors/TempHumSensor/TempHumSensor.py | 0 .../iot.sensors.temp_hum_sensor.service | 0 .../sensors/TempHumSensor/sensor_config.json | 0 .../apps/sensors/Webcam/sensor_config.json | 0 .../apps/sensors/Webcam/server.py | 0 .../install/install.py | 0 .../install/service_files/iot.devices.service | 0 .../pyproject.toml | 0 .../secure_sensor_management_system/setup.cfg | 0 .../website/UI/css/index.css | 0 .../website/UI/index.html | 0 .../website/UI/scripts/index.js | 0 .../website/package-lock.json | 0 .../website/package.json | 0 .../website/public/css/index.css | 0 .../website/public/js/index.js | 0 .../website/server/server.js | 0 .../website/server/server_config.json | 0 .../website/views/index.pug | 0 .../docs}/STARTHERE.md | 0 .../docs}/docker/docker.md | 0 .../docs}/docker/dockercompose.md | 0 .../docs}/quickstart/installation.md | 0 .../docs}/quickstart/nut10running.png | Bin .../docs}/quickstart/u10running.png | Bin {fc10 => v0.11.0python_final/fc10}/.gitignore | 0 .../fc10}/Dockerfile.local | 0 {fc10 => v0.11.0python_final/fc10}/README.md | 0 .../fc10}/analysisFunction.py | 0 .../fc10}/elementDifferences.py | 0 {fc10 => v0.11.0python_final/fc10}/fc.conf | 0 {fc10 => v0.11.0python_final/fc10}/fc.py | 0 .../fc10}/fcanalytics.py | 0 {fc10 => v0.11.0python_final/fc10}/fcrules.py | 0 .../fc10}/forensicsDocument.py | 0 .../fc10}/forensicsStructures.py | 0 .../fc10}/forensics_capture.py | 0 .../fc10}/pcrDifferences.py | 0 .../fc10}/quoteDifferences.py | 0 .../fc10}/static/css/style.css | 0 .../fc10}/systeminfoDifferences.py | 0 .../fc10}/templates/base.html | 0 .../fc10}/templates/errorpage.html | 0 .../fc10}/templates/ftl.html | 0 .../fc10}/templates/home.html | 0 .../fc10}/templates/listelements.html | 0 {fc10 => v0.11.0python_final/fc10}/testurls | 0 .../t10}/A10HTTPTPMSENDSTATIC/Dockerfile | 0 .../t10}/A10HTTPTPMSENDSTATIC/Makefile | 0 .../A10HTTPTPMSENDSTATIC/tpm2-send.tar.xz | Bin .../t10}/A10HTTPTPMSENDSTATIC/tpm2_send.c | 0 .../A10HTTPTPMSENDSTATIC/tpm2_send_server.py | 0 .../t10}/A10httprest/Dockerfile | 0 .../t10}/A10httprest/claims/claimstructure.py | 0 .../t10}/A10httprest/endpoints/notpm/notpm.py | 0 .../endpoints/notpm/notpm_endpoint.py | 0 .../endpoints/pifake/pifake_endpoint.py | 0 .../endpoints/status/status_endpoint.py | 0 .../A10httprest/endpoints/test/testquote.py | 0 .../endpoints/tpm2/tpm2_endpoint.py | 0 .../endpoints/uefi/uefi_endpoint.py | 0 .../t10}/A10httprest/ta.conf | 0 .../t10}/A10httprest/ta.py | 0 {t10 => v0.11.0python_final/t10}/README.md | 0 {t10 => v0.11.0python_final/t10}/genakek.sh | 0 {t10 => v0.11.0python_final/t10}/go/ta.go | 0 .../t10}/go/tests/ekcert.go | 0 .../t10}/go/tests/hello.go | 0 .../t10}/go/tests/keys.go | 0 .../t10}/go/tests/nvram.go | 0 .../t10}/go/tests/quote | Bin .../t10}/go/tests/quote.go | 0 .../t10}/nut10/Dockerfile | 0 .../t10}/nut10/Dockerfile.local | 0 .../t10}/nut10/claims/claimstructure.py | 0 .../t10}/nut10/endpoints/ima_endpoint.py | 0 .../t10}/nut10/endpoints/inteltxt_endpoint.py | 0 .../t10}/nut10/endpoints/sysinfo_endpoint.py | 0 .../t10}/nut10/endpoints/tpm2_endpoint.py | 0 .../t10}/nut10/endpoints/uefi_endpoint.py | 0 .../t10}/nut10/run_t10_as_docker_container.sh | 0 .../t10}/nut10/run_t10_as_podman_container.sh | 0 .../t10}/nut10/t10.conf | 0 {t10 => v0.11.0python_final/t10}/nut10/ta.py | 0 .../t10}/nut10/ta_config.cfg | 0 .../t10}/nut10/tpm/tpm.py | 0 .../t10}/py/Dockerfile | 0 .../t10}/py/pyvenv.cfg | 0 .../t10}/py/run_as_docker_contaier.sh | 0 {t10 => v0.11.0python_final/t10}/py/ta.py | 0 .../t10}/py/ta_config.cfg | 0 .../t10}/py/tpm/__init__.py | 0 .../t10}/py/tpm/tpm.py | 0 .../t10}/py/tpm2interface/tpm2.py | 0 .../t10}/systemd/README.md | 0 .../t10}/systemd/ta.service | 0 .../t10}/systemd/ta.start | 0 .../t10}/systemd/ta.stop | 0 .../tests}/README.md | 0 .../tests}/a10resttests/delete.py | 0 .../tests}/a10resttests/deltest | 0 .../tests}/a10resttests/evtest | 0 .../tests}/a10resttests/postelementtest.py | 0 .../tests}/a10resttests/puttest | 0 .../tests}/a10resttests/py/p.py | 0 .../tests}/attestall/a.py | 0 .../tests}/attestall/b.py | 0 .../tests}/attestall/c.py | 0 .../tests}/attestall/v2/elementstest.py | 0 .../tests}/attestall/v2/policytest.py | 0 .../tests}/attesttest.py | 0 .../tests}/basicDatabaseTests.py | 0 .../tests}/diffdicttest/test1.py | 0 .../tests}/pytsstests/p.py | 0 .../tests}/sessions.py | 0 .../snippets/makeactivatecredential_test.py | 0 .../tests}/snippets/pytssExample1.py | 0 {u10 => v0.11.0python_final/u10}/.gitignore | 0 .../u10}/Dockerfile.local | 0 {u10 => v0.11.0python_final/u10}/README.md | 0 {u10 => v0.11.0python_final/u10}/a10.conf | 0 .../u10}/blueprints/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin .../__pycache__/attestation.cpython-38.pyc | Bin .../__pycache__/claims.cpython-38.pyc | Bin .../__pycache__/edit.cpython-38.pyc | Bin .../elementanalytics.cpython-38.pyc | Bin .../__pycache__/elements.cpython-38.pyc | Bin .../__pycache__/expectedvalues.cpython-38.pyc | Bin .../__pycache__/formatting.cpython-38.pyc | Bin .../__pycache__/hashes.cpython-38.pyc | Bin .../__pycache__/home.cpython-38.pyc | Bin .../blueprints/__pycache__/log.cpython-38.pyc | Bin .../__pycache__/ping.cpython-38.pyc | Bin .../__pycache__/policies.cpython-38.pyc | Bin .../__pycache__/protocols.cpython-38.pyc | Bin .../__pycache__/results.cpython-38.pyc | Bin .../__pycache__/rules.cpython-38.pyc | Bin .../u10}/blueprints/attestation.py | 0 .../u10}/blueprints/claims.py | 0 .../u10}/blueprints/edit.py | 0 .../u10}/blueprints/elementanalytics.py | 0 .../u10}/blueprints/elements.py | 0 .../u10}/blueprints/expectedvalues.py | 0 .../u10}/blueprints/formatting.py | 0 .../u10}/blueprints/hashes.py | 0 .../u10}/blueprints/home.py | 0 .../u10}/blueprints/log.py | 0 .../u10}/blueprints/pcrschemas.py | 0 .../u10}/blueprints/ping.py | 0 .../u10}/blueprints/policies.py | 0 .../u10}/blueprints/protocols.py | 0 .../u10}/blueprints/qrcodes.py | 0 .../u10}/blueprints/results.py | 0 .../u10}/blueprints/rules.py | 0 .../u10}/blueprints/sessions.py | 0 .../u10}/requirements.txt | 0 .../u10}/static/favicon.ico | Bin .../u10}/static/teapot.png | Bin .../u10}/static/tpm404.png | Bin .../u10}/templates/attest.html | 0 .../u10}/templates/attestall.html | 0 .../u10}/templates/base.html | 0 .../u10}/templates/claim.html | 0 .../claimprettyprint/firmwareinfo.html | 0 .../templates/claimprettyprint/imalog.html | 0 .../claimprettyprint/incorrecttype.html | 0 .../u10}/templates/claimprettyprint/pcrs.html | 0 .../templates/claimprettyprint/quote.html | 0 .../claimprettyprint/systeminfo.html | 0 .../claimprettyprint/uefieventlog.html | 0 .../claimprettyprint/uefieventlograw.html | 0 .../u10}/templates/claims.html | 0 .../u10}/templates/editraw.html | 0 .../u10}/templates/element.html | 0 .../u10}/templates/elementanalytics.html | 0 .../u10}/templates/elements.html | 0 .../u10}/templates/elements_archived.html | 0 .../u10}/templates/expectedvalue.html | 0 .../u10}/templates/expectedvalues.html | 0 .../u10}/templates/hashes.html | 0 .../templates/help/attestparametershelp.html | 0 .../u10}/templates/home/404.html | 0 .../u10}/templates/home/418.html | 0 .../u10}/templates/home/451.html | 0 .../u10}/templates/home/about.html | 0 .../u10}/templates/home/help.html | 0 .../u10}/templates/home/home.html | 0 .../templates/informationpages/protocols.html | 0 .../templates/informationpages/qrcodes.html | 0 .../templates/informationpages/rules.html | 0 .../u10}/templates/log.html | 0 .../u10}/templates/newraw.html | 0 .../u10}/templates/pcrschemas.html | 0 .../u10}/templates/ping.html | 0 .../u10}/templates/policies.html | 0 .../u10}/templates/policy.html | 0 .../u10}/templates/result.html | 0 .../u10}/templates/results.html | 0 .../u10}/templates/session.html | 0 .../u10}/templates/sessions.html | 0 {u10 => v0.11.0python_final/u10}/u10.conf | 0 {u10 => v0.11.0python_final/u10}/u10.py | 0 .../utilities}/Database/README.md | 0 .../utilities}/Database/adbingest.py | 0 .../utilities}/Database/clearDB.js | 0 .../utilities}/Database/hashes.json | 0 .../utilities}/Database/pcrschemas.json | 0 .../utilities}/Database/policies.json | 0 .../utilities}/README.md | 0 .../utilities}/TPMprovisioning/genakek.sh | 0 .../utilities}/a10configurations/a10.conf | 0 .../dockercomposedeployment/a10.conf | 0 .../dockercomposedeployment/doc/README.md | 0 .../doc/deployment.drawio | 0 .../doc/deployment.png | Bin .../docker-compose-traefik.yml | 0 .../docker-compose.yml | 0 .../dockercomposedeployment/mosquitto.conf | 0 .../utilities}/piFakeBoot/README.md | 0 .../utilities}/piFakeBoot/install.eltt2 | 0 .../utilities}/piFakeBoot/install.tpm2tools | 0 .../piFakeBoot/measure.eltt2.service | 0 .../utilities}/piFakeBoot/measure.start.eltt2 | 0 .../piFakeBoot/measure.start.tpm2tools | 0 .../piFakeBoot/measure.tpm2tools.service | 0 .../utilities}/piFakeBoot/measures1.d/1 | 0 .../utilities}/piFakeBoot/measures1.d/2 | 0 .../utilities}/piFakeBoot/measures1.d/3 | 0 .../utilities}/piFakeBoot/measures1.d/4 | 0 .../utilities}/piFakeBoot/measures1.d/5 | 0 .../utilities}/piFakeBoot/measures256.d/1 | 0 .../utilities}/piFakeBoot/measures256.d/2 | 0 .../utilities}/piFakeBoot/measures256.d/3 | 0 .../utilities}/piFakeBoot/measures256.d/4 | 0 .../utilities}/piFakeBoot/measures256.d/5 | 0 1077 files changed, 6887 insertions(+) create mode 100644 README create mode 100644 ga10/Makefile create mode 100644 ga10/README create mode 100644 ga10/a10.service create mode 100644 ga10/config.yaml create mode 100644 ga10/configuration/configuration.go create mode 100644 ga10/datalayer/count.go create mode 100644 ga10/datalayer/initialisation.go create mode 100644 ga10/datalayer/internaldbs.go create mode 100644 ga10/datalayer/mongo.go create mode 100644 ga10/datalayer/mqtt.go create mode 100644 ga10/ga10.go create mode 100644 ga10/go.mod create mode 100644 ga10/go.sum create mode 100644 ga10/interfaces/restapi/endpointOpaqueObjects.go create mode 100644 ga10/interfaces/restapi/endpointsAttestVerify.go create mode 100644 ga10/interfaces/restapi/endpointsClaims.go create mode 100644 ga10/interfaces/restapi/endpointsElements.go create mode 100644 ga10/interfaces/restapi/endpointsExpectedValues.go create mode 100644 ga10/interfaces/restapi/endpointsHealth.go create mode 100644 ga10/interfaces/restapi/endpointsLog.go create mode 100644 ga10/interfaces/restapi/endpointsPolicies.go create mode 100644 ga10/interfaces/restapi/endpointsProtocols.go create mode 100644 ga10/interfaces/restapi/endpointsResults.go create mode 100644 ga10/interfaces/restapi/endpointsRules.go create mode 100644 ga10/interfaces/restapi/endpointsSession.go create mode 100644 ga10/interfaces/restapi/initrestapi.go create mode 100644 ga10/interfaces/webui/attest.go create mode 100644 ga10/interfaces/webui/claims.go create mode 100644 ga10/interfaces/webui/elements.go create mode 100644 ga10/interfaces/webui/expectedvalues.go create mode 100644 ga10/interfaces/webui/homepages.go create mode 100644 ga10/interfaces/webui/initwebapi.go create mode 100644 ga10/interfaces/webui/log.go create mode 100644 ga10/interfaces/webui/opaqueobjects.go create mode 100644 ga10/interfaces/webui/policies.go create mode 100644 ga10/interfaces/webui/protocols.go create mode 100644 ga10/interfaces/webui/results.go create mode 100644 ga10/interfaces/webui/rules.go create mode 100644 ga10/interfaces/webui/sessions.go create mode 100644 ga10/interfaces/webui/templatefunctions.go create mode 100644 ga10/interfaces/webui/templates/about.html create mode 100644 ga10/interfaces/webui/templates/attest.html create mode 100644 ga10/interfaces/webui/templates/attestsummary.html create mode 100644 ga10/interfaces/webui/templates/base.html create mode 100644 ga10/interfaces/webui/templates/claim.html create mode 100644 ga10/interfaces/webui/templates/claim_ERROR.html create mode 100644 ga10/interfaces/webui/templates/claim_ima.html create mode 100644 ga10/interfaces/webui/templates/claims.html create mode 100644 ga10/interfaces/webui/templates/editelement.html create mode 100644 ga10/interfaces/webui/templates/element.html create mode 100644 ga10/interfaces/webui/templates/elements.html create mode 100644 ga10/interfaces/webui/templates/elementsummarylist.html create mode 100644 ga10/interfaces/webui/templates/ev.html create mode 100644 ga10/interfaces/webui/templates/evs.html create mode 100644 ga10/interfaces/webui/templates/evsummarylist.html create mode 100644 ga10/interfaces/webui/templates/genericList.html create mode 100644 ga10/interfaces/webui/templates/help.html create mode 100644 ga10/interfaces/webui/templates/home.html create mode 100644 ga10/interfaces/webui/templates/ima.html create mode 100644 ga10/interfaces/webui/templates/log.html create mode 100644 ga10/interfaces/webui/templates/opaqueobject.html create mode 100644 ga10/interfaces/webui/templates/opaqueobjects.html create mode 100644 ga10/interfaces/webui/templates/policies.html create mode 100644 ga10/interfaces/webui/templates/policy.html create mode 100644 ga10/interfaces/webui/templates/policysummarylist.html create mode 100644 ga10/interfaces/webui/templates/protocols.html create mode 100644 ga10/interfaces/webui/templates/result.html create mode 100644 ga10/interfaces/webui/templates/results.html create mode 100644 ga10/interfaces/webui/templates/resultvalue.html create mode 100644 ga10/interfaces/webui/templates/rules.html create mode 100644 ga10/interfaces/webui/templates/scraps create mode 100644 ga10/interfaces/webui/templates/session.html create mode 100644 ga10/interfaces/webui/templates/sessions.html create mode 100644 ga10/interfaces/webui/templates/tpm2.html create mode 100644 ga10/interfaces/webui/templates/tpm2key.html create mode 100644 ga10/interfaces/webui/templates/txt.html create mode 100644 ga10/interfaces/webui/templates/uefi.html create mode 100644 ga10/logging/logging.go create mode 100644 ga10/operations/attestation.go create mode 100644 ga10/operations/claims.go create mode 100644 ga10/operations/elements.go create mode 100644 ga10/operations/expectedValues.go create mode 100644 ga10/operations/log.go create mode 100644 ga10/operations/opaqueobjects.go create mode 100644 ga10/operations/operrors.go create mode 100644 ga10/operations/policies.go create mode 100644 ga10/operations/protocols.go create mode 100644 ga10/operations/results.go create mode 100644 ga10/operations/rules.go create mode 100644 ga10/operations/sessions.go create mode 100644 ga10/operations/signingFunctions.go create mode 100644 ga10/operations/verification.go create mode 100644 ga10/otherconfigfiles/local.yaml create mode 100644 ga10/otherconfigfiles/nconfig.yaml create mode 100644 ga10/protocols/a10httprestv2/public.go create mode 100644 ga10/protocols/nullprotocol/public.go create mode 100644 ga10/protocols/registerProtocols.go create mode 100644 ga10/rules/nullrule/public.go create mode 100644 ga10/rules/registerRules.go create mode 100644 ga10/rules/tpm2rules/public.go create mode 100644 ga10/structures/claims.go create mode 100644 ga10/structures/common.go create mode 100644 ga10/structures/elements.go create mode 100644 ga10/structures/expectedValues.go create mode 100644 ga10/structures/logs.go create mode 100644 ga10/structures/opaqueobjects.go create mode 100644 ga10/structures/policies.go create mode 100644 ga10/structures/protocols.go create mode 100644 ga10/structures/results.go create mode 100644 ga10/structures/rules.go create mode 100644 ga10/structures/sessions.go create mode 100644 ga10/structures/types.go create mode 100644 ga10/temporary.crt create mode 100644 ga10/temporary.key create mode 100644 ga10/tests/exampledatabase/elements.json create mode 100644 ga10/tests/exampledatabase/expectedvalues.json create mode 100644 ga10/tests/exampledatabase/policies.json create mode 100644 ga10/tests/pkcs11test/go.mod create mode 100644 ga10/tests/pkcs11test/go.sum create mode 100644 ga10/tests/pkcs11test/p.go create mode 100644 ga10/tests/pkcs11test/yubihsm_pkcs1.conf create mode 100755 ga10/tests/testscripts/attest.sh create mode 100755 ga10/tests/testscripts/get.sh create mode 100755 ga10/tests/testscripts/verify_laptop.sh create mode 100755 ga10/tests/testscripts/verify_pi.sh create mode 100644 ga10/utilities/hashes.go create mode 100644 ga10/utilities/identifiers.go create mode 100644 ga10/utilities/timestamps.go create mode 160000 ta10 rename README.md => v0.11.0python_final/README.md (100%) rename {a10rest => v0.11.0python_final/a10rest}/Dockerfile.local (100%) rename {a10rest => v0.11.0python_final/a10rest}/README.md (100%) rename {a10rest => v0.11.0python_final/a10rest}/a10rest.conf (100%) rename {a10rest => v0.11.0python_final/a10rest}/a10rest.py (100%) rename {a10rest => v0.11.0python_final/a10rest}/blueprints/dbimportexport.py (100%) rename {a10rest => v0.11.0python_final/a10rest}/blueprints/v2.py (100%) rename {a10rest => v0.11.0python_final/a10rest}/requirements.txt (100%) rename {a10server => v0.11.0python_final/a10server}/.pypirc_2 (100%) rename {a10server => v0.11.0python_final/a10server}/README.md (100%) rename {a10server => v0.11.0python_final/a10server}/a10/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/analytics/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/analytics/elementanalytics.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/attestation.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/claims.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/db/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/db/announce.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/db/configuration.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/db/core.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/db/log.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/db/mqtt.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/elements.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/expectedvalues.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/hashes.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/logread.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/pcrschemas.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/policies.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/A10ArduinoUSB.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/A10ContainerImage.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/A10DummyProtocol.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/A10HttpRest.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/A10Keylime.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/A10ProtocolBase.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/A10tpm2send.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/Lannion.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/protocols/protocol_dispatcher.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/results.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/baserule.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/inteltxt.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/nullrules.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/oldrules/arduinoa10rules.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/oldrules/claimrules.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/oldrules/container.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/oldrules/image_rules.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/oldrules/testquote.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/oldrules/tpm2rules_original.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/rule_dispatcher.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/tpm2rules.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/rules/uefi.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/sessions.py (100%) rename {a10server => v0.11.0python_final/a10server}/a10/asvr/types.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/analytics/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/analytics/elementanalytics.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/attestation.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/claims.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/db/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/db/announce.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/db/configuration.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/db/core.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/db/log.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/db/mqtt.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/elements.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/expectedvalues.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/hashes.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/logread.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/pcrschemas.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/policies.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/A10ArduinoUSB.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/A10ContainerImage.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/A10DummyProtocol.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/A10HttpRest.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/A10Keylime.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/A10ProtocolBase.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/A10tpm2send.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/Lannion.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/protocols/protocol_dispatcher.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/results.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/rules/__init__.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/rules/baserule.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/rules/inteltxt.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/rules/nullrules.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/rules/rule_dispatcher.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/rules/tpm2rules.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/rules/uefi.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/sessions.py (100%) rename {a10server => v0.11.0python_final/a10server}/build/lib/a10/asvr/types.py (100%) rename {a10server => v0.11.0python_final/a10server}/doc/Makefile (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.analytics.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.attestation.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.claims.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.db.announce.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.db.configuration.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.db.core.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.db.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.db.log.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.db.mqtt.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.elements.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.expectedvalues.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.hashes.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.policies.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.protocols.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.results.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.rules.baserule.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.rules.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.rules.nullrules.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.asvr.rules.uefi.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.structures.claim.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.structures.constants.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.structures.convenience.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.structures.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.structures.identity.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.structures.result.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.structures.returncode.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/a10.structures.timestamps.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/environment.pickle (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/index.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/doctrees/modules.doctree (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/.buildinfo (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.analytics.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.attestation.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.claims.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.db.announce.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.db.core.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.db.log.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.db.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.elements.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.hashes.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.policies.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.protocols.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.results.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.rules.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.structures.claim.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.structures.constants.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.structures.convenience.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.structures.identity.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.structures.result.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.structures.returncode.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.structures.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/a10.structures.timestamps.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/index.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_sources/modules.rst.txt (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/basic.css (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/classic.css (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/doctools.js (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/documentation_options.js (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/file.png (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/jquery.js (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/language_data.js (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/minus.png (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/plus.png (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/pygments.css (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/searchtools.js (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/sidebar.js (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/_static/underscore.js (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.analytics.elementanalytics.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.analytics.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.attestation.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.claims.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.db.announce.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.db.configuration.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.db.core.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.db.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.db.log.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.db.mqtt.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.elements.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.expectedvalues.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.hashes.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.policies.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.protocols.A10ContainerImage.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.protocols.A10HttpRest.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.protocols.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.results.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.rules.baserule.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.rules.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.rules.nullrules.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.rules.rule_dispatcher.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.rules.tpm2rules.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.asvr.rules.uefi.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.structures.claim.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.structures.constants.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.structures.convenience.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.structures.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.structures.identity.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.structures.result.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.structures.returncode.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/a10.structures.timestamps.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/genindex.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/index.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/modules.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/objects.inv (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/py-modindex.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/search.html (100%) rename {a10server => v0.11.0python_final/a10server}/doc/build/html/searchindex.js (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.analytics.elementanalytics.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.analytics.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.attestation.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.claims.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.db.announce.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.db.configuration.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.db.core.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.db.log.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.db.mqtt.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.db.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.elements.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.expectedvalues.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.hashes.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.policies.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.protocols.A10ContainerImage.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.protocols.A10DummyProtocol.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.protocols.A10HttpRest.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.protocols.A10ProtocolBase.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.protocols.protocol_dispatcher.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.protocols.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.results.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.rules.baserule.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.rules.nullrules.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.rules.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.rules.rule_dispatcher.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.rules.tpm2rules.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.asvr.rules.uefi.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.structures.claim.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.structures.constants.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.structures.convenience.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.structures.identity.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.structures.result.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.structures.returncode.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.structures.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/a10.structures.timestamps.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/conf.py (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/index.rst (100%) rename {a10server => v0.11.0python_final/a10server}/doc/source/modules.rst (100%) rename {a10server => v0.11.0python_final/a10server}/reinstall (100%) rename {a10server => v0.11.0python_final/a10server}/requirements.txt (100%) rename {a10server => v0.11.0python_final/a10server}/setup.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/.pypirc_2 (100%) rename {a10structures => v0.11.0python_final/a10structures}/README.md (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/__init__.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/structures/__init__.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/structures/claim.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/structures/constants.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/structures/convenience.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/structures/identity.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/structures/result.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/structures/returncode.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/structures/timestamps.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/utilities/__init__.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/a10/utilities/tpmoperations.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/__init__.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/structures/__init__.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/structures/claim.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/structures/constants.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/structures/convenience.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/structures/identity.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/structures/result.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/structures/returncode.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/structures/timestamps.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/utilities/__init__.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/build/lib/a10/utilities/tpmoperations.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/Makefile (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.analytics.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.attestation.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.claims.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.db.announce.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.db.configuration.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.db.core.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.db.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.db.log.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.db.mqtt.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.elements.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.expectedvalues.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.hashes.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.policies.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.protocols.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.results.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.rules.baserule.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.rules.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.rules.nullrules.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.asvr.rules.uefi.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.structures.claim.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.structures.constants.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.structures.convenience.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.structures.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.structures.identity.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.structures.result.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.structures.returncode.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/a10.structures.timestamps.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/environment.pickle (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/index.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/doctrees/modules.doctree (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/.buildinfo (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.analytics.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.attestation.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.claims.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.db.announce.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.db.core.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.db.log.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.db.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.elements.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.hashes.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.policies.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.protocols.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.results.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.rules.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.structures.claim.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.structures.constants.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.structures.convenience.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.structures.identity.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.structures.result.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.structures.returncode.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.structures.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/a10.structures.timestamps.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/index.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_sources/modules.rst.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/basic.css (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/classic.css (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/doctools.js (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/documentation_options.js (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/file.png (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/jquery.js (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/language_data.js (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/minus.png (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/plus.png (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/pygments.css (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/searchtools.js (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/sidebar.js (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/_static/underscore.js (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.analytics.elementanalytics.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.analytics.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.attestation.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.claims.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.db.announce.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.db.configuration.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.db.core.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.db.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.db.log.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.db.mqtt.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.elements.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.expectedvalues.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.hashes.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.policies.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.protocols.A10ContainerImage.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.protocols.A10HttpRest.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.protocols.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.results.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.rules.baserule.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.rules.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.rules.nullrules.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.rules.rule_dispatcher.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.rules.tpm2rules.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.asvr.rules.uefi.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.structures.claim.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.structures.constants.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.structures.convenience.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.structures.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.structures.identity.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.structures.result.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.structures.returncode.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/a10.structures.timestamps.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/genindex.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/index.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/modules.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/objects.inv (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/py-modindex.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/search.html (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/build/html/searchindex.js (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.analytics.elementanalytics.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.analytics.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.attestation.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.claims.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.db.announce.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.db.configuration.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.db.core.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.db.log.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.db.mqtt.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.db.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.elements.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.expectedvalues.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.hashes.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.policies.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.protocols.A10ContainerImage.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.protocols.A10DummyProtocol.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.protocols.A10HttpRest.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.protocols.A10ProtocolBase.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.protocols.protocol_dispatcher.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.protocols.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.results.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.rules.baserule.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.rules.nullrules.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.rules.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.rules.rule_dispatcher.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.rules.tpm2rules.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.asvr.rules.uefi.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.structures.claim.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.structures.constants.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.structures.convenience.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.structures.identity.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.structures.result.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.structures.returncode.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.structures.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/a10.structures.timestamps.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/conf.py (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/index.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/doc/source/modules.rst (100%) rename {a10structures => v0.11.0python_final/a10structures}/reinstall (100%) rename {a10structures => v0.11.0python_final/a10structures}/requirements.txt (100%) rename {a10structures => v0.11.0python_final/a10structures}/setup.py (100%) rename {apps => v0.11.0python_final/apps}/README.md (100%) rename {apps => v0.11.0python_final/apps}/asmqttviewer/' (100%) rename {apps => v0.11.0python_final/apps}/asmqttviewer/Dockerfile (100%) rename {apps => v0.11.0python_final/apps}/asmqttviewer/README.md (100%) rename {apps => v0.11.0python_final/apps}/asmqttviewer/a10.conf (100%) rename {apps => v0.11.0python_final/apps}/asmqttviewer/asmqttviewer.py (100%) rename {apps => v0.11.0python_final/apps}/asmqttviewer/requirements.txt (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/README.md (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/att_language.lark (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/attall.py (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/attgrammar.py (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/attlanguage.py (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/attreport.py (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/eva_language.lark (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/a.att (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/a.eva (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/a2.att (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/a2.eva (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/a3.eva (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/a4.eva (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/example.att (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/iot.att (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/iot.eva (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/new.eva (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/pis.att (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/q.eva (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/roosa.att (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/examplescripts/roosa.eva (100%) rename {apps => v0.11.0python_final/apps}/attdsl2/report.txt (100%) rename {apps => v0.11.0python_final/apps}/d10/README.md (100%) rename {apps => v0.11.0python_final/apps}/d10/att_language.lark (100%) rename {apps => v0.11.0python_final/apps}/d10/attall.py (100%) rename {apps => v0.11.0python_final/apps}/d10/attgrammar.py (100%) rename {apps => v0.11.0python_final/apps}/d10/attlanguage.py (100%) rename {apps => v0.11.0python_final/apps}/d10/attreport.py (100%) rename {apps => v0.11.0python_final/apps}/d10/d10.conf (100%) rename {apps => v0.11.0python_final/apps}/d10/d10.py (100%) rename {apps => v0.11.0python_final/apps}/d10/d10api.py (100%) rename {apps => v0.11.0python_final/apps}/d10/d10conf.py (100%) rename {apps => v0.11.0python_final/apps}/d10/d10db.py (100%) rename {apps => v0.11.0python_final/apps}/d10/d10flask.conf (100%) rename {apps => v0.11.0python_final/apps}/d10/eva_language.lark (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/a.att (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/a.eva (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/a2.att (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/a2.eva (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/a3.eva (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/a4.eva (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/example.att (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/iot.att (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/iot.eva (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/new.eva (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/pis.att (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/q.eva (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/roosa.att (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/roosa.eva (100%) rename {apps => v0.11.0python_final/apps}/d10/examples/upload.py (100%) rename {apps => v0.11.0python_final/apps}/d10/report.txt (100%) rename {apps => v0.11.0python_final/apps}/d10/rest.py (100%) rename {apps => v0.11.0python_final/apps}/d10/templates/404.html (100%) rename {apps => v0.11.0python_final/apps}/d10/templates/base.html (100%) rename {apps => v0.11.0python_final/apps}/d10/templates/home.html (100%) rename {apps => v0.11.0python_final/apps}/d10/templates/list.html (100%) rename {apps => v0.11.0python_final/apps}/d10/ui.py (100%) rename {apps => v0.11.0python_final/apps}/d10/yamlversions/att.yaml (100%) rename {apps => v0.11.0python_final/apps}/d10/yamlversions/eva.yaml (100%) rename {apps => v0.11.0python_final/apps}/d10/yamlversions/p.py (100%) rename {apps => v0.11.0python_final/apps}/enroller/README.md (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/Dockerfile.local (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/Dockerfile.provision (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/Dockerfile.updateelement (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/constructTPM2JSONobject.py (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/enrol.json (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/enrol.py (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/enrolupdate.py (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/exampleEnrollDocument.json (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/provision (100%) rename {apps => v0.11.0python_final/apps}/enroller/client/updateelement (100%) rename {apps => v0.11.0python_final/apps}/enroller/minimalclient/provisionMinimal (100%) rename {apps => v0.11.0python_final/apps}/enroller/server/Dockerfile.local (100%) rename {apps => v0.11.0python_final/apps}/enroller/server/eapp.conf (100%) rename {apps => v0.11.0python_final/apps}/enroller/server/penrollserver.py (100%) rename {apps => v0.11.0python_final/apps}/enroller/server/requirements.txt (100%) rename {apps => v0.11.0python_final/apps}/enroller/server/tenrollserver.py (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/.gitignore (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/README.md (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/.gitignore (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/build.gradle (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/proguard-rules.pro (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/androidTest/java/com/example/mobileattester/ExampleInstrumentedTest.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/AndroidManifest.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/MainActivity.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/location/LocationHandler.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Claim.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Element.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ElementResult.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ExpectedValue.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Policy.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Rule.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Spec.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataHandler.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataService.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/network/DataServiceValues.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/network/Networking.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/repository/AttestationRepo.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/AttestUtil.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/DataHandlers.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/EngineUtil.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/LocationEditor.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/MapManager.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/OverviewProvider.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/UpdateUtil.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/AsyncRunner.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/BatchedDataHandler.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/Filterable.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/OLD.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/di/Injector.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/ElementInfoWindow.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/SearchBar.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/Tag.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/anim/Animation.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Async.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Buttons.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Center.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Headers.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Selectors.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Text.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Attest.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Claim.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Element.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Elements.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Home.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Maps.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/More.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Policy.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Result.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Scanner.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Color.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Elevation.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Shape.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Theme.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Type.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Date.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Extensions.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/FilterBuilder.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Navigation.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Parsing.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Permissions.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Preferences.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Ui.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/java/com/example/mobileattester/ui/viewmodel/AttestationViewModel.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_green.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_red.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable-v24/ic_launcher_foreground.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable/ic_baseline_circle_32.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable/ic_baseline_location_on_32.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable/ic_baseline_server.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable/ic_launcher_background.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/drawable/layout_bg.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/layout/layout_element_info_window.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/values-night/themes.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/values/colors.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/values/strings.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/main/res/values/themes.xml (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/test/java/com/example/mobileattester/ExampleUnitTest.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/app/src/test/java/com/example/mobileattester/ui/util/ParsingKtTest.kt (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/build.gradle (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/gradle.properties (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/gradle/wrapper/gradle-wrapper.jar (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/gradle/wrapper/gradle-wrapper.properties (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/gradlew (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/gradlew.bat (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/media/Screenshot_1639475937.png (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/media/Screenshot_1639476478.png (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/media/Screenshot_1639476558.png (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/media/Screenshot_1639476952.png (100%) rename {apps => v0.11.0python_final/apps}/mobileattester/settings.gradle (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/.gitignore (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/README.md (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/documentation/.DS_Store (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/documentation/README.md (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/documentation/STRUCTURE.md (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/documentation/pics/.DS_Store (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/documentation/pics/IoTElementInheritance.JPG (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/documentation/pics/aggregator_sequence_diagram.png (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/documentation/pics/device_flow.drawio.png (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/documentation/pics/system_sequence_diagram.JPG (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/BasicSensor.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/Device.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/IoTElement.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/README.md (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/__init__.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/Manager.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/attestor.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/manager_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/RngSensor.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/iot.sensors.rng_sensor.service (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/sensor_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/IRSensor.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/iot.sensors.ir_sensor.service (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/sensor_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/LuxSensor.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/iot.sensors.lux_sensor.service (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/sensor_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/TGHPASensor.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/iot.sensors.TGHPA_sensor.service (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/sensor_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/TofSensor.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/iot.sensors.TOF_sensor.service (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/sensor_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/TempHumSensor.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/iot.sensors.temp_hum_sensor.service (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/sensor_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/sensor_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/server.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/install/install.py (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/install/service_files/iot.devices.service (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/pyproject.toml (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/secure_sensor_management_system/setup.cfg (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/UI/css/index.css (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/UI/index.html (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/UI/scripts/index.js (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/package-lock.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/package.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/public/css/index.css (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/public/js/index.js (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/server/server.js (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/server/server_config.json (100%) rename {apps => v0.11.0python_final/apps}/securesensormanagementsystem/website/views/index.pug (100%) rename {docs => v0.11.0python_final/docs}/STARTHERE.md (100%) rename {docs => v0.11.0python_final/docs}/docker/docker.md (100%) rename {docs => v0.11.0python_final/docs}/docker/dockercompose.md (100%) rename {docs => v0.11.0python_final/docs}/quickstart/installation.md (100%) rename {docs => v0.11.0python_final/docs}/quickstart/nut10running.png (100%) rename {docs => v0.11.0python_final/docs}/quickstart/u10running.png (100%) rename {fc10 => v0.11.0python_final/fc10}/.gitignore (100%) rename {fc10 => v0.11.0python_final/fc10}/Dockerfile.local (100%) rename {fc10 => v0.11.0python_final/fc10}/README.md (100%) rename {fc10 => v0.11.0python_final/fc10}/analysisFunction.py (100%) rename {fc10 => v0.11.0python_final/fc10}/elementDifferences.py (100%) rename {fc10 => v0.11.0python_final/fc10}/fc.conf (100%) rename {fc10 => v0.11.0python_final/fc10}/fc.py (100%) rename {fc10 => v0.11.0python_final/fc10}/fcanalytics.py (100%) rename {fc10 => v0.11.0python_final/fc10}/fcrules.py (100%) rename {fc10 => v0.11.0python_final/fc10}/forensicsDocument.py (100%) rename {fc10 => v0.11.0python_final/fc10}/forensicsStructures.py (100%) rename {fc10 => v0.11.0python_final/fc10}/forensics_capture.py (100%) rename {fc10 => v0.11.0python_final/fc10}/pcrDifferences.py (100%) rename {fc10 => v0.11.0python_final/fc10}/quoteDifferences.py (100%) rename {fc10 => v0.11.0python_final/fc10}/static/css/style.css (100%) rename {fc10 => v0.11.0python_final/fc10}/systeminfoDifferences.py (100%) rename {fc10 => v0.11.0python_final/fc10}/templates/base.html (100%) rename {fc10 => v0.11.0python_final/fc10}/templates/errorpage.html (100%) rename {fc10 => v0.11.0python_final/fc10}/templates/ftl.html (100%) rename {fc10 => v0.11.0python_final/fc10}/templates/home.html (100%) rename {fc10 => v0.11.0python_final/fc10}/templates/listelements.html (100%) rename {fc10 => v0.11.0python_final/fc10}/testurls (100%) rename {t10 => v0.11.0python_final/t10}/A10HTTPTPMSENDSTATIC/Dockerfile (100%) rename {t10 => v0.11.0python_final/t10}/A10HTTPTPMSENDSTATIC/Makefile (100%) rename {t10 => v0.11.0python_final/t10}/A10HTTPTPMSENDSTATIC/tpm2-send.tar.xz (100%) rename {t10 => v0.11.0python_final/t10}/A10HTTPTPMSENDSTATIC/tpm2_send.c (100%) rename {t10 => v0.11.0python_final/t10}/A10HTTPTPMSENDSTATIC/tpm2_send_server.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/Dockerfile (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/claims/claimstructure.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/endpoints/notpm/notpm.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/endpoints/notpm/notpm_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/endpoints/pifake/pifake_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/endpoints/status/status_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/endpoints/test/testquote.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/endpoints/tpm2/tpm2_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/endpoints/uefi/uefi_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/ta.conf (100%) rename {t10 => v0.11.0python_final/t10}/A10httprest/ta.py (100%) rename {t10 => v0.11.0python_final/t10}/README.md (100%) rename {t10 => v0.11.0python_final/t10}/genakek.sh (100%) rename {t10 => v0.11.0python_final/t10}/go/ta.go (100%) rename {t10 => v0.11.0python_final/t10}/go/tests/ekcert.go (100%) rename {t10 => v0.11.0python_final/t10}/go/tests/hello.go (100%) rename {t10 => v0.11.0python_final/t10}/go/tests/keys.go (100%) rename {t10 => v0.11.0python_final/t10}/go/tests/nvram.go (100%) rename {t10 => v0.11.0python_final/t10}/go/tests/quote (100%) rename {t10 => v0.11.0python_final/t10}/go/tests/quote.go (100%) rename {t10 => v0.11.0python_final/t10}/nut10/Dockerfile (100%) rename {t10 => v0.11.0python_final/t10}/nut10/Dockerfile.local (100%) rename {t10 => v0.11.0python_final/t10}/nut10/claims/claimstructure.py (100%) rename {t10 => v0.11.0python_final/t10}/nut10/endpoints/ima_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/nut10/endpoints/inteltxt_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/nut10/endpoints/sysinfo_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/nut10/endpoints/tpm2_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/nut10/endpoints/uefi_endpoint.py (100%) rename {t10 => v0.11.0python_final/t10}/nut10/run_t10_as_docker_container.sh (100%) rename {t10 => v0.11.0python_final/t10}/nut10/run_t10_as_podman_container.sh (100%) rename {t10 => v0.11.0python_final/t10}/nut10/t10.conf (100%) rename {t10 => v0.11.0python_final/t10}/nut10/ta.py (100%) rename {t10 => v0.11.0python_final/t10}/nut10/ta_config.cfg (100%) rename {t10 => v0.11.0python_final/t10}/nut10/tpm/tpm.py (100%) rename {t10 => v0.11.0python_final/t10}/py/Dockerfile (100%) rename {t10 => v0.11.0python_final/t10}/py/pyvenv.cfg (100%) rename {t10 => v0.11.0python_final/t10}/py/run_as_docker_contaier.sh (100%) rename {t10 => v0.11.0python_final/t10}/py/ta.py (100%) rename {t10 => v0.11.0python_final/t10}/py/ta_config.cfg (100%) rename {t10 => v0.11.0python_final/t10}/py/tpm/__init__.py (100%) rename {t10 => v0.11.0python_final/t10}/py/tpm/tpm.py (100%) rename {t10 => v0.11.0python_final/t10}/py/tpm2interface/tpm2.py (100%) rename {t10 => v0.11.0python_final/t10}/systemd/README.md (100%) rename {t10 => v0.11.0python_final/t10}/systemd/ta.service (100%) rename {t10 => v0.11.0python_final/t10}/systemd/ta.start (100%) rename {t10 => v0.11.0python_final/t10}/systemd/ta.stop (100%) rename {tests => v0.11.0python_final/tests}/README.md (100%) rename {tests => v0.11.0python_final/tests}/a10resttests/delete.py (100%) rename {tests => v0.11.0python_final/tests}/a10resttests/deltest (100%) rename {tests => v0.11.0python_final/tests}/a10resttests/evtest (100%) rename {tests => v0.11.0python_final/tests}/a10resttests/postelementtest.py (100%) rename {tests => v0.11.0python_final/tests}/a10resttests/puttest (100%) rename {tests => v0.11.0python_final/tests}/a10resttests/py/p.py (100%) rename {tests => v0.11.0python_final/tests}/attestall/a.py (100%) rename {tests => v0.11.0python_final/tests}/attestall/b.py (100%) rename {tests => v0.11.0python_final/tests}/attestall/c.py (100%) rename {tests => v0.11.0python_final/tests}/attestall/v2/elementstest.py (100%) rename {tests => v0.11.0python_final/tests}/attestall/v2/policytest.py (100%) rename {tests => v0.11.0python_final/tests}/attesttest.py (100%) rename {tests => v0.11.0python_final/tests}/basicDatabaseTests.py (100%) rename {tests => v0.11.0python_final/tests}/diffdicttest/test1.py (100%) rename {tests => v0.11.0python_final/tests}/pytsstests/p.py (100%) rename {tests => v0.11.0python_final/tests}/sessions.py (100%) rename {tests => v0.11.0python_final/tests}/snippets/makeactivatecredential_test.py (100%) rename {tests => v0.11.0python_final/tests}/snippets/pytssExample1.py (100%) rename {u10 => v0.11.0python_final/u10}/.gitignore (100%) rename {u10 => v0.11.0python_final/u10}/Dockerfile.local (100%) rename {u10 => v0.11.0python_final/u10}/README.md (100%) rename {u10 => v0.11.0python_final/u10}/a10.conf (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__init__.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/__init__.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/attestation.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/claims.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/edit.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/elementanalytics.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/elements.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/expectedvalues.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/formatting.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/hashes.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/home.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/log.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/ping.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/policies.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/protocols.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/results.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/__pycache__/rules.cpython-38.pyc (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/attestation.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/claims.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/edit.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/elementanalytics.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/elements.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/expectedvalues.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/formatting.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/hashes.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/home.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/log.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/pcrschemas.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/ping.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/policies.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/protocols.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/qrcodes.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/results.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/rules.py (100%) rename {u10 => v0.11.0python_final/u10}/blueprints/sessions.py (100%) rename {u10 => v0.11.0python_final/u10}/requirements.txt (100%) rename {u10 => v0.11.0python_final/u10}/static/favicon.ico (100%) rename {u10 => v0.11.0python_final/u10}/static/teapot.png (100%) rename {u10 => v0.11.0python_final/u10}/static/tpm404.png (100%) rename {u10 => v0.11.0python_final/u10}/templates/attest.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/attestall.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/base.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claim.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claimprettyprint/firmwareinfo.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claimprettyprint/imalog.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claimprettyprint/incorrecttype.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claimprettyprint/pcrs.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claimprettyprint/quote.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claimprettyprint/systeminfo.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claimprettyprint/uefieventlog.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claimprettyprint/uefieventlograw.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/claims.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/editraw.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/element.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/elementanalytics.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/elements.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/elements_archived.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/expectedvalue.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/expectedvalues.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/hashes.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/help/attestparametershelp.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/home/404.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/home/418.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/home/451.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/home/about.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/home/help.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/home/home.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/informationpages/protocols.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/informationpages/qrcodes.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/informationpages/rules.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/log.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/newraw.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/pcrschemas.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/ping.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/policies.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/policy.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/result.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/results.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/session.html (100%) rename {u10 => v0.11.0python_final/u10}/templates/sessions.html (100%) rename {u10 => v0.11.0python_final/u10}/u10.conf (100%) rename {u10 => v0.11.0python_final/u10}/u10.py (100%) rename {utilities => v0.11.0python_final/utilities}/Database/README.md (100%) rename {utilities => v0.11.0python_final/utilities}/Database/adbingest.py (100%) rename {utilities => v0.11.0python_final/utilities}/Database/clearDB.js (100%) rename {utilities => v0.11.0python_final/utilities}/Database/hashes.json (100%) rename {utilities => v0.11.0python_final/utilities}/Database/pcrschemas.json (100%) rename {utilities => v0.11.0python_final/utilities}/Database/policies.json (100%) rename {utilities => v0.11.0python_final/utilities}/README.md (100%) rename {utilities => v0.11.0python_final/utilities}/TPMprovisioning/genakek.sh (100%) rename {utilities => v0.11.0python_final/utilities}/a10configurations/a10.conf (100%) rename {utilities => v0.11.0python_final/utilities}/dockercomposedeployment/a10.conf (100%) rename {utilities => v0.11.0python_final/utilities}/dockercomposedeployment/doc/README.md (100%) rename {utilities => v0.11.0python_final/utilities}/dockercomposedeployment/doc/deployment.drawio (100%) rename {utilities => v0.11.0python_final/utilities}/dockercomposedeployment/doc/deployment.png (100%) rename {utilities => v0.11.0python_final/utilities}/dockercomposedeployment/docker-compose-traefik.yml (100%) rename {utilities => v0.11.0python_final/utilities}/dockercomposedeployment/docker-compose.yml (100%) rename {utilities => v0.11.0python_final/utilities}/dockercomposedeployment/mosquitto.conf (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/README.md (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/install.eltt2 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/install.tpm2tools (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measure.eltt2.service (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measure.start.eltt2 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measure.start.tpm2tools (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measure.tpm2tools.service (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures1.d/1 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures1.d/2 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures1.d/3 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures1.d/4 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures1.d/5 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures256.d/1 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures256.d/2 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures256.d/3 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures256.d/4 (100%) rename {utilities => v0.11.0python_final/utilities}/piFakeBoot/measures256.d/5 (100%) diff --git a/README b/README new file mode 100644 index 00000000..45921594 --- /dev/null +++ b/README @@ -0,0 +1,96 @@ +# A10 - Nokia Attestation Engine + +This is the source for the Nokia Attestation Engine A10. + +This software is used as the remote attestation engine as part of a trusted computing environment. THis is the system that holds the known good values about devices and other elements, and provides the attestation and validation mechanisms. + +The software here is provided as-is - there is no security (http for the win!) and the error checking in places is completely missing. The point of this was to explore more interesting mechanisms for remote attestation and to implement ideas from the IEFT RATS specification. + +## Contents + +Each directory contains a local README.md file with more information + + * ga10 - The main server-side engine. + * ta10 - A reference trust agent for /dev/tpm* devices + * v0.11.0 - the older python3 based NAE. + +## Getting it running QUICKLY + +Ensure that Go is installed and correctly configured + +Write a configuration file and ensure that it is available to ga10 in some suitable directory. A config file example is below. + +To start the server + + cd ga10 + go get -u + go run . -config=/somewhere/config.yaml + +To start the TA + + cd ta10 + go get -u + go run . + +The TA requires access to /dev/tpm* devices (eg: /dev/tpmrm0), IMA log file, TXT log file and the UEFI event log. Either use sudo or setup permissions on these files. + +## Security + +A self-signed key is provided called temporary.key/crt - DO NOT USE THIS IN PRODUCTION OR ANYWHERE. Browsers will complain if you use this. +THIS IS NOT SECURE!!! + +PUTTING PRIVATE KEYS ON GITHUB FOR ANYTHING ELSE THAN A DEMONSTRATION IS CRAZY. DO NOT DO THIS. + +TO SAVE YOURSELF, SET THE usehttp FIELDS TO true. + +GENERATE YOUR OWN KEYS AND KEEP THEM SECURE. + + +## Example Config File + +Note the lines with "CHANGE ME" + + * The name of the system can set to anything you want. + * The MQTT client ID must be unique if you indent running more than one instance + +See the note on security above + +```yaml +#Some general naming +system: + name: ASVR_GO_1 + +#MongoDB Configuration +database: + connection: mongodb://192.168.1.203:27017 "CHANGE ME" + name: test1 "CHANGE ME" + +#MQTT Configuration +messaging: + broker: 192.168.1.203 "CHANGE ME" + port: 1883 "CHANGE ME" + clientid: asvrgo1 "CHANGE ME" + +#REST Interface Configuration +rest: + port: 8520 + crt: temporary.crt + key: temporary.key + usehttp: true + +#Web Interface Configuration +web: + port: 8540 + crt: temporary.crt + key: temporary.key + usehttp: true + +#Log file +logging: + logfilelocation: /tmp/ga10.log + sessionupdatelogging: false +``` + + +# Use in a Production Environment +Don't. This is not secure and many points where errors and exceptions should be captured are not implemented. diff --git a/ga10/Makefile b/ga10/Makefile new file mode 100644 index 00000000..1f58e509 --- /dev/null +++ b/ga10/Makefile @@ -0,0 +1,22 @@ +BINARY_NAME=ga10 +DATE=`date +%s%3N` +LD_RELEASE_FLAGS=-X 'main.BUILD=${DATE}' + +build: + go build -o dist/${BINARY_NAME} ga10.go + +clean: + go clean + rm dist/${BINARY_NAME}* + +update: + go get -u + go mod tidy + +distribution: update + GOOS=linux GOARCH=amd64 go build -ldflags="${LD_RELEASE_FLAGS}" -o dist/${BINARY_NAME}_linuxamd64 ga10.go + GOOS=illumos GOARCH=amd64 go build -ldflags="${LD_RELEASE_FLAGS}" -o dist/${BINARY_NAME}_illumosamd64 ga10.go + GOOS=windows GOARCH=amd64 go build -ldflags="${LD_RELEASE_FLAGS}" -o dist/${BINARY_NAME}_windowsamd64 ga10.go + GOOS=linux GOARCH=arm64 go build -ldflags="${LD_RELEASE_FLAGS}" -o dist/${BINARY_NAME}_linuxarm64 ga10.go + GOOS=linux GOARCH=arm go build -ldflags="${LD_RELEASE_FLAGS}" -o dist/${BINARY_NAME}_linuxarm ga10.go + GOOS=openbsd GOARCH=amd64 go build -ldflags="${LD_RELEASE_FLAGS}" -o dist/${BINARY_NAME}_openBSDamd64 ga10.go diff --git a/ga10/README b/ga10/README new file mode 100644 index 00000000..ee0e591f --- /dev/null +++ b/ga10/README @@ -0,0 +1,85 @@ +To build + +make build +make distribution +make + +go build . +./a10 --config=config.yaml --runtests=True + + +To run (without build) + +go run . --config=config.yaml --runtests=True + + +To set build version numbers for releases + +go build -ldflags="-X 'main.BUILD=123'" + +with a datetime + +go build -ldflags="-X 'main.BUILD=`date`'" + + + +To generate HTTPS keys + +openssl genrsa 2048 > temporary.key +chmod 400 temporary.key +openssl req -new -x509 -nodes -sha256 -days 365 -key temporary.key -out temporary.crt + + +To encryption in Go +levelup.gitconnected.com/a-guide-to-rsa-encryption-in-go-1a18d827f35d + + +To reduce binary size + +ian@ian-virtual-machine:~/ga10$ go build -ldflags "-w" . +ian@ian-virtual-machine:~/ga10$ ls -l a10 +-rwxrwxr-x 1 ian ian 13545955 huhti 25 15:37 a10 +ian@ian-virtual-machine:~/ga10$ go build -ldflags "-s -w" . +ian@ian-virtual-machine:~/ga10$ ls -l a10 +-rwxrwxr-x 1 ian ian 12517376 huhti 25 15:38 a10 +ian@ian-virtual-machine:~/ga10$ + + +Installation + +NB: choose the correct operating system and architecture + +make distribution +cp dist/a10_linuxamd64 /usr/local/bin/a10 +cp config.yaml /etc/a10config.yaml +cp a10.service to /etc/systemd/system + +Modify the config.yaml file + +sudo systemctl daemon-reload +sudo systemctl start a10.service +journalctl -xe + +sudo systemctl stop a10.service + + +sudo systemctl enable a10.service + +sudo systemctl disable a10.service + + + + +PKCS#11 + +Find the yubihsm.so file +$ ls /usr/lib/x86_64-linux-gnu/pkcs11/ +gnome-keyring-pkcs11.so p11-kit-client.so p11-kit-trust.so yubihsm_pkcs11.so + +github.com/miekg/pkcs11 + +Or which ever user can see the YubiHSM (sudo is probably not good) +sudo yubihsm-connector -d + +specify where the yubihsm conf file is +export YUBIHSM_PKCS11_CONF=/home/ian/pkcs11test/yubihsm_pkcs1.conf diff --git a/ga10/a10.service b/ga10/a10.service new file mode 100644 index 00000000..cae484d1 --- /dev/null +++ b/ga10/a10.service @@ -0,0 +1,14 @@ +[Unit] +Description=A10 Attestation Service +After=network.target +StartLimitIntervalSec=0 + +[Service] +Type=simple +Restart=always +RestartSec=1 +User=ian +ExecStart=/usr/local/bin/a10 -config=/etc/a10config.yaml + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/ga10/config.yaml b/ga10/config.yaml new file mode 100644 index 00000000..90be8f92 --- /dev/null +++ b/ga10/config.yaml @@ -0,0 +1,33 @@ +#Some general naming +system: + name: ASVR_GO_1 + +#MongoDB Configuration +database: + connection: mongodb://192.168.1.203:27017 + name: test1 + +#MQTT Configuration +messaging: + broker: 192.168.1.203 + port: 1883 + clientid: asvrgo1 + +#REST Interface Configuration +rest: + port: 8520 + crt: temporary.crt + key: temporary.key + usehttp: false + +#Web Interface Configuration +web: + port: 8540 + crt: temporary.crt + key: temporary.key + usehttp: true + +#Log file +logging: + logfilelocation: /tmp/ga10.log + sessionupdatelogging: false diff --git a/ga10/configuration/configuration.go b/ga10/configuration/configuration.go new file mode 100644 index 00000000..f295762f --- /dev/null +++ b/ga10/configuration/configuration.go @@ -0,0 +1,84 @@ +package configuration + +import( + "fmt" + "io/ioutil" + + "gopkg.in/yaml.v3" +) + +// The configuration structure also gives the format of the YAML config file +// +// For example +//#Some general naming +//system: +// name: ASVR_GO_1 -- name of the ASVR system. Can be anything sensible +// +//#MongoDB Configuration +//database: +// connection: mongodb://192.168.1.203:27017 -- connection string for the mongodb +// name: test1 -- name of the database to use +// +//#MQTT Configuration +//messaging: +// broker: 192.168.1.203 -- IP address of the MQTT broker +// port: 1883 -- Port to use, typically 1883 +// +//#REST Interface Configuration +//rest: +// port: 8520 -- Port to use for the REST API, default is 8520 +// crt: temporary.crt -- File containing the certificate to use for the HTTPS server +// key: temporary.key -- File containing the private key for the HTTPS server +// usehttp: true -- Use HTTP (true) instead of HTTPS. Default is false + +type ConfigurationStruct struct { + System struct { + Name string + } + Database struct { + Connection string + Name string + } + Messaging struct { + Broker string + Port uint16 + ClientID string + } + Rest struct { + Port string + Crt string + Key string + UseHTTP bool + } + Web struct { + Port string + Crt string + Key string + UseHTTP bool + } + Logging struct { + LogFileLocation string + SessionUpdateLogging bool + } +} + +// The exported variable for accessing the configuration structure +var ConfigData *ConfigurationStruct + +// The function that reads the configuraiton file and sets up the configuration structure +// +// If the file is unavailable or in unparsable then this function will panic and exit. +// There is no need to continue if the configuration is borked. +func SetupConfiguration(f string) { + fmt.Println("GA10: Configuration file location: ",f) + + configFile, err := ioutil.ReadFile(f) + if err != nil { + panic(fmt.Sprintf("Configuration file missing. Exiting with error ",err)) + } + + err = yaml.Unmarshal(configFile,&ConfigData) + if err != nil { + panic(fmt.Sprintf("Unable to parse configuration file. Exiting with error ",err)) + } +} \ No newline at end of file diff --git a/ga10/datalayer/count.go b/ga10/datalayer/count.go new file mode 100644 index 00000000..b18346c3 --- /dev/null +++ b/ga10/datalayer/count.go @@ -0,0 +1,23 @@ +package datalayer + +import( + "context" + "log" + "reflect" + + // "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" +) + +func Count(coll string) int64 { + //options := options.Count() + count, err := DB.Collection(coll).CountDocuments(context.TODO(), bson.D{}) + + log.Printf("count for %v is %v %v, err is %v",coll,count,reflect.TypeOf(count),err) + + if err != nil { + return -1 + } else { + return count + } +} \ No newline at end of file diff --git a/ga10/datalayer/initialisation.go b/ga10/datalayer/initialisation.go new file mode 100644 index 00000000..ed9bc623 --- /dev/null +++ b/ga10/datalayer/initialisation.go @@ -0,0 +1,9 @@ +package datalayer + + +func InitialiseDatalayer() { + + initialiseDatabase() + initialiseMessaging() + initialiseInternalDBs() +} \ No newline at end of file diff --git a/ga10/datalayer/internaldbs.go b/ga10/datalayer/internaldbs.go new file mode 100644 index 00000000..af5e8615 --- /dev/null +++ b/ga10/datalayer/internaldbs.go @@ -0,0 +1,12 @@ +package datalayer + +import( + "a10/structures" +) + +var RulesDatabase map[string]structures.Rule = make(map[string]structures.Rule) +var ProtocolsDatabase map[string]structures.Protocol = make(map[string]structures.Protocol) + +func initialiseInternalDBs() { + // No initialisation required as the current two internal databases are empty +} \ No newline at end of file diff --git a/ga10/datalayer/mongo.go b/ga10/datalayer/mongo.go new file mode 100644 index 00000000..d6da8752 --- /dev/null +++ b/ga10/datalayer/mongo.go @@ -0,0 +1,40 @@ +package datalayer + +import( + "fmt" + "context" + + "a10/configuration" + + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +var DB *mongo.Database +var DBCLIENT *mongo.Client +var ctx = context.TODO() + + + +func initialiseDatabase() { + fmt.Println("GA10: initialising database MONGO connection") + + clientOptions := options.Client().ApplyURI(configuration.ConfigData.Database.Connection) + client, err := mongo.Connect(ctx, clientOptions) + + if err != nil { + panic(err.Error()) + } + + err = client.Ping(ctx,nil) + if err != nil { + panic(err.Error()) + } + + DB = client.Database(configuration.ConfigData.Database.Name) + + fmt.Println("GA10: Database infrastructure MONGO is running") + + DBCLIENT = client + +} \ No newline at end of file diff --git a/ga10/datalayer/mqtt.go b/ga10/datalayer/mqtt.go new file mode 100644 index 00000000..a376fb00 --- /dev/null +++ b/ga10/datalayer/mqtt.go @@ -0,0 +1,46 @@ +package datalayer + +import( + "fmt" + + "a10/configuration" + + mqtt "github.com/eclipse/paho.mqtt.golang" + +) + +var MESSAGING mqtt.Client + +var connectHandler mqtt.OnConnectHandler = func(client mqtt.Client) { + fmt.Println("GA10: MQTT connected") +} + +var connectLostHandler mqtt.ConnectionLostHandler = func(client mqtt.Client, err error) { + fmt.Println("GA10: MQTT connection lost. Error %v",err) +} + +func initialiseMessaging() { + fmt.Println("GA10: Initialising message infrastructure MQTT connection") + + var broker = configuration.ConfigData.Messaging.Broker + var port = configuration.ConfigData.Messaging.Port + + opts := mqtt.NewClientOptions() + opts.AddBroker(fmt.Sprintf("tcp://%s:%d", broker, port)) + opts.SetClientID(configuration.ConfigData.Messaging.ClientID) + //opts.SetUsername("me") + //opts.SetPassword("me2") + //opts.SetDefaultPublishHandler(messagePubHandler) + opts.OnConnect = connectHandler + opts.OnConnectionLost = connectLostHandler + + client := mqtt.NewClient(opts) + if token := client.Connect(); token.Wait() && token.Error() != nil { + fmt.Println("GA10: Failed to initialise MQTT connection") + panic(token.Error()) + } + + fmt.Println("GA10: Message infrastructure MQTT is running") + + MESSAGING = client +} \ No newline at end of file diff --git a/ga10/ga10.go b/ga10/ga10.go new file mode 100644 index 00000000..050ab37c --- /dev/null +++ b/ga10/ga10.go @@ -0,0 +1,105 @@ +// Attestation Engine A10 +// Golang version v0.1 +// The main package starts the various interfaces: REST, MQTT and links to the database system +package main + +import ( + "flag" + "fmt" + "runtime" + "sync" + + "a10/configuration" + "a10/datalayer" + "a10/interfaces/restapi" + "a10/interfaces/webui" + "a10/logging" + "a10/protocols" + "a10/rules" + "a10/utilities" +) + +// Version number +const VERSION string = "v1.0rc1" + +// the BUILD value can be set during compilation. +var BUILD string = "not set" + +// and we generate a unique identifier for this whole run session +var RUNSESSION string = utilities.MakeID() + +// Command line flags +var flagREST = flag.Bool("startREST", true, "Start the REST API, defaults to true") +var flagWEB = flag.Bool("startWebUI", true, "Start the HTML Web UI, defaults to true") +var configFile = flag.String("config", "./config.yaml", "Location and name of the configuration file") + + +// Provides the standard welcome message to stdout. +func welcomeMessage() { + fmt.Printf("\n") + fmt.Printf("+========================================================================================\n") + fmt.Printf("| GA10 version\n") + fmt.Printf("| + %v O/S on %v\n", runtime.GOOS, runtime.GOARCH) + fmt.Printf("| + version %v, build %v\n", VERSION, BUILD) + fmt.Printf("| + runing with name %v\n", configuration.ConfigData.System.Name) + fmt.Printf("| + session identifier is %v\n", RUNSESSION) + fmt.Printf("| (C)2023 CeffylOpi\n") + fmt.Printf("+========================================================================================\n\n") +} + + + + +// This starts everything...here we "go" <- great pun! :-) +func main() { + // we need to see what is on the command line and process the configuration file + // If this fails, we panic + flag.Parse() + configuration.SetupConfiguration(*configFile) + + // now we know where things are, we can initialise the datalayer, ie: database, messaging etc + // if this fails, we panic + datalayer.InitialiseDatalayer() + + // Ok, we're up...let's log this. + msg := fmt.Sprintf("Starting: %v, build %v, OS %v, ARCH %v", VERSION, BUILD, runtime.GOOS, runtime.GOARCH) + logging.MakeLogEntry("SYS", "startup", RUNSESSION, configuration.ConfigData.System.Name, msg) + + welcomeMessage() + + // initialise the internal parts of the system, ie: rules and protocols. + // If the datalayer have come up properly, but some other external error has occured, eg: authorisation etc, + // then we will get a panic from these below. + + protocols.RegisterProtocols() + rules.RegisterRules() + + // and if this has gone well... + + msg = fmt.Sprintf("DB,MQTT,Rules initialised. Starting services: web %v, rest %v", *flagWEB, *flagREST) + logging.MakeLogEntry("SYS", "startup", RUNSESSION, configuration.ConfigData.System.Name, msg) + + // Start (or not) the various internal services + // As these run as threads, we put them in a wait group + // Need to implement a proper graceful shutdown mechanism + // + // If any of these internal services fail to start, then the system will panic + + var wg sync.WaitGroup + + if *flagREST == true { + wg.Add(1) + go restapi.StartRESTInterface() + } + if *flagWEB == true { + wg.Add(1) + go webui.StartWebUI() + } + + wg.Wait() + // ...and exit here (if graceful!) which does not happen in the current version + + logging.MakeLogEntry("SYS", "shutdown", configuration.ConfigData.System.Name, "GA10 "+VERSION, "Clean shutdown sequence completed. System is now stopped") + fmt.Println("+=== Exiting. ================================================") + +} diff --git a/ga10/go.mod b/ga10/go.mod new file mode 100644 index 00000000..f61baf10 --- /dev/null +++ b/ga10/go.mod @@ -0,0 +1,36 @@ +module a10 + +go 1.20 + +require ( + github.com/eclipse/paho.mqtt.golang v1.4.2 + github.com/google/uuid v1.3.0 + github.com/labstack/echo/v4 v4.10.2 + go.mongodb.org/mongo-driver v1.11.6 + golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 + gopkg.in/yaml.v3 v3.0.1 +) + +require ( + github.com/golang-jwt/jwt v3.2.2+incompatible // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/klauspost/compress v1.16.5 // indirect + github.com/labstack/gommon v0.4.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/montanaflynn/stats v0.7.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.2 // indirect + github.com/xdg-go/stringprep v1.0.4 // indirect + github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect + golang.org/x/time v0.3.0 // indirect +) diff --git a/ga10/go.sum b/ga10/go.sum new file mode 100644 index 00000000..d7612372 --- /dev/null +++ b/ga10/go.sum @@ -0,0 +1,128 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M= +github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= +github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= +github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.mongodb.org/mongo-driver v1.11.6 h1:XM7G6PjiGAO5betLF13BIa5TlLUUE3uJ/2Ox3Lz1K+o= +go.mongodb.org/mongo-driver v1.11.6/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/ga10/interfaces/restapi/endpointOpaqueObjects.go b/ga10/interfaces/restapi/endpointOpaqueObjects.go new file mode 100644 index 00000000..41f5145f --- /dev/null +++ b/ga10/interfaces/restapi/endpointOpaqueObjects.go @@ -0,0 +1,106 @@ +package restapi + +import( + "log" + "net/http" + + "a10/operations" + "a10/structures" + + "github.com/labstack/echo/v4" +) + +type returnOpaqueObjects struct { + Objects []structures.OpaqueObject + Length int +} + + + +func getOpaqueObjects(c echo.Context) error { + elems,err := operations.GetOpaqueObjects() + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []structures.OpaqueObject + for _,e := range elems { + elems_str = append(elems_str,e) + } + + //Marshall into JSON + elems_struct := returnOpaqueObjects{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + +func getOpaqueObjectByValue(c echo.Context) error { + value := c.Param("value") + + elem,err := operations.GetOpaqueObjectByValue(value) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + return c.JSON(http.StatusOK, elem) + } +} + + + +type postOpaqueObjectReturn struct { + Itemid string `json:"itemid"` + Error string `json:"error"` +} + + + +func postOpaqueObject(c echo.Context) error { + elem := new(structures.OpaqueObject) + + if err := c.Bind(elem); err != nil { + clienterr := postOpaqueObjectReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + res,err := operations.AddOpaqueObject(*elem) + + if err!=nil { + response := postOpaqueObjectReturn{ res,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postOpaqueObjectReturn{ res,"" } + return c.JSON(http.StatusCreated, response) + } +} + + +func putOpaqueObject(c echo.Context) error { + return postOpaqueObject(c) +} + + + +func deleteOpaqueObject(c echo.Context) error { + value := c.Param("value") + + err := operations.DeleteOpaqueObject(value) + + if err != nil { + response := postOpaqueObjectReturn{ value,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + err = operations.DeleteElement(value) + if err != nil { + response := postOpaqueObjectReturn{ value,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postOpaqueObjectReturn{ value,"" } + return c.JSON(http.StatusOK, response) + } + } +} \ No newline at end of file diff --git a/ga10/interfaces/restapi/endpointsAttestVerify.go b/ga10/interfaces/restapi/endpointsAttestVerify.go new file mode 100644 index 00000000..d4050d86 --- /dev/null +++ b/ga10/interfaces/restapi/endpointsAttestVerify.go @@ -0,0 +1,118 @@ +package restapi + +import( + "fmt" + "net/http" + + "a10/structures" + "a10/operations" + + "github.com/labstack/echo/v4" +) + + + +type postAttestReturn struct { + Itemid string `json:"itemid"` + Error string `json:"error"` +} + +type postVerifyReturn struct { + Itemid string `json:"itemid"` + Result structures.ResultValue `json:"result"` + Error string `json:"error"` +} + +type attestStr struct { + EID string `json:"eid"` + PID string `json:"pid"` + SID string `json:"sid"` + Parameters map[string]interface{} `json:"parameters",bson:"parameters"` +} + +type verifyStr struct { + CID string `json:"cid"` + Rule string `json:"rule"` + SID string `json:"sid"` + Parameters map[string]interface{} `json:"parameters",bson:"parameters"` +} + +func postAttest(c echo.Context) error { + att := new(attestStr) + if err := c.Bind(att); err != nil { + clienterr := postAttestReturn{ "", err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + eid:= (*att).EID + pid:= (*att).PID + sid:= (*att).SID + + element,err := operations.GetElementByItemID(eid) + if err != nil { + fmt.Errorf("Element not found: %v",err) + } + + policy,err := operations.GetPolicyByItemID(pid) + if err != nil { + fmt.Errorf("Policy not found: %v",err) + } + + session,err := operations.GetSessionByItemID(sid) + if err != nil { + fmt.Errorf("Session not found: %v",err) + } + + res,err := operations.Attest(element,policy,session,(*att).Parameters) + + if err!=nil { + response := postAttestReturn{ res, err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postAttestReturn{ res, "" } + return c.JSON(http.StatusAccepted, response) + } + +} + + + +func postVerify(c echo.Context) error { + att := new(verifyStr) + if err := c.Bind(att); err != nil { + clienterr := postVerifyReturn{ "", structures.VerifyCallFailure, err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + cid := (*att).CID + r := (*att).Rule + sid := (*att).SID + ps := (*att).Parameters + + claim,err := operations.GetClaimByItemID(cid) + if err != nil { + fmt.Errorf("Claim not found: %v",err) + } + + rule,err := operations.GetRule(r) + if err != nil { + fmt.Errorf("Rule not found: %v",rule) + } + + session,err := operations.GetSessionByItemID(sid) + if err != nil { + fmt.Errorf("Session not found: %v",err) + } + + res,rv,err := operations.Verify(claim,rule,session,ps) + + + if err!=nil { + response := postVerifyReturn{ res, rv, err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postVerifyReturn{ res, rv, "" } + return c.JSON(http.StatusAccepted, response) + } + +} diff --git a/ga10/interfaces/restapi/endpointsClaims.go b/ga10/interfaces/restapi/endpointsClaims.go new file mode 100644 index 00000000..110cf471 --- /dev/null +++ b/ga10/interfaces/restapi/endpointsClaims.go @@ -0,0 +1,102 @@ +package restapi + +import( + "log" + "net/http" + "strconv" + + "a10/operations" + "a10/structures" +) + +import( + "github.com/labstack/echo/v4" +) + +type returnClaims struct { + Claims []string `json:"claims"` + Length int `json:"length"` +} + +func getClaims(c echo.Context) error { + claims,err := operations.GetClaims() + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,err.Error()) + } else { + //Convert elems from []structures.ID into a []string + var claims_str []string + for _,e := range claims { + claims_str = append(claims_str,e.ItemID) + } + + //Marshall into JSON + claims_struct := returnClaims{ claims_str, len(claims_str) } + + return c.JSON(http.StatusOK, claims_struct) + } +} + +func getClaim (c echo.Context) error { + itemid := c.Param("itemid") + claim,err := operations.GetClaimByItemID(itemid) + + if err != nil { + return c.String(http.StatusInternalServerError,err.Error()) + } else { + return c.JSON(http.StatusOK, claim) + } +} + +// GetClaimsByElementID +func getClaimsByElementID (c echo.Context) error { + itemid := c.Param("itemid") + max_query := c.QueryParam("max") + max, err := strconv.ParseInt(max_query, 10, 64) + if err != nil { + max=200 + } + + claims,err := operations.GetClaimsByElementID(itemid, max) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,err.Error()) + } else { + //Convert elems from []structures.ID into a []string + var claims_str []string + for _,e := range claims { + claims_str = append(claims_str,e.ItemID) + } + + //Marshall into JSON + claims_struct := returnClaims{ claims_str, len(claims_str) } + + return c.JSON(http.StatusOK, claims_struct) + } +} + +type postClaimReturn struct { + Itemid string `json:"itemid"` + Error string `json:"error"` +} + +func postClaim(c echo.Context) error { + elem := new(structures.Claim) + + if err := c.Bind(elem); err != nil { + clienterr := postClaimReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + res,err := operations.AddClaim(*elem) + + if err!=nil { + response := postElementReturn{ res,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postElementReturn{ res,"" } + return c.JSON(http.StatusCreated, response) + } +} \ No newline at end of file diff --git a/ga10/interfaces/restapi/endpointsElements.go b/ga10/interfaces/restapi/endpointsElements.go new file mode 100644 index 00000000..afbf7cb0 --- /dev/null +++ b/ga10/interfaces/restapi/endpointsElements.go @@ -0,0 +1,156 @@ +package restapi + +import( + "log" + "net/http" + + "a10/operations" + "a10/structures" + + "github.com/labstack/echo/v4" +) + +type returnElements struct { + Elements []string `json:"elements"` + Length int `json:"length"` +} + +func getElements(c echo.Context) error { + elems,err := operations.GetElements() + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []string + for _,e := range elems { + elems_str = append(elems_str,e.ItemID) + } + + //Marshall into JSON + elems_struct := returnElements{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + +func getElement (c echo.Context) error { + itemid := c.Param("itemid") + + elem,err := operations.GetElementByItemID(itemid) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + return c.JSON(http.StatusOK, elem) + } +} + +func getElementsByName (c echo.Context) error { + name := c.Param("name") + + elems,err := operations.GetElementsByName(name) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []string + for _,e := range elems { + elems_str = append(elems_str,e.ItemID) + } + + //Marshall into JSON + elems_struct := returnElements{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + + + +type postElementReturn struct { + Itemid string `json:"itemid"` + Error string `json:"error"` +} + +func postElement(c echo.Context) error { + elem := new(structures.Element) + + if err := c.Bind(elem); err != nil { + clienterr := postElementReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + res,err := operations.AddElement(*elem) + + if err!=nil { + response := postElementReturn{ res,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postElementReturn{ res,"" } + return c.JSON(http.StatusCreated, response) + } +} + + + + + + +func putElement(c echo.Context) error { + elem := new(structures.Element) + + if err := c.Bind(elem); err != nil { + clienterr := postElementReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + if _,err:= operations.GetElementByItemID(elem.ItemID); err != nil { + response := postElementReturn{ "",err.Error() } + return c.JSON(http.StatusNotFound, response) + } + + + log.Println("adding elemenet") + err := operations.UpdateElement(*elem) + log.Println("creating response ",elem.ItemID,err) + + if err!=nil { + log.Println("err=",elem.ItemID) + + response := postElementReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + log.Println("res=",elem.ItemID) + response := postElementReturn{ elem.ItemID,"" } + return c.JSON(http.StatusCreated, response) + } +} + + + +func deleteElement (c echo.Context) error { + itemid := c.Param("itemid") + + log.Println("got here ",itemid) + elem,err := operations.GetElementByItemID(itemid) + log.Println("Elem is ",elem) + + if err != nil { + response := postElementReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + err = operations.DeleteElement(itemid) + if err != nil { + response := postElementReturn{ itemid,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postElementReturn{ itemid,"" } + return c.JSON(http.StatusOK, response) + } + } +} \ No newline at end of file diff --git a/ga10/interfaces/restapi/endpointsExpectedValues.go b/ga10/interfaces/restapi/endpointsExpectedValues.go new file mode 100644 index 00000000..a31458c6 --- /dev/null +++ b/ga10/interfaces/restapi/endpointsExpectedValues.go @@ -0,0 +1,215 @@ +package restapi + +import( + "log" + "net/http" + + "a10/operations" + "a10/structures" + + "github.com/labstack/echo/v4" +) + +type returnExpectedValues struct { + expectedValues []string `json:"expectedValues"` + Length int `json:"length"` +} + +func getExpectedValues(c echo.Context) error { + elems,err := operations.GetExpectedValues() + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []string + for _,e := range elems { + elems_str = append(elems_str,e.ItemID) + } + + //Marshall into JSON + elems_struct := returnExpectedValues{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + +func getExpectedValue (c echo.Context) error { + itemid := c.Param("itemid") + + elem,err := operations.GetExpectedValueByItemID(itemid) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + return c.JSON(http.StatusOK, elem) + } +} + +func getExpectedValuesByName (c echo.Context) error { + name := c.Param("name") + + elems,err := operations.GetExpectedValuesByName(name) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []string + for _,e := range elems { + elems_str = append(elems_str,e.ItemID) + } + + //Marshall into JSON + elems_struct := returnExpectedValues{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + +func getExpectedValuesByElement (c echo.Context) error { + itemid := c.Param("itemid") + + elems,err := operations.GetExpectedValuesByElement(itemid) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []string + for _,e := range elems { + elems_str = append(elems_str,e.ItemID) + } + + //Marshall into JSON + elems_struct := returnExpectedValues{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + + +func getExpectedValuesByPolicy (c echo.Context) error { + itemid := c.Param("itemid") + + elems,err := operations.GetExpectedValuesByPolicy(itemid) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []string + for _,e := range elems { + elems_str = append(elems_str,e.ItemID) + } + + //Marshall into JSON + elems_struct := returnExpectedValues{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + + + +func getExpectedValueByElementAndPolicy (c echo.Context) error { + eid := c.Param("eid") + pid := c.Param("pid") + + elem,err := operations.GetExpectedValueByElementAndPolicy(eid,pid) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + return c.JSON(http.StatusOK, elem) + } +} + + + + + + +type postExpectedValueReturn struct { + Itemid string `json:"itemid"` + Error string `json:"error"` +} + +func postExpectedValue(c echo.Context) error { + elem := new(structures.ExpectedValue) + + if err := c.Bind(elem); err != nil { + clienterr := postExpectedValueReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + res,err := operations.AddExpectedValue(*elem) + + if err!=nil { + response := postExpectedValueReturn{ res,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postExpectedValueReturn{ res,"" } + return c.JSON(http.StatusCreated, response) + } +} + +func putExpectedValue(c echo.Context) error { + elem := new(structures.ExpectedValue) + + if err := c.Bind(elem); err != nil { + clienterr := postExpectedValueReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + if _,err:= operations.GetExpectedValueByItemID(elem.ItemID); err != nil { + response := postExpectedValueReturn{ "",err.Error() } + return c.JSON(http.StatusNotFound, response) + } + + + log.Println("adding elemenet") + err := operations.UpdateExpectedValue(*elem) + log.Println("creating response ",elem.ItemID,err) + + if err!=nil { + log.Println("err=",elem.ItemID) + + response := postExpectedValueReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + log.Println("res=",elem.ItemID) + response := postExpectedValueReturn{ elem.ItemID,"" } + return c.JSON(http.StatusCreated, response) + } +} + + + +func deleteExpectedValue (c echo.Context) error { + itemid := c.Param("itemid") + + log.Println("got here ",itemid) + elem,err := operations.GetExpectedValueByItemID(itemid) + log.Println("Elem is ",elem) + + if err != nil { + response := postExpectedValueReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + err = operations.DeleteExpectedValue(itemid) + if err != nil { + response := postExpectedValueReturn{ itemid,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postExpectedValueReturn{ itemid,"" } + return c.JSON(http.StatusOK, response) + } + } +} \ No newline at end of file diff --git a/ga10/interfaces/restapi/endpointsHealth.go b/ga10/interfaces/restapi/endpointsHealth.go new file mode 100644 index 00000000..54749df3 --- /dev/null +++ b/ga10/interfaces/restapi/endpointsHealth.go @@ -0,0 +1,96 @@ +package restapi + +import( + "sync" + "net/http" + + "a10/operations" + + "github.com/labstack/echo/v4" +) + +type healthStructure struct { + Counts counts `json:"counts"` +} + +type counts struct { + Ne int64 `json:"ne"` + Np int64 `json:"Np"` + Nev int64 `json:"Nev"` + Nc int64 `json:"Nc"` + Nr int64 `json:"Nr"` + + Nh int64 `json:"Nh"` + Nrul int64 `json:"Nrul"` + Npol int64 `json:"Npol"` + + Nlog int64 `json:"Nlog"` +} + +// Returns a structure detailing the health of the attestation system +// NB: there was a bit of experimental goroutines here :-) +func objectCount() counts { + + var wg sync.WaitGroup + + wg.Add(9) + + nlog := func() int64 { + defer wg.Done() + return operations.CountLogEntries() + }() + + ne := func() int64 { + defer wg.Done() + return operations.CountElements() + }() + + np := func() int64 { + defer wg.Done() + return operations.CountPolicies() + }() + + nev := func() int64 { + defer wg.Done() + return operations.CountExpectedValues() + }() + + nc := func() int64 { + defer wg.Done() + return operations.CountClaims() + }() + + nr := func() int64 { + defer wg.Done() + return operations.CountResults() + }() + + nh := func() int64 { + defer wg.Done() + return operations.CountOpaqueOjects() + }() + + nrul := func() int64 { + defer wg.Done() + return operations.CountRules() + }() + + npro:= func() int64 { + defer wg.Done() + return operations.CountProtocols() + }() + + wg.Wait() + + return counts{ ne,np,nev,nc,nr,nh,nrul,npro,nlog } +} + + + + +func health(c echo.Context) error { + + hstr := healthStructure{ objectCount() } + + return c.JSON(http.StatusOK, hstr) +} diff --git a/ga10/interfaces/restapi/endpointsLog.go b/ga10/interfaces/restapi/endpointsLog.go new file mode 100644 index 00000000..a2a0dd3d --- /dev/null +++ b/ga10/interfaces/restapi/endpointsLog.go @@ -0,0 +1,41 @@ +package restapi + +import( + "log" + "reflect" + + "net/http" + "strconv" + + "a10/operations" + "a10/structures" +) + +import( + "github.com/labstack/echo/v4" +) + +type returnLogEntries struct { + LogEntries []structures.LogEntry `json:"logentries"` + Length int `json:"length"` + Max int64 `json:"max"` +} + + +func getLogEntries(c echo.Context) error { + max_query := c.QueryParam("max") + max, err := strconv.ParseInt(max_query, 10, 64) + if err != nil { + max=200 + } + log.Println("maxtype is ",reflect.TypeOf(max)) + + logentries,err := operations.GetLogEntries(max) + + if err != nil { + return c.String(http.StatusInternalServerError,"error") + } else { + rtn := returnLogEntries{ logentries, len(logentries), max } + return c.JSON(http.StatusOK, rtn) + } +} diff --git a/ga10/interfaces/restapi/endpointsPolicies.go b/ga10/interfaces/restapi/endpointsPolicies.go new file mode 100644 index 00000000..85b85b7a --- /dev/null +++ b/ga10/interfaces/restapi/endpointsPolicies.go @@ -0,0 +1,154 @@ +package restapi + +import( + "log" + "net/http" + + "a10/operations" + "a10/structures" + + "github.com/labstack/echo/v4" +) + +type returnPolicies struct { + Policies []string `json:"policies"` + Length int `json:"length"` +} + +func getPolicies(c echo.Context) error { + elems,err := operations.GetPolicies() + + log.Println("ps=",elems) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []string + for _,e := range elems { + log.Println("--",e) + elems_str = append(elems_str,e.ItemID) + } + + //Marshall into JSON + elems_struct := returnPolicies{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + +func getPolicy (c echo.Context) error { + itemid := c.Param("itemid") + + elem,err := operations.GetPolicyByItemID(itemid) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + return c.JSON(http.StatusOK, elem) + } +} + +func getPoliciesByName (c echo.Context) error { + name := c.Param("name") + + elems,err := operations.GetPoliciesByName(name) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []string + for _,e := range elems { + elems_str = append(elems_str,e.ItemID) + } + + //Marshall into JSON + elems_struct := returnPolicies{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + + + +type postPolicyReturn struct { + Itemid string `json:"itemid"` + Error string `json:"error"` +} + +func postPolicy(c echo.Context) error { + elem := new(structures.Policy) + + if err := c.Bind(elem); err != nil { + clienterr := postPolicyReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + res,err := operations.AddPolicy(*elem) + + if err!=nil { + response := postPolicyReturn{ res,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postPolicyReturn{ res,"" } + return c.JSON(http.StatusCreated, response) + } +} + +func putPolicy(c echo.Context) error { + elem := new(structures.Policy) + + if err := c.Bind(elem); err != nil { + clienterr := postPolicyReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + if _,err:= operations.GetPolicyByItemID(elem.ItemID); err != nil { + response := postPolicyReturn{ "",err.Error() } + return c.JSON(http.StatusNotFound, response) + } + + + log.Println("adding elemenet") + err := operations.UpdatePolicy(*elem) + log.Println("creating response ",elem.ItemID,err) + + if err!=nil { + log.Println("err=",elem.ItemID) + + response := postPolicyReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + log.Println("res=",elem.ItemID) + response := postPolicyReturn{ elem.ItemID,"" } + return c.JSON(http.StatusCreated, response) + } +} + + + +func deletePolicy (c echo.Context) error { + itemid := c.Param("itemid") + + log.Println("got here ",itemid) + elem,err := operations.GetPolicyByItemID(itemid) + log.Println("Elem is ",elem) + + if err != nil { + response := postPolicyReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + err = operations.DeletePolicy(itemid) + if err != nil { + response := postPolicyReturn{ itemid,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postPolicyReturn{ itemid,"" } + return c.JSON(http.StatusOK, response) + } + } +} \ No newline at end of file diff --git a/ga10/interfaces/restapi/endpointsProtocols.go b/ga10/interfaces/restapi/endpointsProtocols.go new file mode 100644 index 00000000..e67004b5 --- /dev/null +++ b/ga10/interfaces/restapi/endpointsProtocols.go @@ -0,0 +1,52 @@ +package restapi + +import( + "fmt" + "net/http" + "a10/operations" + + "github.com/labstack/echo/v4" +) + + + + +type protocolExternal struct { + Name string `json:"name",bson:"name"` + Description string `json:"description",bson:"description"` + Intents []string `json:"intents",bson:"intents"` +} + + +type returnProtocols struct { + Protocols []protocolExternal `json:"protocols"` + Length int `json:"length"` +} + + + +func getProtocols(c echo.Context) error { + ps := operations.GetProtocols() + + //Convert elems from []structures.Protocol into protocolExternal + var ps_str []protocolExternal + for _,p := range ps { + ps_str = append(ps_str, protocolExternal{ p.Name, p.Description, p.Intents} ) + } + + ps_rtn := returnProtocols{ ps_str, len(ps_str) } + + return c.JSON(http.StatusOK, ps_rtn) +} + +func getProtocol(c echo.Context) error { + p,err := operations.GetProtocol(c.Param("name")) + + if err!=nil { + return c.JSON(http.StatusNotFound,fmt.Errorf("No such protocol, %w",err)) + } else { + extp := protocolExternal{ p.Name, p.Description, p.Intents} + return c.JSON(http.StatusOK,extp) + } +} + diff --git a/ga10/interfaces/restapi/endpointsResults.go b/ga10/interfaces/restapi/endpointsResults.go new file mode 100644 index 00000000..5472bf67 --- /dev/null +++ b/ga10/interfaces/restapi/endpointsResults.go @@ -0,0 +1,102 @@ +package restapi + +import( + "log" + "net/http" + "strconv" + + "a10/operations" + "a10/structures" +) + +import( + "github.com/labstack/echo/v4" +) + +type returnResults struct { + Results []string `json:"results"` + Length int `json:"length"` +} + +func getResults(c echo.Context) error { + Results,err := operations.GetResults() + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,err.Error()) + } else { + //Convert elems from []structures.ID into a []string + var Results_str []string + for _,e := range Results { + Results_str = append(Results_str,e.ItemID) + } + + //Marshall into JSON + Results_struct := returnResults{ Results_str, len(Results_str) } + + return c.JSON(http.StatusOK, Results_struct) + } +} + +func getResult (c echo.Context) error { + itemid := c.Param("itemid") + Result,err := operations.GetResultByItemID(itemid) + + if err != nil { + return c.String(http.StatusInternalServerError,err.Error()) + } else { + return c.JSON(http.StatusOK, Result) + } +} + +// GetResultsByElementID +func getResultsByElementID (c echo.Context) error { + itemid := c.Param("itemid") + max_query := c.QueryParam("max") + max, err := strconv.ParseInt(max_query, 10, 64) + if err != nil { + max=200 + } + + Results,err := operations.GetResultsByElementID(itemid, max) + + if err != nil { + log.Println("err=",err) + return c.String(http.StatusInternalServerError,err.Error()) + } else { + //Convert elems from []structures.ID into a []string + var Results_str []string + for _,e := range Results { + Results_str = append(Results_str,e.ItemID) + } + + //Marshall into JSON + Results_struct := returnResults{ Results_str, len(Results_str) } + + return c.JSON(http.StatusOK, Results_struct) + } +} + +type postResultReturn struct { + Itemid string `json:"itemid"` + Error string `json:"error"` +} + +func postResult(c echo.Context) error { + elem := new(structures.Result) + + if err := c.Bind(elem); err != nil { + clienterr := postResultReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + res,err := operations.AddResult(*elem) + + if err!=nil { + response := postElementReturn{ res,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postElementReturn{ res,"" } + return c.JSON(http.StatusCreated, response) + } +} \ No newline at end of file diff --git a/ga10/interfaces/restapi/endpointsRules.go b/ga10/interfaces/restapi/endpointsRules.go new file mode 100644 index 00000000..92557209 --- /dev/null +++ b/ga10/interfaces/restapi/endpointsRules.go @@ -0,0 +1,48 @@ +package restapi + +import( + "fmt" + + "net/http" + "a10/operations" + + "github.com/labstack/echo/v4" +) + +type ruleExternal struct { + Name string `json:"name",bson:"name"` + Description string `json:"description",bson:"description"` + NeedsEV bool `json:"needsev",bson:"needsev"` +} + + +type returnRules struct { + Rules []ruleExternal `json:"rules"` + Length int `json:"length"` +} + +func getRules(c echo.Context) error { + rs := operations.GetRules() + + //Convert rs from []structures.Rule into rulesExternal + var rs_str []ruleExternal + for _,r := range rs { + rs_str = append(rs_str, ruleExternal{ r.Name, r.Description, r.NeedsEV} ) + } + + rs_rtn := returnRules{ rs_str, len(rs_str) } + + return c.JSON(http.StatusOK, rs_rtn) + +} + +func getRule(c echo.Context) error { + r,err := operations.GetRule(c.Param("name")) + + if err!=nil { + return c.JSON(http.StatusNotFound,fmt.Errorf("No such rule, %w",err)) + } else { + extr := ruleExternal{ r.Name, r.Description, r.NeedsEV} + return c.JSON(http.StatusOK,extr) + } +} \ No newline at end of file diff --git a/ga10/interfaces/restapi/endpointsSession.go b/ga10/interfaces/restapi/endpointsSession.go new file mode 100644 index 00000000..8a71da2a --- /dev/null +++ b/ga10/interfaces/restapi/endpointsSession.go @@ -0,0 +1,150 @@ +package restapi + +import( + "net/http" + + "a10/operations" + "a10/structures" + + "github.com/labstack/echo/v4" +) + + +type returnSessions struct { + Sessions []structures.SessionSummary `json:"sessions"` + Length int `json:"length"` + +} + + +func getSessions(c echo.Context) error { + elems,err := operations.GetSessions() + + if err != nil { + return c.String(http.StatusInternalServerError,"error") + } else { + //Convert elems from []structures.ID into a []string + var elems_str []structures.SessionSummary + for _,e := range elems { + + summary := structures.SessionSummary{ e.ItemID, e.Timing } + elems_str = append(elems_str, summary) + } + + //Marshall into JSON + elems_struct := returnSessions{ elems_str, len(elems_str) } + + return c.JSON(http.StatusOK, elems_struct) + } +} + +func getSession(c echo.Context) error { + itemid := c.Param("itemid") + + elem,err := operations.GetSessionByItemID(itemid) + + if err != nil { + return c.String(http.StatusInternalServerError,"error") + } else { + return c.JSON(http.StatusOK, elem) + } +} + + +type postSessionMessage struct { + Message string `json:"message"` +} + +type postSessionReturn struct { + Itemid string `json:"itemid"` + Error string `json:"error"` +} + +// POST causes a session to be opened +func postSession(c echo.Context) error { + m := new(postSessionMessage) + + if err := c.Bind(m); err != nil { + clienterr := postSessionReturn{ "",err.Error() } + return c.JSON(http.StatusBadRequest, clienterr) + } + + + res,err := operations.OpenSession(m.Message) + + + + + if err!=nil { + response := postSessionReturn{ res,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postSessionReturn{ res,"" } + return c.JSON(http.StatusCreated, response) + } +} + + +// DELETE causes a session to be closed +func deleteSession (c echo.Context) error { + itemid := c.Param("itemid") + + elem,err := operations.GetSessionByItemID(itemid) + + if err != nil { + response := postSessionReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusNotFound, response) + } else { + err = operations.CloseSession(itemid) + if err != nil { + response := postSessionReturn{ itemid,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postSessionReturn{ itemid,"" } + return c.JSON(http.StatusOK, response) + } + } +} + + +func putSessionClaim(c echo.Context) error { + sid := c.Param("sid") + cid := c.Param("cid") + + elem,err := operations.GetSessionByItemID(sid) + + if err != nil { + response := postSessionReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusNotFound, response) + } else { + err = operations.AddClaimToSession(sid,cid) + if err != nil { + response := postSessionReturn{ sid,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postSessionReturn{ sid,"" } + return c.JSON(http.StatusOK, response) + } + } +} + +func putSessionResult(c echo.Context) error { + sid := c.Param("sid") + rid := c.Param("rid") + + elem,err := operations.GetSessionByItemID(sid) + + if err != nil { + response := postSessionReturn{ elem.ItemID,err.Error() } + return c.JSON(http.StatusNotFound, response) + } else { + err = operations.AddResultToSession(sid,rid) + if err != nil { + response := postSessionReturn{ sid,err.Error() } + return c.JSON(http.StatusInternalServerError, response) + } else { + response := postSessionReturn{ sid,"" } + return c.JSON(http.StatusOK, response) + } + } +} diff --git a/ga10/interfaces/restapi/initrestapi.go b/ga10/interfaces/restapi/initrestapi.go new file mode 100644 index 00000000..beaae96e --- /dev/null +++ b/ga10/interfaces/restapi/initrestapi.go @@ -0,0 +1,143 @@ +package restapi + +import( + "net/http" + + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" + + "a10/configuration" + "a10/logging" +) + +const PREFIX="" +//const PREFIX="/v3" + +func StartRESTInterface() { + router := echo.New() + + router.HideBanner = true + + //not necessary, but I will keep this here because this is now my example of how to use middlewares + //in echo, plus the import declaration above + router.Use(middleware.GzipWithConfig(middleware.GzipConfig{ Level: 5,})) + //router.Use(middleware.Logger()) + + //setup endpoints + setupStatusEndpoints(router) + setUpOperationEndpoints(router) + setupAuxillaryOperationEndpoints(router) + setupAttestationEndpoints(router) + setUpLoggingEndpoints(router) + + //get configuration data + port := ":"+configuration.ConfigData.Rest.Port + crt := configuration.ConfigData.Rest.Crt + key:= configuration.ConfigData.Rest.Key + usehttp := configuration.ConfigData.Rest.UseHTTP + + //start the server + if usehttp == true{ + router.Logger.Fatal(router.Start(port)) + logging.MakeLogEntry("SYS","startup_svcs",configuration.ConfigData.System.Name,"GA10","REST API HTTP mode started.") + + } else { + router.Logger.Fatal(router.StartTLS(port,crt,key)) + logging.MakeLogEntry("SYS","startup_svcs",configuration.ConfigData.System.Name,"GA10","REST API HTTPS mode started.") + + } +} + + + +func setUpOperationEndpoints(router *echo.Echo) { + router.GET(PREFIX+"/elements", getElements) + router.GET(PREFIX+"/element/:itemid", getElement) + router.GET(PREFIX+"/elements/name/:name", getElementsByName) + router.POST(PREFIX+"/element", postElement) + router.PUT(PREFIX+"/element", putElement) + router.DELETE(PREFIX+"/element/:itemid", deleteElement) + + router.GET(PREFIX+"/policies", getPolicies) + router.GET(PREFIX+"/policy/:itemid", getPolicy) + router.GET(PREFIX+"/policies/name/:name", getPoliciesByName) + router.POST(PREFIX+"/policy", postPolicy) + router.PUT(PREFIX+"/policy", putPolicy) + router.DELETE(PREFIX+"/policy/:itemid", deletePolicy) + + router.GET(PREFIX+"/expectedValues", getExpectedValues) + router.GET(PREFIX+"/expectedValue/:itemid", getExpectedValue) + router.GET(PREFIX+"/expectedValues/name/:name", getExpectedValuesByName) + router.GET(PREFIX+"/expectedValues/element/:itemid", getExpectedValuesByElement) + router.GET(PREFIX+"/expectedValues/policy/:itemid", getExpectedValuesByPolicy) + router.GET(PREFIX+"/expectedValue/:eid/:pid", getExpectedValueByElementAndPolicy) + + router.POST(PREFIX+"/expectedValue", postExpectedValue) + router.PUT(PREFIX+"/expectedValue", putExpectedValue) + router.DELETE(PREFIX+"/expectedValue/:itemid", deleteExpectedValue) + + router.GET(PREFIX+"/claims", getClaims) + router.GET(PREFIX+"/claim/:itemid", getClaim) + router.GET(PREFIX+"/claims/element/:itemid", getClaimsByElementID) + router.POST(PREFIX+"/claim", postClaim) + + router.GET(PREFIX+"/results", getResults) + router.GET(PREFIX+"/result/:itemid", getResult) + router.GET(PREFIX+"/results/element/:itemid", getResultsByElementID) + router.POST(PREFIX+"/result", postResult) + + + router.GET(PREFIX+"/sessions", getSessions) + router.GET(PREFIX+"/session/:itemid", getSession) + router.POST(PREFIX+"/session", postSession) + router.DELETE(PREFIX+"/session/:itemid", deleteSession) + + router.PUT(PREFIX+"/session/:sid/claim/:cid", putSessionClaim) + router.PUT(PREFIX+"/session/:sid/result/:rid", putSessionResult) + +} + +func setupAuxillaryOperationEndpoints(router *echo.Echo) { + router.GET(PREFIX+"/protocols", getProtocols) + router.GET(PREFIX+"/protocol/:name", getProtocol) + + router.GET(PREFIX+"/rules", getRules) + router.GET(PREFIX+"/rule/:name", getRule) + + router.GET(PREFIX+"/opaqueobjects", getOpaqueObjects) + router.GET(PREFIX+"/opaqueobject/:value", getOpaqueObjectByValue) + router.POST(PREFIX+"/opaqueobject", postOpaqueObject) + router.PUT(PREFIX+"/opaqueobject", putOpaqueObject) + router.DELETE(PREFIX+"/opaqueobject/:value", deleteOpaqueObject) + + +} + +func setupAttestationEndpoints(router *echo.Echo) { + router.POST(PREFIX+"/attest", postAttest) + router.POST(PREFIX+"/verify", postVerify) +} + + + +func setupStatusEndpoints(router *echo.Echo) { + router.GET(PREFIX+"/", homepage) + router.GET(PREFIX+"/config", config) + router.GET(PREFIX+"/health", health) +} + + + +func setUpLoggingEndpoints(router *echo.Echo) { + //other endpoint will be put here + router.GET(PREFIX+"/log", getLogEntries) +} + + +func homepage(c echo.Context) error { + return c.String(http.StatusOK, "Hello there") +} + +func config(c echo.Context) error { + return c.JSON(http.StatusOK, configuration.ConfigData) +} \ No newline at end of file diff --git a/ga10/interfaces/webui/attest.go b/ga10/interfaces/webui/attest.go new file mode 100644 index 00000000..b51ff1a2 --- /dev/null +++ b/ga10/interfaces/webui/attest.go @@ -0,0 +1,109 @@ +package webui + +import( + "fmt" + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" + "a10/structures" +) + + +type atteststr struct { + ES []structures.Element + PS []structures.Policy + RS []structures.Rule +} + +func showAttest(c echo.Context) error { + es,_ := operations.GetElementsAll() + ps,_ := operations.GetPoliciesAll() + rs:= operations.GetRules() + + as := atteststr{ es,ps,rs } + + return c.Render(http.StatusOK, "attest.html",as) +} + + +type attestrequest struct { + Eid string `form:"eid"` + Pid string `form:"pid"` + Rn []string `form:"rn"` + Av string `form:"av"` + Pps string `form:"pps"` + Rps string `form:"rps"` + Msg string `form:"msg"` +} + +type multipleresultsummary struct { + ItemID string + RuleName string + Message string + Result structures.ResultValue + EVID string +} + +func processAttest(c echo.Context) error { + var attreq attestrequest + + err := c.Bind(&attreq); if err != nil { + fmt.Printf("Error in binding %v",err.Error()) + } + + fmt.Printf("ATTREQ %v\n",attreq) + // Get the objects + e,_ := operations.GetElementByItemID(attreq.Eid) + p,_ := operations.GetPolicyByItemID(attreq.Pid) + + // Open a session + sid,_ := operations.OpenSession(attreq.Msg) + s,_ := operations.GetSessionByItemID(sid) + + // Call attest + // https://stackoverflow.com/questions/47400358/go-converting-json-string-to-mapstringinterface + // should be pps here, but we need to covert the pps from string to map[string]interface{} + empty := make(map[string]interface{}) + + // Call attest + cid,err := operations.Attest(e, p, s, empty) + + fmt.Printf("return after attests %v %v\n",err,cid) + + //Check if we are attesting only + // if so, close the session and redirect to the claim page + if attreq.Av=="AO" { + // Close the session now and return - we are not verifying + _ = operations.CloseSession(sid) + + return c.Redirect(http.StatusSeeOther, "/claim/"+cid) + } + + // And now we continue with the verification + // first we need the claim just generated + + cl,_ := operations.GetClaimByItemID(cid) + + // And perform the verifications <--- note the plural + // This bit needs to be parallelised + + for _,rn := range attreq.Rn { + r,_ := operations.GetRule(rn) + fmt.Printf("** verify %v\n",r) + + rid,rv,err := operations.Verify(cl,r,s,empty) // rps conversion goes here + fmt.Printf("results of verify %v - %v - %v\n",err,rv,rid) + + } + // end of parallelism + + + // Close the session + _ = operations.CloseSession(sid) + + // Now we render the multiple (or even just one!) results + + return c.Redirect(http.StatusSeeOther, "/session/"+sid) +} \ No newline at end of file diff --git a/ga10/interfaces/webui/claims.go b/ga10/interfaces/webui/claims.go new file mode 100644 index 00000000..51702c50 --- /dev/null +++ b/ga10/interfaces/webui/claims.go @@ -0,0 +1,24 @@ +package webui + +import( + "fmt" + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" +) + + +func showClaims(c echo.Context) error { + es,_ := operations.GetClaimsAll() + fmt.Printf("remdering element %v\n",len(es)) + + return c.Render(http.StatusOK, "claims.html",es) +} + +func showClaim(c echo.Context) error { + x,_ := operations.GetClaimByItemID(c.Param("itemid")) + + return c.Render(http.StatusOK, "claim.html",x) + } \ No newline at end of file diff --git a/ga10/interfaces/webui/elements.go b/ga10/interfaces/webui/elements.go new file mode 100644 index 00000000..18197cfe --- /dev/null +++ b/ga10/interfaces/webui/elements.go @@ -0,0 +1,38 @@ +package webui + +import( + "fmt" + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" + "a10/structures" +) + +type elementsStructure struct { + E structures.Element + CS []structures.Claim + RS []structures.Result +} + +func showElements(c echo.Context) error { + es,_ := operations.GetElementsAll() + fmt.Printf("remdering element %v\n",len(es)) + + return c.Render(http.StatusOK, "elements.html",es) +} + +func showElement(c echo.Context) error { + e,_ := operations.GetElementByItemID(c.Param("itemid")) + cs,_ := operations.GetClaimsByElementID(e.ItemID,50) + rs,_ := operations.GetResultsByElementID(e.ItemID,50) + + es := elementsStructure{ e,cs,rs } + + return c.Render(http.StatusOK, "element.html",es) +} + +func newElement(c echo.Context) error { + return c.Render(http.StatusOK, "editelement.html",nil) +} \ No newline at end of file diff --git a/ga10/interfaces/webui/expectedvalues.go b/ga10/interfaces/webui/expectedvalues.go new file mode 100644 index 00000000..d415d593 --- /dev/null +++ b/ga10/interfaces/webui/expectedvalues.go @@ -0,0 +1,47 @@ +package webui + +import( + "fmt" + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" + "a10/structures" + +) + + +type evstruct struct { + EV structures.ExpectedValue + E structures.Element + P structures.Policy +} + +func showExpectedValues(c echo.Context) error { + fmt.Println("here") + es,_ := operations.GetExpectedValuesAll() + + evs := []evstruct{} + + for _,j := range es { + e,_ := operations.GetElementByItemID(j.ElementID) + p,_ := operations.GetPolicyByItemID(j.PolicyID) + evs = append( evs, evstruct{j,e,p} ) + } + + + + + return c.Render(http.StatusOK, "evs.html", evs) +} + +func showExpectedValue(c echo.Context) error { + ev,_ := operations.GetExpectedValueByItemID(c.Param("itemid")) + + e,_ := operations.GetElementByItemID(ev.ElementID) + p,_ := operations.GetPolicyByItemID(ev.PolicyID) + + evstr := evstruct{ ev,e,p} + return c.Render(http.StatusOK, "ev.html",evstr) +} \ No newline at end of file diff --git a/ga10/interfaces/webui/homepages.go b/ga10/interfaces/webui/homepages.go new file mode 100644 index 00000000..309177e4 --- /dev/null +++ b/ga10/interfaces/webui/homepages.go @@ -0,0 +1,76 @@ +package webui + +import( + "fmt" + "os" + "net/http" + + "github.com/labstack/echo/v4" + + "a10/configuration" + "a10/operations" +) + +type homepagestructure struct { + Nes int + Nps int + Nevs int + Ncs int + Nrs int + Nprs int + Nhs int + Nses int64 + Nrus int + Nlog int64 + Szlog int64 + Cfg *configuration.ConfigurationStruct +} + +func homepage(c echo.Context) error { + var hps homepagestructure + + es,_ := operations.GetElements() + ps,_ := operations.GetPolicies() + evs,_ := operations.GetExpectedValues() + cs,_ := operations.GetClaims() + rs,_ := operations.GetResults() + nprs := operations.GetProtocols() + nhs,_ := operations.GetOpaqueObjects() + nrus := operations.GetRules() + + hps.Nes = len(es) + hps.Nps = len(ps) + hps.Nevs = len(evs) + hps.Ncs = len(cs) + hps.Nrs = len(rs) + + hps.Nprs = len(nprs) + hps.Nhs = len(nhs) + hps.Nrus = len(nrus) + + hps.Nlog = operations.CountLogEntries() + hps.Nses = operations.CountSessions() + + lsz,lerr := os.Stat(configuration.ConfigData.Logging.LogFileLocation) + if lerr != nil { + hps.Szlog = -1 + } else { + hps.Szlog = lsz.Size() + } + + hps.Cfg = configuration.ConfigData + + fmt.Printf("hps is %v\n",hps) + + return c.Render(http.StatusOK, "home.html",hps) +} + + + +func helppage(c echo.Context) error { + return c.Render(http.StatusOK, "help.html", nil) +} + +func aboutpage(c echo.Context) error { + return c.Render(http.StatusOK, "about.html", nil) +} \ No newline at end of file diff --git a/ga10/interfaces/webui/initwebapi.go b/ga10/interfaces/webui/initwebapi.go new file mode 100644 index 00000000..e30a343b --- /dev/null +++ b/ga10/interfaces/webui/initwebapi.go @@ -0,0 +1,192 @@ +package webui + +import( + "fmt" + "html/template" + "io" + "embed" + + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" + + "a10/configuration" + "a10/logging" +) + +// file embedding +//go:embed templates/*.html +var WPFS embed.FS + +const PREFIX="" +const T ="templates/" + +type TemplateRegistry struct { + templates map[string]*template.Template +} + +func (t *TemplateRegistry) Render(w io.Writer, name string, data interface{}, c echo.Context) error { + tmpl, ok := t.templates[name] + if !ok { + return fmt.Errorf("Error rendering %v with %v\n",name,data) + } + + return tmpl.ExecuteTemplate(w, "base.html", data) +} + + + +func StartWebUI() { + + // Parse the templates + templates := make(map[string]*template.Template) + + // It is done this way so we can have different templates for each operation...a bit ugly, but html/template is not jinja + //dev.to/ykyuen/setup-nested-html-template-in-go-echo-web-framework-d9b + + functions := template.FuncMap{"defaultMessage":DefaultMessage, "epochToUTC":EpochToUTC, "base64decode": Base64decode, "encodeAsHexString":EncodeAsHexString} + + templates["home.html"] = template.Must(template.ParseFS(WPFS,T+"home.html",T+"base.html")) + templates["help.html"] = template.Must(template.ParseFS(WPFS,T+"help.html",T+"base.html")) + templates["about.html"] = template.Must(template.ParseFS(WPFS,T+"about.html",T+"base.html")) + + templates["elements.html"] = template.Must(template.ParseFS(WPFS,T+"elements.html",T+"elementsummarylist.html",T+"base.html")) + templates["policies.html"] = template.Must(template.ParseFS(WPFS,T+"policies.html",T+"policysummarylist.html",T+"base.html")) + templates["evs.html"] = template.Must(template.ParseFS(WPFS,T+"evs.html",T+"evsummarylist.html",T+"base.html")) + + templates["element.html"] = template.Must(template.ParseFS(WPFS,T+"element.html",T+"base.html", + T+"uefi.html", + T+"txt.html", + T+"ima.html", + T+"tpm2.html", + T+"tpm2key.html")) + + templates["policy.html"] = template.Must(template.ParseFS(WPFS,T+"policy.html",T+"base.html", + T+"genericList.html")) + templates["ev.html"] = template.Must(template.ParseFS(WPFS,T+"ev.html",T+"base.html", + T+"genericList.html")) + + templates["claims.html"] = template.Must(template.New("claims.html").Funcs( functions ).ParseFS(WPFS,T+"claims.html",T+"base.html", + )) + + templates["claim.html"] = template.Must(template.New("claim.html").Funcs( functions ).ParseFS(WPFS,T+"claim.html",T+"base.html", + T+"claim_ERROR.html", + T+"claim_ima.html", + T+"genericList.html")) + + + templates["results.html"] = template.Must(template.New("results.html").Funcs( functions ).ParseFS(WPFS,T+"results.html",T+"resultvalue.html",T+"base.html")) + templates["result.html"] = template.Must(template.New("result.html").Funcs( functions ).ParseFS(WPFS,T+"result.html",T+"resultvalue.html",T+"base.html")) + + templates["sessions.html"] = template.Must(template.New("sessions.html").Funcs( functions ).ParseFS(WPFS,T+"sessions.html",T+"base.html")) + templates["session.html"] = template.Must(template.New("session.html").Funcs( functions ).ParseFS(WPFS,T+"session.html",T+"resultvalue.html",T+"base.html")) + + templates["attest.html"] = template.Must(template.New("attest.html").Funcs( functions ).ParseFS(WPFS,T+"attest.html",T+"base.html")) + + templates["protocols.html"] = template.Must(template.ParseFS(WPFS,T+"protocols.html",T+"base.html")) + templates["rules.html"] = template.Must(template.ParseFS(WPFS,T+"rules.html",T+"base.html")) + + templates["log.html"] = template.Must(template.New("log.html").Funcs( functions ).ParseFS(WPFS,T+"log.html", + T+"base.html")) + + templates["opaqueobjects.html"] = template.Must(template.ParseFS(WPFS,T+"opaqueobjects.html",T+"base.html")) + templates["opaqueobject.html"] = template.Must(template.ParseFS(WPFS,T+"opaqueobject.html",T+"base.html")) + + + + templates["editelement.html"] = template.Must(template.ParseFS(WPFS,T+"editelement.html",T+"base.html")) + + // Create the router + router := echo.New() + + router.HideBanner = true + router.Renderer = &TemplateRegistry{ + templates: templates, + } + + + //not necessary, but I will keep this here because this is now my example of how to use middlewares + //in echo, plus the import declaration above + router.Use(middleware.Logger()) + router.Use(middleware.GzipWithConfig(middleware.GzipConfig{ Level: 5,})) + + //setup endpoints + setupHomeEndpoints(router) + setUpDisplayEndpoints(router) + setUpAttestationEndpoints(router) + setupEditEndpoints(router) + + + //get configuration data + port := ":"+configuration.ConfigData.Web.Port + crt := configuration.ConfigData.Web.Crt + key:= configuration.ConfigData.Web.Key + usehttp := configuration.ConfigData.Web.UseHTTP + + //start the server + if usehttp == true{ + router.Logger.Fatal(router.Start(port)) + logging.MakeLogEntry("SYS","startup_svcs",configuration.ConfigData.System.Name,"GA10","WEB UI HTTP mode started.") + + } else { + router.Logger.Fatal(router.StartTLS(port,crt,key)) + logging.MakeLogEntry("SYS","startup_svcs",configuration.ConfigData.System.Name,"GA10","WEB UI HTTPS mode started.") + + } +} + + +func setupEditEndpoints(router *echo.Echo) { + router.GET(PREFIX+"/new/element", newElement) +} + + + +func setupHomeEndpoints(router *echo.Echo) { + router.GET(PREFIX+"/", homepage) + router.GET(PREFIX+"/help", helppage) + router.GET(PREFIX+"/about", aboutpage) +} + + + +func setUpDisplayEndpoints(router *echo.Echo) { + router.GET(PREFIX+"/elements", showElements) + router.GET(PREFIX+"/element/:itemid", showElement) + router.GET(PREFIX+"/policies", showPolicies) + router.GET(PREFIX+"/policy/:itemid", showPolicy) + router.GET(PREFIX+"/expectedvalues", showExpectedValues) + router.GET(PREFIX+"/expectedvalue/:itemid", showExpectedValue) + + router.GET(PREFIX+"/claims", showClaims) + router.GET(PREFIX+"/claim/:itemid", showClaim) + + router.GET(PREFIX+"/results", showResults) + router.GET(PREFIX+"/result/:itemid", showResult) + + // sessions + router.GET(PREFIX+"/sessions", showSessions) + router.GET(PREFIX+"/session/:itemid", showSession) + + // protocols + + router.GET(PREFIX+"/protocols", showProtocols) + + // opaqueobjects + router.GET(PREFIX+"/opaqueobjects", showOpaqueObjects) + router.GET(PREFIX+"/opaqueobject/:name", showOpaqueObject) + + // rules + router.GET(PREFIX+"/rules", showRules) + + //log + router.GET(PREFIX+"/log", showLog) + +} + + +func setUpAttestationEndpoints(router *echo.Echo) { + router.GET(PREFIX+"/attest", showAttest) + router.POST(PREFIX+"/attest", processAttest) + +} + diff --git a/ga10/interfaces/webui/log.go b/ga10/interfaces/webui/log.go new file mode 100644 index 00000000..3067528f --- /dev/null +++ b/ga10/interfaces/webui/log.go @@ -0,0 +1,35 @@ +package webui + +import( + "net/http" + "strconv" + + "github.com/labstack/echo/v4" + + "a10/operations" + "a10/structures" +) + +type logstr struct { + LogEntries []structures.LogEntry + Count int64 + Amount int64 +} + +func showLog(c echo.Context) error { + max_query := c.QueryParam("max") + max, err := strconv.ParseInt(max_query, 10, 64) + if err != nil { + max=200 + } + + es,_ := operations.GetLogEntries(max) + nl := operations.CountLogEntries() + + ls := logstr{ es, nl, max} + + return c.Render(http.StatusOK, "log.html",ls) +} + + + diff --git a/ga10/interfaces/webui/opaqueobjects.go b/ga10/interfaces/webui/opaqueobjects.go new file mode 100644 index 00000000..c5d20441 --- /dev/null +++ b/ga10/interfaces/webui/opaqueobjects.go @@ -0,0 +1,22 @@ +package webui + +import( + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" +) + + +func showOpaqueObjects(c echo.Context) error { + os,_ := operations.GetOpaqueObjects() + + return c.Render(http.StatusOK, "opaqueobjects.html",os) +} + +func showOpaqueObject(c echo.Context) error { + o,_ := operations.GetOpaqueObjectByValue(c.Param("name")) + + return c.Render(http.StatusOK, "opaqueobject.html", o) +} \ No newline at end of file diff --git a/ga10/interfaces/webui/policies.go b/ga10/interfaces/webui/policies.go new file mode 100644 index 00000000..6fa81cda --- /dev/null +++ b/ga10/interfaces/webui/policies.go @@ -0,0 +1,20 @@ +package webui + +import( + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" +) + + +func showPolicies(c echo.Context) error { + es,_ := operations.GetPoliciesAll() + return c.Render(http.StatusOK, "policies.html",es) +} + +func showPolicy(c echo.Context) error { + e,_ := operations.GetPolicyByItemID(c.Param("itemid")) + return c.Render(http.StatusOK, "policy.html",e) +} \ No newline at end of file diff --git a/ga10/interfaces/webui/protocols.go b/ga10/interfaces/webui/protocols.go new file mode 100644 index 00000000..f428936b --- /dev/null +++ b/ga10/interfaces/webui/protocols.go @@ -0,0 +1,17 @@ +package webui + +import( + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" +) + + +func showProtocols(c echo.Context) error { + ps := operations.GetProtocols() + + return c.Render(http.StatusOK, "protocols.html",ps) +} + diff --git a/ga10/interfaces/webui/results.go b/ga10/interfaces/webui/results.go new file mode 100644 index 00000000..470d755e --- /dev/null +++ b/ga10/interfaces/webui/results.go @@ -0,0 +1,65 @@ +package webui + +import( + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" + "a10/structures" +) + + +type resultsstr struct { + ItemID string + RuleName string + VerifiedAt structures.Timestamp + Result structures.ResultValue + EVEName string + EVEID string + EVPName string + EVPID string + EV_Name string + EV_ItemID string + ClaimID string + SessionID string + Message string + Footer structures.ResultFooter +} + +func showResults(c echo.Context) error { + + rsstr := []resultsstr{} + + + rs,_ := operations.GetResultsAll() + for _,j := range rs { + ev,_ := operations.GetExpectedValueByItemID(j.ExpectedValue.ItemID) + e,_ := operations.GetElementByItemID(ev.ElementID) + p,_ := operations.GetPolicyByItemID(ev.PolicyID) + + rsstr = append( rsstr, resultsstr{ j.ItemID, j.RuleName,j.VerifiedAt,j.Result,e.Name,e.ItemID,p.Name,p.ItemID,ev.Name,ev.ItemID,j.ClaimID,j.Session.ItemID,j.Message,j.Footer } ) + } + + + return c.Render(http.StatusOK, "results.html", rsstr) +} + + + +type resultsstrext struct { + R resultsstr +} + +func showResult(c echo.Context) error { + r,_ := operations.GetResultByItemID(c.Param("itemid")) + + ev,_ := operations.GetExpectedValueByItemID(r.ExpectedValue.ItemID) + e,_ := operations.GetElementByItemID(ev.ElementID) + p,_ := operations.GetPolicyByItemID(ev.PolicyID) + + rsstr := resultsstr{ r.ItemID, r.RuleName, r.VerifiedAt, r.Result,e.Name,e.ItemID,p.Name,p.ItemID,ev.Name,ev.ItemID,r.ClaimID,r.Session.ItemID,r.Message,r.Footer } + rsstrext := resultsstrext{ rsstr } + + return c.Render(http.StatusOK, "result.html", rsstrext) +} diff --git a/ga10/interfaces/webui/rules.go b/ga10/interfaces/webui/rules.go new file mode 100644 index 00000000..53586fbd --- /dev/null +++ b/ga10/interfaces/webui/rules.go @@ -0,0 +1,17 @@ +package webui + +import( + "net/http" + + "github.com/labstack/echo/v4" + + "a10/operations" +) + + +func showRules(c echo.Context) error { + rs := operations.GetRules() + + return c.Render(http.StatusOK, "rules.html",rs) +} + diff --git a/ga10/interfaces/webui/sessions.go b/ga10/interfaces/webui/sessions.go new file mode 100644 index 00000000..6fc26960 --- /dev/null +++ b/ga10/interfaces/webui/sessions.go @@ -0,0 +1,128 @@ +package webui + +import( + "net/http" + "github.com/labstack/echo/v4" + + "a10/operations" + "a10/structures" +) + +type claimsummary struct { + ItemID string + BodyType string +} + +type resultsummary struct{ + ItemID string + Result structures.ResultValue + RuleName string + VerifiedAt structures.Timestamp +} + + +func showSessions(c echo.Context) error { + s,_ := operations.GetSessionsAll() + + return c.Render(http.StatusOK, "sessions.html",s) +} + + + + +type claimanalytics struct { + Valid int + Errs int +} + +type resultanalytics struct { + Pass int + Fail int + Verifyfail int + Verifycallattempt int + Noresult int + Missineexpectedvalue int + Rulecallfailure int + Unsetresultvalue int +} + +type sessionsummary struct { + S structures.Session + CS []claimsummary + RS []resultsummary + CA claimanalytics + RA resultanalytics +} + + +func showSession(c echo.Context) error { + s,_ := operations.GetSessionByItemID(c.Param("itemid")) + + cs := make([]claimsummary,0) + for _,i := range s.ClaimList { + cl,_ := operations.GetClaimByItemID(i) + cs = append(cs, claimsummary{ cl.ItemID, cl.BodyType }) + } + + rs := make([]resultsummary,0) + for _,i := range s.ResultList { + rl,_ := operations.GetResultByItemID(i) + rs = append(rs, resultsummary{ rl.ItemID, rl.Result, rl.RuleName, rl.VerifiedAt }) + } + + sstr := sessionsummary{ s, cs, rs, genclaimanalytics(cs), genresultanalytics(rs) } + return c.Render(http.StatusOK, "session.html", sstr) +} + + +func genclaimanalytics( cs []claimsummary ) claimanalytics{ + var valid int = 0 + var errs int = 0 + + for _,c := range cs { + if c.BodyType == "*ERROR" { + errs ++ + } else { + valid ++ + } + } + + return claimanalytics{ valid, errs } +} + +func genresultanalytics( rs []resultsummary ) resultanalytics{ + var pass int = 0 + var fail int = 0 + var verifyfail int = 0 + var verifycallattempt int = 0 + var noresult int = 0 + var missineexpectedvalue int = 0 + var rulecallfailure int = 0 + var unsetresultvalue int = 0 + + for _,r := range rs { + switch r.Result { + case structures.Success : + pass ++ + case structures.Fail : + fail ++ + case structures.VerifyCallFailure : + verifyfail ++ + case structures.VerifyClaimErrorAttempt: + verifycallattempt ++ + case structures.NoResult : + noresult ++ + case structures.MissingExpectedValue : + missineexpectedvalue ++ + case structures.RuleCallFailure : + rulecallfailure ++ + case structures.UnsetResultValue : + unsetresultvalue ++ + } + + } + + return resultanalytics{ pass,fail,verifyfail,verifycallattempt,noresult,missineexpectedvalue,rulecallfailure,unsetresultvalue } +} + + \ No newline at end of file diff --git a/ga10/interfaces/webui/templatefunctions.go b/ga10/interfaces/webui/templatefunctions.go new file mode 100644 index 00000000..a1315e59 --- /dev/null +++ b/ga10/interfaces/webui/templatefunctions.go @@ -0,0 +1,37 @@ +package webui + +import ( + "fmt" + "time" + "strconv" + + "encoding/base64" + "encoding/hex" + + "a10/structures" + "a10/utilities" +) + +// No idea if this works but it is supposed to be in the html files +func EpochToUTC(epoch structures.Timestamp) string { + sec,err := strconv.ParseInt(fmt.Sprintf("%v",epoch),10,64) + if err != nil { + t := time.Unix(0,0) + return fmt.Sprintf("%v",t.UTC()) + } + t := time.Unix(0,sec) + return fmt.Sprintf("%v",t.UTC()) +} + +func DefaultMessage() string { + return "Single invocation from WebUI at "+EpochToUTC(utilities.MakeTimestamp()) +} + +func Base64decode(u string) string { + d,_ := base64.StdEncoding.DecodeString(u) + return string(d) +} + +func EncodeAsHexString(b []byte) string { + return hex.EncodeToString(b) +} \ No newline at end of file diff --git a/ga10/interfaces/webui/templates/about.html b/ga10/interfaces/webui/templates/about.html new file mode 100644 index 00000000..ae87d623 --- /dev/null +++ b/ga10/interfaces/webui/templates/about.html @@ -0,0 +1,47 @@ +{{define "content"}} + +
+

GA10 - Nokia Attestation Engine

+ +

(C)2021 Nokia Bell Labs

+
+ +
+ +
Disclaimer
+

+Use this at your own risk. There is a good chance of database inconsistencies, crashes and Deity-knows-what-else. +

+

+Also, there is no security per se implemented...no authentication, no login, no authorisation, no encryption, HTTP-everywhere etc...well we have HTTPS but you are own your own with the key management. We can integrate with YubiHSM but this is on going (and theoretically any PKCS#11 interface)...theoretically...someone needs to impement (and test!) this. Anyway, you get the idea. +

+
+
A Bit of History
+Or, why GA10? There have been various iterations, these are listed below: +
+

+ + + + + + + + + + + + + + + + + + + + + +
A1,A2,A3 Early experiments. Written in Javascript with lots of pain regarding reactive, functional programming
A4First version that actually worked, also written in Javascript. Not very functional but there existed a trust agent for quoting
A5,A6First versions in python 2 and some of the code here ended up in A7. Some parts of A5 and A6 integrated with OpenStack's workflow and workload manager APIs - which worked as long as you didn't update OpenStack as APIs changed randomly betweent versions.
A7First properly working attestation server in a very traditional manner (cf: OpenAttestation etc). Written in a mix of python2 and python3. Backend utilised mongodb and assumed the TA talked directly to the tpm2_tools on the client. UI written using python flask. Integrated with OpenStack via a client which was a MITM/hack/kludge to access OpenStack's message bus. This version was demonstrated at ETSI SecurityWeek in 2018 and 2019. Contained a lot of technical debt which made integration hard in some cases.
A8.1Was an attempt to write everything in Erlang.
A8.2Was an attempt to do the same in Python with threads, proceses, MQTT etc.
A9Was a experiment to use the ELKS analytics stack and the ELKS UI. Was demonstrated in January 2020 for the first time and actively developed for about 6 months until we needed to support new features. Much of this work reappears as plugins and data integration (as attesation apps in A10) into ELKS and ELKS-based tools such as Nokia's NetGuard.
A102019-2023! Much more compliant with IEFT RATS in its data structures. Has a proper protocol backend which takes care of layer 7 and layer 6 of the attestation protocols so we can theoretically support any RoT/auditing system, eg: HSM, UEFI, TPM2.0, TPM1.2 etc, we can even integrate with other attestation engines' trust agents such as KeyLime, OpenAttestation, Go-Attestation etc. Libraries are much better written with a much more consistent API. UI and interfaces are separate components built on top of libraries. The whole thing is designed to integrate with MQTT, logstash, ELKS, whatever AI/ML analytics and the forensics system that is currently under development. Lots of cool features. Supports the notion of attestation applications for extensibility making integration with other systems such as Edge/NFV MANO very quick and easy.
GA10Today! Even more compliant with IEFT RATS in its data structures and an improved protocol backend which takes care of layer 7 and layer 6 of the attestation protocols. All the cool stuff of A10 but now written in GO. Seriously strong typing is so important....Reworked UI, reworked REST API and reworked data structures. Oh so much better. AND, Go has a really nice cross compiler: arm, arm64, i386, amd64, ppc, and then Linux, Windows, Solaris, AIX and Plan 9 from Bell Labs. Also Go makes self-contained binaries so the trust agent is a single binary which makes distribution trivial and the whole server engine itself just needs the binary and the config file :-)
+

+ +{{end}} \ No newline at end of file diff --git a/ga10/interfaces/webui/templates/attest.html b/ga10/interfaces/webui/templates/attest.html new file mode 100644 index 00000000..aa0706db --- /dev/null +++ b/ga10/interfaces/webui/templates/attest.html @@ -0,0 +1,88 @@ +{{define "content"}} +

Attest

+ +
+ +
+
+ +
+
+ + +
+
+ +
+ +
+
+ + +
+ +
+ + + +
+ +
+ + + +
+
+ +
+ + +
+
+ + Operation: + +
    +
  • +
  • +
+ +If "attest only" is selected, then the rule selection and rule parameters are ignored +
+ +
+ + +
+ +
+ + +
+
+
+ +
+ +
+ + +{{end}} \ No newline at end of file diff --git a/ga10/interfaces/webui/templates/attestsummary.html b/ga10/interfaces/webui/templates/attestsummary.html new file mode 100644 index 00000000..324be8ea --- /dev/null +++ b/ga10/interfaces/webui/templates/attestsummary.html @@ -0,0 +1,48 @@ +{{define "content"}} +

Session

+ + + + + + + + + + + + + {{ else }} + + {{ end }} + + + + + + +
FieldValue
ItemID {{ .ItemID }}
Opened {{ epochToUTC .Timing.Opened }}
Closed + {{ if eq .Timing.Closed "0" }} + Session still open {{ epochToUTC .Timing.Closed }}
#Claims {{ len .ClaimList }}
#Results {{ len .ResultList }}
Message {{ .Message }}
+ + +

Claims

+ + + + +

Results

+ + + + +{{end}} + diff --git a/ga10/interfaces/webui/templates/base.html b/ga10/interfaces/webui/templates/base.html new file mode 100644 index 00000000..8ede2872 --- /dev/null +++ b/ga10/interfaces/webui/templates/base.html @@ -0,0 +1,75 @@ + + + + GA10 Web User Interface + + + + + + + + + + + + + + + + + +
+ +
+ {{block "content" .}}{{end}} +
+ + + diff --git a/ga10/interfaces/webui/templates/claim.html b/ga10/interfaces/webui/templates/claim.html new file mode 100644 index 00000000..3e70a79a --- /dev/null +++ b/ga10/interfaces/webui/templates/claim.html @@ -0,0 +1,73 @@ +{{define "content"}} + +

Claim

+ +
+
+
+ +
Header
+ + + + + + + + + + + + + + + + + + + +
FieldValue
ItemID {{ .ItemID }}
BodyType {{ .BodyType }}
Element {{ .Header.Element.Name }}
-- Protocol {{ .Header.Element.Protocol }}
-- Endpoint {{ .Header.Element.Endpoint }}
Policy {{ .Header.Policy.Name }}
-- Intent {{ .Header.Policy.Intent }}
Session {{ .Header.Session.ItemID }}
Requested {{ epochToUTC .Header.Timing.Requested }}
Received {{ epochToUTC .Header.Timing.Received }}
+ +
+
+ +
Footer
+ + + + + + + + + + + +
FieldValue
Hash {{ encodeAsHexString .Footer.Hash }}
Signature {{ encodeAsHexString .Footer.Signature }}
+ +
+
+
+ +

Body:

+ +{{ if eq .BodyType "*ERROR" }} +

{{ .BodyType }}

+ {{ template "claim_ERROR.html" .Body }} +{{ end }} + +{{ if eq .BodyType "sys/info" }} +

{{ .BodyType }}

+ {{ template "genericList.html" .Body }} +{{ end }} + +{{ if eq .BodyType "ima/asciilog" }} +

{{ .BodyType }}

+ {{ template "claim_ima.html" .Body }} +{{ end }} + +
+
Raw
+{{ .Body }} + +{{end}} diff --git a/ga10/interfaces/webui/templates/claim_ERROR.html b/ga10/interfaces/webui/templates/claim_ERROR.html new file mode 100644 index 00000000..4c287af0 --- /dev/null +++ b/ga10/interfaces/webui/templates/claim_ERROR.html @@ -0,0 +1,5 @@ +{{define "claim_ERROR.html"}} +{{ .ERROR }} +{{end}} + + diff --git a/ga10/interfaces/webui/templates/claim_ima.html b/ga10/interfaces/webui/templates/claim_ima.html new file mode 100644 index 00000000..4c03bea1 --- /dev/null +++ b/ga10/interfaces/webui/templates/claim_ima.html @@ -0,0 +1,19 @@ +{{define "claim_ima.html"}} + + + + + + + + + + + + + +
FieldValue
Encoding details {{ .encoded }} {{ .encodedlength }} bytes encoded, {{ .unencodedlength }} bytes original
IMA ASCII Log {{ base64decode .asciilog }}
+ +{{end}} + + diff --git a/ga10/interfaces/webui/templates/claims.html b/ga10/interfaces/webui/templates/claims.html new file mode 100644 index 00000000..738e2560 --- /dev/null +++ b/ga10/interfaces/webui/templates/claims.html @@ -0,0 +1,31 @@ +{{define "content"}} +

Claims

+ + + + + + + + + + + + + {{ range . }} + {{ if eq .BodyType "*ERROR"}} + + {{else}} + + {{end}} + + + + + + + {{end}} + +
BodyTypeRequestedReceivedElementPolicySession
{{ .BodyType }}{{ epochToUTC .Header.Timing.Requested }}{{ epochToUTC .Header.Timing.Received }}{{ .Header.Element.Name }}{{ .Header.Policy.Name }}{{ .Header.Session.ItemID }}
+{{end}} + diff --git a/ga10/interfaces/webui/templates/editelement.html b/ga10/interfaces/webui/templates/editelement.html new file mode 100644 index 00000000..b1d0cfa2 --- /dev/null +++ b/ga10/interfaces/webui/templates/editelement.html @@ -0,0 +1,96 @@ +{{define "content"}} +

Element

+
+
+
+

Information

+ + + + + + + + + + + + + + +
+
+ +
+
+
+

Trusted Platform Module

+ + +
+
+ +
+
+ + + + + + + + +
+
+ + + + + + + + +
+
+ +
+ +
+
+

UEFI

+ + +
+
+ +
+ +
+
+

IMA

+ + +
+
+ +
+ + +
+
+

TXT

+ + +
+
+ +
+ + + + + + + + +{{end}} diff --git a/ga10/interfaces/webui/templates/element.html b/ga10/interfaces/webui/templates/element.html new file mode 100644 index 00000000..ce4da166 --- /dev/null +++ b/ga10/interfaces/webui/templates/element.html @@ -0,0 +1,63 @@ +{{define "content"}} +

Element {{ .E.Name }}

+ +
Element Information
+ + + + + + + + + + + + + + + + +
FieldValue
Name {{ .E.Name }}
Description {{ .E.Description }}
ItemID {{ .E.ItemID }}
Endpoint {{ .E.Endpoint }}
Protocol {{ .E.Protocol }}
Tags {{ range .E.Tags }} + {{ . }} + {{end}}
+ +{{ if not .E.TPM2.Device }} +{{ else }} +
+
Trusted Platform Module 2.0 (TPM)
+ {{ template "tpm2.html" .E.TPM2 }} +{{ end }} + + +{{ if not .E.UEFI.Eventlog }} +{{ else }} +
+ +
Unified Extensible Firmware Interface (UEFI)
+ {{ template "uefi.html" .E.UEFI }} +{{ end }} + + + +{{ if not .E.IMA.ASCIILog }} +{{ else }} +
+ +
Integrity Measurement Architecture (IMA)
+ {{ template "ima.html" .E.IMA }} +{{ end }} + + +{{ if not .E.TXT.Log }} +{{ else }} +
+ +
Intel Trusted Execution Technology (TXT)
+ {{ template "txt.html" .E.TXT }} +{{ end }} + + + + +{{end}} diff --git a/ga10/interfaces/webui/templates/elements.html b/ga10/interfaces/webui/templates/elements.html new file mode 100644 index 00000000..ea207dbf --- /dev/null +++ b/ga10/interfaces/webui/templates/elements.html @@ -0,0 +1,20 @@ +{{define "content"}} +

Elements

+ + + + + + + + + + + + {{ range . }} + {{ template "elementsummarylist.html" . }} + {{end}} + +
NameDescriptionTagsProtocolEndpoint
+{{end}} + diff --git a/ga10/interfaces/webui/templates/elementsummarylist.html b/ga10/interfaces/webui/templates/elementsummarylist.html new file mode 100644 index 00000000..6c8cd02f --- /dev/null +++ b/ga10/interfaces/webui/templates/elementsummarylist.html @@ -0,0 +1,11 @@ +{{define "elementsummarylist.html"}} +{{ .Name }} +{{ .Description }} + {{ range .Tags }} + {{ . }} + {{end}} +{{ .Protocol }} +{{ .Endpoint }} +{{end}} + + diff --git a/ga10/interfaces/webui/templates/ev.html b/ga10/interfaces/webui/templates/ev.html new file mode 100644 index 00000000..08153107 --- /dev/null +++ b/ga10/interfaces/webui/templates/ev.html @@ -0,0 +1,27 @@ +{{define "content"}} +

Expected Value {{ .EV.Name }}

+ +
Information
+ + + + + + + + + + + + + + + + + + + +
FieldValue
Name {{ .EV.Name }}
Description {{ .EV.Description }}
ItemID {{ .EV.ItemID }}
Element {{ .E.Name }} @ {{ .E.Endpoint }} {{ .E.Protocol }}
Policy {{ .P.Name }} {{ .P.Intent }}
EVS Paramteres {{ template "genericList.html" .EV.EVS }}
+ + +{{end}} diff --git a/ga10/interfaces/webui/templates/evs.html b/ga10/interfaces/webui/templates/evs.html new file mode 100644 index 00000000..d78c650f --- /dev/null +++ b/ga10/interfaces/webui/templates/evs.html @@ -0,0 +1,27 @@ +{{template "base" .}} +{{define "content"}} +

Expected Values

+ + + + + + + + + + + + + + {{ range . }} + + + {{ template "evsummarylist.html" . }} + + + + {{end}} + +
NameDescriptionElementEndpointPolicyIntent
+{{end}} diff --git a/ga10/interfaces/webui/templates/evsummarylist.html b/ga10/interfaces/webui/templates/evsummarylist.html new file mode 100644 index 00000000..d46269db --- /dev/null +++ b/ga10/interfaces/webui/templates/evsummarylist.html @@ -0,0 +1,9 @@ +{{define "evsummarylist.html"}} +{{ .EV.Name }} +{{ .EV.Description }} +{{ .E.Name }} +{{ .E.Endpoint }} +{{ .P.Name }} + {{ .P.Intent }} + +{{end}} diff --git a/ga10/interfaces/webui/templates/genericList.html b/ga10/interfaces/webui/templates/genericList.html new file mode 100644 index 00000000..d0c15f53 --- /dev/null +++ b/ga10/interfaces/webui/templates/genericList.html @@ -0,0 +1,11 @@ +{{define "genericList.html"}} + + + {{ range $key, $value := . }} + + {{ end }} + +
{{ $key }} {{ $value }}
+{{end}} + + diff --git a/ga10/interfaces/webui/templates/help.html b/ga10/interfaces/webui/templates/help.html new file mode 100644 index 00000000..4e55fd69 --- /dev/null +++ b/ga10/interfaces/webui/templates/help.html @@ -0,0 +1,7 @@ +{{define "content"}} +
+

There is not a lot of help in this version either...

+

sorry.

+
+ +{{end}} \ No newline at end of file diff --git a/ga10/interfaces/webui/templates/home.html b/ga10/interfaces/webui/templates/home.html new file mode 100644 index 00000000..61e05f75 --- /dev/null +++ b/ga10/interfaces/webui/templates/home.html @@ -0,0 +1,157 @@ +{{define "content"}} +

{{ .Cfg.System.Name }}


+ +
+
+
+
+ +

{{ .Nes }}

+
+
+
+
+ +

{{ .Nps }}

+
+
+
+ +

{{ .Nevs }}

+
+
+
+ +

{{ .Nses }}

+
+
+
+
+
+
+ +

{{ .Ncs }}

+
+
+
+ +

{{ .Nrs }}

+
+
+
+ +

{{ .Nhs }}

+
+
+
+ +

{{ .Nprs }} / {{ .Nrus }}

+
+
+
+ +
+ +
+
+
+
+
Database
+
+ + + + + + +
Name {{ .Cfg.Database.Name }}
Connection {{ .Cfg.Database.Connection }}
+ +
+
+
+ +
+
+
Messaging
+
+ + + + + + + +
Broker {{ .Cfg.Messaging.Broker }}
Port {{ .Cfg.Messaging.Port }}
Client ID {{ .Cfg.Messaging.ClientID }}
+ +
+
+
+
+ +
+ +
+ + +
+
+
Services
+
+ + + + + + +
REST {{ if eq .Cfg.Rest.UseHTTP true }} + http + {{ else }} + https + {{ end }} + :{{ .Cfg.Rest.Port }}
Web {{ if eq .Cfg.Web.UseHTTP true }} + http + {{ else }} + https + {{ end }} + :{{ .Cfg.Web.Port }}
+ + + +
+
+
+ + + +
+
+ +
+ + + + + + + + +
Location {{ .Cfg.Logging.LogFileLocation }}
Entries {{ .Nlog }}
Size on disk {{ .Szlog }} bytes
Session update logging {{ if eq .Cfg.Logging.SessionUpdateLogging true }} + enabled + {{ else }} + disabled + {{ end }}
+
+
+
+ + +
+
+ + +
+ + + + +{{end}} \ No newline at end of file diff --git a/ga10/interfaces/webui/templates/ima.html b/ga10/interfaces/webui/templates/ima.html new file mode 100644 index 00000000..3ba94af0 --- /dev/null +++ b/ga10/interfaces/webui/templates/ima.html @@ -0,0 +1,10 @@ +{{define "ima.html"}} + + + + + +
ASCII Log {{ .ASCIILog }}
+{{end}} + + diff --git a/ga10/interfaces/webui/templates/log.html b/ga10/interfaces/webui/templates/log.html new file mode 100644 index 00000000..c74696aa --- /dev/null +++ b/ga10/interfaces/webui/templates/log.html @@ -0,0 +1,51 @@ +{{define "content"}} +

Log

+

Showing {{ .Amount }} entries of {{ .Count }}

+
+ + + + + + + + + + + + {{ range .LogEntries }} + + {{ if eq .Channel "SYS"}} + + {{else}} + + {{end}} + + + + + + + {{end}} + +
TimestampChannelOperationReferenceMessage
{{ epochToUTC .Timestamp }}{{ .Channel }}{{ .Operation }} + {{ if eq .RefType "element" }} + element + {{ else if eq .RefType "policy" }} + policy + {{ else if eq .RefType "expectedvalue" }} + expectedvalue + {{ else if eq .RefType "claim" }} + claim + {{ else if eq .RefType "result" }} + result + {{ else if eq .RefType "session" }} + session + {{ else }} + {{ .RefType }} + {{ end }} + {{ .Message }}
+{{end}} + + + diff --git a/ga10/interfaces/webui/templates/opaqueobject.html b/ga10/interfaces/webui/templates/opaqueobject.html new file mode 100644 index 00000000..9ca83d9d --- /dev/null +++ b/ga10/interfaces/webui/templates/opaqueobject.html @@ -0,0 +1,21 @@ +{{define "content"}} +

Opaque Object

+ + + + + + + + + + + + + + +
FieldValue
Short Description{{ .ShortDescription }}
Value{{ .Value }}
Type {{ .Type }}
Long Description{{ .LongDescription }}
+ + + +{{end}} diff --git a/ga10/interfaces/webui/templates/opaqueobjects.html b/ga10/interfaces/webui/templates/opaqueobjects.html new file mode 100644 index 00000000..e67880bb --- /dev/null +++ b/ga10/interfaces/webui/templates/opaqueobjects.html @@ -0,0 +1,22 @@ +{{define "content"}} +

Opaque Objects

+ + + + + + + + + + + {{ range . }} + + + + + {{end}} + +
ValueTypeShort Description
{{ .Value }} {{ .Type }} {{ .ShortDescription }}
+{{end}} + diff --git a/ga10/interfaces/webui/templates/policies.html b/ga10/interfaces/webui/templates/policies.html new file mode 100644 index 00000000..f97bb725 --- /dev/null +++ b/ga10/interfaces/webui/templates/policies.html @@ -0,0 +1,18 @@ +{{define "content"}} +

Policies

+ + + + + + + + + + {{ range . }} + {{ template "policysummarylist.html" . }} + {{end}} + +
NameIntentDescription
+{{end}} + diff --git a/ga10/interfaces/webui/templates/policy.html b/ga10/interfaces/webui/templates/policy.html new file mode 100644 index 00000000..d9d3eb37 --- /dev/null +++ b/ga10/interfaces/webui/templates/policy.html @@ -0,0 +1,24 @@ +{{define "content"}} +

Policy {{ .Name }}

+ +
Element Information
+ + + + + + + + + + + + + + + + +
FieldValue
Name {{ .Name }}
Description {{ .Description }}
ItemID {{ .ItemID }}
Intent {{ .Intent }}
Parameters {{ template "genericList.html" .Parameters }}
+ + +{{end}} diff --git a/ga10/interfaces/webui/templates/policysummarylist.html b/ga10/interfaces/webui/templates/policysummarylist.html new file mode 100644 index 00000000..a976be48 --- /dev/null +++ b/ga10/interfaces/webui/templates/policysummarylist.html @@ -0,0 +1,7 @@ +{{define "policysummarylist.html"}} +{{ .Name }} +{{ .Intent }} +{{ .Description }} +{{end}} + + diff --git a/ga10/interfaces/webui/templates/protocols.html b/ga10/interfaces/webui/templates/protocols.html new file mode 100644 index 00000000..9c07f210 --- /dev/null +++ b/ga10/interfaces/webui/templates/protocols.html @@ -0,0 +1,24 @@ +{{define "content"}} +

Protocols

+ + + + + + + + + + {{ range . }} + + + + {{end}} + +
NameDescriptionSupported Intents
{{ .Name }} {{ .Description }} + {{ range .Intents }} + {{ . }} + {{end}} +
+{{end}} + diff --git a/ga10/interfaces/webui/templates/result.html b/ga10/interfaces/webui/templates/result.html new file mode 100644 index 00000000..f1f335e6 --- /dev/null +++ b/ga10/interfaces/webui/templates/result.html @@ -0,0 +1,51 @@ +{{define "content"}} +

Result

+ +
Element Information
+ + + + + + + + + + + + + + + + + + +
FieldValue
Rule Name {{ .R.RuleName }}
VerifiedAt {{ epochToUTC .R.VerifiedAt }}
Result {{ template "resultvalue.html" .R.Result }}
Expected Value {{ .R.EV_Name }}
Element {{ .R.EVEName }}
Policy {{ .R.EVPName }}
Claim {{ .R.ClaimID }}
Session {{ .R.SessionID }}
Message {{ .R.Message }}
+ + + +
Footer
+ +
+
+
+ + + + + + + + + + + + +
FieldValue
Hash {{ encodeAsHexString .R.Footer.Hash }}
Signature {{ encodeAsHexString .R.Footer.Signature }}
+ +
+
+
+ +{{end}} + diff --git a/ga10/interfaces/webui/templates/results.html b/ga10/interfaces/webui/templates/results.html new file mode 100644 index 00000000..c971e4bd --- /dev/null +++ b/ga10/interfaces/webui/templates/results.html @@ -0,0 +1,37 @@ +{{define "content"}} +

Results

+ + + + + + + + + + + + + {{ range . }} + + + + + + +{{ if not .EV_Name}} + +{{ else }} + +{{ end }} + + + + + {{end}} + +
RuleNameVerifiedAtResultEVLinksMessage
{{ .RuleName }}{{ epochToUTC .VerifiedAt }} +{{ template "resultvalue.html" .Result }} + +-{{ .EV_Name }} ( {{ .EVEName }} | {{ .EVPName }} )C | S {{ .Message }}
+{{end}} diff --git a/ga10/interfaces/webui/templates/resultvalue.html b/ga10/interfaces/webui/templates/resultvalue.html new file mode 100644 index 00000000..6b6ba6df --- /dev/null +++ b/ga10/interfaces/webui/templates/resultvalue.html @@ -0,0 +1,24 @@ +{{define "resultvalue.html"}} + {{ if eq . 0}} + Pass + {{else if eq . 9001}} + Fail + + {{else if eq . 9010}} + Verify Call Failure + {{else if eq . 9098}} + Verify Claim Error + {{else if eq . 9099}} + No Result + + {{else if eq . 9997}} + Missing Expected Value + {{else if eq . 9998}} + Rule Call Failure + {{else if eq . 9999}} + Unset Result Value + + {{else}} + Unknown Error + {{end}} +{{end}} diff --git a/ga10/interfaces/webui/templates/rules.html b/ga10/interfaces/webui/templates/rules.html new file mode 100644 index 00000000..a1d716a8 --- /dev/null +++ b/ga10/interfaces/webui/templates/rules.html @@ -0,0 +1,28 @@ +{{define "content"}} +

Rules

+ + + + + + + + + + + {{ range . }} + + + + {{end}} + +
Name Description
{{ .Name }} + {{ if eq .NeedsEV true}} + EV Required + {{else}} + - + {{end}} + + {{ .Description }}
+{{end}} + diff --git a/ga10/interfaces/webui/templates/scraps b/ga10/interfaces/webui/templates/scraps new file mode 100644 index 00000000..139cc467 --- /dev/null +++ b/ga10/interfaces/webui/templates/scraps @@ -0,0 +1,45 @@ + + diff --git a/ga10/interfaces/webui/templates/session.html b/ga10/interfaces/webui/templates/session.html new file mode 100644 index 00000000..5c63c75e --- /dev/null +++ b/ga10/interfaces/webui/templates/session.html @@ -0,0 +1,175 @@ +{{define "content"}} +

Session

+ + + + + + + + + + + + + {{ if eq .S.Timing.Closed "0" }} + + {{ else }} + + {{ end }} + + + + + + +
FieldValue
ItemID {{ .S.ItemID }}
Opened {{ epochToUTC .S.Timing.Opened }}
ClosedSession still open {{ epochToUTC .S.Timing.Closed }}
#Claims {{ len .S.ClaimList }}
#Results {{ len .S.ResultList }}
Message {{ .S.Message }}
+ +
+ +
+
+
+ + + +
+ +
+ + + + {{ range .CS }} + + {{ end }} + +
{{ .BodyType }}
+ +
+
+
+ +
+ +
+
+
+ + + +
+ +
+ + + + {{ range .RS }} + + + + + + {{ end }} + +
{{ .RuleName }} + {{ template "resultvalue.html" .Result }} + + + {{ epochToUTC .VerifiedAt }}
+ +
+
+
+ +
+ + + + +
Footer
+ + +
+
+
+ + + + + + + + + + + + +
FieldValue
Hash {{ encodeAsHexString .S.Footer.Hash }}
Signature {{ encodeAsHexString .S.Footer.Signature }}
+ +
+
+
+ + + + + + + +{{end}} + diff --git a/ga10/interfaces/webui/templates/sessions.html b/ga10/interfaces/webui/templates/sessions.html new file mode 100644 index 00000000..74b97083 --- /dev/null +++ b/ga10/interfaces/webui/templates/sessions.html @@ -0,0 +1,31 @@ +{{define "content"}} +

Sessions

+ + + + + + + + + + + {{ range . }} + + + + + + + + {{end}} + +
OpenedClosedMessage# Claims/Results
{{ epochToUTC .Timing.Opened }} + {{ if eq .Timing.Closed "0" }} + Session still open + {{ else }} + {{ epochToUTC .Timing.Closed }} + {{ end }} + {{ .Message }}{{ len .ClaimList }} / {{ len .ResultList }}
+{{end}} + diff --git a/ga10/interfaces/webui/templates/tpm2.html b/ga10/interfaces/webui/templates/tpm2.html new file mode 100644 index 00000000..2295f1de --- /dev/null +++ b/ga10/interfaces/webui/templates/tpm2.html @@ -0,0 +1,14 @@ +{{define "tpm2.html"}} + + + + + + + +
TPM Device {{ .Device }}
Endorsement Key {{ template "tpm2key.html" .EK }} +
Atteststion Key {{ template "tpm2key.html" .AK }} +
+{{end}} + + diff --git a/ga10/interfaces/webui/templates/tpm2key.html b/ga10/interfaces/webui/templates/tpm2key.html new file mode 100644 index 00000000..e4e04c76 --- /dev/null +++ b/ga10/interfaces/webui/templates/tpm2key.html @@ -0,0 +1,11 @@ +{{define "tpm2key.html"}} + + + + + + +
Handle {{ .Handle }}
Name {{ .Name }}
PEM {{ .Public }}
+{{end}} + + diff --git a/ga10/interfaces/webui/templates/txt.html b/ga10/interfaces/webui/templates/txt.html new file mode 100644 index 00000000..76ebae75 --- /dev/null +++ b/ga10/interfaces/webui/templates/txt.html @@ -0,0 +1,9 @@ +{{define "txt.html"}} + + + + +
TXT-Stat Log {{ .Log }}
+{{end}} + + diff --git a/ga10/interfaces/webui/templates/uefi.html b/ga10/interfaces/webui/templates/uefi.html new file mode 100644 index 00000000..cb5f8b5c --- /dev/null +++ b/ga10/interfaces/webui/templates/uefi.html @@ -0,0 +1,10 @@ +{{define "uefi.html"}} + + + + + +
Eventlog {{ .Eventlog }}
+{{end}} + + diff --git a/ga10/logging/logging.go b/ga10/logging/logging.go new file mode 100644 index 00000000..ae10ae94 --- /dev/null +++ b/ga10/logging/logging.go @@ -0,0 +1,74 @@ +package logging + +import( + "log" + "fmt" + "context" + "sync" + "os" + + "a10/utilities" + "a10/datalayer" + "a10/structures" + "a10/configuration" +) + + +func MakeLogEntry(ch string, op string, itemid string, itemtype string, message string){ + + logentry := structures.LogEntry{ utilities.MakeID(), utilities.MakeTimestamp(), ch, op, itemid, itemtype, message, []byte{} } + + if digest,err := utilities.MakeSHA256(logentry); err != nil { + log.Printf("WARNING: Encoding log entry failed with %w. Entry not made.",err) + } else { + logentry.Hash = digest + + // these can be run in parallel. We don't care about return results + var wg sync.WaitGroup + + wg.Add(3) + + go writeToDB(&wg,logentry) + go writeToMessaging(&wg,logentry) + go writeToLogfile(&wg,logentry) + + wg.Wait() + } + +} + + +func writeToDB(wgrp *sync.WaitGroup, l structures.LogEntry){ + _,_ = datalayer.DB.Collection("log").InsertOne(context.TODO(), l) + + wgrp.Done() +} + + +func writeToMessaging(wgrp *sync.WaitGroup, l structures.LogEntry){ + ch := fmt.Sprintf("AS/%s",l.Channel) + _ = datalayer.MESSAGING.Publish(ch,0,false,makeCSVText(l)) + + wgrp.Done() +} + + +func writeToLogfile(wgrp *sync.WaitGroup, l structures.LogEntry){ + f,err := os.OpenFile(configuration.ConfigData.Logging.LogFileLocation, + os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + log.Println("Error opening log file ",configuration.ConfigData.Logging.LogFileLocation) + } + defer f.Close() + + if _, err := f.WriteString(makeCSVText(l)); err != nil { + log.Println("Error writring to log file ",configuration.ConfigData.Logging.LogFileLocation) + } + + wgrp.Done() +} + + +func makeCSVText(l structures.LogEntry) string { + return fmt.Sprintf("%s,%v,%s,%s,%s,%s,%q\n",l.ItemID, l.Timestamp, l.Channel, l.Operation, l.RefID, l.RefType, l.Message) +} \ No newline at end of file diff --git a/ga10/operations/attestation.go b/ga10/operations/attestation.go new file mode 100644 index 00000000..b4becb08 --- /dev/null +++ b/ga10/operations/attestation.go @@ -0,0 +1,98 @@ +package operations + +import( + "fmt" + + "a10/structures" + "a10/utilities" +) + +type hashablePartClaim struct { + BodyType string + Header structures.ClaimHeader + Body map[string]interface{} +} + + + +//This function calls the attestation mechanism that eventually calls the TA on some client +// ItemIDs for Element, Policy and String are provided in eid, pid and sid +// A map of additional parameters in aps +func Attest(element structures.Element, policy structures.Policy, session structures.Session, aps map[string]interface{}) (string, error) { + + var body map[string]interface{} = make(map[string]interface{}) + + /* 1. create a protocol object + 2. set the timer start + 3. dispatch control over to the protocol object + 4. stop timer + 5. create claim + 6. store claim + 7. add claim to the session + 8. return + */ + + // Step 1 ****************************************************** + + protocol := element.Protocol + protocolObject,_ := GetProtocol(protocol) + + // TODO: Need to check that the protocol exists here otherwise the acall below fails with a panic + + // Step 2 ****************************************************** + + claimTimerStart := utilities.MakeTimestamp() + + // Step 3 ****************************************************** + + aCALL := protocolObject.CallFunction + returnedBody,bodytype := aCALL( element, policy, session, aps ) + + if bodytype == "*ERROR" { + body["ERROR"] = returnedBody + } else { + body = returnedBody + } + + // Step 4 ****************************************************** + + claimTimerFinish := utilities.MakeTimestamp() + + // Step 5 ****************************************************** + // NB: we have body and bodytype from above + + timing := structures.Timing{ claimTimerStart, claimTimerFinish } + header := structures.ClaimHeader{element, policy, session, timing} + footer,_ := hashAndSignClaim(hashablePartClaim{ bodytype, header, body }) + + c := structures.Claim{ "", bodytype, header, body, footer } + + // Step 6 + sid := session.ItemID + + cid,err := AddClaim( c ) // cid a string with the claim ID + if err != nil { + return "",fmt.Errorf("Error adding claim, session %v might still be open: %w",sid,err) + } + + fmt.Printf("Added claim %v\n",cid) + + // if AddClaim fails, we have a bigger problem, see above note + // If there is an error here, then we need a new claim type of "internal error" + // but of course, if we can't add a claim then we can not add an internal error claim ---just dump something on the log! + // plus specific logging to handle this - might denote on seriously fscked TA at the other end? + // This is kind of the same thing that happens if there protocol object ins't found + + // Step 7 + + sderr := AddClaimToSession(sid,cid) + if sderr != nil { + return "",fmt.Errorf("Error adding claim %v to session %v. Claim added, session may be still open: %w",cid,sid,err) + } + + // Step 8 + + return cid,nil +} + + diff --git a/ga10/operations/claims.go b/ga10/operations/claims.go new file mode 100644 index 00000000..ec8897af --- /dev/null +++ b/ga10/operations/claims.go @@ -0,0 +1,97 @@ +// This package contains the operations for managing elements in a system +// It provides +package operations + +import( + "fmt" + "context" + + "a10/structures" + "a10/utilities" + "a10/datalayer" + "a10/logging" + + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + +) + +func isClaimError(c structures.Claim) bool { + return c.BodyType == structures.CLAIMERROR +} + +func CountClaims() int64 { + return datalayer.Count("claims") +} + +// AddElement is a function that takes and element structure that has a BLANK Itemid field (empty string) and stores that +// element in some database +// Successful storage returns the itemid for that element and a nil error. +// An error is returned if an item id is given as part of the input structure. +func AddClaim(e structures.Claim) (string, error) { + if (e.ItemID != "") { + return "", ErrorItemIDIncluded + } else { + e.ItemID = utilities.MakeID() + _,dberr := datalayer.DB.Collection("claims").InsertOne(context.TODO(), e) + logging.MakeLogEntry("C","add",e.ItemID,"claim","") + return e.ItemID, dberr + } +} + + +// GetElements returns a map of itemids in the ID structure. If this structure is an empty map then no elements exist in the database. +func GetClaims() ([]structures.ID, error) { + var claims []structures.ID + + filter := bson.D{ {} } // Get all + options := options.Find().SetProjection(bson.D{{"itemid",1}}) + dbcursor,_ := datalayer.DB.Collection("claims").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&claims) + + return claims, dbcursorerror +} + +func GetClaimsAll() ([]structures.Claim, error) { + var claims []structures.Claim + + filter := bson.D{ {} } // Get all + options := options.Find().SetSort(bson.D{{"header.timing.requested",-1}}) + + dbcursor,_ := datalayer.DB.Collection("claims").Find(context.TODO(), filter, options) + dbcursorerror := dbcursor.All(context.TODO(),&claims) + + return claims, dbcursorerror +} + +func GetClaimsByElementID(eid string, maximumAmount int64) ([]structures.Claim, error) { + var claims []structures.Claim + + if maximumAmount<1 { + return claims, fmt.Errorf("Maximum amount must be a positive number") + } + + filter := bson.D{ {} } // Get all // TODO search for itemIDs only + options := options.Find().SetSort(bson.D{{"header.timing.requested",-1}}).SetLimit(maximumAmount) + dbcursor,_ := datalayer.DB.Collection("claims").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&claims) + + return claims, dbcursorerror +} + + +// GetElementByItemID returns a single element or error +func GetClaimByItemID(itemid string) (structures.Claim, error) { + var claim structures.Claim + + // discard the cursor, it will be an empty entry if nothing exists + filter := bson.D{ {"itemid", itemid} } + dbcursorerror := datalayer.DB.Collection("claims").FindOne(context.TODO(), filter).Decode(&claim) + + if claim.ItemID == "" { + return structures.Claim{}, ErrorItemNotFound + } else { + return claim, dbcursorerror + } +} + diff --git a/ga10/operations/elements.go b/ga10/operations/elements.go new file mode 100644 index 00000000..572b4b5d --- /dev/null +++ b/ga10/operations/elements.go @@ -0,0 +1,122 @@ +// This package contains the operations for managing elements in a system +// It provides +package operations + +import( + "context" + + "a10/structures" + "a10/utilities" + "a10/datalayer" + "a10/logging" + + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + +) + + +func CountElements() int64 { + return datalayer.Count("elements") +} + +// AddElement is a function that takes and element structure that has a BLANK Itemid field (empty string) and stores that +// element in some database +// Successful storage returns the itemid for that element and a nil error. +// An error is returned if an item id is given as part of the input structure. +func AddElement(e structures.Element) (string, error) { + if (e.ItemID != "") { + return "", ErrorItemIDIncluded + } else { + e.ItemID = utilities.MakeID() + _,dberr := datalayer.DB.Collection("elements").InsertOne(context.TODO(), e) + logging.MakeLogEntry("IM","add",e.ItemID,"element","") + + return e.ItemID, dberr + } +} + +// UpdateElement requires the complete structure, that is, it replaces the structure with the given itemid +func UpdateElement(replacement structures.Element) error { + filter := bson.D{ {"itemid", replacement.ItemID} } + updateresult,err := datalayer.DB.Collection("elements").ReplaceOne(context.TODO(), filter, replacement) + + if err != nil { + return err + } else if updateresult.MatchedCount != 1 || updateresult.ModifiedCount != 1 { + return ErrorItemNotUpdated + } else { + logging.MakeLogEntry("IM","update",replacement.ItemID,"element","") + return nil + } +} + +// DeleteElement takes an itemid as input +func DeleteElement(itemid string) error { + filter := bson.D{{"itemid",itemid}} + deleteresult, err := datalayer.DB.Collection("elements").DeleteOne(context.TODO(), filter) + + if err != nil { + return err + } else if deleteresult.DeletedCount != 1 { + return ErrorItemNotDeleted + } else { + logging.MakeLogEntry("IM","delete",itemid,"element","") + return nil + } + +} + + +// GetElements returns a map of itemids in the ID structure. If this structure is an empty map then no elements exist in the database. +func GetElements() ([]structures.ID, error) { + var elems []structures.ID + + filter := bson.D{ {} } // Get all + options := options.Find().SetProjection(bson.D{{"itemid",1}}).SetSort(bson.D{{"name",1}}) + dbcursor,_ := datalayer.DB.Collection("elements").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + +// GetElementsAll returns a map of every element. If this structure is an empty map then no elements exist in the database. +// This is only meant to be used sparingly, eg: when quering the UI to reduce load on the database +func GetElementsAll() ([]structures.Element, error) { + var elems []structures.Element + + filter := bson.D{ {} } // Get all + options := options.Find().SetSort(bson.D{{"name",1}}) + dbcursor,_ := datalayer.DB.Collection("elements").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + + return elems, dbcursorerror +} + +// GetElementByItemID returns a single element or error +func GetElementByItemID(itemid string) (structures.Element, error) { + var elem structures.Element + + // discard the cursor, it will be an empty entry if nothing exists + filter := bson.D{ {"itemid", itemid} } + dbcursorerror := datalayer.DB.Collection("elements").FindOne(context.TODO(), filter).Decode(&elem) + + if elem.ItemID == "" { + return structures.Element{}, ErrorItemNotFound + } else { + return elem, dbcursorerror + } +} + +// GetElementByName returns all elements with the given name or an empty list. +func GetElementsByName(name string) ([]structures.Element, error) { + var elems []structures.Element + + // discard the error, the dbcursor.All will deal with that case + filter := bson.D{ {"name", name} } + dbcursor,_ := datalayer.DB.Collection("elements").Find(context.TODO(), filter) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} \ No newline at end of file diff --git a/ga10/operations/expectedValues.go b/ga10/operations/expectedValues.go new file mode 100644 index 00000000..4f6e110b --- /dev/null +++ b/ga10/operations/expectedValues.go @@ -0,0 +1,170 @@ +// This package contains the operations for managing ExpectedValues in a system +// It provides +package operations + +import( + "context" + + "a10/structures" + "a10/utilities" + "a10/datalayer" + "a10/logging" + + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + +) + +func CountExpectedValues() int64 { + return datalayer.Count("expectedvalue") +} + +// AddExpectedValue is a function that takes and ExpectedValue structure that has a BLANK Itemid field (empty string) and stores that +// ExpectedValue in some database +// Successful storage returns the itemid for that ExpectedValue and a nil error. +// An error is returned if an item id is given as part of the input structure. +func AddExpectedValue(e structures.ExpectedValue) (string, error) { + if (e.ItemID != "") { + return "", ErrorItemIDIncluded + } else { + e.ItemID = utilities.MakeID() + _,dberr := datalayer.DB.Collection("expectedvalues").InsertOne(context.TODO(), e) + logging.MakeLogEntry("IM","add",e.ItemID,"expectedvalue","") + + return e.ItemID, dberr + } +} + +// UpdateExpectedValue requires the complete structure, that is, it replaces the structure with the given itemid +func UpdateExpectedValue(replacement structures.ExpectedValue) error { + filter := bson.D{ {"itemid", replacement.ItemID} } + updateresult,err := datalayer.DB.Collection("expectedvalues").ReplaceOne(context.TODO(), filter, replacement) + + if err != nil { + return err + } else if updateresult.MatchedCount != 1 || updateresult.ModifiedCount != 1 { + return ErrorItemNotUpdated + } else { + logging.MakeLogEntry("IM","update",replacement.ItemID,"expectedvalue","") + + return nil + } + +} + +// DeleteExpectedValue takes an itemid as input +func DeleteExpectedValue(itemid string) error { + filter := bson.D{{"itemid",itemid}} + deleteresult, err := datalayer.DB.Collection("expectedvalues").DeleteOne(context.TODO(), filter) + + if err != nil { + return err + } else if deleteresult.DeletedCount != 1 { + return ErrorItemNotDeleted + } else { + logging.MakeLogEntry("IM","delete",itemid,"expectedvalue","") + + return nil + } + +} + + +// GetExpectedValues returns a map of itemids in the ID structure. If this structure is an empty map then no ExpectedValues exist in the database. +func GetExpectedValues() ([]structures.ID, error) { + var elems []structures.ID + + filter := bson.D{ {} } // Get all + options := options.Find().SetProjection(bson.D{{"itemid",1}}) + dbcursor,_ := datalayer.DB.Collection("expectedvalues").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + + +func GetExpectedValuesAll() ([]structures.ExpectedValue, error) { + var elems []structures.ExpectedValue + + filter := bson.D{ {} } // Get all + dbcursor,_ := datalayer.DB.Collection("expectedvalues").Find(context.TODO(), filter) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + +// GetExpectedValueByItemID returns a single ExpectedValue or error +func GetExpectedValueByItemID(itemid string) (structures.ExpectedValue, error) { + var elem structures.ExpectedValue + + // discard the cursor, it will be an empty entry if nothing exists + filter := bson.D{ {"itemid", itemid} } + dbcursorerror := datalayer.DB.Collection("expectedvalues").FindOne(context.TODO(), filter).Decode(&elem) + + if elem.ItemID == "" { + return structures.ExpectedValue{}, ErrorItemNotFound + } else { + return elem, dbcursorerror + } +} + +// GetExpectedValueByName returns all ExpectedValues with the given name or an empty list. +func GetExpectedValuesByName(name string) ([]structures.ExpectedValue, error) { + var elems []structures.ExpectedValue + + // discard the error, the dbcursor.All will deal with that case + filter := bson.D{ {"name", name} } + dbcursor,_ := datalayer.DB.Collection("expectedvalues").Find(context.TODO(), filter) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + + +// GetExpectedValueByName returns all ExpectedValues with the given name or an empty list. +func GetExpectedValuesByPolicy(name string) ([]structures.ExpectedValue, error) { + var elems []structures.ExpectedValue + + // discard the error, the dbcursor.All will deal with that case + filter := bson.D{ {"policyID", name} } + dbcursor,_ := datalayer.DB.Collection("expectedvalues").Find(context.TODO(), filter) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + + +// GetExpectedValueByName returns all ExpectedValues with the given name or an empty list. +func GetExpectedValuesByElement(name string) ([]structures.ExpectedValue, error) { + var elems []structures.ExpectedValue + + // discard the error, the dbcursor.All will deal with that case + filter := bson.D{ {"elementID", name} } + dbcursor,_ := datalayer.DB.Collection("expectedvalues").Find(context.TODO(), filter) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + +// GetExpectedValueByName returns all ExpectedValues with the given name or an empty list. +func GetExpectedValueByElementAndPolicy(eid string, pid string) (structures.ExpectedValue, error) { + var elem structures.ExpectedValue + + // discard the cursor, it will be an empty entry if nothing exists + filter := bson.D{ + {"$and", + bson.A{ + bson.D{{"elementID", eid}}, + bson.D{{"policyID", pid}}, + }, + }, + } + dbcursorerror := datalayer.DB.Collection("expectedvalues").FindOne(context.TODO(), filter).Decode(&elem) + + if elem.ItemID == "" { + return structures.ExpectedValue{}, ErrorItemNotFound + } else { + return elem, dbcursorerror + } +} + diff --git a/ga10/operations/log.go b/ga10/operations/log.go new file mode 100644 index 00000000..5ba8b002 --- /dev/null +++ b/ga10/operations/log.go @@ -0,0 +1,28 @@ +package operations + +import( + "context" + + "a10/structures" + "a10/datalayer" + + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + +) + +func CountLogEntries() int64 { + return datalayer.Count("log") +} + +func GetLogEntries(maximumAmount int64) ([]structures.LogEntry,error) { + var logentries []structures.LogEntry + + filter := bson.D{ {} } // Get all + + options := options.Find().SetSort(bson.D{{"timestamp",-1}}).SetLimit(maximumAmount) + dbcursor,_ := datalayer.DB.Collection("log").Find(context.TODO(), filter, options) + dbcursorerror := dbcursor.All(context.TODO(),&logentries) + + return logentries, dbcursorerror +} \ No newline at end of file diff --git a/ga10/operations/opaqueobjects.go b/ga10/operations/opaqueobjects.go new file mode 100644 index 00000000..a0463e2d --- /dev/null +++ b/ga10/operations/opaqueobjects.go @@ -0,0 +1,77 @@ +// This package contains the operations for managing elements in a system +// It provides +package operations + +import( + "fmt" + "context" + + "a10/structures" + "a10/datalayer" + "a10/logging" + + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + +) + +func CountOpaqueOjects() int64 { + return datalayer.Count("hashes") +} + +func AddOpaqueObject(h structures.OpaqueObject) (string, error) { + options := options.Update().SetUpsert(true) + filter := bson.D{{"value",h.Value}} + //update := bson.D{{ "$set", bson.D{{ h }}}} + _,dberr := datalayer.DB.Collection("opaqueobjects").UpdateOne(context.TODO(), filter, h, options) + msg := fmt.Sprintf("%s,%s",h.Type,h.ShortDescription) + logging.MakeLogEntry("IM","add",h.Value,"object",msg) + return h.Value, dberr + +} + +func UpdateOpaqueObject(replacement structures.OpaqueObject) (string, error) { + return AddOpaqueObject(replacement) +} + +func DeleteOpaqueObject(v string) error { + filter := bson.D{{"value",v}} + deleteresult, err := datalayer.DB.Collection("opaqueobjects").DeleteOne(context.TODO(), filter) + + if err != nil { + return err + } else if deleteresult.DeletedCount != 1 { + return ErrorItemNotDeleted + } else { + logging.MakeLogEntry("IM","delete",v,"object","") + return nil + } +} + + +func GetOpaqueObjects() ([]structures.OpaqueObject, error) { + var elems []structures.OpaqueObject + + filter := bson.D{ {} } // Get all + dbcursor,_ := datalayer.DB.Collection("opaqueobjects").Find(context.TODO(), filter) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + + + +// GetElementByItemID returns a single element or error +func GetOpaqueObjectByValue(v string) (structures.OpaqueObject, error) { + var elem structures.OpaqueObject + + // discard the cursor, it will be an empty entry if nothing exists + filter := bson.D{ {"value", v} } + dbcursorerror := datalayer.DB.Collection("opaqueobjects").FindOne(context.TODO(), filter).Decode(&elem) + + if elem.Value == "" { + return structures.OpaqueObject{}, ErrorItemNotFound + } else { + return elem, dbcursorerror + } +} diff --git a/ga10/operations/operrors.go b/ga10/operations/operrors.go new file mode 100644 index 00000000..a02a5335 --- /dev/null +++ b/ga10/operations/operrors.go @@ -0,0 +1,16 @@ +package operations + +import( + "errors" +) + +var ( + ErrorItemIDIncluded = errors.New("ItemID included") + ErrorDatabaseError = errors.New("Database Error") + + ErrorItemNotUpdated = errors.New("Item not updated") + ErrorItemNotFound = errors.New("Item not found") + ErrorItemNotDeleted = errors.New("Element not deleted") + + +) \ No newline at end of file diff --git a/ga10/operations/policies.go b/ga10/operations/policies.go new file mode 100644 index 00000000..14b7346b --- /dev/null +++ b/ga10/operations/policies.go @@ -0,0 +1,122 @@ +// This package contains the operations for managing elements in a system +// It provides +package operations + +import( + "context" + + "a10/structures" + "a10/utilities" + "a10/datalayer" + "a10/logging" + + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + +) + +func CountPolicies() int64 { + return datalayer.Count("policies") +} + +// AddPolicy is a function that takes and element structure that has a BLANK Itemid field (empty string) and stores that +// element in some database +// Successful storage returns the itemid for that element and a nil error. +// An error is returned if an item id is given as part of the input structure. +func AddPolicy(p structures.Policy) (string, error) { + if (p.ItemID != "") { + return "", ErrorItemIDIncluded + } else { + p.ItemID = utilities.MakeID() + _,dberr := datalayer.DB.Collection("policies").InsertOne(context.TODO(), p) + logging.MakeLogEntry("IM","add",p.ItemID,"policy","") + + return p.ItemID, dberr + } +} + +// UpdateElement requires the complete structure, that is, it replaces the structure with the given itemid +func UpdatePolicy(replacement structures.Policy) error { + filter := bson.D{ {"itemid", replacement.ItemID} } + updateresult,err := datalayer.DB.Collection("policies").ReplaceOne(context.TODO(), filter, replacement) + + if err != nil { + return err + } else if updateresult.MatchedCount != 1 || updateresult.ModifiedCount != 1 { + return ErrorItemNotUpdated + } else { + logging.MakeLogEntry("IM","update",replacement.ItemID,"policy","") + + return nil + } + +} + +// DeleteElement takes an itemid as input +func DeletePolicy(itemid string) error { + filter := bson.D{{"itemid",itemid}} + deleteresult, err := datalayer.DB.Collection("policies").DeleteOne(context.TODO(), filter) + + if err != nil { + return err + } else if deleteresult.DeletedCount != 1 { + return ErrorItemNotDeleted + } else { + logging.MakeLogEntry("IM","delete",itemid,"policy","") + + return nil + } + +} + + +// GetElements returns a map of itemids in the ID structure. If this structure is an empty map then no elements exist in the database. +func GetPolicies() ([]structures.ID, error) { + var elems []structures.ID + + filter := bson.D{ {} } // Get all + options := options.Find().SetProjection(bson.D{{"itemid",1}}).SetSort(bson.D{{"name",1}}) + dbcursor,_ := datalayer.DB.Collection("policies").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + + +func GetPoliciesAll() ([]structures.Policy, error) { + var elems []structures.Policy + + filter := bson.D{ {} } // Get all + options := options.Find().SetSort(bson.D{{"name",1}}) + dbcursor,_ := datalayer.DB.Collection("policies").Find(context.TODO(), filter, options) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror +} + +// GetElementByItemID returns a single element or error +func GetPolicyByItemID(itemid string) (structures.Policy, error) { + var pol structures.Policy + + // discard the cursor, it will be an empty entry if nothing exists + filter := bson.D{ {"itemid", itemid} } + dbcursorerror := datalayer.DB.Collection("policies").FindOne(context.TODO(), filter).Decode(&pol) + + if pol.ItemID == "" { + return structures.Policy{}, ErrorItemNotFound + } else { + return pol, dbcursorerror + } +} + +// GetElementByName returns all elements with the given name or an empty list. +func GetPoliciesByName(name string) ([]structures.Policy, error) { + var pol []structures.Policy + + // discard the error, the dbcursor.All will deal with that case + filter := bson.D{ {"name", name} } + dbcursor,_ := datalayer.DB.Collection("policies").Find(context.TODO(), filter) + dbcursorerror := dbcursor.All(context.TODO(),&pol) + + return pol, dbcursorerror +} \ No newline at end of file diff --git a/ga10/operations/protocols.go b/ga10/operations/protocols.go new file mode 100644 index 00000000..91a0cf71 --- /dev/null +++ b/ga10/operations/protocols.go @@ -0,0 +1,35 @@ +package operations + +import( + "fmt" + "golang.org/x/exp/maps" + + "a10/structures" + "a10/datalayer" + "a10/logging" +) + +func CountProtocols() int64 { + return datalayer.Count("protocols") +} + +// GetElements returns a map of itemids in the ID structure. If this structure is an empty map then no elements exist in the database. +func GetProtocols() []structures.Protocol { + return maps.Values(datalayer.ProtocolsDatabase) +} + +func GetProtocol(n string) (structures.Protocol, error) { + r,exists := datalayer.ProtocolsDatabase[n] + + if (exists) { + return r,nil + } else { + return r,fmt.Errorf("No such protocol") + } +} + +func AddProtocol(p structures.Protocol) { + k := p.Name + datalayer.ProtocolsDatabase[k] = p + logging.MakeLogEntry("IM","add","","protocol",k) +} \ No newline at end of file diff --git a/ga10/operations/results.go b/ga10/operations/results.go new file mode 100644 index 00000000..f61b8921 --- /dev/null +++ b/ga10/operations/results.go @@ -0,0 +1,90 @@ +// This package contains the operations for managing elements in a system +// It provides +package operations + +import( + "fmt" + "context" + + "a10/structures" + "a10/utilities" + "a10/datalayer" + "a10/logging" + + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + +) + +func CountResults() int64 { + return datalayer.Count("results") +} + +// AddElement is a function that takes and element structure that has a BLANK Itemid field (empty string) and stores that +// element in some database +// Successful storage returns the itemid for that element and a nil error. +// An error is returned if an item id is given as part of the input structure. +func AddResult(e structures.Result) (string, error) { + if (e.ItemID != "") { + return "", ErrorItemIDIncluded + } else { + e.ItemID = utilities.MakeID() + _,dberr := datalayer.DB.Collection("results").InsertOne(context.TODO(), e) + logging.MakeLogEntry("R","add",e.ItemID,"result",fmt.Sprintf("%v",e.Result) ) + return e.ItemID, dberr + } +} + + +// GetElements returns a map of itemids in the ID structure. If this structure is an empty map then no elements exist in the database. +func GetResults() ([]structures.ID, error) { + var results []structures.ID + + filter := bson.D{ {} } // Get all + options := options.Find().SetProjection(bson.D{{"itemid",1}}) + dbcursor,_ := datalayer.DB.Collection("results").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&results) + + return results, dbcursorerror +} + + +func GetResultsAll() ([]structures.Result, error) { + var results []structures.Result + + filter := bson.D{ {} } // Get all + options := options.Find().SetSort(bson.D{{"verifiedat",-1}}) + dbcursor,_ := datalayer.DB.Collection("results").Find(context.TODO(), filter, options) + dbcursorerror := dbcursor.All(context.TODO(),&results) + + return results, dbcursorerror +} + + +func GetResultsByElementID(eid string, maximumAmount int64) ([]structures.Result, error) { + var Results []structures.Result + + filter := bson.D{ {} } // Get all // TODO search for itemIDs only + options := options.Find().SetSort(bson.D{{"verifiedAt",-1}}).SetLimit(maximumAmount) + dbcursor,_ := datalayer.DB.Collection("results").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&Results) + + return Results, dbcursorerror +} + + +// GetElementByItemID returns a single element or error +func GetResultByItemID(itemid string) (structures.Result, error) { + var Result structures.Result + + // discard the cursor, it will be an empty entry if nothing exists + filter := bson.D{ {"itemid", itemid} } + dbcursorerror := datalayer.DB.Collection("results").FindOne(context.TODO(), filter).Decode(&Result) + + if Result.ItemID == "" { + return structures.Result{}, ErrorItemNotFound + } else { + return Result, dbcursorerror + } +} + diff --git a/ga10/operations/rules.go b/ga10/operations/rules.go new file mode 100644 index 00000000..a8e896e3 --- /dev/null +++ b/ga10/operations/rules.go @@ -0,0 +1,44 @@ +package operations + +import( + "errors" + "sort" + "golang.org/x/exp/maps" + + "a10/structures" + "a10/datalayer" + "a10/logging" +) + +func CountRules() int64 { + return datalayer.Count("rules") +} + +// GetElements returns a map of itemids in the ID structure. If this structure is an empty map then no elements exist in the database. +func GetRules() []structures.Rule { + keys := maps.Keys(datalayer.RulesDatabase) + sort.Strings(keys) + + vals := make([]structures.Rule, 0) // empty + for _,k := range keys { + vals = append(vals,datalayer.RulesDatabase[k]) + } + return vals + +} + +func GetRule(n string) (structures.Rule, error) { + r,exists := datalayer.RulesDatabase[n] + + if (exists) { + return r,nil + } else { + return r,errors.New("No such rule") + } +} + +func AddRule(r structures.Rule) { + k := r.Name + datalayer.RulesDatabase[k] = r + logging.MakeLogEntry("IM","add","","rule",k) +} \ No newline at end of file diff --git a/ga10/operations/sessions.go b/ga10/operations/sessions.go new file mode 100644 index 00000000..249b0d24 --- /dev/null +++ b/ga10/operations/sessions.go @@ -0,0 +1,196 @@ +// This package contains the operations for managing elements in a system +// It provides +package operations + +import( + "context" + "fmt" + "a10/structures" + "a10/utilities" + "a10/datalayer" + "a10/logging" + "a10/configuration" + + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/bson" + +) + +func CountSessions() int64 { + count, err := datalayer.DB.Collection("sessions").EstimatedDocumentCount(context.TODO()) + if err != nil { + return -1 + } else { + return count + } +} + +// AddElement is a function that takes and element structure that has a BLANK Itemid field (empty string) and stores that +// element in some database +// Successful storage returns the itemid for that element and a nil error. +// An error is returned if an item id is given as part of the input structure. +func OpenSession(msg string) (string, error) { + // construct the session object + t := structures.SessionTiming{ utilities.MakeTimestamp(), "0" } + s := structures.Session{ utilities.MakeID(), t, []string{}, []string{}, msg, structures.SessionFooter{}} + // write to database + _,dberr := datalayer.DB.Collection("sessions").InsertOne(context.TODO(), s) + logging.MakeLogEntry("S","open",s.ItemID,"session",msg) + + return s.ItemID, dberr +} + + +type hashablePartSession struct { + ItemID string + Timing structures.SessionTiming + ClaimList []string + ResultList []string + Message string +} + +// We close the session and sign it +func CloseSession(itemid string) error { + + //Get the session, return error if not found + session,err := GetSessionByItemID(itemid) + if err != nil { + return fmt.Errorf("Element not found %v : %v",itemid,err) + } + + //Check if the session isn't already closed + if session.Timing.Closed != "0" { + return fmt.Errorf("Session already closed %v : %v",itemid,err) + } + + //Update the session + session.Timing.Closed = utilities.MakeTimestamp() + + // hash and sign the session + footer,_ := hashAndSignSession(hashablePartSession{ session.ItemID, session.Timing, session.ClaimList, session.ResultList, session.Message }) + session.Footer = footer + + //Write to database + filter := bson.D{ {"itemid", itemid} } + closedSession,err := datalayer.DB.Collection("sessions").ReplaceOne(context.TODO(), filter, session) + + if err != nil { + return fmt.Errorf("Database error in close session: %v",err) + } else if closedSession.MatchedCount != 1 || closedSession.ModifiedCount != 1 { + return fmt.Errorf("Session not updated: %v",err) + } else { + logging.MakeLogEntry("S","close",itemid,"session","") + return nil + } +} + + + +func AddClaimToSession(sid string, cid string) error { + //Get the session, return error if not found + session,err := GetSessionByItemID(sid) + if err != nil { + return fmt.Errorf("Element not found %v : %v",sid,err) + } + + //ensure that the claim exists + _,err = GetClaimByItemID(cid) + if err != nil { + return fmt.Errorf("Claim %v (for session) not found %v : %v",cid,sid,err) + } + + //Update the session + session.ClaimList = append(session.ClaimList, cid) + + //Write to database + filter := bson.D{ {"itemid", sid} } + updatedsession,err := datalayer.DB.Collection("sessions").ReplaceOne(context.TODO(), filter, session) + + if err != nil { + return fmt.Errorf("Database error in add claim to session: %w",err) + } else if updatedsession.MatchedCount != 1 || updatedsession.ModifiedCount != 1 { + return fmt.Errorf("Session not updated: %w",err) + } else { + if configuration.ConfigData.Logging.SessionUpdateLogging == true { + logging.MakeLogEntry("S","update",sid,"session",fmt.Sprintf("claim,%s",cid)) + } + return nil + } +} + + +func AddResultToSession(sid string, rid string) error { + //Get the session, return error if not found + session,err := GetSessionByItemID(sid) + if err != nil { + return fmt.Errorf("Element not found %v : %v",sid,err) + } + + //ensure that the claim exists + _,err = GetResultByItemID(rid) + if err != nil { + return fmt.Errorf("Result %v (for session) not found %v : %v",rid,sid,err) + } + + //Update the session + session.ResultList = append(session.ResultList, rid) + + //Write to database + filter := bson.D{ {"itemid", sid} } + updatedsession,err := datalayer.DB.Collection("sessions").ReplaceOne(context.TODO(), filter, session) + + if err != nil { + return fmt.Errorf("Database returned an error %w",err) + } else if updatedsession.MatchedCount != 1 || updatedsession.ModifiedCount != 1 { + return fmt.Errorf("Session not updated. Error if any is %w",err) + } else { + if configuration.ConfigData.Logging.SessionUpdateLogging == true { + logging.MakeLogEntry("S","update",sid,"session",fmt.Sprintf("result,%s",rid)) + } + return nil + } +} + + + +// GetElementByItemID returns a single element or error +func GetSessionByItemID(itemid string) (structures.Session, error) { + var elem structures.Session + + // discard the cursor, it will be an empty entry if nothing exists + filter := bson.D{ {"itemid", itemid} } + dbcursorerror := datalayer.DB.Collection("sessions").FindOne(context.TODO(), filter).Decode(&elem) + + if elem.ItemID == "" { + return structures.Session{}, ErrorItemNotFound + } else { + return elem, dbcursorerror + } +} + + +// GetElements returns a map of itemids in the ID structure. If this structure is an empty map then no elements exist in the database. +func GetSessions() ([]structures.SessionSummary, error) { + var elems []structures.SessionSummary + + filter := bson.D{ {} } // Get all + options := options.Find().SetProjection(bson.D{{"itemid",1},{"timing.opened",1},{"timing.closed",1}}) + dbcursor,_ := datalayer.DB.Collection("sessions").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror + +} + +func GetSessionsAll() ([]structures.Session, error) { + var elems []structures.Session + + filter := bson.D{ {} } // Get all + options := options.Find().SetSort(bson.D{{"timing.opened",-1}}) + + dbcursor,_ := datalayer.DB.Collection("sessions").Find(context.TODO(), filter,options) + dbcursorerror := dbcursor.All(context.TODO(),&elems) + + return elems, dbcursorerror + +} \ No newline at end of file diff --git a/ga10/operations/signingFunctions.go b/ga10/operations/signingFunctions.go new file mode 100644 index 00000000..9730107e --- /dev/null +++ b/ga10/operations/signingFunctions.go @@ -0,0 +1,79 @@ +package operations + +import( + "fmt" + + "crypto" + "crypto/rsa" + "crypto/rand" + + "a10/structures" + "a10/utilities" +) + +var publickey *rsa.PublicKey +var privatekey *rsa.PrivateKey + +func init() { + fmt.Printf("generating private, public key pair for claim signing - just for this session so no chance to verify later. THese keys MUST be external\n") + + privatekey,_ = rsa.GenerateKey(rand.Reader, 2048) + publickey = &privatekey.PublicKey +} + + + +func hashAndSignClaim(h hashablePartClaim) (structures.ClaimFooter,error) { + digest,err := utilities.MakeSHA256(h) + if err != nil { + return structures.ClaimFooter{ []byte{}, []byte{} }, fmt.Errorf("hashAndSignfailed with %v",err) + } + + signature, _ := rsa.SignPSS(rand.Reader, privatekey, crypto.SHA256, digest, nil) + + err = rsa.VerifyPSS(publickey, crypto.SHA256, digest, signature, nil) + if err!=nil { + return structures.ClaimFooter{ []byte{}, []byte{} }, fmt.Errorf("Verification of hashAndSignfailed with %v",err) + } + + return structures.ClaimFooter{ digest, signature }, nil +} + + + + + +func hashAndSignResult(h hashablePartResult) (structures.ResultFooter,error) { + digest,err := utilities.MakeSHA256(h) + if err != nil { + return structures.ResultFooter{ []byte{}, []byte{} }, fmt.Errorf("hashAndSignfailed with %v",err) + } + + signature, _ := rsa.SignPSS(rand.Reader, privatekey, crypto.SHA256, digest, nil) + + err = rsa.VerifyPSS(publickey, crypto.SHA256, digest, signature, nil) + if err!=nil { + return structures.ResultFooter{ []byte{}, []byte{} }, fmt.Errorf("Verification of hashAndSignfailed with %v",err) + } + + return structures.ResultFooter{ digest, signature }, nil +} + + + + +func hashAndSignSession(h hashablePartSession) (structures.SessionFooter,error) { + digest,err := utilities.MakeSHA256(h) + if err != nil { + return structures.SessionFooter{ []byte{}, []byte{} }, fmt.Errorf("hashAndSignfailed with %v",err) + } + + signature, _ := rsa.SignPSS(rand.Reader, privatekey, crypto.SHA256, digest, nil) + + err = rsa.VerifyPSS(publickey, crypto.SHA256, digest, signature, nil) + if err!=nil { + return structures.SessionFooter{ []byte{}, []byte{} }, fmt.Errorf("Verification of hashAndSignfailed with %v",err) + } + + return structures.SessionFooter{ digest, signature }, nil +} \ No newline at end of file diff --git a/ga10/operations/verification.go b/ga10/operations/verification.go new file mode 100644 index 00000000..2652457b --- /dev/null +++ b/ga10/operations/verification.go @@ -0,0 +1,137 @@ +package operations + +import( + "fmt" + "reflect" + + "a10/structures" + "a10/utilities" + +) + +type hashablePartResult struct { + ClaimID string + ClaimFooter structures.ClaimFooter + SessionID structures.Session + ExpectedValue structures.ExpectedValue + Parameters map[string]interface{} + Message string + RuleName string + VerifiedAt structures.Timestamp + Result structures.ResultValue +} + +func checkClaimError(claim structures.Claim) (structures.ResultValue, string) { + if isClaimError(claim) == true { // function from claims.go + return structures.VerifyClaimErrorAttempt,fmt.Sprintf("Attempt to verify a claim error: %v",claim.ItemID) + } else { + return structures.UnsetResultValue,"" + } +} + +func checkRuleObjectExists(rule structures.Rule) (structures.ResultValue, string) { + if rule.CallFunction == nil { + return structures.RuleCallFailure,fmt.Sprintf("Requested rule %v has no call function",rule.Name) + } else { + return structures.UnsetResultValue,"" + } +} + +func getEV(claim structures.Claim, rule structures.Rule) (structures.ExpectedValue, error) { + fmt.Println("Step 2 - getting EV") + + // if the rule does need an EV, then we get it and return whatever comes back + // if err is not nil then there was some error, usualy no EV for that E,P pair + // but it could be something worse, eg: datalayer failure, but this is unlikely + if rule.NeedsEV == true { + e := claim.Header.Element.ItemID + p := claim.Header.Policy.ItemID + + ev,err := GetExpectedValueByElementAndPolicy(e,p) + + return ev,err + } + + // didn't need and EV, so nothing to report + return structures.ExpectedValue{},nil +} + +func Verify(claim structures.Claim, rule structures.Rule, session structures.Session, rps map[string]interface{}) (string, structures.ResultValue, error) { + + // these are default values and shouldn't occur in reality... + var returnedRV structures.ResultValue = structures.UnsetResultValue + var returnedMSG string = "Verify not processed" + + // required variables + var ev structures.ExpectedValue + + + // Start ****************************************************** + // 0 + returnedRV,returnedMSG = checkClaimError(claim) + + // if we are still unset then we proceed with the verification + if returnedRV == structures.UnsetResultValue { + fmt.Println("dealing with the ev") + ev, err := getEV(claim,rule) + if err != nil { + fmt.Println("dealing with the ev") + + returnedRV = structures.MissingExpectedValue + returnedMSG = fmt.Sprintf("Rule %v requries an expected value for e,p pair %v and %v and one was not found: %w",rule.Name,claim.Header.Element.ItemID,claim.Header.Policy.ItemID,err.Error()) + } else { + + // Now + fmt.Printf("Calling %v with %v %v %v \n",rule.Name, ev, session, rps) + fmt.Printf("Calling %v with %v %v %v \n",reflect.TypeOf(rule.Name), reflect.TypeOf(ev), reflect.TypeOf(session), reflect.TypeOf(rps)) + + aCALL := rule.CallFunction + returnedRV,returnedMSG,err = aCALL( claim, rule.Name, ev, session, rps ) + if err != nil { + + fmt.Println("Step 3 -err") + + returnedRV = structures.VerifyCallFailure + returnedMSG = fmt.Sprintf("Rule %v call failed with message %v and error %w",rule.Name,returnedMSG,err.Error()) // this should be the returnedMSG form the line above + } + } + + } + + + // Step 4 ****************************************************** + fmt.Println("Step 4") + + verifiedAt := utilities.MakeTimestamp() + + // Step 5 ****************************************************** + + footer,_ := hashAndSignResult(hashablePartResult{ claim.ItemID, claim.Footer, session, ev, rps, returnedMSG, rule.Name, verifiedAt, returnedRV }) + r := structures.Result{ "", claim.ItemID, claim.Footer, session, ev, rps, returnedMSG, rule.Name, verifiedAt, returnedRV, footer } + + // Step 6 ****************************************************** + // This actually returns and error back which should be handled by the caller + + sid := session.ItemID + + rid,err := AddResult( r ) // cid a string with the claim ID + if err != nil { + return "",structures.NoResult,fmt.Errorf("Error adding result, session %v might still be open: %w",sid,err) + } + + // Step 7 ****************************************************** + // This actually returns and error back which should be handled by the caller + + sderr := AddResultToSession(sid,rid) + if sderr != nil { + return rid,returnedRV,fmt.Errorf("Error adding result %v to session %v. Claim added, session may be still open: %w",rid,sid,err) + } + + // Step 8 ****************************************************** + + return rid,returnedRV,nil +} + + + + diff --git a/ga10/otherconfigfiles/local.yaml b/ga10/otherconfigfiles/local.yaml new file mode 100644 index 00000000..abd7220b --- /dev/null +++ b/ga10/otherconfigfiles/local.yaml @@ -0,0 +1,32 @@ +#Some general naming +system: + name: ASVR_GO_1 + +#MongoDB Configuration +database: + connection: mongodb://127.0.0.1:27017 + name: localasvr + +#MQTT Configuration +messaging: + broker: 127.0.0.1 + port: 1883 + clientid: ASVR_GO_1_LOCAL + +#REST Interface Configuration +rest: + port: 8520 + crt: temporary.crt + key: temporary.key + usehttp: true + +#Web Interface Configuration +web: + port: 8540 + crt: temporary.crt + key: temporary.key + usehttp: true + +#Log file +logfile: + location: /tmp/ga10.log diff --git a/ga10/otherconfigfiles/nconfig.yaml b/ga10/otherconfigfiles/nconfig.yaml new file mode 100644 index 00000000..0bf23a51 --- /dev/null +++ b/ga10/otherconfigfiles/nconfig.yaml @@ -0,0 +1,32 @@ +#Some general naming +system: + name: ASVR_GO_1 + +#MongoDB Configuration +database: + connection: mongodb://10.144.176.154:27017 + name: attestation2 + +#MQTT Configuration +messaging: + broker: 10.144.176.154 + port: 1883 + clientid: ASVR_GO_1 + +#REST Interface Configuration +rest: + port: 8520 + crt: temporary.crt + key: temporary.key + usehttp: true + +#Web Interface Configuration +web: + port: 8540 + crt: temporary.crt + key: temporary.key + usehttp: true + +#Log file +logfile: + location: /tmp/ga10.log diff --git a/ga10/protocols/a10httprestv2/public.go b/ga10/protocols/a10httprestv2/public.go new file mode 100644 index 00000000..07125fee --- /dev/null +++ b/ga10/protocols/a10httprestv2/public.go @@ -0,0 +1,131 @@ +package a10httprestv2 + +import( + "fmt" + "net/http" + "encoding/json" + "io/ioutil" + "bytes" + "crypto/rand" + + "a10/structures" +) + +const nonceSize int = 24 + +func Registration() (structures.Protocol) { + intents := []string{"tpm2/pcrs","tpm2/quote","uefi/eventlog","ima/log","txt/log"} + + return structures.Protocol{"A10HTTPRESTv2","HTTP protcol for Go based trust agents",Call,intents} +} + + +// THis is the function that is called by operations.attestation --- this is the entry point to the actual protocol part. +// It returns a "json" structure and a string with the body type. +// If requestFromTA returns and error, then it is encoded here and returned. +// The body type is *ERROR in these situations and the body should have a field "error": +func Call(e structures.Element, p structures.Policy, s structures.Session, aps map[string]interface{}) (map[string]interface{}, string) { + rtn, err :=requestFromTA(e,p,s,aps) + + if err != nil { + //rtn["error"] = structures.ClaimError{ "error", err.Error() } + rtn["error"] = err.Error() + + return rtn,structures.CLAIMERROR + } else { + return rtn,p.Intent + } +} + +func mergeMaps(m1 map[string]interface{}, m2 map[string]interface{}) map[string]interface{} { + merged := make(map[string]interface{}) + for k, v := range m1 { + merged[k] = v + } + for key, value := range m2 { + merged[key] = value + } + return merged +} + +//This function performs the actual interaction with the TA +//This will be highly specific to the actual protocol and its implemented intents +func requestFromTA(e structures.Element, p structures.Policy, s structures.Session, aps map[string]interface{}) (map[string]interface{}, error) { + + var empty map[string]interface{} = make(map[string]interface{}) // this is an *instantiated* empty map used for error situations + var bodymap map[string]interface{} // this is used to store the result of the final unmarshalling of the body received from the TA + + // Parameters + // + // Some come from the element itself, eg: UEFI.eventlog + // Then those supplied by the policy and finally the additional parameters + // Only certain intents supply parameters and these are dealt with on a case by case basis here + // + // First we construct "ips" which is the intial set of parameters + // + // For sanity reasons (and Go's strong typing, the parameters is a plain key,value list) + var ips map[string]interface{} = make(map[string]interface{}) + + // always supply which device to use + + // for specific intents for the a10httprestv2 + if p.Intent=="tpm2/pcrs" { + ips["tpm2/device"] = (e.TPM2).Device + } + + if p.Intent=="tpm2/quote" { + ips["tpm2/device"] = (e.TPM2).Device + ips["tpm2/akhandle"] = (e.TPM2).AK.Handle + nce := make([]byte,nonceSize) + _, _ = rand.Read(nce) + ips["tpm2/nonce"] = nce + } + + if p.Intent=="uefi/eventlog" { + ips["uefi/eventlog"] = (e.UEFI).Eventlog + } + + if p.Intent=="ima/asciilog" { + ips["ima/ASCIIlog"] = (e.IMA).ASCIILog + } + + if p.Intent=="txt/log" { + ips["ima/log"] = (e.TXT).Log + } + + // merge ips with policy parameters. The policy parameters take precidence + + pps := mergeMaps(ips,p.Parameters) + cps := mergeMaps(pps,aps) + + // Construct the call + + postbody,err := json.Marshal(cps) + if err != nil { + return empty,fmt.Errorf("JSON Unmarshalling failed: %w",err) + } + + url := e.Endpoint+"/"+p.Intent + req,err := http.NewRequest("POST", url, bytes.NewBuffer(postbody)) + req.Header.Set("Content-Type","application/json") + client := &http.Client{} + resp,err := client.Do(req) + + if err!=nil { + return empty,err // err will be the error from http.client.Do + } + defer resp.Body.Close() + + taResponse, _ := ioutil.ReadAll(resp.Body) + err = json.Unmarshal(taResponse,&bodymap) + + if err != nil { + return empty,fmt.Errorf("JSON Unmarshalling reponse from TA: %w",err) + } + + if resp.Status != "200 OK" { // is it always 200 ? This might cause issues later if the TA reponds otherwise! + return bodymap,fmt.Errorf("TA reports error %v with response %v",resp.Status,taResponse) + } + + return bodymap,nil +} diff --git a/ga10/protocols/nullprotocol/public.go b/ga10/protocols/nullprotocol/public.go new file mode 100644 index 00000000..6a28aed6 --- /dev/null +++ b/ga10/protocols/nullprotocol/public.go @@ -0,0 +1,41 @@ +package nullprotocol + +import( + "fmt" + "log" + + "a10/structures" +) + + +func Registration() (structures.Protocol) { + intents := []string{"null/good","null/error"} + + return structures.Protocol{"A10NULLPROTOCOL","Testing protocol, always returns a test claim",Call, intents} +} + +func Call(e structures.Element, p structures.Policy, s structures.Session, cps map[string]interface{}) (map[string]interface{}, string) { + + // Create a test body + + rtn := map[string]interface{}{ + "foo":"bar", + "calling": fmt.Sprintf("with protocol %v I would send an intent to %v",e.Protocol,p.Intent), + "aNumber": 42, + } + + // Check if the policy intent was null/null, if so then return with the bodytype being set to null/test + // or error if the above is false. + // + // Claim bodytype should be set to error and a ClaimError structure returned in an error field + + if p.Intent=="null/null" { + log.Println(" null call worked ") + rtn["worked"] = true + return rtn,"null/test" + } else { + log.Println(" null call bad error ") + rtn["error"] = "Error here" + return rtn,structures.CLAIMERROR + } +} \ No newline at end of file diff --git a/ga10/protocols/registerProtocols.go b/ga10/protocols/registerProtocols.go new file mode 100644 index 00000000..b520efa1 --- /dev/null +++ b/ga10/protocols/registerProtocols.go @@ -0,0 +1,16 @@ +package protocols + +import ( + "a10/operations" + + "a10/protocols/a10httprestv2" + "a10/protocols/nullprotocol" + +) + + +func RegisterProtocols() { + operations.AddProtocol(a10httprestv2.Registration()) + operations.AddProtocol(nullprotocol.Registration()) + +} diff --git a/ga10/rules/nullrule/public.go b/ga10/rules/nullrule/public.go new file mode 100644 index 00000000..2f2c50c4 --- /dev/null +++ b/ga10/rules/nullrule/public.go @@ -0,0 +1,57 @@ +package nullrule + +import( + "a10/structures" +) + + +func Registration() []structures.Rule { + + ruleS := structures.Rule{ "null_success","A rule that always returns success", CallruleS, false} + ruleF := structures.Rule{ "null_fail","A rule that always returns fail", CallruleF, false} + + ruleV := structures.Rule{ "null_verifycallfail","A rule that always returns verifycallfail error", CallruleV, false} + ruleN := structures.Rule{ "null_noresult","A rule that always returns noresult error", CallruleN, false} + ruleE := structures.Rule{ "null_verifycallerrorattempt","A rule that always returns verifycallerrorattempt error", CallruleE, false} + + ruleMEV := structures.Rule{ "null_missingEV","A rule that always returns missing expected value error", CallruleMEV, false} + ruleRCF := structures.Rule{ "null_rulecallfailure","A rule that always returns rule call failure error", CallruleRCF, false} + ruleU := structures.Rule{ "null_unsetresultvalue","A rule that always returns unste result value error", CallruleU, false} + + + return []structures.Rule{ ruleS, ruleF, ruleV, ruleN, ruleE, ruleMEV, ruleRCF, ruleU } +} + +func CallruleS(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + return structures.Success,"This a demonstration of a success result",nil +} + +func CallruleF(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + return structures.Fail,"This a demonstration of a fail result",nil +} + +func CallruleE(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + return structures.VerifyClaimErrorAttempt,"This a demonstration of verifycallerrorattempt",nil +} + +func CallruleV(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + return structures.VerifyCallFailure,"This a demonstration of a verify call fail result",nil +} + +func CallruleN(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + return structures.NoResult,"This a demonstration of no result",nil +} + + + +func CallruleMEV(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + return structures.MissingExpectedValue,"This a demonstration of missing expected value",nil +} +func CallruleRCF(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + return structures.RuleCallFailure,"This a demonstration of rule call failure",nil +} +func CallruleU(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + return structures.UnsetResultValue,"This a demonstration of unset result value",nil +} + + diff --git a/ga10/rules/registerRules.go b/ga10/rules/registerRules.go new file mode 100644 index 00000000..b08618e9 --- /dev/null +++ b/ga10/rules/registerRules.go @@ -0,0 +1,25 @@ +package rules + +import ( + + "a10/structures" + "a10/operations" + + "a10/rules/nullrule" + "a10/rules/tpm2rules" + +) + + +func RegisterRules() { + registerListOfRules(nullrule.Registration()) + registerListOfRules(tpm2rules.Registration()) + +} + + +func registerListOfRules(rs []structures.Rule) { + for _,r := range rs { + operations.AddRule(r) + } +} diff --git a/ga10/rules/tpm2rules/public.go b/ga10/rules/tpm2rules/public.go new file mode 100644 index 00000000..6fe9a0ea --- /dev/null +++ b/ga10/rules/tpm2rules/public.go @@ -0,0 +1,106 @@ +package tpm2rules + +import( + "fmt" + + "a10/structures" +) + + +func Registration() []structures.Rule { + + attestedPCRDigest := structures.Rule{ "tpm2_attestedValue","Checks the TPM's reported attested value against the expected value", AttestedPCRDigest, true} + ruleFirmware := structures.Rule{ "tpm2_firmware","Checks the TPM firmware version against the expected value", FirmwareRule, true} + ruleMagic := structures.Rule{ "tpm2_magicNumber","Checks the quote magic number is 0xFF544347", MagicNumberRule, false} + ruleIsSafe := structures.Rule{ "tpm2_safe","Checks that the value of safe is 1", IsSafe, false} + + return []structures.Rule{ ruleFirmware, ruleMagic, attestedPCRDigest, ruleIsSafe } +} + + + +func IsSafe(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + // Type conversation here are a bit ugly, but at least strongly typed!!! + // Note that the type of claimedSafe is float64 ... this is the way Golang unmarshalls JSON so there. + + if _, ok := (claim.Body)["ClockInfo"]; !ok { + return structures.VerifyCallFailure,"Missing ClockInfo in claim body",nil + } + + cli := (claim.Body)["ClockInfo"] + claimedSafe := cli.(map[string]interface{})["Safe"] + + if claimedSafe==1.0 { + return structures.Success,"",nil + } else { + return structures.Fail,"Uncommanded device/TPM shutdown",nil + } + +} + + +func AttestedPCRDigest(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + // Type conversation here are a bit ugly, but at least strongly typed!!! + + if _, ok := (claim.Body)["AttestedQuoteInfo"]; !ok { + return structures.VerifyCallFailure,"Missing AttestedQuoteInfo in claim body",nil + } + + aqi := (claim.Body)["AttestedQuoteInfo"] + claimedAV := aqi.(map[string]interface{})["PCRDigest"] + + expectedAV := (ev.EVS)["attestedValue"] + + if expectedAV==claimedAV { + return structures.Success,"",nil + } else { + msg := fmt.Sprintf("Got %v as attested value but expected %v",claimedAV,expectedAV) + return structures.Fail,msg,nil + } + +} + + +func FirmwareRule(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + + // The firmware version is serialised from the JSON as a float64, so we need to convert it to string + // annoyingly this is in decical not hex + + if _, ok := (claim.Body)["FirmwareVersion"]; !ok { + return structures.VerifyCallFailure,"Missing FirmwareVersion in claim body",nil + } + + claimedFirmware := fmt.Sprintf("%.0f",(claim.Body)["FirmwareVersion"]) + expectedFirmware := (ev.EVS)["firmwareVersion"] + + if expectedFirmware==claimedFirmware { + return structures.Success,"",nil + } else { + msg := fmt.Sprintf("Got %v as firmware version but expected %v",claimedFirmware,expectedFirmware) + return structures.Fail,msg,nil + } + +} + +func MagicNumberRule(claim structures.Claim, rule string, ev structures.ExpectedValue, session structures.Session, parameter map[string]interface{}) (structures.ResultValue, string, error) { + + // The firmware version is serialised from the JSON as a float64, so we need to convert it to string + + if _, ok := (claim.Body)["Magic"]; !ok { + return structures.VerifyCallFailure,"Missing Magic in claim body",nil + } + + magic := fmt.Sprintf("%.0f",(claim.Body)["Magic"]) + fmt.Printf("Magic is %v\n",magic) + fmt.Printf("But claim body is %v\n",(claim.Body)["Magic"]) + + // annoyingly this is in decical not hex, but 4283712327_10 == FF544 357_16 + + if magic=="4283712327" { + return structures.Success,"",nil + } else { + return structures.Fail,"TPM magic number and/or TPMS_ATTEST type wrong",nil + } + + +} \ No newline at end of file diff --git a/ga10/structures/claims.go b/ga10/structures/claims.go new file mode 100644 index 00000000..652ef9e3 --- /dev/null +++ b/ga10/structures/claims.go @@ -0,0 +1,31 @@ +package structures + + + +type Claim struct { + ItemID string `json:"itemid",bson:"itemid"` + BodyType string `json:"bodytype",bson:"bodytype"` + Header ClaimHeader `json:"header",bson:"header"` + Body map[string]interface{} `json:"body",bson:"body"` + Footer ClaimFooter `json:"footer",bson:"footer"` +} + + +type ClaimHeader struct { + Element Element `json:"element",bson:"element"` + Policy Policy `json:"policy",bson:"policy"` + Session Session `json:"session",bson:"session"` + Timing Timing `json:"timing",bson:"timing"` +} + +type Timing struct { + Requested Timestamp `json:"requested",bson:"requested"` + Received Timestamp `json:"received",bson:"received"` +} + +type ClaimFooter struct { + Hash []byte `json:"hash",bson:"hash"` + Signature []byte `json:"signature",bson:"signature"` +} + +const CLAIMERROR = "*ERROR" \ No newline at end of file diff --git a/ga10/structures/common.go b/ga10/structures/common.go new file mode 100644 index 00000000..0eeeb8fd --- /dev/null +++ b/ga10/structures/common.go @@ -0,0 +1,5 @@ +package structures + +type ID struct { + ItemID string `json:"itemid",bson:"itemid"` +} diff --git a/ga10/structures/elements.go b/ga10/structures/elements.go new file mode 100644 index 00000000..54393262 --- /dev/null +++ b/ga10/structures/elements.go @@ -0,0 +1,46 @@ +package structures + +type Element struct { + ItemID string `json:"itemid,omitempty",bson:"itemid,omitempty"` + Name string `json:"name",bson:"name"` + Description string `json:"description",bson:"description"` + Endpoint string `json:"endpoint",bson:"endpoint"` + Protocol string `json:"protocol",bson:"protocol"` + Tags []string `json:"tags",bson:"tags"` + + Sshkey SSHKEY `json:"sshkey,omitempty",bson:"sshkey,omitempty"` + TPM2 TPM2 `json:"tpm2,omitempty",bson:"tpm2,omitempty"` + UEFI UEFI `json:"uefi,omitempty",bson:"uefi,omitempty"` + IMA IMA `json:"ima,omitempty",bson:"ima,omitempty"` + TXT TXT `json:"txt,omitempty",bson:"txt,omitempty"` +} + +type SSHKEY struct { + Key string `json:"key",bson:"key"` + Timeout int16 `json:"timeout",bson:"timeout"` + Username string `json:"username",bson:"username"` +} + +type UEFI struct { + Eventlog string `json:"eventlog",bson:"eventlog"` +} + +type IMA struct { + ASCIILog string `json:"asciilog",bson:"asciilog"` +} + +type TXT struct { + Log string `json:"log",bson:"log"` +} + +type TPM2 struct { + Device string `json:"device",bson:"device"` + EK TPMKey `json:"ek",bson:"ek"` + AK TPMKey `json:"ak",bson:"ak"` +} + +type TPMKey struct { + Public string `json:"public",bson:"public"` + Handle string `json:"handle",bson:"handle"` + Name string `json:"name",bson:"name"` +} \ No newline at end of file diff --git a/ga10/structures/expectedValues.go b/ga10/structures/expectedValues.go new file mode 100644 index 00000000..d6df041e --- /dev/null +++ b/ga10/structures/expectedValues.go @@ -0,0 +1,13 @@ +package structures + +type ExpectedValue struct { + ItemID string `json:"itemid",bson:"itemid"` + Name string `json:"name",bson:"name"` + Description string `json:"description",bson:"description"` + + ElementID string `json:"elementID",bson:"elementID"` + PolicyID string `json:"policyID",bson:"policyID"` + + EVS map[string]interface{} `json:"evs",bson:"evs"` +} + \ No newline at end of file diff --git a/ga10/structures/logs.go b/ga10/structures/logs.go new file mode 100644 index 00000000..17455093 --- /dev/null +++ b/ga10/structures/logs.go @@ -0,0 +1,14 @@ +package structures + + + +type LogEntry struct { + ItemID string `json:"itemid",bson:"itemid"` + Timestamp Timestamp `json:"timestamp",bson:"timestamp"` + Channel string `json:"channel",bson:"channel"` + Operation string `json:"operation",bson:"operation"` + RefID string `json:"refid",bson:"refid"` + RefType string `json:"reftype",bson:"reftype"` + Message string `json:"message",bson:"message"` + Hash []byte `json:"hash",bson:"hash"` +} diff --git a/ga10/structures/opaqueobjects.go b/ga10/structures/opaqueobjects.go new file mode 100644 index 00000000..af0effd1 --- /dev/null +++ b/ga10/structures/opaqueobjects.go @@ -0,0 +1,8 @@ +package structures + +type OpaqueObject struct { + Value string `json:"value",bson:"value"` + Type string `json:"type",bson:"type"` + ShortDescription string `json:"shortDescription",bson:"shortDescription"` + LongDescription string `json:"longDescription",bson:"longDescription"` +} diff --git a/ga10/structures/policies.go b/ga10/structures/policies.go new file mode 100644 index 00000000..3d930925 --- /dev/null +++ b/ga10/structures/policies.go @@ -0,0 +1,10 @@ +package structures + +type Policy struct { + ItemID string `json:"itemid",bson:"itemid"` + Name string `json:"name",bson:"name"` + Description string `json:"description",bson:"description"` + Intent string `json:"intent",bson:"intent"` + Parameters map[string]interface{} `json:"parameters",bson:"parameters"` +} + \ No newline at end of file diff --git a/ga10/structures/protocols.go b/ga10/structures/protocols.go new file mode 100644 index 00000000..7a532968 --- /dev/null +++ b/ga10/structures/protocols.go @@ -0,0 +1,16 @@ +package structures + +//This is the type of the protocol functions +// +// In useage it takes the element, policy, session and a "json" structure of parameters +// Return is "json" and a string containing any error messages +type ProtocolCall func(Element, Policy, Session, map[string]interface{}) (map[string]interface{}, string) + + +type Protocol struct { + Name string + Description string + CallFunction ProtocolCall + Intents []string +} + diff --git a/ga10/structures/results.go b/ga10/structures/results.go new file mode 100644 index 00000000..28ffc6cd --- /dev/null +++ b/ga10/structures/results.go @@ -0,0 +1,35 @@ +package structures + +type ResultValue int + +const ( + Success ResultValue = 0 + Fail = 9001 + + VerifyCallFailure = 9010 + VerifyClaimErrorAttempt = 9098 + NoResult = 9099 + + MissingExpectedValue = 9997 + RuleCallFailure = 9998 + UnsetResultValue = 9999 +) + +type Result struct { + ItemID string `json:"itemid",bson:"itemid"` + ClaimID string `json:"claimID",bson:"name"` + ClaimFooter ClaimFooter `json:"claimFooter",bson:"claimFooter"` + Session Session `json:"session",bson:"description"` + ExpectedValue ExpectedValue `json:"expectedValue",bson:"intent"` + Parameters map[string]interface{} `json:"parameters",bson:"parameters"` + Message string `json:"message",bson:"description"` + RuleName string `json:"ruleName",bson:"description"` + VerifiedAt Timestamp `json:"verifiedAt",bson:"description"` + Result ResultValue `json:"result",bson:"result"` + Footer ResultFooter `json:"footer",bson:"footer"` +} + +type ResultFooter struct { + Hash []byte `json:"hash",bson:"hash"` + Signature []byte `json:"signature",bson:"signature"` +} diff --git a/ga10/structures/rules.go b/ga10/structures/rules.go new file mode 100644 index 00000000..9ed89826 --- /dev/null +++ b/ga10/structures/rules.go @@ -0,0 +1,16 @@ +package structures + +//This is the type of the protocol functions +// +// In useage it takes the element, policy, session and a "json" structure of parameters +// Return is "json" and a string containing a message from the rule and error in case everything fails +type RuleCall func(Claim, string, ExpectedValue, Session, map[string]interface{}) (ResultValue, string, error) + +type Rule struct { + Name string + Description string + CallFunction RuleCall + NeedsEV bool +} + + diff --git a/ga10/structures/sessions.go b/ga10/structures/sessions.go new file mode 100644 index 00000000..301c8256 --- /dev/null +++ b/ga10/structures/sessions.go @@ -0,0 +1,32 @@ +package structures + + +type Session struct { + ItemID string `json:"itemid",bson:"itemid"` + Timing SessionTiming `json:"timing",bson:"timing"` + + ClaimList []string `json:"claimList",bson:"claimList"` + ResultList []string `json:"resultList",bson:"resultList"` + + Message string `json:"message",bson:"message"` + + Footer SessionFooter `json:"footer",bson:"footer"` +} + + +type SessionSummary struct { + ItemID string `json:"itemid",bson:"itemid"` + Timing SessionTiming `json:"timing",bson:"timing"` +} + + +type SessionTiming struct { + Opened Timestamp `json:"opened",bson:"opened"` + Closed Timestamp `json:"closed",bson:"closed"` +} + + +type SessionFooter struct { + Hash []byte `json:"hash",bson:"hash"` + Signature []byte `json:"signature",bson:"signature"` +} diff --git a/ga10/structures/types.go b/ga10/structures/types.go new file mode 100644 index 00000000..17761727 --- /dev/null +++ b/ga10/structures/types.go @@ -0,0 +1,3 @@ +package structures + +type Timestamp string diff --git a/ga10/temporary.crt b/ga10/temporary.crt new file mode 100644 index 00000000..7b042107 --- /dev/null +++ b/ga10/temporary.crt @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID+TCCAuGgAwIBAgIUVJZap9c3I9vnPWzjuCdr2HzMn58wDQYJKoZIhvcNAQEL +BQAwgYsxCzAJBgNVBAYTAkZJMRAwDgYDVQQIDAdVdXNpbWFhMQ4wDAYDVQQHDAVT +aXBvbzESMBAGA1UECgwJQ2VmZnlsT3BpMQwwCgYDVQQLDANSJkQxDDAKBgNVBAMM +A0lhbjEqMCgGCSqGSIb3DQEJARYbaWFuLmp1c3Rpbi5vbGl2ZXJAZ21haWwuY29t +MB4XDTIzMDQyNDE2NDEyM1oXDTI0MDQyMzE2NDEyM1owgYsxCzAJBgNVBAYTAkZJ +MRAwDgYDVQQIDAdVdXNpbWFhMQ4wDAYDVQQHDAVTaXBvbzESMBAGA1UECgwJQ2Vm +ZnlsT3BpMQwwCgYDVQQLDANSJkQxDDAKBgNVBAMMA0lhbjEqMCgGCSqGSIb3DQEJ +ARYbaWFuLmp1c3Rpbi5vbGl2ZXJAZ21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAnYeTyopKf82aGAtACj3GFXBDyAqnOWz3t5P8x7mhU6TW +/+RKbKIpV9/Gytg0hQOsXf5izjOqwu92RJA08W0iO6J/GNFEuYg3tf3MYtFmDZL7 +DtHicRY+apSgrv4NtpTezW0DHFdyLHK0RL32Fgkb9JRHfQdssRmymKu8PvPxyFw7 +HbD7MurORiGycl/oVdrRhws7lMF/kLuK+ksh3G6M/+sF/4HCtAJ37aeXRAnudktB +RelkBd80HKebsbtPkwJrF1g5VpVBDgJVx28MfRrGLotiKwmAp1nVha6JcGZ6y3Sl +BYTW96/g1QlxOC7tYef0QyyGDeAhIivSwlzuGZ3EzQIDAQABo1MwUTAdBgNVHQ4E +FgQUhMNzN/omyGgTvG5jqDWtFN1G/lkwHwYDVR0jBBgwFoAUhMNzN/omyGgTvG5j +qDWtFN1G/lkwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAmB24 +b+ST3ds4pfdiAB6Xfenkk3Fo9cg4hDA9v1nQvXe49x9ZMq5yZ9tkOIWtI0y2nCky +qUGbU08EuZmLyq7ReurRg2nMLi/M+xMJmaCzMMg8vQPMwcAy/EsDgVUS66rbWMYn +VA/zLbjkNAXPzxYzVTSKVdw4loNLagoOkCZRYotA5w9LlmcC/5yxX9wJxb/K7CD7 +HPovpR1alU2J5vAbjmo/TAjRFzkt2pQ8kqjAmdWjJb/zIJWwv/s62obb/Ye9kZy4 +40CejuNxsYIvkMyeNAAs6psDO/eEMQITvtaMakczM6qQpdX6yYdWnUOvvjOfu6YA +k7nQ2CE2vEAiLhxZIQ== +-----END CERTIFICATE----- diff --git a/ga10/temporary.key b/ga10/temporary.key new file mode 100644 index 00000000..e3367433 --- /dev/null +++ b/ga10/temporary.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCdh5PKikp/zZoY +C0AKPcYVcEPICqc5bPe3k/zHuaFTpNb/5EpsoilX38bK2DSFA6xd/mLOM6rC73ZE +kDTxbSI7on8Y0US5iDe1/cxi0WYNkvsO0eJxFj5qlKCu/g22lN7NbQMcV3IscrRE +vfYWCRv0lEd9B2yxGbKYq7w+8/HIXDsdsPsy6s5GIbJyX+hV2tGHCzuUwX+Qu4r6 +SyHcboz/6wX/gcK0Anftp5dECe52S0FF6WQF3zQcp5uxu0+TAmsXWDlWlUEOAlXH +bwx9GsYui2IrCYCnWdWFrolwZnrLdKUFhNb3r+DVCXE4Lu1h5/RDLIYN4CEiK9LC +XO4ZncTNAgMBAAECggEABlx/uNmdyYxtcRQfOWqmMZ5vdkgL2bNPS5AD0LLr01tg +PUQkRz/DKKPGPNG/STHNR5xqtAX9GtMdtQYXxToRfFQDCucEffOEwGon00O+ecTa +M46BNOzfh2FKHdbvidR4LNZ+ninf1/Cn2/DJ27jxco58Vo2ys3IktqqUtvwV4u/a +Tozfc5BWlVd2eYqwv8MyhZPpPxcArC1vPH2os/1/Q/qe8IpCOBHy12SN7Nje+l3p +LYRLHm3rHhKPwHIEd05d5S3BZ0u3Eea20hXAynT2483XaLj1QpImRRZ4O5H0RRRE +apRU7hPlqD8kpD7g6kbkiMCJUOp2Q2NbzfPVH7hlFwKBgQDQKOnABlG5InHPE+su +I1AlvGIThFPbKZEH4MSA3nNEeyqV2P7eRadZexJdF8BAS8yqp73ZbbqFeAkMtL2/ +gc4grOovr4BKy8S3w8utd82dqwD7dUxY+DcP57rogdz7Z82R+RpUwksitv8K1nDM +JGo7WvDUDxQqnRs29WwFb+e9owKBgQDBu9WYeleUwl7krKW9+XmqzDcHwXik6udv +591IFNbW0B3XGweI18bvTmpYK1cYNYhamloawEiERofX+LVQGKsz33XdcP9a/k7E +ADJy+begSjRvQ7SML3V+KGZSPKE2Wo5ohpBgy+ytFCUb0APC0K/Mk/kjLQHr/ZSg +5bDp3fG6zwKBgQCoe4T/JN4+v+9oEZI4bOKxOHIVo/SPnmxB+R5zxBl+I0bLtLBN +zgju9xtc+B1mrTOCKXUTqKng39BLVXuDpxflALAoWp+3aojVyIdx51cot8F6xm0+ +UeGXYRO6n2nynwkXjo1Ob1iLR5zU886mnQ7S7f+hVHcZKsJdUHXXTMVAiwKBgDtU +MJdfcA7Ib5MMJD3HdrENlRS09SNcJMAqe6Olbh2e4mSLjIUlv3BtzTdvHl71lepZ +NprWo96OUu+a5LvAsj1Sg5/rCOhu1ORFQy3et5NI5kHktBfyOMMH0D4C/0PL+6ya ++QALs1FVx/96doxkqFG4RyW0lNAWejvD26fjJjIVAoGAeP9pJPFIGFUpUwKTVgsJ +cfm082bJsRpBvRWHhDvJA8nliY1XoTGzoproNxCeZLywkKREflGw2d9AeYgCo8OD +z16VvR/B13l0Dh4fYQS7wGkGEJ2+LcKlEZ+lCWbrFNWHre8vZ9/capxB6PrPn10R +N/cWWNE1DVBVVxu/83lsAk0= +-----END PRIVATE KEY----- diff --git a/ga10/tests/exampledatabase/elements.json b/ga10/tests/exampledatabase/elements.json new file mode 100644 index 00000000..fdc59cf9 --- /dev/null +++ b/ga10/tests/exampledatabase/elements.json @@ -0,0 +1,2 @@ +{"_id":{"$oid":"645277d5799325c3a0afaffb"},"itemid":"c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a","name":"WorkLaptopLinux","description":"Main work Linux laptop, with Cofiwch Dryweryn sticker on the back.","protocol":"A10HTTPRESTv2","endpoint":"http://192.168.1.218:8530","tags":["x86","linux","work"],"uefi":{"eventlog":"/sys/kernel/security/tpm0/binary_bios_measurements"},"ima":{"asciilog":"/sys/kernel/security/ima/ascii_runtime_measurements"},"tpm2":{"device":"/dev/tpmrm0","ek":{"handle":"0x810100EE","public":"aaa","name":"111"},"ak":{"handle":"0x810100AA","public":"bbb","name":"222"}}} +{"_id":{"$oid":"645277d809d1d2ee1a672a84"},"itemid":"765e0188-a609-49c0-bf61-3825849413cd","name":"SensorPi","description":"Pi for running the sensor aggregation.","protocol":"A10HTTPRESTv2","endpoint":"http://192.168.1.111:8530","tags":["pi","linux","home"],"tpm2":{"device":"/dev/tpm0","ek":{"handle":"0x810100EE","public":"aaa","name":"111"},"ak":{"handle":"0x810100AA","public":"bbb","name":"222"}}} diff --git a/ga10/tests/exampledatabase/expectedvalues.json b/ga10/tests/exampledatabase/expectedvalues.json new file mode 100644 index 00000000..985557c9 --- /dev/null +++ b/ga10/tests/exampledatabase/expectedvalues.json @@ -0,0 +1,2 @@ +{"_id":{"$oid":"645a3fe44d2e1199e6183a1e"},"itemid":"d4b76ce1-2b56-4346-aa11-546ea412d1e5","name":"Work laptop firmware","description":"Firmware values, specifically PCR0,2,7 for work laptop","elementID":"c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a","policyID":"6770b5b9-d0ea-4f8b-817f-cab1bf8169c0","evs":{"attestedValue":"lR+zAH+TVf7g+QTNDVs9J0hD+VcbYNthM1RUQ2nfrsY=","firmwareVersion":"19984793217276456"}} +{"_id":{"$oid":"645a76bf9b0597b56a39e98e"},"itemid":"fbe49635-e9e1-4f9a-b26b-4ca8401d0959","name":"Raspberru Pi firmware","description":"Firmware values, specifically PCR0,2,7 for work laptop","elementID":"765e0188-a609-49c0-bf61-3825849413cd","pid":"ba64f197-0eb3-4f3f-a74d-a9a8e0a3f17d","policyID":"6770b5b9-d0ea-4f8b-817f-cab1bf8169c0","evs":{"attestedValue":"lR+zAH+TVf7g+QTNDVs9J0hD+VcbYNthM1RUQ2nfrsY=","firmwareVersion":"19984793217276456"}} diff --git a/ga10/tests/exampledatabase/policies.json b/ga10/tests/exampledatabase/policies.json new file mode 100644 index 00000000..e7349514 --- /dev/null +++ b/ga10/tests/exampledatabase/policies.json @@ -0,0 +1,6 @@ +{"_id":{"$oid":"64501ba6090571d49e0ab35d"},"itemid":"6770b5b9-d0ea-4f8b-817f-cab1bf8169c0","name":"testPolicy","description":"This is a test policy for tpm2/quote","intent":"tpm2/quote","parameters":{"pcrSelection":"0,2,7","bank":"sha256"}} +{"_id":{"$oid":"64501bb9090571d49e0ab35e"},"itemid":"ba64f197-0eb3-4f3f-a74d-a9a8e0a3f17d","name":"testPolicy","description":"This is a test policy for tpm2/pcrs","intent":"tpm2/pcrs","parameters":{}} +{"_id":{"$oid":"64501bc9090571d49e0ab35f"},"itemid":"e7c5d901-3caa-4542-8660-7054560198e1","name":"testPolicy","description":"This is a test policy for uefi/eventlog","intent":"uefi/eventlog","parameters":{}} +{"_id":{"$oid":"64501bd8090571d49e0ab360"},"itemid":" 8aa82519-16f0-4418-83e2-6e9e6edbcdc6","name":"testPolicy","description":"This is a test policy for null/null","intent":"null/null","parameters":{}} +{"_id":{"$oid":"645a63ec9b0597b56a39e986"},"itemid":"9a74825f-f780-4eec-9b20-646ba924857a","name":"SystemInfo","description":"This retrieves the system info for a given device","intent":"sys/info","parameters":{}} +{"_id":{"$oid":"645a64729b0597b56a39e988"},"itemid":"f147fbd9-af7e-46f6-a8f8-3b0734918743","name":"IMAlog","description":"This returns the Linux IMA ASCII Log","intent":"ima/asciilog","parameters":{}} diff --git a/ga10/tests/pkcs11test/go.mod b/ga10/tests/pkcs11test/go.mod new file mode 100644 index 00000000..61b96ebb --- /dev/null +++ b/ga10/tests/pkcs11test/go.mod @@ -0,0 +1,5 @@ +module p + +go 1.20 + +require github.com/miekg/pkcs11 v1.1.1 diff --git a/ga10/tests/pkcs11test/go.sum b/ga10/tests/pkcs11test/go.sum new file mode 100644 index 00000000..478c5244 --- /dev/null +++ b/ga10/tests/pkcs11test/go.sum @@ -0,0 +1,2 @@ +github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= +github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= diff --git a/ga10/tests/pkcs11test/p.go b/ga10/tests/pkcs11test/p.go new file mode 100644 index 00000000..5a322618 --- /dev/null +++ b/ga10/tests/pkcs11test/p.go @@ -0,0 +1,25 @@ +package main + +import( + "fmt" + + "github.com/miekg/pkcs11" +) + +func main() { + fmt.Println("Starting") + + p := pkcs11.New("/usr/lib/x86_64-linux-gnu/pkcs11/yubihsm_pkcs11.so") + fmt.Printf("PKCS11 module is %v\n",p) + + err := p.Initialize() + fmt.Printf("PKCS11 initialisation is %v\n",err) + + defer p.Destroy() + defer p.Finalize() + + slots, err := p.GetSlotList(true) + fmt.Printf("Slots %v , %v\n",err,slots) + + +} \ No newline at end of file diff --git a/ga10/tests/pkcs11test/yubihsm_pkcs1.conf b/ga10/tests/pkcs11test/yubihsm_pkcs1.conf new file mode 100644 index 00000000..2f954b55 --- /dev/null +++ b/ga10/tests/pkcs11test/yubihsm_pkcs1.conf @@ -0,0 +1,4 @@ +connector=http://localhost:12345 +debug +libdebug +dinout \ No newline at end of file diff --git a/ga10/tests/testscripts/attest.sh b/ga10/tests/testscripts/attest.sh new file mode 100755 index 00000000..7d186751 --- /dev/null +++ b/ga10/tests/testscripts/attest.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +#work laptop and tpm2/quote policy +#curl -X GET http://127.0.0.1:8520/element/c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a +#curl -X GET http://127.0.0.1:8520/policy/6770b5b9-d0ea-4f8b-817f-cab1bf8169c0 + +#open session +osid="$( curl -s -X POST -H "Content-Type: application/json" http://127.0.0.1:8520/session | jq -r '.itemid' )" +echo "Session opened: http://127.0.0.1:8520/session/$osid" + +#attest +cid="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a","pid":"6770b5b9-d0ea-4f8b-817f-cab1bf8169c0", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "Claim is: http://127.0.0.1:8520/claim/$cid" + +#verify +#rid="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": ""$cid"", "sid": ""$osid"", "rule":"tpm2/firmware" +#, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +#echo "Result is: http://127.0.0.1:8520/result/$rid" + +#close session +csid="$( curl -s -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8520/session/""$osid"" | jq -r '.itemid' )" +echo "Session closed: http://127.0.0.1:8520/session/$osid" diff --git a/ga10/tests/testscripts/get.sh b/ga10/tests/testscripts/get.sh new file mode 100755 index 00000000..5e67afe1 --- /dev/null +++ b/ga10/tests/testscripts/get.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +echo "Gets" +curl -X GET http://127.0.0.1:8520/elements +curl -X GET http://127.0.0.1:8520/policies +curl -X GET http://127.0.0.1:8520/expectedValues +#curl -X GET http://127.0.0.1:8520/claims +curl -X GET http://127.0.0.1:8520/results +curl -X GET http://127.0.0.1:8520/hashes +curl -X GET http://127.0.0.1:8520/protocols +curl -X GET http://127.0.0.1:8520/rules + +echo "Get specifics" +curl -X GET http://127.0.0.1:8520/element/c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a +curl -X GET http://127.0.0.1:8520/policy/6770b5b9-d0ea-4f8b-817f-cab1bf8169c0 +curl -X GET http://127.0.0.1:8520/protocol/A10HTTPRESTv2 + +echo "Get stuff that does not exist" +curl -X GET http://127.0.0.1:8520/element/foobar +curl -X GET http://127.0.0.1:8520/policy/barfoo +curl -X GET http://127.0.0.1:8520/protocol/foobar \ No newline at end of file diff --git a/ga10/tests/testscripts/verify_laptop.sh b/ga10/tests/testscripts/verify_laptop.sh new file mode 100755 index 00000000..2672278b --- /dev/null +++ b/ga10/tests/testscripts/verify_laptop.sh @@ -0,0 +1,91 @@ +#!/bin/sh + +#work laptop and tpm2/quote policy +echo Element details... +curl -X GET http://127.0.0.1:8520/element/c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a + +echo Example policy... +curl -X GET http://127.0.0.1:8520/policy/6770b5b9-d0ea-4f8b-817f-cab1bf8169c0 + +# +#open session +# +osid="$( curl -s -X POST -H "Content-Type: application/json" http://127.0.0.1:8520/session | jq -r '.itemid' )" +echo "Session opened: http://127.0.0.1:8520/session/$osid" + + +# +#attest SYS +# +cidx="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a","pid":"9a74825f-f780-4eec-9b20-646ba924857a", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "SYS Claim is: http://127.0.0.1:8520/claim/$cidx" + +# +#attest UEFI +# +cidx="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a","pid":"e7c5d901-3caa-4542-8660-7054560198e1", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "UEFI claim is: http://127.0.0.1:8520/claim/$cidx" + +# +#attest IMA +# +cidx="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a","pid":"f147fbd9-af7e-46f6-a8f8-3b0734918743", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "IMA claim is: http://127.0.0.1:8520/claim/$cidx" + +# +#attest PCRs +# +cidx="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a","pid":"ba64f197-0eb3-4f3f-a74d-a9a8e0a3f17d", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "PCRs claim is: http://127.0.0.1:8520/claim/$cidx" + +# +#attest QUOTE +# +cid="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a","pid":"6770b5b9-d0ea-4f8b-817f-cab1bf8169c0", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "QUOTEClaim is: http://127.0.0.1:8520/claim/$cid" + + +# Note: we do not check the HTTP response codes in the following, only the itemid in any JSON output. So no error checking! + +# +#verify tpm2 rules +# +rid1="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"tpm2_firmware" +, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Result is: http://127.0.0.1:8520/result/$rid1" + +rid2="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"tpm2_magicNumber" +, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Result is: http://127.0.0.1:8520/result/$rid2" + +rid3="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"tpm2_attestedValue" +, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Result is: http://127.0.0.1:8520/result/$rid3" + +rid4="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"tpm2_safe" +, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Result is: http://127.0.0.1:8520/result/$rid4" + +# +#verify null rules - these don't do much, just for completeness +# +ridn1="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"null_success" + , "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Result is: http://127.0.0.1:8520/result/$ridn1" +ridn2="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"null_fail" + , "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Result is: http://127.0.0.1:8520/result/$ridn2" +ridn3="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"null_verifycallfail" + , "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Result is: http://127.0.0.1:8520/result/$ridn3" +ridn4="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"null_noresult" + , "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Result is: http://127.0.0.1:8520/result/$ridn4" + +# +#close session +# +csid="$( curl -s -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8520/session/""$osid"" | jq -r '.itemid' )" +echo "Session closed: http://127.0.0.1:8520/session/$osid" + + diff --git a/ga10/tests/testscripts/verify_pi.sh b/ga10/tests/testscripts/verify_pi.sh new file mode 100755 index 00000000..7034a219 --- /dev/null +++ b/ga10/tests/testscripts/verify_pi.sh @@ -0,0 +1,74 @@ +#!/bin/sh + +#pi and tpm2/quote policy +#curl -X GET http://127.0.0.1:8520/element/c7219a2b-7d02-4c1f-bad7-50c4d3b2cd2a +#curl -X GET http://127.0.0.1:8520/policy/6770b5b9-d0ea-4f8b-817f-cab1bf8169c0 + +#pcrs policy +#curl -X GET http://127.0.0.1:8520/policy/ba64f197-0eb3-4f3f-a74d-a9a8e0a3f17d + +# +#open session +# +osid="$( curl -s -X POST -H "Content-Type: application/json" http://127.0.0.1:8520/session | jq -r '.itemid' )" +echo "Session opened: http://127.0.0.1:8520/session/$osid" + +#sysinfo +cidx="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"765e0188-a609-49c0-bf61-3825849413cd","pid":"9a74825f-f780-4eec-9b20-646ba924857a", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "Sysinfo Claim is: http://127.0.0.1:8520/claim/$cidx" + +# attest PCRs +cidx="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"765e0188-a609-49c0-bf61-3825849413cd","pid":"ba64f197-0eb3-4f3f-a74d-a9a8e0a3f17d", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "PCRS Claim is: http://127.0.0.1:8520/claim/$cidx" + +# +#attest QUOTE +# +cid="$( curl -s -X POST -H "Content-Type: application/json" -d '{"eid":"765e0188-a609-49c0-bf61-3825849413cd","pid":"6770b5b9-d0ea-4f8b-817f-cab1bf8169c0", "sid": "'"$osid"'", "parameters":{}}' http://127.0.0.1:8520/attest | jq -r '.itemid' )" +echo "Quote Claim is: http://127.0.0.1:8520/claim/$cid" + + +# Note: we do not check the HTTP response codes in the following, only the itemid in any JSON output. So no error checking! + +# +#verify tpm2 rules +# +rid1="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"tpm2_firmware" +, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "FirmareResult is: http://127.0.0.1:8520/result/$rid1" + +rid2="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"tpm2_magicNumber" +, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Magic Result is: http://127.0.0.1:8520/result/$rid2" + +rid3="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"tpm2_attestedValue" +, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Attested Value Result is: http://127.0.0.1:8520/result/$rid3" + +rid4="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"tpm2_safe" +, "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +echo "Safe Result is: http://127.0.0.1:8520/result/$rid4" + +# +#verify null rules +# +# ridn1="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"null_success" +# , "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +# echo "Result is: http://127.0.0.1:8520/result/$ridn1" +# ridn2="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"null_fail" +# , "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +# echo "Result is: http://127.0.0.1:8520/result/$ridn2" +# ridn3="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"null_verifycallfail" +# , "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +# echo "Result is: http://127.0.0.1:8520/result/$ridn3" +# ridn4="$( curl -s -X POST -H "Content-Type: application/json" -d '{"cid": "'"$cid"'", "sid": "'"$osid"'", "rule":"null_noresult" +# , "parameters":{}}' http://127.0.0.1:8520/verify | jq -r '.itemid' )" +# echo "Result is: http://127.0.0.1:8520/result/$ridn4" + +# +#close session +# +csid="$( curl -s -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8520/session/""$osid"" | jq -r '.itemid' )" +echo "Session closed: http://127.0.0.1:8520/session/$osid" + + diff --git a/ga10/utilities/hashes.go b/ga10/utilities/hashes.go new file mode 100644 index 00000000..b93d14d5 --- /dev/null +++ b/ga10/utilities/hashes.go @@ -0,0 +1,33 @@ +package utilities + +import( + "encoding/gob" + "fmt" + "log" + "bytes" + "crypto/sha256" +) + +func init(){ + + gob.Register([]interface{}{}) + gob.Register(map[string]interface{}{}) + +} + +func MakeSHA256(i any) ([]uint8,error) { + + var b bytes.Buffer + + e := gob.NewEncoder(&b) + if err := e.Encode(i); err != nil { + log.Printf("WARNING: Encoding hash failed with %v. Entry not made.",err) + return []uint8{},fmt.Errorf("Encoding Failed") + } + + h := sha256.New() + h.Write(b.Bytes()) + digest := h.Sum(nil) + + return digest,nil +} \ No newline at end of file diff --git a/ga10/utilities/identifiers.go b/ga10/utilities/identifiers.go new file mode 100644 index 00000000..3997ad6d --- /dev/null +++ b/ga10/utilities/identifiers.go @@ -0,0 +1,9 @@ +package utilities + +import( + "github.com/google/uuid" +) + +func MakeID() string { + return uuid.New().String() +} \ No newline at end of file diff --git a/ga10/utilities/timestamps.go b/ga10/utilities/timestamps.go new file mode 100644 index 00000000..8607fa51 --- /dev/null +++ b/ga10/utilities/timestamps.go @@ -0,0 +1,15 @@ +package utilities + +import( + "time" + "fmt" + + "a10/structures" +) + + +//makeTimestamp generates the number of nanoseconds since Unix Epoch in UTC. +func MakeTimestamp() structures.Timestamp { + t := structures.Timestamp(fmt.Sprintf("%v",time.Now().UnixNano())) + return t +} \ No newline at end of file diff --git a/ta10 b/ta10 new file mode 160000 index 00000000..918a29a2 --- /dev/null +++ b/ta10 @@ -0,0 +1 @@ +Subproject commit 918a29a241159fc7d4028ad97ebaf5b06f81c4ff diff --git a/README.md b/v0.11.0python_final/README.md similarity index 100% rename from README.md rename to v0.11.0python_final/README.md diff --git a/a10rest/Dockerfile.local b/v0.11.0python_final/a10rest/Dockerfile.local similarity index 100% rename from a10rest/Dockerfile.local rename to v0.11.0python_final/a10rest/Dockerfile.local diff --git a/a10rest/README.md b/v0.11.0python_final/a10rest/README.md similarity index 100% rename from a10rest/README.md rename to v0.11.0python_final/a10rest/README.md diff --git a/a10rest/a10rest.conf b/v0.11.0python_final/a10rest/a10rest.conf similarity index 100% rename from a10rest/a10rest.conf rename to v0.11.0python_final/a10rest/a10rest.conf diff --git a/a10rest/a10rest.py b/v0.11.0python_final/a10rest/a10rest.py similarity index 100% rename from a10rest/a10rest.py rename to v0.11.0python_final/a10rest/a10rest.py diff --git a/a10rest/blueprints/dbimportexport.py b/v0.11.0python_final/a10rest/blueprints/dbimportexport.py similarity index 100% rename from a10rest/blueprints/dbimportexport.py rename to v0.11.0python_final/a10rest/blueprints/dbimportexport.py diff --git a/a10rest/blueprints/v2.py b/v0.11.0python_final/a10rest/blueprints/v2.py similarity index 100% rename from a10rest/blueprints/v2.py rename to v0.11.0python_final/a10rest/blueprints/v2.py diff --git a/a10rest/requirements.txt b/v0.11.0python_final/a10rest/requirements.txt similarity index 100% rename from a10rest/requirements.txt rename to v0.11.0python_final/a10rest/requirements.txt diff --git a/a10server/.pypirc_2 b/v0.11.0python_final/a10server/.pypirc_2 similarity index 100% rename from a10server/.pypirc_2 rename to v0.11.0python_final/a10server/.pypirc_2 diff --git a/a10server/README.md b/v0.11.0python_final/a10server/README.md similarity index 100% rename from a10server/README.md rename to v0.11.0python_final/a10server/README.md diff --git a/a10server/a10/__init__.py b/v0.11.0python_final/a10server/a10/__init__.py similarity index 100% rename from a10server/a10/__init__.py rename to v0.11.0python_final/a10server/a10/__init__.py diff --git a/a10server/a10/asvr/__init__.py b/v0.11.0python_final/a10server/a10/asvr/__init__.py similarity index 100% rename from a10server/a10/asvr/__init__.py rename to v0.11.0python_final/a10server/a10/asvr/__init__.py diff --git a/a10server/a10/asvr/analytics/__init__.py b/v0.11.0python_final/a10server/a10/asvr/analytics/__init__.py similarity index 100% rename from a10server/a10/asvr/analytics/__init__.py rename to v0.11.0python_final/a10server/a10/asvr/analytics/__init__.py diff --git a/a10server/a10/asvr/analytics/elementanalytics.py b/v0.11.0python_final/a10server/a10/asvr/analytics/elementanalytics.py similarity index 100% rename from a10server/a10/asvr/analytics/elementanalytics.py rename to v0.11.0python_final/a10server/a10/asvr/analytics/elementanalytics.py diff --git a/a10server/a10/asvr/attestation.py b/v0.11.0python_final/a10server/a10/asvr/attestation.py similarity index 100% rename from a10server/a10/asvr/attestation.py rename to v0.11.0python_final/a10server/a10/asvr/attestation.py diff --git a/a10server/a10/asvr/claims.py b/v0.11.0python_final/a10server/a10/asvr/claims.py similarity index 100% rename from a10server/a10/asvr/claims.py rename to v0.11.0python_final/a10server/a10/asvr/claims.py diff --git a/a10server/a10/asvr/db/__init__.py b/v0.11.0python_final/a10server/a10/asvr/db/__init__.py similarity index 100% rename from a10server/a10/asvr/db/__init__.py rename to v0.11.0python_final/a10server/a10/asvr/db/__init__.py diff --git a/a10server/a10/asvr/db/announce.py b/v0.11.0python_final/a10server/a10/asvr/db/announce.py similarity index 100% rename from a10server/a10/asvr/db/announce.py rename to v0.11.0python_final/a10server/a10/asvr/db/announce.py diff --git a/a10server/a10/asvr/db/configuration.py b/v0.11.0python_final/a10server/a10/asvr/db/configuration.py similarity index 100% rename from a10server/a10/asvr/db/configuration.py rename to v0.11.0python_final/a10server/a10/asvr/db/configuration.py diff --git a/a10server/a10/asvr/db/core.py b/v0.11.0python_final/a10server/a10/asvr/db/core.py similarity index 100% rename from a10server/a10/asvr/db/core.py rename to v0.11.0python_final/a10server/a10/asvr/db/core.py diff --git a/a10server/a10/asvr/db/log.py b/v0.11.0python_final/a10server/a10/asvr/db/log.py similarity index 100% rename from a10server/a10/asvr/db/log.py rename to v0.11.0python_final/a10server/a10/asvr/db/log.py diff --git a/a10server/a10/asvr/db/mqtt.py b/v0.11.0python_final/a10server/a10/asvr/db/mqtt.py similarity index 100% rename from a10server/a10/asvr/db/mqtt.py rename to v0.11.0python_final/a10server/a10/asvr/db/mqtt.py diff --git a/a10server/a10/asvr/elements.py b/v0.11.0python_final/a10server/a10/asvr/elements.py similarity index 100% rename from a10server/a10/asvr/elements.py rename to v0.11.0python_final/a10server/a10/asvr/elements.py diff --git a/a10server/a10/asvr/expectedvalues.py b/v0.11.0python_final/a10server/a10/asvr/expectedvalues.py similarity index 100% rename from a10server/a10/asvr/expectedvalues.py rename to v0.11.0python_final/a10server/a10/asvr/expectedvalues.py diff --git a/a10server/a10/asvr/hashes.py b/v0.11.0python_final/a10server/a10/asvr/hashes.py similarity index 100% rename from a10server/a10/asvr/hashes.py rename to v0.11.0python_final/a10server/a10/asvr/hashes.py diff --git a/a10server/a10/asvr/logread.py b/v0.11.0python_final/a10server/a10/asvr/logread.py similarity index 100% rename from a10server/a10/asvr/logread.py rename to v0.11.0python_final/a10server/a10/asvr/logread.py diff --git a/a10server/a10/asvr/pcrschemas.py b/v0.11.0python_final/a10server/a10/asvr/pcrschemas.py similarity index 100% rename from a10server/a10/asvr/pcrschemas.py rename to v0.11.0python_final/a10server/a10/asvr/pcrschemas.py diff --git a/a10server/a10/asvr/policies.py b/v0.11.0python_final/a10server/a10/asvr/policies.py similarity index 100% rename from a10server/a10/asvr/policies.py rename to v0.11.0python_final/a10server/a10/asvr/policies.py diff --git a/a10server/a10/asvr/protocols/A10ArduinoUSB.py b/v0.11.0python_final/a10server/a10/asvr/protocols/A10ArduinoUSB.py similarity index 100% rename from a10server/a10/asvr/protocols/A10ArduinoUSB.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/A10ArduinoUSB.py diff --git a/a10server/a10/asvr/protocols/A10ContainerImage.py b/v0.11.0python_final/a10server/a10/asvr/protocols/A10ContainerImage.py similarity index 100% rename from a10server/a10/asvr/protocols/A10ContainerImage.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/A10ContainerImage.py diff --git a/a10server/a10/asvr/protocols/A10DummyProtocol.py b/v0.11.0python_final/a10server/a10/asvr/protocols/A10DummyProtocol.py similarity index 100% rename from a10server/a10/asvr/protocols/A10DummyProtocol.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/A10DummyProtocol.py diff --git a/a10server/a10/asvr/protocols/A10HttpRest.py b/v0.11.0python_final/a10server/a10/asvr/protocols/A10HttpRest.py similarity index 100% rename from a10server/a10/asvr/protocols/A10HttpRest.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/A10HttpRest.py diff --git a/a10server/a10/asvr/protocols/A10Keylime.py b/v0.11.0python_final/a10server/a10/asvr/protocols/A10Keylime.py similarity index 100% rename from a10server/a10/asvr/protocols/A10Keylime.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/A10Keylime.py diff --git a/a10server/a10/asvr/protocols/A10ProtocolBase.py b/v0.11.0python_final/a10server/a10/asvr/protocols/A10ProtocolBase.py similarity index 100% rename from a10server/a10/asvr/protocols/A10ProtocolBase.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/A10ProtocolBase.py diff --git a/a10server/a10/asvr/protocols/A10tpm2send.py b/v0.11.0python_final/a10server/a10/asvr/protocols/A10tpm2send.py similarity index 100% rename from a10server/a10/asvr/protocols/A10tpm2send.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/A10tpm2send.py diff --git a/a10server/a10/asvr/protocols/Lannion.py b/v0.11.0python_final/a10server/a10/asvr/protocols/Lannion.py similarity index 100% rename from a10server/a10/asvr/protocols/Lannion.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/Lannion.py diff --git a/a10server/a10/asvr/protocols/__init__.py b/v0.11.0python_final/a10server/a10/asvr/protocols/__init__.py similarity index 100% rename from a10server/a10/asvr/protocols/__init__.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/__init__.py diff --git a/a10server/a10/asvr/protocols/protocol_dispatcher.py b/v0.11.0python_final/a10server/a10/asvr/protocols/protocol_dispatcher.py similarity index 100% rename from a10server/a10/asvr/protocols/protocol_dispatcher.py rename to v0.11.0python_final/a10server/a10/asvr/protocols/protocol_dispatcher.py diff --git a/a10server/a10/asvr/results.py b/v0.11.0python_final/a10server/a10/asvr/results.py similarity index 100% rename from a10server/a10/asvr/results.py rename to v0.11.0python_final/a10server/a10/asvr/results.py diff --git a/a10server/a10/asvr/rules/__init__.py b/v0.11.0python_final/a10server/a10/asvr/rules/__init__.py similarity index 100% rename from a10server/a10/asvr/rules/__init__.py rename to v0.11.0python_final/a10server/a10/asvr/rules/__init__.py diff --git a/a10server/a10/asvr/rules/baserule.py b/v0.11.0python_final/a10server/a10/asvr/rules/baserule.py similarity index 100% rename from a10server/a10/asvr/rules/baserule.py rename to v0.11.0python_final/a10server/a10/asvr/rules/baserule.py diff --git a/a10server/a10/asvr/rules/inteltxt.py b/v0.11.0python_final/a10server/a10/asvr/rules/inteltxt.py similarity index 100% rename from a10server/a10/asvr/rules/inteltxt.py rename to v0.11.0python_final/a10server/a10/asvr/rules/inteltxt.py diff --git a/a10server/a10/asvr/rules/nullrules.py b/v0.11.0python_final/a10server/a10/asvr/rules/nullrules.py similarity index 100% rename from a10server/a10/asvr/rules/nullrules.py rename to v0.11.0python_final/a10server/a10/asvr/rules/nullrules.py diff --git a/a10server/a10/asvr/rules/oldrules/arduinoa10rules.py b/v0.11.0python_final/a10server/a10/asvr/rules/oldrules/arduinoa10rules.py similarity index 100% rename from a10server/a10/asvr/rules/oldrules/arduinoa10rules.py rename to v0.11.0python_final/a10server/a10/asvr/rules/oldrules/arduinoa10rules.py diff --git a/a10server/a10/asvr/rules/oldrules/claimrules.py b/v0.11.0python_final/a10server/a10/asvr/rules/oldrules/claimrules.py similarity index 100% rename from a10server/a10/asvr/rules/oldrules/claimrules.py rename to v0.11.0python_final/a10server/a10/asvr/rules/oldrules/claimrules.py diff --git a/a10server/a10/asvr/rules/oldrules/container.py b/v0.11.0python_final/a10server/a10/asvr/rules/oldrules/container.py similarity index 100% rename from a10server/a10/asvr/rules/oldrules/container.py rename to v0.11.0python_final/a10server/a10/asvr/rules/oldrules/container.py diff --git a/a10server/a10/asvr/rules/oldrules/image_rules.py b/v0.11.0python_final/a10server/a10/asvr/rules/oldrules/image_rules.py similarity index 100% rename from a10server/a10/asvr/rules/oldrules/image_rules.py rename to v0.11.0python_final/a10server/a10/asvr/rules/oldrules/image_rules.py diff --git a/a10server/a10/asvr/rules/oldrules/testquote.py b/v0.11.0python_final/a10server/a10/asvr/rules/oldrules/testquote.py similarity index 100% rename from a10server/a10/asvr/rules/oldrules/testquote.py rename to v0.11.0python_final/a10server/a10/asvr/rules/oldrules/testquote.py diff --git a/a10server/a10/asvr/rules/oldrules/tpm2rules_original.py b/v0.11.0python_final/a10server/a10/asvr/rules/oldrules/tpm2rules_original.py similarity index 100% rename from a10server/a10/asvr/rules/oldrules/tpm2rules_original.py rename to v0.11.0python_final/a10server/a10/asvr/rules/oldrules/tpm2rules_original.py diff --git a/a10server/a10/asvr/rules/rule_dispatcher.py b/v0.11.0python_final/a10server/a10/asvr/rules/rule_dispatcher.py similarity index 100% rename from a10server/a10/asvr/rules/rule_dispatcher.py rename to v0.11.0python_final/a10server/a10/asvr/rules/rule_dispatcher.py diff --git a/a10server/a10/asvr/rules/tpm2rules.py b/v0.11.0python_final/a10server/a10/asvr/rules/tpm2rules.py similarity index 100% rename from a10server/a10/asvr/rules/tpm2rules.py rename to v0.11.0python_final/a10server/a10/asvr/rules/tpm2rules.py diff --git a/a10server/a10/asvr/rules/uefi.py b/v0.11.0python_final/a10server/a10/asvr/rules/uefi.py similarity index 100% rename from a10server/a10/asvr/rules/uefi.py rename to v0.11.0python_final/a10server/a10/asvr/rules/uefi.py diff --git a/a10server/a10/asvr/sessions.py b/v0.11.0python_final/a10server/a10/asvr/sessions.py similarity index 100% rename from a10server/a10/asvr/sessions.py rename to v0.11.0python_final/a10server/a10/asvr/sessions.py diff --git a/a10server/a10/asvr/types.py b/v0.11.0python_final/a10server/a10/asvr/types.py similarity index 100% rename from a10server/a10/asvr/types.py rename to v0.11.0python_final/a10server/a10/asvr/types.py diff --git a/a10server/build/lib/a10/__init__.py b/v0.11.0python_final/a10server/build/lib/a10/__init__.py similarity index 100% rename from a10server/build/lib/a10/__init__.py rename to v0.11.0python_final/a10server/build/lib/a10/__init__.py diff --git a/a10server/build/lib/a10/asvr/__init__.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/__init__.py similarity index 100% rename from a10server/build/lib/a10/asvr/__init__.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/__init__.py diff --git a/a10server/build/lib/a10/asvr/analytics/__init__.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/analytics/__init__.py similarity index 100% rename from a10server/build/lib/a10/asvr/analytics/__init__.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/analytics/__init__.py diff --git a/a10server/build/lib/a10/asvr/analytics/elementanalytics.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/analytics/elementanalytics.py similarity index 100% rename from a10server/build/lib/a10/asvr/analytics/elementanalytics.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/analytics/elementanalytics.py diff --git a/a10server/build/lib/a10/asvr/attestation.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/attestation.py similarity index 100% rename from a10server/build/lib/a10/asvr/attestation.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/attestation.py diff --git a/a10server/build/lib/a10/asvr/claims.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/claims.py similarity index 100% rename from a10server/build/lib/a10/asvr/claims.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/claims.py diff --git a/a10server/build/lib/a10/asvr/db/__init__.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/db/__init__.py similarity index 100% rename from a10server/build/lib/a10/asvr/db/__init__.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/db/__init__.py diff --git a/a10server/build/lib/a10/asvr/db/announce.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/db/announce.py similarity index 100% rename from a10server/build/lib/a10/asvr/db/announce.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/db/announce.py diff --git a/a10server/build/lib/a10/asvr/db/configuration.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/db/configuration.py similarity index 100% rename from a10server/build/lib/a10/asvr/db/configuration.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/db/configuration.py diff --git a/a10server/build/lib/a10/asvr/db/core.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/db/core.py similarity index 100% rename from a10server/build/lib/a10/asvr/db/core.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/db/core.py diff --git a/a10server/build/lib/a10/asvr/db/log.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/db/log.py similarity index 100% rename from a10server/build/lib/a10/asvr/db/log.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/db/log.py diff --git a/a10server/build/lib/a10/asvr/db/mqtt.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/db/mqtt.py similarity index 100% rename from a10server/build/lib/a10/asvr/db/mqtt.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/db/mqtt.py diff --git a/a10server/build/lib/a10/asvr/elements.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/elements.py similarity index 100% rename from a10server/build/lib/a10/asvr/elements.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/elements.py diff --git a/a10server/build/lib/a10/asvr/expectedvalues.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/expectedvalues.py similarity index 100% rename from a10server/build/lib/a10/asvr/expectedvalues.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/expectedvalues.py diff --git a/a10server/build/lib/a10/asvr/hashes.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/hashes.py similarity index 100% rename from a10server/build/lib/a10/asvr/hashes.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/hashes.py diff --git a/a10server/build/lib/a10/asvr/logread.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/logread.py similarity index 100% rename from a10server/build/lib/a10/asvr/logread.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/logread.py diff --git a/a10server/build/lib/a10/asvr/pcrschemas.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/pcrschemas.py similarity index 100% rename from a10server/build/lib/a10/asvr/pcrschemas.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/pcrschemas.py diff --git a/a10server/build/lib/a10/asvr/policies.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/policies.py similarity index 100% rename from a10server/build/lib/a10/asvr/policies.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/policies.py diff --git a/a10server/build/lib/a10/asvr/protocols/A10ArduinoUSB.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10ArduinoUSB.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/A10ArduinoUSB.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10ArduinoUSB.py diff --git a/a10server/build/lib/a10/asvr/protocols/A10ContainerImage.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10ContainerImage.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/A10ContainerImage.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10ContainerImage.py diff --git a/a10server/build/lib/a10/asvr/protocols/A10DummyProtocol.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10DummyProtocol.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/A10DummyProtocol.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10DummyProtocol.py diff --git a/a10server/build/lib/a10/asvr/protocols/A10HttpRest.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10HttpRest.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/A10HttpRest.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10HttpRest.py diff --git a/a10server/build/lib/a10/asvr/protocols/A10Keylime.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10Keylime.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/A10Keylime.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10Keylime.py diff --git a/a10server/build/lib/a10/asvr/protocols/A10ProtocolBase.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10ProtocolBase.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/A10ProtocolBase.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10ProtocolBase.py diff --git a/a10server/build/lib/a10/asvr/protocols/A10tpm2send.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10tpm2send.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/A10tpm2send.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/A10tpm2send.py diff --git a/a10server/build/lib/a10/asvr/protocols/Lannion.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/Lannion.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/Lannion.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/Lannion.py diff --git a/a10server/build/lib/a10/asvr/protocols/__init__.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/__init__.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/__init__.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/__init__.py diff --git a/a10server/build/lib/a10/asvr/protocols/protocol_dispatcher.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/protocol_dispatcher.py similarity index 100% rename from a10server/build/lib/a10/asvr/protocols/protocol_dispatcher.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/protocols/protocol_dispatcher.py diff --git a/a10server/build/lib/a10/asvr/results.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/results.py similarity index 100% rename from a10server/build/lib/a10/asvr/results.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/results.py diff --git a/a10server/build/lib/a10/asvr/rules/__init__.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/rules/__init__.py similarity index 100% rename from a10server/build/lib/a10/asvr/rules/__init__.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/rules/__init__.py diff --git a/a10server/build/lib/a10/asvr/rules/baserule.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/rules/baserule.py similarity index 100% rename from a10server/build/lib/a10/asvr/rules/baserule.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/rules/baserule.py diff --git a/a10server/build/lib/a10/asvr/rules/inteltxt.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/rules/inteltxt.py similarity index 100% rename from a10server/build/lib/a10/asvr/rules/inteltxt.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/rules/inteltxt.py diff --git a/a10server/build/lib/a10/asvr/rules/nullrules.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/rules/nullrules.py similarity index 100% rename from a10server/build/lib/a10/asvr/rules/nullrules.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/rules/nullrules.py diff --git a/a10server/build/lib/a10/asvr/rules/rule_dispatcher.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/rules/rule_dispatcher.py similarity index 100% rename from a10server/build/lib/a10/asvr/rules/rule_dispatcher.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/rules/rule_dispatcher.py diff --git a/a10server/build/lib/a10/asvr/rules/tpm2rules.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/rules/tpm2rules.py similarity index 100% rename from a10server/build/lib/a10/asvr/rules/tpm2rules.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/rules/tpm2rules.py diff --git a/a10server/build/lib/a10/asvr/rules/uefi.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/rules/uefi.py similarity index 100% rename from a10server/build/lib/a10/asvr/rules/uefi.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/rules/uefi.py diff --git a/a10server/build/lib/a10/asvr/sessions.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/sessions.py similarity index 100% rename from a10server/build/lib/a10/asvr/sessions.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/sessions.py diff --git a/a10server/build/lib/a10/asvr/types.py b/v0.11.0python_final/a10server/build/lib/a10/asvr/types.py similarity index 100% rename from a10server/build/lib/a10/asvr/types.py rename to v0.11.0python_final/a10server/build/lib/a10/asvr/types.py diff --git a/a10server/doc/Makefile b/v0.11.0python_final/a10server/doc/Makefile similarity index 100% rename from a10server/doc/Makefile rename to v0.11.0python_final/a10server/doc/Makefile diff --git a/a10server/doc/build/doctrees/a10.asvr.analytics.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.analytics.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.analytics.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.analytics.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.attestation.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.attestation.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.attestation.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.attestation.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.claims.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.claims.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.claims.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.claims.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.db.announce.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.announce.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.db.announce.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.announce.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.db.configuration.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.configuration.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.db.configuration.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.configuration.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.db.core.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.core.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.db.core.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.core.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.db.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.db.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.db.log.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.log.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.db.log.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.log.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.db.mqtt.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.mqtt.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.db.mqtt.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.db.mqtt.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.elements.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.elements.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.elements.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.elements.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.expectedvalues.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.expectedvalues.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.expectedvalues.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.expectedvalues.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.hashes.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.hashes.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.hashes.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.hashes.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.policies.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.policies.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.policies.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.policies.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.protocols.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.protocols.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.results.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.results.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.results.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.results.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.rules.baserule.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.baserule.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.rules.baserule.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.baserule.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.rules.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.rules.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.rules.nullrules.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.nullrules.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.rules.nullrules.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.nullrules.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree diff --git a/a10server/doc/build/doctrees/a10.asvr.rules.uefi.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.uefi.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.asvr.rules.uefi.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.asvr.rules.uefi.doctree diff --git a/a10server/doc/build/doctrees/a10.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.doctree diff --git a/a10server/doc/build/doctrees/a10.structures.claim.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.claim.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.structures.claim.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.claim.doctree diff --git a/a10server/doc/build/doctrees/a10.structures.constants.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.constants.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.structures.constants.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.constants.doctree diff --git a/a10server/doc/build/doctrees/a10.structures.convenience.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.convenience.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.structures.convenience.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.convenience.doctree diff --git a/a10server/doc/build/doctrees/a10.structures.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.structures.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.doctree diff --git a/a10server/doc/build/doctrees/a10.structures.identity.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.identity.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.structures.identity.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.identity.doctree diff --git a/a10server/doc/build/doctrees/a10.structures.result.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.result.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.structures.result.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.result.doctree diff --git a/a10server/doc/build/doctrees/a10.structures.returncode.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.returncode.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.structures.returncode.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.returncode.doctree diff --git a/a10server/doc/build/doctrees/a10.structures.timestamps.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.timestamps.doctree similarity index 100% rename from a10server/doc/build/doctrees/a10.structures.timestamps.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/a10.structures.timestamps.doctree diff --git a/a10server/doc/build/doctrees/environment.pickle b/v0.11.0python_final/a10server/doc/build/doctrees/environment.pickle similarity index 100% rename from a10server/doc/build/doctrees/environment.pickle rename to v0.11.0python_final/a10server/doc/build/doctrees/environment.pickle diff --git a/a10server/doc/build/doctrees/index.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/index.doctree similarity index 100% rename from a10server/doc/build/doctrees/index.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/index.doctree diff --git a/a10server/doc/build/doctrees/modules.doctree b/v0.11.0python_final/a10server/doc/build/doctrees/modules.doctree similarity index 100% rename from a10server/doc/build/doctrees/modules.doctree rename to v0.11.0python_final/a10server/doc/build/doctrees/modules.doctree diff --git a/a10server/doc/build/html/.buildinfo b/v0.11.0python_final/a10server/doc/build/html/.buildinfo similarity index 100% rename from a10server/doc/build/html/.buildinfo rename to v0.11.0python_final/a10server/doc/build/html/.buildinfo diff --git a/a10server/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.analytics.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.analytics.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.analytics.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.analytics.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.attestation.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.attestation.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.attestation.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.attestation.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.claims.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.claims.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.claims.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.claims.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.db.announce.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.announce.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.db.announce.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.announce.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.db.core.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.core.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.db.core.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.core.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.db.log.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.log.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.db.log.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.log.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.db.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.db.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.db.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.elements.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.elements.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.elements.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.elements.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.hashes.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.hashes.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.hashes.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.hashes.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.policies.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.policies.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.policies.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.policies.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.protocols.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.protocols.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.protocols.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.results.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.results.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.results.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.results.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.rules.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.rules.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.structures.claim.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.claim.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.structures.claim.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.claim.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.structures.constants.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.constants.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.structures.constants.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.constants.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.structures.convenience.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.convenience.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.structures.convenience.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.convenience.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.structures.identity.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.identity.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.structures.identity.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.identity.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.structures.result.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.result.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.structures.result.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.result.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.structures.returncode.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.returncode.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.structures.returncode.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.returncode.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.structures.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.structures.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.rst.txt diff --git a/a10server/doc/build/html/_sources/a10.structures.timestamps.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.timestamps.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/a10.structures.timestamps.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/a10.structures.timestamps.rst.txt diff --git a/a10server/doc/build/html/_sources/index.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/index.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/index.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/index.rst.txt diff --git a/a10server/doc/build/html/_sources/modules.rst.txt b/v0.11.0python_final/a10server/doc/build/html/_sources/modules.rst.txt similarity index 100% rename from a10server/doc/build/html/_sources/modules.rst.txt rename to v0.11.0python_final/a10server/doc/build/html/_sources/modules.rst.txt diff --git a/a10server/doc/build/html/_static/basic.css b/v0.11.0python_final/a10server/doc/build/html/_static/basic.css similarity index 100% rename from a10server/doc/build/html/_static/basic.css rename to v0.11.0python_final/a10server/doc/build/html/_static/basic.css diff --git a/a10server/doc/build/html/_static/classic.css b/v0.11.0python_final/a10server/doc/build/html/_static/classic.css similarity index 100% rename from a10server/doc/build/html/_static/classic.css rename to v0.11.0python_final/a10server/doc/build/html/_static/classic.css diff --git a/a10server/doc/build/html/_static/doctools.js b/v0.11.0python_final/a10server/doc/build/html/_static/doctools.js similarity index 100% rename from a10server/doc/build/html/_static/doctools.js rename to v0.11.0python_final/a10server/doc/build/html/_static/doctools.js diff --git a/a10server/doc/build/html/_static/documentation_options.js b/v0.11.0python_final/a10server/doc/build/html/_static/documentation_options.js similarity index 100% rename from a10server/doc/build/html/_static/documentation_options.js rename to v0.11.0python_final/a10server/doc/build/html/_static/documentation_options.js diff --git a/a10server/doc/build/html/_static/file.png b/v0.11.0python_final/a10server/doc/build/html/_static/file.png similarity index 100% rename from a10server/doc/build/html/_static/file.png rename to v0.11.0python_final/a10server/doc/build/html/_static/file.png diff --git a/a10server/doc/build/html/_static/jquery.js b/v0.11.0python_final/a10server/doc/build/html/_static/jquery.js similarity index 100% rename from a10server/doc/build/html/_static/jquery.js rename to v0.11.0python_final/a10server/doc/build/html/_static/jquery.js diff --git a/a10server/doc/build/html/_static/language_data.js b/v0.11.0python_final/a10server/doc/build/html/_static/language_data.js similarity index 100% rename from a10server/doc/build/html/_static/language_data.js rename to v0.11.0python_final/a10server/doc/build/html/_static/language_data.js diff --git a/a10server/doc/build/html/_static/minus.png b/v0.11.0python_final/a10server/doc/build/html/_static/minus.png similarity index 100% rename from a10server/doc/build/html/_static/minus.png rename to v0.11.0python_final/a10server/doc/build/html/_static/minus.png diff --git a/a10server/doc/build/html/_static/plus.png b/v0.11.0python_final/a10server/doc/build/html/_static/plus.png similarity index 100% rename from a10server/doc/build/html/_static/plus.png rename to v0.11.0python_final/a10server/doc/build/html/_static/plus.png diff --git a/a10server/doc/build/html/_static/pygments.css b/v0.11.0python_final/a10server/doc/build/html/_static/pygments.css similarity index 100% rename from a10server/doc/build/html/_static/pygments.css rename to v0.11.0python_final/a10server/doc/build/html/_static/pygments.css diff --git a/a10server/doc/build/html/_static/searchtools.js b/v0.11.0python_final/a10server/doc/build/html/_static/searchtools.js similarity index 100% rename from a10server/doc/build/html/_static/searchtools.js rename to v0.11.0python_final/a10server/doc/build/html/_static/searchtools.js diff --git a/a10server/doc/build/html/_static/sidebar.js b/v0.11.0python_final/a10server/doc/build/html/_static/sidebar.js similarity index 100% rename from a10server/doc/build/html/_static/sidebar.js rename to v0.11.0python_final/a10server/doc/build/html/_static/sidebar.js diff --git a/a10server/doc/build/html/_static/underscore.js b/v0.11.0python_final/a10server/doc/build/html/_static/underscore.js similarity index 100% rename from a10server/doc/build/html/_static/underscore.js rename to v0.11.0python_final/a10server/doc/build/html/_static/underscore.js diff --git a/a10server/doc/build/html/a10.asvr.analytics.elementanalytics.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.analytics.elementanalytics.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.analytics.elementanalytics.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.analytics.elementanalytics.html diff --git a/a10server/doc/build/html/a10.asvr.analytics.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.analytics.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.analytics.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.analytics.html diff --git a/a10server/doc/build/html/a10.asvr.attestation.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.attestation.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.attestation.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.attestation.html diff --git a/a10server/doc/build/html/a10.asvr.claims.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.claims.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.claims.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.claims.html diff --git a/a10server/doc/build/html/a10.asvr.db.announce.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.announce.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.db.announce.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.announce.html diff --git a/a10server/doc/build/html/a10.asvr.db.configuration.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.configuration.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.db.configuration.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.configuration.html diff --git a/a10server/doc/build/html/a10.asvr.db.core.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.core.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.db.core.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.core.html diff --git a/a10server/doc/build/html/a10.asvr.db.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.db.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.html diff --git a/a10server/doc/build/html/a10.asvr.db.log.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.log.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.db.log.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.log.html diff --git a/a10server/doc/build/html/a10.asvr.db.mqtt.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.mqtt.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.db.mqtt.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.db.mqtt.html diff --git a/a10server/doc/build/html/a10.asvr.elements.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.elements.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.elements.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.elements.html diff --git a/a10server/doc/build/html/a10.asvr.expectedvalues.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.expectedvalues.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.expectedvalues.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.expectedvalues.html diff --git a/a10server/doc/build/html/a10.asvr.hashes.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.hashes.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.hashes.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.hashes.html diff --git a/a10server/doc/build/html/a10.asvr.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.html diff --git a/a10server/doc/build/html/a10.asvr.policies.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.policies.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.policies.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.policies.html diff --git a/a10server/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html diff --git a/a10server/doc/build/html/a10.asvr.protocols.A10ContainerImage.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10ContainerImage.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.protocols.A10ContainerImage.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10ContainerImage.html diff --git a/a10server/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html diff --git a/a10server/doc/build/html/a10.asvr.protocols.A10HttpRest.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10HttpRest.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.protocols.A10HttpRest.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10HttpRest.html diff --git a/a10server/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html diff --git a/a10server/doc/build/html/a10.asvr.protocols.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.protocols.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.html diff --git a/a10server/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html diff --git a/a10server/doc/build/html/a10.asvr.results.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.results.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.results.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.results.html diff --git a/a10server/doc/build/html/a10.asvr.rules.baserule.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.baserule.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.rules.baserule.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.baserule.html diff --git a/a10server/doc/build/html/a10.asvr.rules.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.rules.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.html diff --git a/a10server/doc/build/html/a10.asvr.rules.nullrules.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.nullrules.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.rules.nullrules.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.nullrules.html diff --git a/a10server/doc/build/html/a10.asvr.rules.rule_dispatcher.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.rule_dispatcher.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.rules.rule_dispatcher.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.rule_dispatcher.html diff --git a/a10server/doc/build/html/a10.asvr.rules.tpm2rules.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.tpm2rules.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.rules.tpm2rules.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.tpm2rules.html diff --git a/a10server/doc/build/html/a10.asvr.rules.uefi.html b/v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.uefi.html similarity index 100% rename from a10server/doc/build/html/a10.asvr.rules.uefi.html rename to v0.11.0python_final/a10server/doc/build/html/a10.asvr.rules.uefi.html diff --git a/a10server/doc/build/html/a10.html b/v0.11.0python_final/a10server/doc/build/html/a10.html similarity index 100% rename from a10server/doc/build/html/a10.html rename to v0.11.0python_final/a10server/doc/build/html/a10.html diff --git a/a10server/doc/build/html/a10.structures.claim.html b/v0.11.0python_final/a10server/doc/build/html/a10.structures.claim.html similarity index 100% rename from a10server/doc/build/html/a10.structures.claim.html rename to v0.11.0python_final/a10server/doc/build/html/a10.structures.claim.html diff --git a/a10server/doc/build/html/a10.structures.constants.html b/v0.11.0python_final/a10server/doc/build/html/a10.structures.constants.html similarity index 100% rename from a10server/doc/build/html/a10.structures.constants.html rename to v0.11.0python_final/a10server/doc/build/html/a10.structures.constants.html diff --git a/a10server/doc/build/html/a10.structures.convenience.html b/v0.11.0python_final/a10server/doc/build/html/a10.structures.convenience.html similarity index 100% rename from a10server/doc/build/html/a10.structures.convenience.html rename to v0.11.0python_final/a10server/doc/build/html/a10.structures.convenience.html diff --git a/a10server/doc/build/html/a10.structures.html b/v0.11.0python_final/a10server/doc/build/html/a10.structures.html similarity index 100% rename from a10server/doc/build/html/a10.structures.html rename to v0.11.0python_final/a10server/doc/build/html/a10.structures.html diff --git a/a10server/doc/build/html/a10.structures.identity.html b/v0.11.0python_final/a10server/doc/build/html/a10.structures.identity.html similarity index 100% rename from a10server/doc/build/html/a10.structures.identity.html rename to v0.11.0python_final/a10server/doc/build/html/a10.structures.identity.html diff --git a/a10server/doc/build/html/a10.structures.result.html b/v0.11.0python_final/a10server/doc/build/html/a10.structures.result.html similarity index 100% rename from a10server/doc/build/html/a10.structures.result.html rename to v0.11.0python_final/a10server/doc/build/html/a10.structures.result.html diff --git a/a10server/doc/build/html/a10.structures.returncode.html b/v0.11.0python_final/a10server/doc/build/html/a10.structures.returncode.html similarity index 100% rename from a10server/doc/build/html/a10.structures.returncode.html rename to v0.11.0python_final/a10server/doc/build/html/a10.structures.returncode.html diff --git a/a10server/doc/build/html/a10.structures.timestamps.html b/v0.11.0python_final/a10server/doc/build/html/a10.structures.timestamps.html similarity index 100% rename from a10server/doc/build/html/a10.structures.timestamps.html rename to v0.11.0python_final/a10server/doc/build/html/a10.structures.timestamps.html diff --git a/a10server/doc/build/html/genindex.html b/v0.11.0python_final/a10server/doc/build/html/genindex.html similarity index 100% rename from a10server/doc/build/html/genindex.html rename to v0.11.0python_final/a10server/doc/build/html/genindex.html diff --git a/a10server/doc/build/html/index.html b/v0.11.0python_final/a10server/doc/build/html/index.html similarity index 100% rename from a10server/doc/build/html/index.html rename to v0.11.0python_final/a10server/doc/build/html/index.html diff --git a/a10server/doc/build/html/modules.html b/v0.11.0python_final/a10server/doc/build/html/modules.html similarity index 100% rename from a10server/doc/build/html/modules.html rename to v0.11.0python_final/a10server/doc/build/html/modules.html diff --git a/a10server/doc/build/html/objects.inv b/v0.11.0python_final/a10server/doc/build/html/objects.inv similarity index 100% rename from a10server/doc/build/html/objects.inv rename to v0.11.0python_final/a10server/doc/build/html/objects.inv diff --git a/a10server/doc/build/html/py-modindex.html b/v0.11.0python_final/a10server/doc/build/html/py-modindex.html similarity index 100% rename from a10server/doc/build/html/py-modindex.html rename to v0.11.0python_final/a10server/doc/build/html/py-modindex.html diff --git a/a10server/doc/build/html/search.html b/v0.11.0python_final/a10server/doc/build/html/search.html similarity index 100% rename from a10server/doc/build/html/search.html rename to v0.11.0python_final/a10server/doc/build/html/search.html diff --git a/a10server/doc/build/html/searchindex.js b/v0.11.0python_final/a10server/doc/build/html/searchindex.js similarity index 100% rename from a10server/doc/build/html/searchindex.js rename to v0.11.0python_final/a10server/doc/build/html/searchindex.js diff --git a/a10server/doc/source/a10.asvr.analytics.elementanalytics.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.analytics.elementanalytics.rst similarity index 100% rename from a10server/doc/source/a10.asvr.analytics.elementanalytics.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.analytics.elementanalytics.rst diff --git a/a10server/doc/source/a10.asvr.analytics.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.analytics.rst similarity index 100% rename from a10server/doc/source/a10.asvr.analytics.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.analytics.rst diff --git a/a10server/doc/source/a10.asvr.attestation.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.attestation.rst similarity index 100% rename from a10server/doc/source/a10.asvr.attestation.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.attestation.rst diff --git a/a10server/doc/source/a10.asvr.claims.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.claims.rst similarity index 100% rename from a10server/doc/source/a10.asvr.claims.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.claims.rst diff --git a/a10server/doc/source/a10.asvr.db.announce.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.db.announce.rst similarity index 100% rename from a10server/doc/source/a10.asvr.db.announce.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.db.announce.rst diff --git a/a10server/doc/source/a10.asvr.db.configuration.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.db.configuration.rst similarity index 100% rename from a10server/doc/source/a10.asvr.db.configuration.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.db.configuration.rst diff --git a/a10server/doc/source/a10.asvr.db.core.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.db.core.rst similarity index 100% rename from a10server/doc/source/a10.asvr.db.core.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.db.core.rst diff --git a/a10server/doc/source/a10.asvr.db.log.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.db.log.rst similarity index 100% rename from a10server/doc/source/a10.asvr.db.log.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.db.log.rst diff --git a/a10server/doc/source/a10.asvr.db.mqtt.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.db.mqtt.rst similarity index 100% rename from a10server/doc/source/a10.asvr.db.mqtt.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.db.mqtt.rst diff --git a/a10server/doc/source/a10.asvr.db.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.db.rst similarity index 100% rename from a10server/doc/source/a10.asvr.db.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.db.rst diff --git a/a10server/doc/source/a10.asvr.elements.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.elements.rst similarity index 100% rename from a10server/doc/source/a10.asvr.elements.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.elements.rst diff --git a/a10server/doc/source/a10.asvr.expectedvalues.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.expectedvalues.rst similarity index 100% rename from a10server/doc/source/a10.asvr.expectedvalues.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.expectedvalues.rst diff --git a/a10server/doc/source/a10.asvr.hashes.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.hashes.rst similarity index 100% rename from a10server/doc/source/a10.asvr.hashes.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.hashes.rst diff --git a/a10server/doc/source/a10.asvr.policies.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.policies.rst similarity index 100% rename from a10server/doc/source/a10.asvr.policies.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.policies.rst diff --git a/a10server/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst similarity index 100% rename from a10server/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst diff --git a/a10server/doc/source/a10.asvr.protocols.A10ContainerImage.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10ContainerImage.rst similarity index 100% rename from a10server/doc/source/a10.asvr.protocols.A10ContainerImage.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10ContainerImage.rst diff --git a/a10server/doc/source/a10.asvr.protocols.A10DummyProtocol.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10DummyProtocol.rst similarity index 100% rename from a10server/doc/source/a10.asvr.protocols.A10DummyProtocol.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10DummyProtocol.rst diff --git a/a10server/doc/source/a10.asvr.protocols.A10HttpRest.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10HttpRest.rst similarity index 100% rename from a10server/doc/source/a10.asvr.protocols.A10HttpRest.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10HttpRest.rst diff --git a/a10server/doc/source/a10.asvr.protocols.A10ProtocolBase.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10ProtocolBase.rst similarity index 100% rename from a10server/doc/source/a10.asvr.protocols.A10ProtocolBase.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.A10ProtocolBase.rst diff --git a/a10server/doc/source/a10.asvr.protocols.protocol_dispatcher.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.protocol_dispatcher.rst similarity index 100% rename from a10server/doc/source/a10.asvr.protocols.protocol_dispatcher.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.protocol_dispatcher.rst diff --git a/a10server/doc/source/a10.asvr.protocols.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.rst similarity index 100% rename from a10server/doc/source/a10.asvr.protocols.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.protocols.rst diff --git a/a10server/doc/source/a10.asvr.results.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.results.rst similarity index 100% rename from a10server/doc/source/a10.asvr.results.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.results.rst diff --git a/a10server/doc/source/a10.asvr.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.rst similarity index 100% rename from a10server/doc/source/a10.asvr.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.rst diff --git a/a10server/doc/source/a10.asvr.rules.baserule.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.rules.baserule.rst similarity index 100% rename from a10server/doc/source/a10.asvr.rules.baserule.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.rules.baserule.rst diff --git a/a10server/doc/source/a10.asvr.rules.nullrules.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.rules.nullrules.rst similarity index 100% rename from a10server/doc/source/a10.asvr.rules.nullrules.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.rules.nullrules.rst diff --git a/a10server/doc/source/a10.asvr.rules.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.rules.rst similarity index 100% rename from a10server/doc/source/a10.asvr.rules.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.rules.rst diff --git a/a10server/doc/source/a10.asvr.rules.rule_dispatcher.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.rules.rule_dispatcher.rst similarity index 100% rename from a10server/doc/source/a10.asvr.rules.rule_dispatcher.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.rules.rule_dispatcher.rst diff --git a/a10server/doc/source/a10.asvr.rules.tpm2rules.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.rules.tpm2rules.rst similarity index 100% rename from a10server/doc/source/a10.asvr.rules.tpm2rules.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.rules.tpm2rules.rst diff --git a/a10server/doc/source/a10.asvr.rules.uefi.rst b/v0.11.0python_final/a10server/doc/source/a10.asvr.rules.uefi.rst similarity index 100% rename from a10server/doc/source/a10.asvr.rules.uefi.rst rename to v0.11.0python_final/a10server/doc/source/a10.asvr.rules.uefi.rst diff --git a/a10server/doc/source/a10.rst b/v0.11.0python_final/a10server/doc/source/a10.rst similarity index 100% rename from a10server/doc/source/a10.rst rename to v0.11.0python_final/a10server/doc/source/a10.rst diff --git a/a10server/doc/source/a10.structures.claim.rst b/v0.11.0python_final/a10server/doc/source/a10.structures.claim.rst similarity index 100% rename from a10server/doc/source/a10.structures.claim.rst rename to v0.11.0python_final/a10server/doc/source/a10.structures.claim.rst diff --git a/a10server/doc/source/a10.structures.constants.rst b/v0.11.0python_final/a10server/doc/source/a10.structures.constants.rst similarity index 100% rename from a10server/doc/source/a10.structures.constants.rst rename to v0.11.0python_final/a10server/doc/source/a10.structures.constants.rst diff --git a/a10server/doc/source/a10.structures.convenience.rst b/v0.11.0python_final/a10server/doc/source/a10.structures.convenience.rst similarity index 100% rename from a10server/doc/source/a10.structures.convenience.rst rename to v0.11.0python_final/a10server/doc/source/a10.structures.convenience.rst diff --git a/a10server/doc/source/a10.structures.identity.rst b/v0.11.0python_final/a10server/doc/source/a10.structures.identity.rst similarity index 100% rename from a10server/doc/source/a10.structures.identity.rst rename to v0.11.0python_final/a10server/doc/source/a10.structures.identity.rst diff --git a/a10server/doc/source/a10.structures.result.rst b/v0.11.0python_final/a10server/doc/source/a10.structures.result.rst similarity index 100% rename from a10server/doc/source/a10.structures.result.rst rename to v0.11.0python_final/a10server/doc/source/a10.structures.result.rst diff --git a/a10server/doc/source/a10.structures.returncode.rst b/v0.11.0python_final/a10server/doc/source/a10.structures.returncode.rst similarity index 100% rename from a10server/doc/source/a10.structures.returncode.rst rename to v0.11.0python_final/a10server/doc/source/a10.structures.returncode.rst diff --git a/a10server/doc/source/a10.structures.rst b/v0.11.0python_final/a10server/doc/source/a10.structures.rst similarity index 100% rename from a10server/doc/source/a10.structures.rst rename to v0.11.0python_final/a10server/doc/source/a10.structures.rst diff --git a/a10server/doc/source/a10.structures.timestamps.rst b/v0.11.0python_final/a10server/doc/source/a10.structures.timestamps.rst similarity index 100% rename from a10server/doc/source/a10.structures.timestamps.rst rename to v0.11.0python_final/a10server/doc/source/a10.structures.timestamps.rst diff --git a/a10server/doc/source/conf.py b/v0.11.0python_final/a10server/doc/source/conf.py similarity index 100% rename from a10server/doc/source/conf.py rename to v0.11.0python_final/a10server/doc/source/conf.py diff --git a/a10server/doc/source/index.rst b/v0.11.0python_final/a10server/doc/source/index.rst similarity index 100% rename from a10server/doc/source/index.rst rename to v0.11.0python_final/a10server/doc/source/index.rst diff --git a/a10server/doc/source/modules.rst b/v0.11.0python_final/a10server/doc/source/modules.rst similarity index 100% rename from a10server/doc/source/modules.rst rename to v0.11.0python_final/a10server/doc/source/modules.rst diff --git a/a10server/reinstall b/v0.11.0python_final/a10server/reinstall similarity index 100% rename from a10server/reinstall rename to v0.11.0python_final/a10server/reinstall diff --git a/a10server/requirements.txt b/v0.11.0python_final/a10server/requirements.txt similarity index 100% rename from a10server/requirements.txt rename to v0.11.0python_final/a10server/requirements.txt diff --git a/a10server/setup.py b/v0.11.0python_final/a10server/setup.py similarity index 100% rename from a10server/setup.py rename to v0.11.0python_final/a10server/setup.py diff --git a/a10structures/.pypirc_2 b/v0.11.0python_final/a10structures/.pypirc_2 similarity index 100% rename from a10structures/.pypirc_2 rename to v0.11.0python_final/a10structures/.pypirc_2 diff --git a/a10structures/README.md b/v0.11.0python_final/a10structures/README.md similarity index 100% rename from a10structures/README.md rename to v0.11.0python_final/a10structures/README.md diff --git a/a10structures/a10/__init__.py b/v0.11.0python_final/a10structures/a10/__init__.py similarity index 100% rename from a10structures/a10/__init__.py rename to v0.11.0python_final/a10structures/a10/__init__.py diff --git a/a10structures/a10/structures/__init__.py b/v0.11.0python_final/a10structures/a10/structures/__init__.py similarity index 100% rename from a10structures/a10/structures/__init__.py rename to v0.11.0python_final/a10structures/a10/structures/__init__.py diff --git a/a10structures/a10/structures/claim.py b/v0.11.0python_final/a10structures/a10/structures/claim.py similarity index 100% rename from a10structures/a10/structures/claim.py rename to v0.11.0python_final/a10structures/a10/structures/claim.py diff --git a/a10structures/a10/structures/constants.py b/v0.11.0python_final/a10structures/a10/structures/constants.py similarity index 100% rename from a10structures/a10/structures/constants.py rename to v0.11.0python_final/a10structures/a10/structures/constants.py diff --git a/a10structures/a10/structures/convenience.py b/v0.11.0python_final/a10structures/a10/structures/convenience.py similarity index 100% rename from a10structures/a10/structures/convenience.py rename to v0.11.0python_final/a10structures/a10/structures/convenience.py diff --git a/a10structures/a10/structures/identity.py b/v0.11.0python_final/a10structures/a10/structures/identity.py similarity index 100% rename from a10structures/a10/structures/identity.py rename to v0.11.0python_final/a10structures/a10/structures/identity.py diff --git a/a10structures/a10/structures/result.py b/v0.11.0python_final/a10structures/a10/structures/result.py similarity index 100% rename from a10structures/a10/structures/result.py rename to v0.11.0python_final/a10structures/a10/structures/result.py diff --git a/a10structures/a10/structures/returncode.py b/v0.11.0python_final/a10structures/a10/structures/returncode.py similarity index 100% rename from a10structures/a10/structures/returncode.py rename to v0.11.0python_final/a10structures/a10/structures/returncode.py diff --git a/a10structures/a10/structures/timestamps.py b/v0.11.0python_final/a10structures/a10/structures/timestamps.py similarity index 100% rename from a10structures/a10/structures/timestamps.py rename to v0.11.0python_final/a10structures/a10/structures/timestamps.py diff --git a/a10structures/a10/utilities/__init__.py b/v0.11.0python_final/a10structures/a10/utilities/__init__.py similarity index 100% rename from a10structures/a10/utilities/__init__.py rename to v0.11.0python_final/a10structures/a10/utilities/__init__.py diff --git a/a10structures/a10/utilities/tpmoperations.py b/v0.11.0python_final/a10structures/a10/utilities/tpmoperations.py similarity index 100% rename from a10structures/a10/utilities/tpmoperations.py rename to v0.11.0python_final/a10structures/a10/utilities/tpmoperations.py diff --git a/a10structures/build/lib/a10/__init__.py b/v0.11.0python_final/a10structures/build/lib/a10/__init__.py similarity index 100% rename from a10structures/build/lib/a10/__init__.py rename to v0.11.0python_final/a10structures/build/lib/a10/__init__.py diff --git a/a10structures/build/lib/a10/structures/__init__.py b/v0.11.0python_final/a10structures/build/lib/a10/structures/__init__.py similarity index 100% rename from a10structures/build/lib/a10/structures/__init__.py rename to v0.11.0python_final/a10structures/build/lib/a10/structures/__init__.py diff --git a/a10structures/build/lib/a10/structures/claim.py b/v0.11.0python_final/a10structures/build/lib/a10/structures/claim.py similarity index 100% rename from a10structures/build/lib/a10/structures/claim.py rename to v0.11.0python_final/a10structures/build/lib/a10/structures/claim.py diff --git a/a10structures/build/lib/a10/structures/constants.py b/v0.11.0python_final/a10structures/build/lib/a10/structures/constants.py similarity index 100% rename from a10structures/build/lib/a10/structures/constants.py rename to v0.11.0python_final/a10structures/build/lib/a10/structures/constants.py diff --git a/a10structures/build/lib/a10/structures/convenience.py b/v0.11.0python_final/a10structures/build/lib/a10/structures/convenience.py similarity index 100% rename from a10structures/build/lib/a10/structures/convenience.py rename to v0.11.0python_final/a10structures/build/lib/a10/structures/convenience.py diff --git a/a10structures/build/lib/a10/structures/identity.py b/v0.11.0python_final/a10structures/build/lib/a10/structures/identity.py similarity index 100% rename from a10structures/build/lib/a10/structures/identity.py rename to v0.11.0python_final/a10structures/build/lib/a10/structures/identity.py diff --git a/a10structures/build/lib/a10/structures/result.py b/v0.11.0python_final/a10structures/build/lib/a10/structures/result.py similarity index 100% rename from a10structures/build/lib/a10/structures/result.py rename to v0.11.0python_final/a10structures/build/lib/a10/structures/result.py diff --git a/a10structures/build/lib/a10/structures/returncode.py b/v0.11.0python_final/a10structures/build/lib/a10/structures/returncode.py similarity index 100% rename from a10structures/build/lib/a10/structures/returncode.py rename to v0.11.0python_final/a10structures/build/lib/a10/structures/returncode.py diff --git a/a10structures/build/lib/a10/structures/timestamps.py b/v0.11.0python_final/a10structures/build/lib/a10/structures/timestamps.py similarity index 100% rename from a10structures/build/lib/a10/structures/timestamps.py rename to v0.11.0python_final/a10structures/build/lib/a10/structures/timestamps.py diff --git a/a10structures/build/lib/a10/utilities/__init__.py b/v0.11.0python_final/a10structures/build/lib/a10/utilities/__init__.py similarity index 100% rename from a10structures/build/lib/a10/utilities/__init__.py rename to v0.11.0python_final/a10structures/build/lib/a10/utilities/__init__.py diff --git a/a10structures/build/lib/a10/utilities/tpmoperations.py b/v0.11.0python_final/a10structures/build/lib/a10/utilities/tpmoperations.py similarity index 100% rename from a10structures/build/lib/a10/utilities/tpmoperations.py rename to v0.11.0python_final/a10structures/build/lib/a10/utilities/tpmoperations.py diff --git a/a10structures/doc/Makefile b/v0.11.0python_final/a10structures/doc/Makefile similarity index 100% rename from a10structures/doc/Makefile rename to v0.11.0python_final/a10structures/doc/Makefile diff --git a/a10structures/doc/build/doctrees/a10.asvr.analytics.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.analytics.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.analytics.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.analytics.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.analytics.elementanalytics.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.attestation.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.attestation.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.attestation.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.attestation.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.claims.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.claims.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.claims.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.claims.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.db.announce.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.announce.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.db.announce.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.announce.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.db.configuration.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.configuration.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.db.configuration.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.configuration.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.db.core.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.core.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.db.core.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.core.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.db.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.db.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.db.log.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.log.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.db.log.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.log.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.db.mqtt.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.mqtt.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.db.mqtt.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.db.mqtt.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.elements.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.elements.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.elements.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.elements.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.expectedvalues.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.expectedvalues.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.expectedvalues.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.expectedvalues.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.hashes.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.hashes.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.hashes.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.hashes.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.policies.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.policies.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.policies.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.policies.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ArduinoUSB.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ContainerImage.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10DummyProtocol.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10HttpRest.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.A10ProtocolBase.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.protocols.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.protocols.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.protocols.protocol_dispatcher.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.results.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.results.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.results.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.results.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.rules.baserule.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.baserule.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.rules.baserule.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.baserule.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.rules.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.rules.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.rules.nullrules.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.nullrules.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.rules.nullrules.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.nullrules.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.rule_dispatcher.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.tpm2rules.doctree diff --git a/a10structures/doc/build/doctrees/a10.asvr.rules.uefi.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.uefi.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.asvr.rules.uefi.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.asvr.rules.uefi.doctree diff --git a/a10structures/doc/build/doctrees/a10.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.doctree diff --git a/a10structures/doc/build/doctrees/a10.structures.claim.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.claim.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.structures.claim.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.claim.doctree diff --git a/a10structures/doc/build/doctrees/a10.structures.constants.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.constants.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.structures.constants.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.constants.doctree diff --git a/a10structures/doc/build/doctrees/a10.structures.convenience.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.convenience.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.structures.convenience.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.convenience.doctree diff --git a/a10structures/doc/build/doctrees/a10.structures.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.structures.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.doctree diff --git a/a10structures/doc/build/doctrees/a10.structures.identity.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.identity.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.structures.identity.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.identity.doctree diff --git a/a10structures/doc/build/doctrees/a10.structures.result.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.result.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.structures.result.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.result.doctree diff --git a/a10structures/doc/build/doctrees/a10.structures.returncode.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.returncode.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.structures.returncode.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.returncode.doctree diff --git a/a10structures/doc/build/doctrees/a10.structures.timestamps.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.timestamps.doctree similarity index 100% rename from a10structures/doc/build/doctrees/a10.structures.timestamps.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/a10.structures.timestamps.doctree diff --git a/a10structures/doc/build/doctrees/environment.pickle b/v0.11.0python_final/a10structures/doc/build/doctrees/environment.pickle similarity index 100% rename from a10structures/doc/build/doctrees/environment.pickle rename to v0.11.0python_final/a10structures/doc/build/doctrees/environment.pickle diff --git a/a10structures/doc/build/doctrees/index.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/index.doctree similarity index 100% rename from a10structures/doc/build/doctrees/index.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/index.doctree diff --git a/a10structures/doc/build/doctrees/modules.doctree b/v0.11.0python_final/a10structures/doc/build/doctrees/modules.doctree similarity index 100% rename from a10structures/doc/build/doctrees/modules.doctree rename to v0.11.0python_final/a10structures/doc/build/doctrees/modules.doctree diff --git a/a10structures/doc/build/html/.buildinfo b/v0.11.0python_final/a10structures/doc/build/html/.buildinfo similarity index 100% rename from a10structures/doc/build/html/.buildinfo rename to v0.11.0python_final/a10structures/doc/build/html/.buildinfo diff --git a/a10structures/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.analytics.elementanalytics.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.analytics.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.analytics.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.analytics.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.analytics.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.attestation.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.attestation.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.attestation.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.attestation.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.claims.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.claims.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.claims.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.claims.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.db.announce.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.announce.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.db.announce.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.announce.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.configuration.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.db.core.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.core.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.db.core.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.core.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.db.log.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.log.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.db.log.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.log.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.mqtt.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.db.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.db.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.db.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.elements.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.elements.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.elements.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.elements.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.expectedvalues.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.hashes.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.hashes.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.hashes.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.hashes.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.policies.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.policies.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.policies.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.policies.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ArduinoUSB.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ContainerImage.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10DummyProtocol.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10HttpRest.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.A10ProtocolBase.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.protocol_dispatcher.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.protocols.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.protocols.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.protocols.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.results.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.results.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.results.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.results.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.baserule.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.nullrules.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.rules.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.rules.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.rule_dispatcher.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.tpm2rules.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.asvr.rules.uefi.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.structures.claim.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.claim.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.structures.claim.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.claim.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.structures.constants.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.constants.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.structures.constants.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.constants.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.structures.convenience.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.convenience.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.structures.convenience.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.convenience.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.structures.identity.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.identity.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.structures.identity.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.identity.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.structures.result.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.result.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.structures.result.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.result.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.structures.returncode.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.returncode.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.structures.returncode.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.returncode.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.structures.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.structures.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.rst.txt diff --git a/a10structures/doc/build/html/_sources/a10.structures.timestamps.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.timestamps.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/a10.structures.timestamps.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/a10.structures.timestamps.rst.txt diff --git a/a10structures/doc/build/html/_sources/index.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/index.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/index.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/index.rst.txt diff --git a/a10structures/doc/build/html/_sources/modules.rst.txt b/v0.11.0python_final/a10structures/doc/build/html/_sources/modules.rst.txt similarity index 100% rename from a10structures/doc/build/html/_sources/modules.rst.txt rename to v0.11.0python_final/a10structures/doc/build/html/_sources/modules.rst.txt diff --git a/a10structures/doc/build/html/_static/basic.css b/v0.11.0python_final/a10structures/doc/build/html/_static/basic.css similarity index 100% rename from a10structures/doc/build/html/_static/basic.css rename to v0.11.0python_final/a10structures/doc/build/html/_static/basic.css diff --git a/a10structures/doc/build/html/_static/classic.css b/v0.11.0python_final/a10structures/doc/build/html/_static/classic.css similarity index 100% rename from a10structures/doc/build/html/_static/classic.css rename to v0.11.0python_final/a10structures/doc/build/html/_static/classic.css diff --git a/a10structures/doc/build/html/_static/doctools.js b/v0.11.0python_final/a10structures/doc/build/html/_static/doctools.js similarity index 100% rename from a10structures/doc/build/html/_static/doctools.js rename to v0.11.0python_final/a10structures/doc/build/html/_static/doctools.js diff --git a/a10structures/doc/build/html/_static/documentation_options.js b/v0.11.0python_final/a10structures/doc/build/html/_static/documentation_options.js similarity index 100% rename from a10structures/doc/build/html/_static/documentation_options.js rename to v0.11.0python_final/a10structures/doc/build/html/_static/documentation_options.js diff --git a/a10structures/doc/build/html/_static/file.png b/v0.11.0python_final/a10structures/doc/build/html/_static/file.png similarity index 100% rename from a10structures/doc/build/html/_static/file.png rename to v0.11.0python_final/a10structures/doc/build/html/_static/file.png diff --git a/a10structures/doc/build/html/_static/jquery.js b/v0.11.0python_final/a10structures/doc/build/html/_static/jquery.js similarity index 100% rename from a10structures/doc/build/html/_static/jquery.js rename to v0.11.0python_final/a10structures/doc/build/html/_static/jquery.js diff --git a/a10structures/doc/build/html/_static/language_data.js b/v0.11.0python_final/a10structures/doc/build/html/_static/language_data.js similarity index 100% rename from a10structures/doc/build/html/_static/language_data.js rename to v0.11.0python_final/a10structures/doc/build/html/_static/language_data.js diff --git a/a10structures/doc/build/html/_static/minus.png b/v0.11.0python_final/a10structures/doc/build/html/_static/minus.png similarity index 100% rename from a10structures/doc/build/html/_static/minus.png rename to v0.11.0python_final/a10structures/doc/build/html/_static/minus.png diff --git a/a10structures/doc/build/html/_static/plus.png b/v0.11.0python_final/a10structures/doc/build/html/_static/plus.png similarity index 100% rename from a10structures/doc/build/html/_static/plus.png rename to v0.11.0python_final/a10structures/doc/build/html/_static/plus.png diff --git a/a10structures/doc/build/html/_static/pygments.css b/v0.11.0python_final/a10structures/doc/build/html/_static/pygments.css similarity index 100% rename from a10structures/doc/build/html/_static/pygments.css rename to v0.11.0python_final/a10structures/doc/build/html/_static/pygments.css diff --git a/a10structures/doc/build/html/_static/searchtools.js b/v0.11.0python_final/a10structures/doc/build/html/_static/searchtools.js similarity index 100% rename from a10structures/doc/build/html/_static/searchtools.js rename to v0.11.0python_final/a10structures/doc/build/html/_static/searchtools.js diff --git a/a10structures/doc/build/html/_static/sidebar.js b/v0.11.0python_final/a10structures/doc/build/html/_static/sidebar.js similarity index 100% rename from a10structures/doc/build/html/_static/sidebar.js rename to v0.11.0python_final/a10structures/doc/build/html/_static/sidebar.js diff --git a/a10structures/doc/build/html/_static/underscore.js b/v0.11.0python_final/a10structures/doc/build/html/_static/underscore.js similarity index 100% rename from a10structures/doc/build/html/_static/underscore.js rename to v0.11.0python_final/a10structures/doc/build/html/_static/underscore.js diff --git a/a10structures/doc/build/html/a10.asvr.analytics.elementanalytics.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.analytics.elementanalytics.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.analytics.elementanalytics.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.analytics.elementanalytics.html diff --git a/a10structures/doc/build/html/a10.asvr.analytics.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.analytics.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.analytics.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.analytics.html diff --git a/a10structures/doc/build/html/a10.asvr.attestation.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.attestation.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.attestation.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.attestation.html diff --git a/a10structures/doc/build/html/a10.asvr.claims.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.claims.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.claims.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.claims.html diff --git a/a10structures/doc/build/html/a10.asvr.db.announce.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.announce.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.db.announce.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.announce.html diff --git a/a10structures/doc/build/html/a10.asvr.db.configuration.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.configuration.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.db.configuration.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.configuration.html diff --git a/a10structures/doc/build/html/a10.asvr.db.core.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.core.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.db.core.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.core.html diff --git a/a10structures/doc/build/html/a10.asvr.db.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.db.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.html diff --git a/a10structures/doc/build/html/a10.asvr.db.log.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.log.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.db.log.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.log.html diff --git a/a10structures/doc/build/html/a10.asvr.db.mqtt.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.mqtt.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.db.mqtt.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.db.mqtt.html diff --git a/a10structures/doc/build/html/a10.asvr.elements.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.elements.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.elements.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.elements.html diff --git a/a10structures/doc/build/html/a10.asvr.expectedvalues.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.expectedvalues.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.expectedvalues.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.expectedvalues.html diff --git a/a10structures/doc/build/html/a10.asvr.hashes.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.hashes.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.hashes.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.hashes.html diff --git a/a10structures/doc/build/html/a10.asvr.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.html diff --git a/a10structures/doc/build/html/a10.asvr.policies.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.policies.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.policies.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.policies.html diff --git a/a10structures/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10ArduinoUSB.html diff --git a/a10structures/doc/build/html/a10.asvr.protocols.A10ContainerImage.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10ContainerImage.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.protocols.A10ContainerImage.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10ContainerImage.html diff --git a/a10structures/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10DummyProtocol.html diff --git a/a10structures/doc/build/html/a10.asvr.protocols.A10HttpRest.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10HttpRest.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.protocols.A10HttpRest.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10HttpRest.html diff --git a/a10structures/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.A10ProtocolBase.html diff --git a/a10structures/doc/build/html/a10.asvr.protocols.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.protocols.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.html diff --git a/a10structures/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.protocols.protocol_dispatcher.html diff --git a/a10structures/doc/build/html/a10.asvr.results.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.results.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.results.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.results.html diff --git a/a10structures/doc/build/html/a10.asvr.rules.baserule.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.baserule.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.rules.baserule.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.baserule.html diff --git a/a10structures/doc/build/html/a10.asvr.rules.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.rules.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.html diff --git a/a10structures/doc/build/html/a10.asvr.rules.nullrules.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.nullrules.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.rules.nullrules.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.nullrules.html diff --git a/a10structures/doc/build/html/a10.asvr.rules.rule_dispatcher.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.rule_dispatcher.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.rules.rule_dispatcher.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.rule_dispatcher.html diff --git a/a10structures/doc/build/html/a10.asvr.rules.tpm2rules.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.tpm2rules.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.rules.tpm2rules.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.tpm2rules.html diff --git a/a10structures/doc/build/html/a10.asvr.rules.uefi.html b/v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.uefi.html similarity index 100% rename from a10structures/doc/build/html/a10.asvr.rules.uefi.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.asvr.rules.uefi.html diff --git a/a10structures/doc/build/html/a10.html b/v0.11.0python_final/a10structures/doc/build/html/a10.html similarity index 100% rename from a10structures/doc/build/html/a10.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.html diff --git a/a10structures/doc/build/html/a10.structures.claim.html b/v0.11.0python_final/a10structures/doc/build/html/a10.structures.claim.html similarity index 100% rename from a10structures/doc/build/html/a10.structures.claim.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.structures.claim.html diff --git a/a10structures/doc/build/html/a10.structures.constants.html b/v0.11.0python_final/a10structures/doc/build/html/a10.structures.constants.html similarity index 100% rename from a10structures/doc/build/html/a10.structures.constants.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.structures.constants.html diff --git a/a10structures/doc/build/html/a10.structures.convenience.html b/v0.11.0python_final/a10structures/doc/build/html/a10.structures.convenience.html similarity index 100% rename from a10structures/doc/build/html/a10.structures.convenience.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.structures.convenience.html diff --git a/a10structures/doc/build/html/a10.structures.html b/v0.11.0python_final/a10structures/doc/build/html/a10.structures.html similarity index 100% rename from a10structures/doc/build/html/a10.structures.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.structures.html diff --git a/a10structures/doc/build/html/a10.structures.identity.html b/v0.11.0python_final/a10structures/doc/build/html/a10.structures.identity.html similarity index 100% rename from a10structures/doc/build/html/a10.structures.identity.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.structures.identity.html diff --git a/a10structures/doc/build/html/a10.structures.result.html b/v0.11.0python_final/a10structures/doc/build/html/a10.structures.result.html similarity index 100% rename from a10structures/doc/build/html/a10.structures.result.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.structures.result.html diff --git a/a10structures/doc/build/html/a10.structures.returncode.html b/v0.11.0python_final/a10structures/doc/build/html/a10.structures.returncode.html similarity index 100% rename from a10structures/doc/build/html/a10.structures.returncode.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.structures.returncode.html diff --git a/a10structures/doc/build/html/a10.structures.timestamps.html b/v0.11.0python_final/a10structures/doc/build/html/a10.structures.timestamps.html similarity index 100% rename from a10structures/doc/build/html/a10.structures.timestamps.html rename to v0.11.0python_final/a10structures/doc/build/html/a10.structures.timestamps.html diff --git a/a10structures/doc/build/html/genindex.html b/v0.11.0python_final/a10structures/doc/build/html/genindex.html similarity index 100% rename from a10structures/doc/build/html/genindex.html rename to v0.11.0python_final/a10structures/doc/build/html/genindex.html diff --git a/a10structures/doc/build/html/index.html b/v0.11.0python_final/a10structures/doc/build/html/index.html similarity index 100% rename from a10structures/doc/build/html/index.html rename to v0.11.0python_final/a10structures/doc/build/html/index.html diff --git a/a10structures/doc/build/html/modules.html b/v0.11.0python_final/a10structures/doc/build/html/modules.html similarity index 100% rename from a10structures/doc/build/html/modules.html rename to v0.11.0python_final/a10structures/doc/build/html/modules.html diff --git a/a10structures/doc/build/html/objects.inv b/v0.11.0python_final/a10structures/doc/build/html/objects.inv similarity index 100% rename from a10structures/doc/build/html/objects.inv rename to v0.11.0python_final/a10structures/doc/build/html/objects.inv diff --git a/a10structures/doc/build/html/py-modindex.html b/v0.11.0python_final/a10structures/doc/build/html/py-modindex.html similarity index 100% rename from a10structures/doc/build/html/py-modindex.html rename to v0.11.0python_final/a10structures/doc/build/html/py-modindex.html diff --git a/a10structures/doc/build/html/search.html b/v0.11.0python_final/a10structures/doc/build/html/search.html similarity index 100% rename from a10structures/doc/build/html/search.html rename to v0.11.0python_final/a10structures/doc/build/html/search.html diff --git a/a10structures/doc/build/html/searchindex.js b/v0.11.0python_final/a10structures/doc/build/html/searchindex.js similarity index 100% rename from a10structures/doc/build/html/searchindex.js rename to v0.11.0python_final/a10structures/doc/build/html/searchindex.js diff --git a/a10structures/doc/source/a10.asvr.analytics.elementanalytics.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.analytics.elementanalytics.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.analytics.elementanalytics.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.analytics.elementanalytics.rst diff --git a/a10structures/doc/source/a10.asvr.analytics.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.analytics.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.analytics.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.analytics.rst diff --git a/a10structures/doc/source/a10.asvr.attestation.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.attestation.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.attestation.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.attestation.rst diff --git a/a10structures/doc/source/a10.asvr.claims.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.claims.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.claims.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.claims.rst diff --git a/a10structures/doc/source/a10.asvr.db.announce.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.db.announce.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.db.announce.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.db.announce.rst diff --git a/a10structures/doc/source/a10.asvr.db.configuration.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.db.configuration.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.db.configuration.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.db.configuration.rst diff --git a/a10structures/doc/source/a10.asvr.db.core.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.db.core.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.db.core.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.db.core.rst diff --git a/a10structures/doc/source/a10.asvr.db.log.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.db.log.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.db.log.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.db.log.rst diff --git a/a10structures/doc/source/a10.asvr.db.mqtt.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.db.mqtt.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.db.mqtt.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.db.mqtt.rst diff --git a/a10structures/doc/source/a10.asvr.db.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.db.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.db.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.db.rst diff --git a/a10structures/doc/source/a10.asvr.elements.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.elements.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.elements.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.elements.rst diff --git a/a10structures/doc/source/a10.asvr.expectedvalues.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.expectedvalues.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.expectedvalues.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.expectedvalues.rst diff --git a/a10structures/doc/source/a10.asvr.hashes.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.hashes.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.hashes.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.hashes.rst diff --git a/a10structures/doc/source/a10.asvr.policies.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.policies.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.policies.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.policies.rst diff --git a/a10structures/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10ArduinoUSB.rst diff --git a/a10structures/doc/source/a10.asvr.protocols.A10ContainerImage.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10ContainerImage.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.protocols.A10ContainerImage.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10ContainerImage.rst diff --git a/a10structures/doc/source/a10.asvr.protocols.A10DummyProtocol.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10DummyProtocol.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.protocols.A10DummyProtocol.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10DummyProtocol.rst diff --git a/a10structures/doc/source/a10.asvr.protocols.A10HttpRest.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10HttpRest.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.protocols.A10HttpRest.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10HttpRest.rst diff --git a/a10structures/doc/source/a10.asvr.protocols.A10ProtocolBase.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10ProtocolBase.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.protocols.A10ProtocolBase.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.A10ProtocolBase.rst diff --git a/a10structures/doc/source/a10.asvr.protocols.protocol_dispatcher.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.protocol_dispatcher.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.protocols.protocol_dispatcher.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.protocol_dispatcher.rst diff --git a/a10structures/doc/source/a10.asvr.protocols.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.protocols.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.protocols.rst diff --git a/a10structures/doc/source/a10.asvr.results.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.results.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.results.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.results.rst diff --git a/a10structures/doc/source/a10.asvr.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.rst diff --git a/a10structures/doc/source/a10.asvr.rules.baserule.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.baserule.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.rules.baserule.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.baserule.rst diff --git a/a10structures/doc/source/a10.asvr.rules.nullrules.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.nullrules.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.rules.nullrules.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.nullrules.rst diff --git a/a10structures/doc/source/a10.asvr.rules.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.rules.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.rst diff --git a/a10structures/doc/source/a10.asvr.rules.rule_dispatcher.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.rule_dispatcher.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.rules.rule_dispatcher.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.rule_dispatcher.rst diff --git a/a10structures/doc/source/a10.asvr.rules.tpm2rules.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.tpm2rules.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.rules.tpm2rules.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.tpm2rules.rst diff --git a/a10structures/doc/source/a10.asvr.rules.uefi.rst b/v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.uefi.rst similarity index 100% rename from a10structures/doc/source/a10.asvr.rules.uefi.rst rename to v0.11.0python_final/a10structures/doc/source/a10.asvr.rules.uefi.rst diff --git a/a10structures/doc/source/a10.rst b/v0.11.0python_final/a10structures/doc/source/a10.rst similarity index 100% rename from a10structures/doc/source/a10.rst rename to v0.11.0python_final/a10structures/doc/source/a10.rst diff --git a/a10structures/doc/source/a10.structures.claim.rst b/v0.11.0python_final/a10structures/doc/source/a10.structures.claim.rst similarity index 100% rename from a10structures/doc/source/a10.structures.claim.rst rename to v0.11.0python_final/a10structures/doc/source/a10.structures.claim.rst diff --git a/a10structures/doc/source/a10.structures.constants.rst b/v0.11.0python_final/a10structures/doc/source/a10.structures.constants.rst similarity index 100% rename from a10structures/doc/source/a10.structures.constants.rst rename to v0.11.0python_final/a10structures/doc/source/a10.structures.constants.rst diff --git a/a10structures/doc/source/a10.structures.convenience.rst b/v0.11.0python_final/a10structures/doc/source/a10.structures.convenience.rst similarity index 100% rename from a10structures/doc/source/a10.structures.convenience.rst rename to v0.11.0python_final/a10structures/doc/source/a10.structures.convenience.rst diff --git a/a10structures/doc/source/a10.structures.identity.rst b/v0.11.0python_final/a10structures/doc/source/a10.structures.identity.rst similarity index 100% rename from a10structures/doc/source/a10.structures.identity.rst rename to v0.11.0python_final/a10structures/doc/source/a10.structures.identity.rst diff --git a/a10structures/doc/source/a10.structures.result.rst b/v0.11.0python_final/a10structures/doc/source/a10.structures.result.rst similarity index 100% rename from a10structures/doc/source/a10.structures.result.rst rename to v0.11.0python_final/a10structures/doc/source/a10.structures.result.rst diff --git a/a10structures/doc/source/a10.structures.returncode.rst b/v0.11.0python_final/a10structures/doc/source/a10.structures.returncode.rst similarity index 100% rename from a10structures/doc/source/a10.structures.returncode.rst rename to v0.11.0python_final/a10structures/doc/source/a10.structures.returncode.rst diff --git a/a10structures/doc/source/a10.structures.rst b/v0.11.0python_final/a10structures/doc/source/a10.structures.rst similarity index 100% rename from a10structures/doc/source/a10.structures.rst rename to v0.11.0python_final/a10structures/doc/source/a10.structures.rst diff --git a/a10structures/doc/source/a10.structures.timestamps.rst b/v0.11.0python_final/a10structures/doc/source/a10.structures.timestamps.rst similarity index 100% rename from a10structures/doc/source/a10.structures.timestamps.rst rename to v0.11.0python_final/a10structures/doc/source/a10.structures.timestamps.rst diff --git a/a10structures/doc/source/conf.py b/v0.11.0python_final/a10structures/doc/source/conf.py similarity index 100% rename from a10structures/doc/source/conf.py rename to v0.11.0python_final/a10structures/doc/source/conf.py diff --git a/a10structures/doc/source/index.rst b/v0.11.0python_final/a10structures/doc/source/index.rst similarity index 100% rename from a10structures/doc/source/index.rst rename to v0.11.0python_final/a10structures/doc/source/index.rst diff --git a/a10structures/doc/source/modules.rst b/v0.11.0python_final/a10structures/doc/source/modules.rst similarity index 100% rename from a10structures/doc/source/modules.rst rename to v0.11.0python_final/a10structures/doc/source/modules.rst diff --git a/a10structures/reinstall b/v0.11.0python_final/a10structures/reinstall similarity index 100% rename from a10structures/reinstall rename to v0.11.0python_final/a10structures/reinstall diff --git a/a10structures/requirements.txt b/v0.11.0python_final/a10structures/requirements.txt similarity index 100% rename from a10structures/requirements.txt rename to v0.11.0python_final/a10structures/requirements.txt diff --git a/a10structures/setup.py b/v0.11.0python_final/a10structures/setup.py similarity index 100% rename from a10structures/setup.py rename to v0.11.0python_final/a10structures/setup.py diff --git a/apps/README.md b/v0.11.0python_final/apps/README.md similarity index 100% rename from apps/README.md rename to v0.11.0python_final/apps/README.md diff --git a/apps/asmqttviewer/' b/v0.11.0python_final/apps/asmqttviewer/' similarity index 100% rename from apps/asmqttviewer/' rename to v0.11.0python_final/apps/asmqttviewer/' diff --git a/apps/asmqttviewer/Dockerfile b/v0.11.0python_final/apps/asmqttviewer/Dockerfile similarity index 100% rename from apps/asmqttviewer/Dockerfile rename to v0.11.0python_final/apps/asmqttviewer/Dockerfile diff --git a/apps/asmqttviewer/README.md b/v0.11.0python_final/apps/asmqttviewer/README.md similarity index 100% rename from apps/asmqttviewer/README.md rename to v0.11.0python_final/apps/asmqttviewer/README.md diff --git a/apps/asmqttviewer/a10.conf b/v0.11.0python_final/apps/asmqttviewer/a10.conf similarity index 100% rename from apps/asmqttviewer/a10.conf rename to v0.11.0python_final/apps/asmqttviewer/a10.conf diff --git a/apps/asmqttviewer/asmqttviewer.py b/v0.11.0python_final/apps/asmqttviewer/asmqttviewer.py similarity index 100% rename from apps/asmqttviewer/asmqttviewer.py rename to v0.11.0python_final/apps/asmqttviewer/asmqttviewer.py diff --git a/apps/asmqttviewer/requirements.txt b/v0.11.0python_final/apps/asmqttviewer/requirements.txt similarity index 100% rename from apps/asmqttviewer/requirements.txt rename to v0.11.0python_final/apps/asmqttviewer/requirements.txt diff --git a/apps/attdsl2/README.md b/v0.11.0python_final/apps/attdsl2/README.md similarity index 100% rename from apps/attdsl2/README.md rename to v0.11.0python_final/apps/attdsl2/README.md diff --git a/apps/attdsl2/att_language.lark b/v0.11.0python_final/apps/attdsl2/att_language.lark similarity index 100% rename from apps/attdsl2/att_language.lark rename to v0.11.0python_final/apps/attdsl2/att_language.lark diff --git a/apps/attdsl2/attall.py b/v0.11.0python_final/apps/attdsl2/attall.py similarity index 100% rename from apps/attdsl2/attall.py rename to v0.11.0python_final/apps/attdsl2/attall.py diff --git a/apps/attdsl2/attgrammar.py b/v0.11.0python_final/apps/attdsl2/attgrammar.py similarity index 100% rename from apps/attdsl2/attgrammar.py rename to v0.11.0python_final/apps/attdsl2/attgrammar.py diff --git a/apps/attdsl2/attlanguage.py b/v0.11.0python_final/apps/attdsl2/attlanguage.py similarity index 100% rename from apps/attdsl2/attlanguage.py rename to v0.11.0python_final/apps/attdsl2/attlanguage.py diff --git a/apps/attdsl2/attreport.py b/v0.11.0python_final/apps/attdsl2/attreport.py similarity index 100% rename from apps/attdsl2/attreport.py rename to v0.11.0python_final/apps/attdsl2/attreport.py diff --git a/apps/attdsl2/eva_language.lark b/v0.11.0python_final/apps/attdsl2/eva_language.lark similarity index 100% rename from apps/attdsl2/eva_language.lark rename to v0.11.0python_final/apps/attdsl2/eva_language.lark diff --git a/apps/attdsl2/examplescripts/a.att b/v0.11.0python_final/apps/attdsl2/examplescripts/a.att similarity index 100% rename from apps/attdsl2/examplescripts/a.att rename to v0.11.0python_final/apps/attdsl2/examplescripts/a.att diff --git a/apps/attdsl2/examplescripts/a.eva b/v0.11.0python_final/apps/attdsl2/examplescripts/a.eva similarity index 100% rename from apps/attdsl2/examplescripts/a.eva rename to v0.11.0python_final/apps/attdsl2/examplescripts/a.eva diff --git a/apps/attdsl2/examplescripts/a2.att b/v0.11.0python_final/apps/attdsl2/examplescripts/a2.att similarity index 100% rename from apps/attdsl2/examplescripts/a2.att rename to v0.11.0python_final/apps/attdsl2/examplescripts/a2.att diff --git a/apps/attdsl2/examplescripts/a2.eva b/v0.11.0python_final/apps/attdsl2/examplescripts/a2.eva similarity index 100% rename from apps/attdsl2/examplescripts/a2.eva rename to v0.11.0python_final/apps/attdsl2/examplescripts/a2.eva diff --git a/apps/attdsl2/examplescripts/a3.eva b/v0.11.0python_final/apps/attdsl2/examplescripts/a3.eva similarity index 100% rename from apps/attdsl2/examplescripts/a3.eva rename to v0.11.0python_final/apps/attdsl2/examplescripts/a3.eva diff --git a/apps/attdsl2/examplescripts/a4.eva b/v0.11.0python_final/apps/attdsl2/examplescripts/a4.eva similarity index 100% rename from apps/attdsl2/examplescripts/a4.eva rename to v0.11.0python_final/apps/attdsl2/examplescripts/a4.eva diff --git a/apps/attdsl2/examplescripts/example.att b/v0.11.0python_final/apps/attdsl2/examplescripts/example.att similarity index 100% rename from apps/attdsl2/examplescripts/example.att rename to v0.11.0python_final/apps/attdsl2/examplescripts/example.att diff --git a/apps/attdsl2/examplescripts/iot.att b/v0.11.0python_final/apps/attdsl2/examplescripts/iot.att similarity index 100% rename from apps/attdsl2/examplescripts/iot.att rename to v0.11.0python_final/apps/attdsl2/examplescripts/iot.att diff --git a/apps/attdsl2/examplescripts/iot.eva b/v0.11.0python_final/apps/attdsl2/examplescripts/iot.eva similarity index 100% rename from apps/attdsl2/examplescripts/iot.eva rename to v0.11.0python_final/apps/attdsl2/examplescripts/iot.eva diff --git a/apps/attdsl2/examplescripts/new.eva b/v0.11.0python_final/apps/attdsl2/examplescripts/new.eva similarity index 100% rename from apps/attdsl2/examplescripts/new.eva rename to v0.11.0python_final/apps/attdsl2/examplescripts/new.eva diff --git a/apps/attdsl2/examplescripts/pis.att b/v0.11.0python_final/apps/attdsl2/examplescripts/pis.att similarity index 100% rename from apps/attdsl2/examplescripts/pis.att rename to v0.11.0python_final/apps/attdsl2/examplescripts/pis.att diff --git a/apps/attdsl2/examplescripts/q.eva b/v0.11.0python_final/apps/attdsl2/examplescripts/q.eva similarity index 100% rename from apps/attdsl2/examplescripts/q.eva rename to v0.11.0python_final/apps/attdsl2/examplescripts/q.eva diff --git a/apps/attdsl2/examplescripts/roosa.att b/v0.11.0python_final/apps/attdsl2/examplescripts/roosa.att similarity index 100% rename from apps/attdsl2/examplescripts/roosa.att rename to v0.11.0python_final/apps/attdsl2/examplescripts/roosa.att diff --git a/apps/attdsl2/examplescripts/roosa.eva b/v0.11.0python_final/apps/attdsl2/examplescripts/roosa.eva similarity index 100% rename from apps/attdsl2/examplescripts/roosa.eva rename to v0.11.0python_final/apps/attdsl2/examplescripts/roosa.eva diff --git a/apps/attdsl2/report.txt b/v0.11.0python_final/apps/attdsl2/report.txt similarity index 100% rename from apps/attdsl2/report.txt rename to v0.11.0python_final/apps/attdsl2/report.txt diff --git a/apps/d10/README.md b/v0.11.0python_final/apps/d10/README.md similarity index 100% rename from apps/d10/README.md rename to v0.11.0python_final/apps/d10/README.md diff --git a/apps/d10/att_language.lark b/v0.11.0python_final/apps/d10/att_language.lark similarity index 100% rename from apps/d10/att_language.lark rename to v0.11.0python_final/apps/d10/att_language.lark diff --git a/apps/d10/attall.py b/v0.11.0python_final/apps/d10/attall.py similarity index 100% rename from apps/d10/attall.py rename to v0.11.0python_final/apps/d10/attall.py diff --git a/apps/d10/attgrammar.py b/v0.11.0python_final/apps/d10/attgrammar.py similarity index 100% rename from apps/d10/attgrammar.py rename to v0.11.0python_final/apps/d10/attgrammar.py diff --git a/apps/d10/attlanguage.py b/v0.11.0python_final/apps/d10/attlanguage.py similarity index 100% rename from apps/d10/attlanguage.py rename to v0.11.0python_final/apps/d10/attlanguage.py diff --git a/apps/d10/attreport.py b/v0.11.0python_final/apps/d10/attreport.py similarity index 100% rename from apps/d10/attreport.py rename to v0.11.0python_final/apps/d10/attreport.py diff --git a/apps/d10/d10.conf b/v0.11.0python_final/apps/d10/d10.conf similarity index 100% rename from apps/d10/d10.conf rename to v0.11.0python_final/apps/d10/d10.conf diff --git a/apps/d10/d10.py b/v0.11.0python_final/apps/d10/d10.py similarity index 100% rename from apps/d10/d10.py rename to v0.11.0python_final/apps/d10/d10.py diff --git a/apps/d10/d10api.py b/v0.11.0python_final/apps/d10/d10api.py similarity index 100% rename from apps/d10/d10api.py rename to v0.11.0python_final/apps/d10/d10api.py diff --git a/apps/d10/d10conf.py b/v0.11.0python_final/apps/d10/d10conf.py similarity index 100% rename from apps/d10/d10conf.py rename to v0.11.0python_final/apps/d10/d10conf.py diff --git a/apps/d10/d10db.py b/v0.11.0python_final/apps/d10/d10db.py similarity index 100% rename from apps/d10/d10db.py rename to v0.11.0python_final/apps/d10/d10db.py diff --git a/apps/d10/d10flask.conf b/v0.11.0python_final/apps/d10/d10flask.conf similarity index 100% rename from apps/d10/d10flask.conf rename to v0.11.0python_final/apps/d10/d10flask.conf diff --git a/apps/d10/eva_language.lark b/v0.11.0python_final/apps/d10/eva_language.lark similarity index 100% rename from apps/d10/eva_language.lark rename to v0.11.0python_final/apps/d10/eva_language.lark diff --git a/apps/d10/examples/a.att b/v0.11.0python_final/apps/d10/examples/a.att similarity index 100% rename from apps/d10/examples/a.att rename to v0.11.0python_final/apps/d10/examples/a.att diff --git a/apps/d10/examples/a.eva b/v0.11.0python_final/apps/d10/examples/a.eva similarity index 100% rename from apps/d10/examples/a.eva rename to v0.11.0python_final/apps/d10/examples/a.eva diff --git a/apps/d10/examples/a2.att b/v0.11.0python_final/apps/d10/examples/a2.att similarity index 100% rename from apps/d10/examples/a2.att rename to v0.11.0python_final/apps/d10/examples/a2.att diff --git a/apps/d10/examples/a2.eva b/v0.11.0python_final/apps/d10/examples/a2.eva similarity index 100% rename from apps/d10/examples/a2.eva rename to v0.11.0python_final/apps/d10/examples/a2.eva diff --git a/apps/d10/examples/a3.eva b/v0.11.0python_final/apps/d10/examples/a3.eva similarity index 100% rename from apps/d10/examples/a3.eva rename to v0.11.0python_final/apps/d10/examples/a3.eva diff --git a/apps/d10/examples/a4.eva b/v0.11.0python_final/apps/d10/examples/a4.eva similarity index 100% rename from apps/d10/examples/a4.eva rename to v0.11.0python_final/apps/d10/examples/a4.eva diff --git a/apps/d10/examples/example.att b/v0.11.0python_final/apps/d10/examples/example.att similarity index 100% rename from apps/d10/examples/example.att rename to v0.11.0python_final/apps/d10/examples/example.att diff --git a/apps/d10/examples/iot.att b/v0.11.0python_final/apps/d10/examples/iot.att similarity index 100% rename from apps/d10/examples/iot.att rename to v0.11.0python_final/apps/d10/examples/iot.att diff --git a/apps/d10/examples/iot.eva b/v0.11.0python_final/apps/d10/examples/iot.eva similarity index 100% rename from apps/d10/examples/iot.eva rename to v0.11.0python_final/apps/d10/examples/iot.eva diff --git a/apps/d10/examples/new.eva b/v0.11.0python_final/apps/d10/examples/new.eva similarity index 100% rename from apps/d10/examples/new.eva rename to v0.11.0python_final/apps/d10/examples/new.eva diff --git a/apps/d10/examples/pis.att b/v0.11.0python_final/apps/d10/examples/pis.att similarity index 100% rename from apps/d10/examples/pis.att rename to v0.11.0python_final/apps/d10/examples/pis.att diff --git a/apps/d10/examples/q.eva b/v0.11.0python_final/apps/d10/examples/q.eva similarity index 100% rename from apps/d10/examples/q.eva rename to v0.11.0python_final/apps/d10/examples/q.eva diff --git a/apps/d10/examples/roosa.att b/v0.11.0python_final/apps/d10/examples/roosa.att similarity index 100% rename from apps/d10/examples/roosa.att rename to v0.11.0python_final/apps/d10/examples/roosa.att diff --git a/apps/d10/examples/roosa.eva b/v0.11.0python_final/apps/d10/examples/roosa.eva similarity index 100% rename from apps/d10/examples/roosa.eva rename to v0.11.0python_final/apps/d10/examples/roosa.eva diff --git a/apps/d10/examples/upload.py b/v0.11.0python_final/apps/d10/examples/upload.py similarity index 100% rename from apps/d10/examples/upload.py rename to v0.11.0python_final/apps/d10/examples/upload.py diff --git a/apps/d10/report.txt b/v0.11.0python_final/apps/d10/report.txt similarity index 100% rename from apps/d10/report.txt rename to v0.11.0python_final/apps/d10/report.txt diff --git a/apps/d10/rest.py b/v0.11.0python_final/apps/d10/rest.py similarity index 100% rename from apps/d10/rest.py rename to v0.11.0python_final/apps/d10/rest.py diff --git a/apps/d10/templates/404.html b/v0.11.0python_final/apps/d10/templates/404.html similarity index 100% rename from apps/d10/templates/404.html rename to v0.11.0python_final/apps/d10/templates/404.html diff --git a/apps/d10/templates/base.html b/v0.11.0python_final/apps/d10/templates/base.html similarity index 100% rename from apps/d10/templates/base.html rename to v0.11.0python_final/apps/d10/templates/base.html diff --git a/apps/d10/templates/home.html b/v0.11.0python_final/apps/d10/templates/home.html similarity index 100% rename from apps/d10/templates/home.html rename to v0.11.0python_final/apps/d10/templates/home.html diff --git a/apps/d10/templates/list.html b/v0.11.0python_final/apps/d10/templates/list.html similarity index 100% rename from apps/d10/templates/list.html rename to v0.11.0python_final/apps/d10/templates/list.html diff --git a/apps/d10/ui.py b/v0.11.0python_final/apps/d10/ui.py similarity index 100% rename from apps/d10/ui.py rename to v0.11.0python_final/apps/d10/ui.py diff --git a/apps/d10/yamlversions/att.yaml b/v0.11.0python_final/apps/d10/yamlversions/att.yaml similarity index 100% rename from apps/d10/yamlversions/att.yaml rename to v0.11.0python_final/apps/d10/yamlversions/att.yaml diff --git a/apps/d10/yamlversions/eva.yaml b/v0.11.0python_final/apps/d10/yamlversions/eva.yaml similarity index 100% rename from apps/d10/yamlversions/eva.yaml rename to v0.11.0python_final/apps/d10/yamlversions/eva.yaml diff --git a/apps/d10/yamlversions/p.py b/v0.11.0python_final/apps/d10/yamlversions/p.py similarity index 100% rename from apps/d10/yamlversions/p.py rename to v0.11.0python_final/apps/d10/yamlversions/p.py diff --git a/apps/enroller/README.md b/v0.11.0python_final/apps/enroller/README.md similarity index 100% rename from apps/enroller/README.md rename to v0.11.0python_final/apps/enroller/README.md diff --git a/apps/enroller/client/Dockerfile.local b/v0.11.0python_final/apps/enroller/client/Dockerfile.local similarity index 100% rename from apps/enroller/client/Dockerfile.local rename to v0.11.0python_final/apps/enroller/client/Dockerfile.local diff --git a/apps/enroller/client/Dockerfile.provision b/v0.11.0python_final/apps/enroller/client/Dockerfile.provision similarity index 100% rename from apps/enroller/client/Dockerfile.provision rename to v0.11.0python_final/apps/enroller/client/Dockerfile.provision diff --git a/apps/enroller/client/Dockerfile.updateelement b/v0.11.0python_final/apps/enroller/client/Dockerfile.updateelement similarity index 100% rename from apps/enroller/client/Dockerfile.updateelement rename to v0.11.0python_final/apps/enroller/client/Dockerfile.updateelement diff --git a/apps/enroller/client/constructTPM2JSONobject.py b/v0.11.0python_final/apps/enroller/client/constructTPM2JSONobject.py similarity index 100% rename from apps/enroller/client/constructTPM2JSONobject.py rename to v0.11.0python_final/apps/enroller/client/constructTPM2JSONobject.py diff --git a/apps/enroller/client/enrol.json b/v0.11.0python_final/apps/enroller/client/enrol.json similarity index 100% rename from apps/enroller/client/enrol.json rename to v0.11.0python_final/apps/enroller/client/enrol.json diff --git a/apps/enroller/client/enrol.py b/v0.11.0python_final/apps/enroller/client/enrol.py similarity index 100% rename from apps/enroller/client/enrol.py rename to v0.11.0python_final/apps/enroller/client/enrol.py diff --git a/apps/enroller/client/enrolupdate.py b/v0.11.0python_final/apps/enroller/client/enrolupdate.py similarity index 100% rename from apps/enroller/client/enrolupdate.py rename to v0.11.0python_final/apps/enroller/client/enrolupdate.py diff --git a/apps/enroller/client/exampleEnrollDocument.json b/v0.11.0python_final/apps/enroller/client/exampleEnrollDocument.json similarity index 100% rename from apps/enroller/client/exampleEnrollDocument.json rename to v0.11.0python_final/apps/enroller/client/exampleEnrollDocument.json diff --git a/apps/enroller/client/provision b/v0.11.0python_final/apps/enroller/client/provision similarity index 100% rename from apps/enroller/client/provision rename to v0.11.0python_final/apps/enroller/client/provision diff --git a/apps/enroller/client/updateelement b/v0.11.0python_final/apps/enroller/client/updateelement similarity index 100% rename from apps/enroller/client/updateelement rename to v0.11.0python_final/apps/enroller/client/updateelement diff --git a/apps/enroller/minimalclient/provisionMinimal b/v0.11.0python_final/apps/enroller/minimalclient/provisionMinimal similarity index 100% rename from apps/enroller/minimalclient/provisionMinimal rename to v0.11.0python_final/apps/enroller/minimalclient/provisionMinimal diff --git a/apps/enroller/server/Dockerfile.local b/v0.11.0python_final/apps/enroller/server/Dockerfile.local similarity index 100% rename from apps/enroller/server/Dockerfile.local rename to v0.11.0python_final/apps/enroller/server/Dockerfile.local diff --git a/apps/enroller/server/eapp.conf b/v0.11.0python_final/apps/enroller/server/eapp.conf similarity index 100% rename from apps/enroller/server/eapp.conf rename to v0.11.0python_final/apps/enroller/server/eapp.conf diff --git a/apps/enroller/server/penrollserver.py b/v0.11.0python_final/apps/enroller/server/penrollserver.py similarity index 100% rename from apps/enroller/server/penrollserver.py rename to v0.11.0python_final/apps/enroller/server/penrollserver.py diff --git a/apps/enroller/server/requirements.txt b/v0.11.0python_final/apps/enroller/server/requirements.txt similarity index 100% rename from apps/enroller/server/requirements.txt rename to v0.11.0python_final/apps/enroller/server/requirements.txt diff --git a/apps/enroller/server/tenrollserver.py b/v0.11.0python_final/apps/enroller/server/tenrollserver.py similarity index 100% rename from apps/enroller/server/tenrollserver.py rename to v0.11.0python_final/apps/enroller/server/tenrollserver.py diff --git a/apps/mobileattester/.gitignore b/v0.11.0python_final/apps/mobileattester/.gitignore similarity index 100% rename from apps/mobileattester/.gitignore rename to v0.11.0python_final/apps/mobileattester/.gitignore diff --git a/apps/mobileattester/README.md b/v0.11.0python_final/apps/mobileattester/README.md similarity index 100% rename from apps/mobileattester/README.md rename to v0.11.0python_final/apps/mobileattester/README.md diff --git a/apps/mobileattester/app/.gitignore b/v0.11.0python_final/apps/mobileattester/app/.gitignore similarity index 100% rename from apps/mobileattester/app/.gitignore rename to v0.11.0python_final/apps/mobileattester/app/.gitignore diff --git a/apps/mobileattester/app/build.gradle b/v0.11.0python_final/apps/mobileattester/app/build.gradle similarity index 100% rename from apps/mobileattester/app/build.gradle rename to v0.11.0python_final/apps/mobileattester/app/build.gradle diff --git a/apps/mobileattester/app/proguard-rules.pro b/v0.11.0python_final/apps/mobileattester/app/proguard-rules.pro similarity index 100% rename from apps/mobileattester/app/proguard-rules.pro rename to v0.11.0python_final/apps/mobileattester/app/proguard-rules.pro diff --git a/apps/mobileattester/app/src/androidTest/java/com/example/mobileattester/ExampleInstrumentedTest.kt b/v0.11.0python_final/apps/mobileattester/app/src/androidTest/java/com/example/mobileattester/ExampleInstrumentedTest.kt similarity index 100% rename from apps/mobileattester/app/src/androidTest/java/com/example/mobileattester/ExampleInstrumentedTest.kt rename to v0.11.0python_final/apps/mobileattester/app/src/androidTest/java/com/example/mobileattester/ExampleInstrumentedTest.kt diff --git a/apps/mobileattester/app/src/main/AndroidManifest.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/AndroidManifest.xml similarity index 100% rename from apps/mobileattester/app/src/main/AndroidManifest.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/AndroidManifest.xml diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/MainActivity.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/MainActivity.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/MainActivity.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/MainActivity.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/location/LocationHandler.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/location/LocationHandler.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/location/LocationHandler.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/location/LocationHandler.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Claim.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Claim.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Claim.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Claim.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Element.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Element.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Element.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Element.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ElementResult.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ElementResult.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ElementResult.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ElementResult.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ExpectedValue.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ExpectedValue.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ExpectedValue.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/ExpectedValue.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Policy.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Policy.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Policy.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Policy.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Rule.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Rule.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Rule.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Rule.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Spec.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Spec.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Spec.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/model/Spec.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataHandler.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataHandler.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataHandler.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataHandler.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataService.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataService.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataService.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/AttestationDataService.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/DataServiceValues.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/DataServiceValues.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/DataServiceValues.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/DataServiceValues.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/Networking.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/Networking.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/Networking.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/network/Networking.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/repository/AttestationRepo.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/repository/AttestationRepo.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/repository/AttestationRepo.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/repository/AttestationRepo.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/AttestUtil.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/AttestUtil.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/AttestUtil.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/AttestUtil.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/DataHandlers.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/DataHandlers.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/DataHandlers.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/DataHandlers.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/EngineUtil.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/EngineUtil.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/EngineUtil.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/EngineUtil.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/LocationEditor.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/LocationEditor.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/LocationEditor.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/LocationEditor.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/MapManager.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/MapManager.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/MapManager.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/MapManager.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/OverviewProvider.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/OverviewProvider.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/OverviewProvider.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/OverviewProvider.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/UpdateUtil.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/UpdateUtil.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/UpdateUtil.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/UpdateUtil.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/AsyncRunner.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/AsyncRunner.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/AsyncRunner.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/AsyncRunner.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/BatchedDataHandler.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/BatchedDataHandler.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/BatchedDataHandler.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/BatchedDataHandler.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/Filterable.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/Filterable.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/Filterable.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/Filterable.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/OLD.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/OLD.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/OLD.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/data/util/abs/OLD.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/di/Injector.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/di/Injector.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/di/Injector.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/di/Injector.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/ElementInfoWindow.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/ElementInfoWindow.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/ElementInfoWindow.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/ElementInfoWindow.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/SearchBar.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/SearchBar.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/SearchBar.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/SearchBar.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/Tag.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/Tag.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/Tag.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/Tag.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/anim/Animation.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/anim/Animation.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/anim/Animation.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/anim/Animation.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Async.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Async.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Async.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Async.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Buttons.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Buttons.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Buttons.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Buttons.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Center.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Center.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Center.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Center.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Headers.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Headers.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Headers.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Headers.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Selectors.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Selectors.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Selectors.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Selectors.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Text.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Text.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Text.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/components/common/Text.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Attest.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Attest.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Attest.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Attest.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Claim.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Claim.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Claim.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Claim.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Element.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Element.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Element.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Element.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Elements.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Elements.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Elements.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Elements.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Home.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Home.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Home.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Home.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Maps.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Maps.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Maps.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Maps.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/More.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/More.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/More.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/More.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Policy.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Policy.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Policy.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Policy.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Result.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Result.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Result.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Result.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Scanner.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Scanner.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Scanner.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/pages/Scanner.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Color.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Color.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Color.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Color.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Elevation.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Elevation.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Elevation.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Elevation.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Shape.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Shape.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Shape.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Shape.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Theme.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Theme.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Theme.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Theme.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Type.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Type.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Type.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/theme/Type.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Date.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Date.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Date.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Date.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Extensions.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Extensions.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Extensions.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Extensions.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/FilterBuilder.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/FilterBuilder.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/FilterBuilder.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/FilterBuilder.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Navigation.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Navigation.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Navigation.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Navigation.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Parsing.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Parsing.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Parsing.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Parsing.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Permissions.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Permissions.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Permissions.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Permissions.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Preferences.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Preferences.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Preferences.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Preferences.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Ui.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Ui.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Ui.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/util/Ui.kt diff --git a/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/viewmodel/AttestationViewModel.kt b/v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/viewmodel/AttestationViewModel.kt similarity index 100% rename from apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/viewmodel/AttestationViewModel.kt rename to v0.11.0python_final/apps/mobileattester/app/src/main/java/com/example/mobileattester/ui/viewmodel/AttestationViewModel.kt diff --git a/apps/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_green.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_green.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_green.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_green.xml diff --git a/apps/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_red.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_red.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_red.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable-v24/ic_baseline_location_on_32_red.xml diff --git a/apps/mobileattester/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable-v24/ic_launcher_foreground.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable-v24/ic_launcher_foreground.xml diff --git a/apps/mobileattester/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml diff --git a/apps/mobileattester/app/src/main/res/drawable/ic_baseline_circle_32.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_baseline_circle_32.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable/ic_baseline_circle_32.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_baseline_circle_32.xml diff --git a/apps/mobileattester/app/src/main/res/drawable/ic_baseline_location_on_32.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_baseline_location_on_32.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable/ic_baseline_location_on_32.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_baseline_location_on_32.xml diff --git a/apps/mobileattester/app/src/main/res/drawable/ic_baseline_server.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_baseline_server.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable/ic_baseline_server.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_baseline_server.xml diff --git a/apps/mobileattester/app/src/main/res/drawable/ic_launcher_background.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable/ic_launcher_background.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/ic_launcher_background.xml diff --git a/apps/mobileattester/app/src/main/res/drawable/layout_bg.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/layout_bg.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/drawable/layout_bg.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/drawable/layout_bg.xml diff --git a/apps/mobileattester/app/src/main/res/layout/layout_element_info_window.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/layout/layout_element_info_window.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/layout/layout_element_info_window.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/layout/layout_element_info_window.xml diff --git a/apps/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/apps/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/apps/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/apps/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from apps/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/apps/mobileattester/app/src/main/res/values-night/themes.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/values-night/themes.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/values-night/themes.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/values-night/themes.xml diff --git a/apps/mobileattester/app/src/main/res/values/colors.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/values/colors.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/values/colors.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/values/colors.xml diff --git a/apps/mobileattester/app/src/main/res/values/strings.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/values/strings.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/values/strings.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/values/strings.xml diff --git a/apps/mobileattester/app/src/main/res/values/themes.xml b/v0.11.0python_final/apps/mobileattester/app/src/main/res/values/themes.xml similarity index 100% rename from apps/mobileattester/app/src/main/res/values/themes.xml rename to v0.11.0python_final/apps/mobileattester/app/src/main/res/values/themes.xml diff --git a/apps/mobileattester/app/src/test/java/com/example/mobileattester/ExampleUnitTest.kt b/v0.11.0python_final/apps/mobileattester/app/src/test/java/com/example/mobileattester/ExampleUnitTest.kt similarity index 100% rename from apps/mobileattester/app/src/test/java/com/example/mobileattester/ExampleUnitTest.kt rename to v0.11.0python_final/apps/mobileattester/app/src/test/java/com/example/mobileattester/ExampleUnitTest.kt diff --git a/apps/mobileattester/app/src/test/java/com/example/mobileattester/ui/util/ParsingKtTest.kt b/v0.11.0python_final/apps/mobileattester/app/src/test/java/com/example/mobileattester/ui/util/ParsingKtTest.kt similarity index 100% rename from apps/mobileattester/app/src/test/java/com/example/mobileattester/ui/util/ParsingKtTest.kt rename to v0.11.0python_final/apps/mobileattester/app/src/test/java/com/example/mobileattester/ui/util/ParsingKtTest.kt diff --git a/apps/mobileattester/build.gradle b/v0.11.0python_final/apps/mobileattester/build.gradle similarity index 100% rename from apps/mobileattester/build.gradle rename to v0.11.0python_final/apps/mobileattester/build.gradle diff --git a/apps/mobileattester/gradle.properties b/v0.11.0python_final/apps/mobileattester/gradle.properties similarity index 100% rename from apps/mobileattester/gradle.properties rename to v0.11.0python_final/apps/mobileattester/gradle.properties diff --git a/apps/mobileattester/gradle/wrapper/gradle-wrapper.jar b/v0.11.0python_final/apps/mobileattester/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from apps/mobileattester/gradle/wrapper/gradle-wrapper.jar rename to v0.11.0python_final/apps/mobileattester/gradle/wrapper/gradle-wrapper.jar diff --git a/apps/mobileattester/gradle/wrapper/gradle-wrapper.properties b/v0.11.0python_final/apps/mobileattester/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from apps/mobileattester/gradle/wrapper/gradle-wrapper.properties rename to v0.11.0python_final/apps/mobileattester/gradle/wrapper/gradle-wrapper.properties diff --git a/apps/mobileattester/gradlew b/v0.11.0python_final/apps/mobileattester/gradlew similarity index 100% rename from apps/mobileattester/gradlew rename to v0.11.0python_final/apps/mobileattester/gradlew diff --git a/apps/mobileattester/gradlew.bat b/v0.11.0python_final/apps/mobileattester/gradlew.bat similarity index 100% rename from apps/mobileattester/gradlew.bat rename to v0.11.0python_final/apps/mobileattester/gradlew.bat diff --git a/apps/mobileattester/media/Screenshot_1639475937.png b/v0.11.0python_final/apps/mobileattester/media/Screenshot_1639475937.png similarity index 100% rename from apps/mobileattester/media/Screenshot_1639475937.png rename to v0.11.0python_final/apps/mobileattester/media/Screenshot_1639475937.png diff --git a/apps/mobileattester/media/Screenshot_1639476478.png b/v0.11.0python_final/apps/mobileattester/media/Screenshot_1639476478.png similarity index 100% rename from apps/mobileattester/media/Screenshot_1639476478.png rename to v0.11.0python_final/apps/mobileattester/media/Screenshot_1639476478.png diff --git a/apps/mobileattester/media/Screenshot_1639476558.png b/v0.11.0python_final/apps/mobileattester/media/Screenshot_1639476558.png similarity index 100% rename from apps/mobileattester/media/Screenshot_1639476558.png rename to v0.11.0python_final/apps/mobileattester/media/Screenshot_1639476558.png diff --git a/apps/mobileattester/media/Screenshot_1639476952.png b/v0.11.0python_final/apps/mobileattester/media/Screenshot_1639476952.png similarity index 100% rename from apps/mobileattester/media/Screenshot_1639476952.png rename to v0.11.0python_final/apps/mobileattester/media/Screenshot_1639476952.png diff --git a/apps/mobileattester/settings.gradle b/v0.11.0python_final/apps/mobileattester/settings.gradle similarity index 100% rename from apps/mobileattester/settings.gradle rename to v0.11.0python_final/apps/mobileattester/settings.gradle diff --git a/apps/securesensormanagementsystem/.gitignore b/v0.11.0python_final/apps/securesensormanagementsystem/.gitignore similarity index 100% rename from apps/securesensormanagementsystem/.gitignore rename to v0.11.0python_final/apps/securesensormanagementsystem/.gitignore diff --git a/apps/securesensormanagementsystem/README.md b/v0.11.0python_final/apps/securesensormanagementsystem/README.md similarity index 100% rename from apps/securesensormanagementsystem/README.md rename to v0.11.0python_final/apps/securesensormanagementsystem/README.md diff --git a/apps/securesensormanagementsystem/documentation/.DS_Store b/v0.11.0python_final/apps/securesensormanagementsystem/documentation/.DS_Store similarity index 100% rename from apps/securesensormanagementsystem/documentation/.DS_Store rename to v0.11.0python_final/apps/securesensormanagementsystem/documentation/.DS_Store diff --git a/apps/securesensormanagementsystem/documentation/README.md b/v0.11.0python_final/apps/securesensormanagementsystem/documentation/README.md similarity index 100% rename from apps/securesensormanagementsystem/documentation/README.md rename to v0.11.0python_final/apps/securesensormanagementsystem/documentation/README.md diff --git a/apps/securesensormanagementsystem/documentation/STRUCTURE.md b/v0.11.0python_final/apps/securesensormanagementsystem/documentation/STRUCTURE.md similarity index 100% rename from apps/securesensormanagementsystem/documentation/STRUCTURE.md rename to v0.11.0python_final/apps/securesensormanagementsystem/documentation/STRUCTURE.md diff --git a/apps/securesensormanagementsystem/documentation/pics/.DS_Store b/v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/.DS_Store similarity index 100% rename from apps/securesensormanagementsystem/documentation/pics/.DS_Store rename to v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/.DS_Store diff --git a/apps/securesensormanagementsystem/documentation/pics/IoTElementInheritance.JPG b/v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/IoTElementInheritance.JPG similarity index 100% rename from apps/securesensormanagementsystem/documentation/pics/IoTElementInheritance.JPG rename to v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/IoTElementInheritance.JPG diff --git a/apps/securesensormanagementsystem/documentation/pics/aggregator_sequence_diagram.png b/v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/aggregator_sequence_diagram.png similarity index 100% rename from apps/securesensormanagementsystem/documentation/pics/aggregator_sequence_diagram.png rename to v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/aggregator_sequence_diagram.png diff --git a/apps/securesensormanagementsystem/documentation/pics/device_flow.drawio.png b/v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/device_flow.drawio.png similarity index 100% rename from apps/securesensormanagementsystem/documentation/pics/device_flow.drawio.png rename to v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/device_flow.drawio.png diff --git a/apps/securesensormanagementsystem/documentation/pics/system_sequence_diagram.JPG b/v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/system_sequence_diagram.JPG similarity index 100% rename from apps/securesensormanagementsystem/documentation/pics/system_sequence_diagram.JPG rename to v0.11.0python_final/apps/securesensormanagementsystem/documentation/pics/system_sequence_diagram.JPG diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/BasicSensor.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/BasicSensor.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/BasicSensor.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/BasicSensor.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/Device.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/Device.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/Device.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/Device.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/IoTElement.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/IoTElement.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/IoTElement.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/IoTElement.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/README.md b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/README.md similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/README.md rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/README.md diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/__init__.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/__init__.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/__init__.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/SensorManagementLibrary/__init__.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/Aggregator/aggregation_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/Manager.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/Manager.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/Manager.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/Manager.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/attestor.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/attestor.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/attestor.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/attestor.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/manager_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/manager_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/manager_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/ManagementAttestor/manager_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/RngSensor.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/RngSensor.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/RngSensor.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/RngSensor.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/iot.sensors.rng_sensor.service b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/iot.sensors.rng_sensor.service similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/iot.sensors.rng_sensor.service rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/iot.sensors.rng_sensor.service diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/sensor_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/sensor_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/sensor_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/ExampleSensor/sensor_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/IRSensor.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/IRSensor.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/IRSensor.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/IRSensor.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/iot.sensors.ir_sensor.service b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/iot.sensors.ir_sensor.service similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/iot.sensors.ir_sensor.service rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/iot.sensors.ir_sensor.service diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/sensor_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/sensor_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/sensor_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/IRSensor/sensor_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/LuxSensor.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/LuxSensor.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/LuxSensor.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/LuxSensor.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/iot.sensors.lux_sensor.service b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/iot.sensors.lux_sensor.service similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/iot.sensors.lux_sensor.service rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/iot.sensors.lux_sensor.service diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/sensor_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/sensor_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/sensor_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/LuxSensor/sensor_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/TGHPASensor.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/TGHPASensor.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/TGHPASensor.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/TGHPASensor.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/iot.sensors.TGHPA_sensor.service b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/iot.sensors.TGHPA_sensor.service similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/iot.sensors.TGHPA_sensor.service rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/iot.sensors.TGHPA_sensor.service diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/sensor_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/sensor_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/sensor_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TGHPASensor/sensor_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/TofSensor.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/TofSensor.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/TofSensor.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/TofSensor.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/iot.sensors.TOF_sensor.service b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/iot.sensors.TOF_sensor.service similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/iot.sensors.TOF_sensor.service rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/iot.sensors.TOF_sensor.service diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/sensor_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/sensor_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/sensor_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TOFSensor/sensor_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/TempHumSensor.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/TempHumSensor.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/TempHumSensor.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/TempHumSensor.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/iot.sensors.temp_hum_sensor.service b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/iot.sensors.temp_hum_sensor.service similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/iot.sensors.temp_hum_sensor.service rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/iot.sensors.temp_hum_sensor.service diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/sensor_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/sensor_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/sensor_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/TempHumSensor/sensor_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/sensor_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/sensor_config.json similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/sensor_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/sensor_config.json diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/server.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/server.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/server.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/apps/sensors/Webcam/server.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/install/install.py b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/install/install.py similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/install/install.py rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/install/install.py diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/install/service_files/iot.devices.service b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/install/service_files/iot.devices.service similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/install/service_files/iot.devices.service rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/install/service_files/iot.devices.service diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/pyproject.toml b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/pyproject.toml similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/pyproject.toml rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/pyproject.toml diff --git a/apps/securesensormanagementsystem/secure_sensor_management_system/setup.cfg b/v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/setup.cfg similarity index 100% rename from apps/securesensormanagementsystem/secure_sensor_management_system/setup.cfg rename to v0.11.0python_final/apps/securesensormanagementsystem/secure_sensor_management_system/setup.cfg diff --git a/apps/securesensormanagementsystem/website/UI/css/index.css b/v0.11.0python_final/apps/securesensormanagementsystem/website/UI/css/index.css similarity index 100% rename from apps/securesensormanagementsystem/website/UI/css/index.css rename to v0.11.0python_final/apps/securesensormanagementsystem/website/UI/css/index.css diff --git a/apps/securesensormanagementsystem/website/UI/index.html b/v0.11.0python_final/apps/securesensormanagementsystem/website/UI/index.html similarity index 100% rename from apps/securesensormanagementsystem/website/UI/index.html rename to v0.11.0python_final/apps/securesensormanagementsystem/website/UI/index.html diff --git a/apps/securesensormanagementsystem/website/UI/scripts/index.js b/v0.11.0python_final/apps/securesensormanagementsystem/website/UI/scripts/index.js similarity index 100% rename from apps/securesensormanagementsystem/website/UI/scripts/index.js rename to v0.11.0python_final/apps/securesensormanagementsystem/website/UI/scripts/index.js diff --git a/apps/securesensormanagementsystem/website/package-lock.json b/v0.11.0python_final/apps/securesensormanagementsystem/website/package-lock.json similarity index 100% rename from apps/securesensormanagementsystem/website/package-lock.json rename to v0.11.0python_final/apps/securesensormanagementsystem/website/package-lock.json diff --git a/apps/securesensormanagementsystem/website/package.json b/v0.11.0python_final/apps/securesensormanagementsystem/website/package.json similarity index 100% rename from apps/securesensormanagementsystem/website/package.json rename to v0.11.0python_final/apps/securesensormanagementsystem/website/package.json diff --git a/apps/securesensormanagementsystem/website/public/css/index.css b/v0.11.0python_final/apps/securesensormanagementsystem/website/public/css/index.css similarity index 100% rename from apps/securesensormanagementsystem/website/public/css/index.css rename to v0.11.0python_final/apps/securesensormanagementsystem/website/public/css/index.css diff --git a/apps/securesensormanagementsystem/website/public/js/index.js b/v0.11.0python_final/apps/securesensormanagementsystem/website/public/js/index.js similarity index 100% rename from apps/securesensormanagementsystem/website/public/js/index.js rename to v0.11.0python_final/apps/securesensormanagementsystem/website/public/js/index.js diff --git a/apps/securesensormanagementsystem/website/server/server.js b/v0.11.0python_final/apps/securesensormanagementsystem/website/server/server.js similarity index 100% rename from apps/securesensormanagementsystem/website/server/server.js rename to v0.11.0python_final/apps/securesensormanagementsystem/website/server/server.js diff --git a/apps/securesensormanagementsystem/website/server/server_config.json b/v0.11.0python_final/apps/securesensormanagementsystem/website/server/server_config.json similarity index 100% rename from apps/securesensormanagementsystem/website/server/server_config.json rename to v0.11.0python_final/apps/securesensormanagementsystem/website/server/server_config.json diff --git a/apps/securesensormanagementsystem/website/views/index.pug b/v0.11.0python_final/apps/securesensormanagementsystem/website/views/index.pug similarity index 100% rename from apps/securesensormanagementsystem/website/views/index.pug rename to v0.11.0python_final/apps/securesensormanagementsystem/website/views/index.pug diff --git a/docs/STARTHERE.md b/v0.11.0python_final/docs/STARTHERE.md similarity index 100% rename from docs/STARTHERE.md rename to v0.11.0python_final/docs/STARTHERE.md diff --git a/docs/docker/docker.md b/v0.11.0python_final/docs/docker/docker.md similarity index 100% rename from docs/docker/docker.md rename to v0.11.0python_final/docs/docker/docker.md diff --git a/docs/docker/dockercompose.md b/v0.11.0python_final/docs/docker/dockercompose.md similarity index 100% rename from docs/docker/dockercompose.md rename to v0.11.0python_final/docs/docker/dockercompose.md diff --git a/docs/quickstart/installation.md b/v0.11.0python_final/docs/quickstart/installation.md similarity index 100% rename from docs/quickstart/installation.md rename to v0.11.0python_final/docs/quickstart/installation.md diff --git a/docs/quickstart/nut10running.png b/v0.11.0python_final/docs/quickstart/nut10running.png similarity index 100% rename from docs/quickstart/nut10running.png rename to v0.11.0python_final/docs/quickstart/nut10running.png diff --git a/docs/quickstart/u10running.png b/v0.11.0python_final/docs/quickstart/u10running.png similarity index 100% rename from docs/quickstart/u10running.png rename to v0.11.0python_final/docs/quickstart/u10running.png diff --git a/fc10/.gitignore b/v0.11.0python_final/fc10/.gitignore similarity index 100% rename from fc10/.gitignore rename to v0.11.0python_final/fc10/.gitignore diff --git a/fc10/Dockerfile.local b/v0.11.0python_final/fc10/Dockerfile.local similarity index 100% rename from fc10/Dockerfile.local rename to v0.11.0python_final/fc10/Dockerfile.local diff --git a/fc10/README.md b/v0.11.0python_final/fc10/README.md similarity index 100% rename from fc10/README.md rename to v0.11.0python_final/fc10/README.md diff --git a/fc10/analysisFunction.py b/v0.11.0python_final/fc10/analysisFunction.py similarity index 100% rename from fc10/analysisFunction.py rename to v0.11.0python_final/fc10/analysisFunction.py diff --git a/fc10/elementDifferences.py b/v0.11.0python_final/fc10/elementDifferences.py similarity index 100% rename from fc10/elementDifferences.py rename to v0.11.0python_final/fc10/elementDifferences.py diff --git a/fc10/fc.conf b/v0.11.0python_final/fc10/fc.conf similarity index 100% rename from fc10/fc.conf rename to v0.11.0python_final/fc10/fc.conf diff --git a/fc10/fc.py b/v0.11.0python_final/fc10/fc.py similarity index 100% rename from fc10/fc.py rename to v0.11.0python_final/fc10/fc.py diff --git a/fc10/fcanalytics.py b/v0.11.0python_final/fc10/fcanalytics.py similarity index 100% rename from fc10/fcanalytics.py rename to v0.11.0python_final/fc10/fcanalytics.py diff --git a/fc10/fcrules.py b/v0.11.0python_final/fc10/fcrules.py similarity index 100% rename from fc10/fcrules.py rename to v0.11.0python_final/fc10/fcrules.py diff --git a/fc10/forensicsDocument.py b/v0.11.0python_final/fc10/forensicsDocument.py similarity index 100% rename from fc10/forensicsDocument.py rename to v0.11.0python_final/fc10/forensicsDocument.py diff --git a/fc10/forensicsStructures.py b/v0.11.0python_final/fc10/forensicsStructures.py similarity index 100% rename from fc10/forensicsStructures.py rename to v0.11.0python_final/fc10/forensicsStructures.py diff --git a/fc10/forensics_capture.py b/v0.11.0python_final/fc10/forensics_capture.py similarity index 100% rename from fc10/forensics_capture.py rename to v0.11.0python_final/fc10/forensics_capture.py diff --git a/fc10/pcrDifferences.py b/v0.11.0python_final/fc10/pcrDifferences.py similarity index 100% rename from fc10/pcrDifferences.py rename to v0.11.0python_final/fc10/pcrDifferences.py diff --git a/fc10/quoteDifferences.py b/v0.11.0python_final/fc10/quoteDifferences.py similarity index 100% rename from fc10/quoteDifferences.py rename to v0.11.0python_final/fc10/quoteDifferences.py diff --git a/fc10/static/css/style.css b/v0.11.0python_final/fc10/static/css/style.css similarity index 100% rename from fc10/static/css/style.css rename to v0.11.0python_final/fc10/static/css/style.css diff --git a/fc10/systeminfoDifferences.py b/v0.11.0python_final/fc10/systeminfoDifferences.py similarity index 100% rename from fc10/systeminfoDifferences.py rename to v0.11.0python_final/fc10/systeminfoDifferences.py diff --git a/fc10/templates/base.html b/v0.11.0python_final/fc10/templates/base.html similarity index 100% rename from fc10/templates/base.html rename to v0.11.0python_final/fc10/templates/base.html diff --git a/fc10/templates/errorpage.html b/v0.11.0python_final/fc10/templates/errorpage.html similarity index 100% rename from fc10/templates/errorpage.html rename to v0.11.0python_final/fc10/templates/errorpage.html diff --git a/fc10/templates/ftl.html b/v0.11.0python_final/fc10/templates/ftl.html similarity index 100% rename from fc10/templates/ftl.html rename to v0.11.0python_final/fc10/templates/ftl.html diff --git a/fc10/templates/home.html b/v0.11.0python_final/fc10/templates/home.html similarity index 100% rename from fc10/templates/home.html rename to v0.11.0python_final/fc10/templates/home.html diff --git a/fc10/templates/listelements.html b/v0.11.0python_final/fc10/templates/listelements.html similarity index 100% rename from fc10/templates/listelements.html rename to v0.11.0python_final/fc10/templates/listelements.html diff --git a/fc10/testurls b/v0.11.0python_final/fc10/testurls similarity index 100% rename from fc10/testurls rename to v0.11.0python_final/fc10/testurls diff --git a/t10/A10HTTPTPMSENDSTATIC/Dockerfile b/v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/Dockerfile similarity index 100% rename from t10/A10HTTPTPMSENDSTATIC/Dockerfile rename to v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/Dockerfile diff --git a/t10/A10HTTPTPMSENDSTATIC/Makefile b/v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/Makefile similarity index 100% rename from t10/A10HTTPTPMSENDSTATIC/Makefile rename to v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/Makefile diff --git a/t10/A10HTTPTPMSENDSTATIC/tpm2-send.tar.xz b/v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/tpm2-send.tar.xz similarity index 100% rename from t10/A10HTTPTPMSENDSTATIC/tpm2-send.tar.xz rename to v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/tpm2-send.tar.xz diff --git a/t10/A10HTTPTPMSENDSTATIC/tpm2_send.c b/v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/tpm2_send.c similarity index 100% rename from t10/A10HTTPTPMSENDSTATIC/tpm2_send.c rename to v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/tpm2_send.c diff --git a/t10/A10HTTPTPMSENDSTATIC/tpm2_send_server.py b/v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/tpm2_send_server.py similarity index 100% rename from t10/A10HTTPTPMSENDSTATIC/tpm2_send_server.py rename to v0.11.0python_final/t10/A10HTTPTPMSENDSTATIC/tpm2_send_server.py diff --git a/t10/A10httprest/Dockerfile b/v0.11.0python_final/t10/A10httprest/Dockerfile similarity index 100% rename from t10/A10httprest/Dockerfile rename to v0.11.0python_final/t10/A10httprest/Dockerfile diff --git a/t10/A10httprest/claims/claimstructure.py b/v0.11.0python_final/t10/A10httprest/claims/claimstructure.py similarity index 100% rename from t10/A10httprest/claims/claimstructure.py rename to v0.11.0python_final/t10/A10httprest/claims/claimstructure.py diff --git a/t10/A10httprest/endpoints/notpm/notpm.py b/v0.11.0python_final/t10/A10httprest/endpoints/notpm/notpm.py similarity index 100% rename from t10/A10httprest/endpoints/notpm/notpm.py rename to v0.11.0python_final/t10/A10httprest/endpoints/notpm/notpm.py diff --git a/t10/A10httprest/endpoints/notpm/notpm_endpoint.py b/v0.11.0python_final/t10/A10httprest/endpoints/notpm/notpm_endpoint.py similarity index 100% rename from t10/A10httprest/endpoints/notpm/notpm_endpoint.py rename to v0.11.0python_final/t10/A10httprest/endpoints/notpm/notpm_endpoint.py diff --git a/t10/A10httprest/endpoints/pifake/pifake_endpoint.py b/v0.11.0python_final/t10/A10httprest/endpoints/pifake/pifake_endpoint.py similarity index 100% rename from t10/A10httprest/endpoints/pifake/pifake_endpoint.py rename to v0.11.0python_final/t10/A10httprest/endpoints/pifake/pifake_endpoint.py diff --git a/t10/A10httprest/endpoints/status/status_endpoint.py b/v0.11.0python_final/t10/A10httprest/endpoints/status/status_endpoint.py similarity index 100% rename from t10/A10httprest/endpoints/status/status_endpoint.py rename to v0.11.0python_final/t10/A10httprest/endpoints/status/status_endpoint.py diff --git a/t10/A10httprest/endpoints/test/testquote.py b/v0.11.0python_final/t10/A10httprest/endpoints/test/testquote.py similarity index 100% rename from t10/A10httprest/endpoints/test/testquote.py rename to v0.11.0python_final/t10/A10httprest/endpoints/test/testquote.py diff --git a/t10/A10httprest/endpoints/tpm2/tpm2_endpoint.py b/v0.11.0python_final/t10/A10httprest/endpoints/tpm2/tpm2_endpoint.py similarity index 100% rename from t10/A10httprest/endpoints/tpm2/tpm2_endpoint.py rename to v0.11.0python_final/t10/A10httprest/endpoints/tpm2/tpm2_endpoint.py diff --git a/t10/A10httprest/endpoints/uefi/uefi_endpoint.py b/v0.11.0python_final/t10/A10httprest/endpoints/uefi/uefi_endpoint.py similarity index 100% rename from t10/A10httprest/endpoints/uefi/uefi_endpoint.py rename to v0.11.0python_final/t10/A10httprest/endpoints/uefi/uefi_endpoint.py diff --git a/t10/A10httprest/ta.conf b/v0.11.0python_final/t10/A10httprest/ta.conf similarity index 100% rename from t10/A10httprest/ta.conf rename to v0.11.0python_final/t10/A10httprest/ta.conf diff --git a/t10/A10httprest/ta.py b/v0.11.0python_final/t10/A10httprest/ta.py similarity index 100% rename from t10/A10httprest/ta.py rename to v0.11.0python_final/t10/A10httprest/ta.py diff --git a/t10/README.md b/v0.11.0python_final/t10/README.md similarity index 100% rename from t10/README.md rename to v0.11.0python_final/t10/README.md diff --git a/t10/genakek.sh b/v0.11.0python_final/t10/genakek.sh similarity index 100% rename from t10/genakek.sh rename to v0.11.0python_final/t10/genakek.sh diff --git a/t10/go/ta.go b/v0.11.0python_final/t10/go/ta.go similarity index 100% rename from t10/go/ta.go rename to v0.11.0python_final/t10/go/ta.go diff --git a/t10/go/tests/ekcert.go b/v0.11.0python_final/t10/go/tests/ekcert.go similarity index 100% rename from t10/go/tests/ekcert.go rename to v0.11.0python_final/t10/go/tests/ekcert.go diff --git a/t10/go/tests/hello.go b/v0.11.0python_final/t10/go/tests/hello.go similarity index 100% rename from t10/go/tests/hello.go rename to v0.11.0python_final/t10/go/tests/hello.go diff --git a/t10/go/tests/keys.go b/v0.11.0python_final/t10/go/tests/keys.go similarity index 100% rename from t10/go/tests/keys.go rename to v0.11.0python_final/t10/go/tests/keys.go diff --git a/t10/go/tests/nvram.go b/v0.11.0python_final/t10/go/tests/nvram.go similarity index 100% rename from t10/go/tests/nvram.go rename to v0.11.0python_final/t10/go/tests/nvram.go diff --git a/t10/go/tests/quote b/v0.11.0python_final/t10/go/tests/quote similarity index 100% rename from t10/go/tests/quote rename to v0.11.0python_final/t10/go/tests/quote diff --git a/t10/go/tests/quote.go b/v0.11.0python_final/t10/go/tests/quote.go similarity index 100% rename from t10/go/tests/quote.go rename to v0.11.0python_final/t10/go/tests/quote.go diff --git a/t10/nut10/Dockerfile b/v0.11.0python_final/t10/nut10/Dockerfile similarity index 100% rename from t10/nut10/Dockerfile rename to v0.11.0python_final/t10/nut10/Dockerfile diff --git a/t10/nut10/Dockerfile.local b/v0.11.0python_final/t10/nut10/Dockerfile.local similarity index 100% rename from t10/nut10/Dockerfile.local rename to v0.11.0python_final/t10/nut10/Dockerfile.local diff --git a/t10/nut10/claims/claimstructure.py b/v0.11.0python_final/t10/nut10/claims/claimstructure.py similarity index 100% rename from t10/nut10/claims/claimstructure.py rename to v0.11.0python_final/t10/nut10/claims/claimstructure.py diff --git a/t10/nut10/endpoints/ima_endpoint.py b/v0.11.0python_final/t10/nut10/endpoints/ima_endpoint.py similarity index 100% rename from t10/nut10/endpoints/ima_endpoint.py rename to v0.11.0python_final/t10/nut10/endpoints/ima_endpoint.py diff --git a/t10/nut10/endpoints/inteltxt_endpoint.py b/v0.11.0python_final/t10/nut10/endpoints/inteltxt_endpoint.py similarity index 100% rename from t10/nut10/endpoints/inteltxt_endpoint.py rename to v0.11.0python_final/t10/nut10/endpoints/inteltxt_endpoint.py diff --git a/t10/nut10/endpoints/sysinfo_endpoint.py b/v0.11.0python_final/t10/nut10/endpoints/sysinfo_endpoint.py similarity index 100% rename from t10/nut10/endpoints/sysinfo_endpoint.py rename to v0.11.0python_final/t10/nut10/endpoints/sysinfo_endpoint.py diff --git a/t10/nut10/endpoints/tpm2_endpoint.py b/v0.11.0python_final/t10/nut10/endpoints/tpm2_endpoint.py similarity index 100% rename from t10/nut10/endpoints/tpm2_endpoint.py rename to v0.11.0python_final/t10/nut10/endpoints/tpm2_endpoint.py diff --git a/t10/nut10/endpoints/uefi_endpoint.py b/v0.11.0python_final/t10/nut10/endpoints/uefi_endpoint.py similarity index 100% rename from t10/nut10/endpoints/uefi_endpoint.py rename to v0.11.0python_final/t10/nut10/endpoints/uefi_endpoint.py diff --git a/t10/nut10/run_t10_as_docker_container.sh b/v0.11.0python_final/t10/nut10/run_t10_as_docker_container.sh similarity index 100% rename from t10/nut10/run_t10_as_docker_container.sh rename to v0.11.0python_final/t10/nut10/run_t10_as_docker_container.sh diff --git a/t10/nut10/run_t10_as_podman_container.sh b/v0.11.0python_final/t10/nut10/run_t10_as_podman_container.sh similarity index 100% rename from t10/nut10/run_t10_as_podman_container.sh rename to v0.11.0python_final/t10/nut10/run_t10_as_podman_container.sh diff --git a/t10/nut10/t10.conf b/v0.11.0python_final/t10/nut10/t10.conf similarity index 100% rename from t10/nut10/t10.conf rename to v0.11.0python_final/t10/nut10/t10.conf diff --git a/t10/nut10/ta.py b/v0.11.0python_final/t10/nut10/ta.py similarity index 100% rename from t10/nut10/ta.py rename to v0.11.0python_final/t10/nut10/ta.py diff --git a/t10/nut10/ta_config.cfg b/v0.11.0python_final/t10/nut10/ta_config.cfg similarity index 100% rename from t10/nut10/ta_config.cfg rename to v0.11.0python_final/t10/nut10/ta_config.cfg diff --git a/t10/nut10/tpm/tpm.py b/v0.11.0python_final/t10/nut10/tpm/tpm.py similarity index 100% rename from t10/nut10/tpm/tpm.py rename to v0.11.0python_final/t10/nut10/tpm/tpm.py diff --git a/t10/py/Dockerfile b/v0.11.0python_final/t10/py/Dockerfile similarity index 100% rename from t10/py/Dockerfile rename to v0.11.0python_final/t10/py/Dockerfile diff --git a/t10/py/pyvenv.cfg b/v0.11.0python_final/t10/py/pyvenv.cfg similarity index 100% rename from t10/py/pyvenv.cfg rename to v0.11.0python_final/t10/py/pyvenv.cfg diff --git a/t10/py/run_as_docker_contaier.sh b/v0.11.0python_final/t10/py/run_as_docker_contaier.sh similarity index 100% rename from t10/py/run_as_docker_contaier.sh rename to v0.11.0python_final/t10/py/run_as_docker_contaier.sh diff --git a/t10/py/ta.py b/v0.11.0python_final/t10/py/ta.py similarity index 100% rename from t10/py/ta.py rename to v0.11.0python_final/t10/py/ta.py diff --git a/t10/py/ta_config.cfg b/v0.11.0python_final/t10/py/ta_config.cfg similarity index 100% rename from t10/py/ta_config.cfg rename to v0.11.0python_final/t10/py/ta_config.cfg diff --git a/t10/py/tpm/__init__.py b/v0.11.0python_final/t10/py/tpm/__init__.py similarity index 100% rename from t10/py/tpm/__init__.py rename to v0.11.0python_final/t10/py/tpm/__init__.py diff --git a/t10/py/tpm/tpm.py b/v0.11.0python_final/t10/py/tpm/tpm.py similarity index 100% rename from t10/py/tpm/tpm.py rename to v0.11.0python_final/t10/py/tpm/tpm.py diff --git a/t10/py/tpm2interface/tpm2.py b/v0.11.0python_final/t10/py/tpm2interface/tpm2.py similarity index 100% rename from t10/py/tpm2interface/tpm2.py rename to v0.11.0python_final/t10/py/tpm2interface/tpm2.py diff --git a/t10/systemd/README.md b/v0.11.0python_final/t10/systemd/README.md similarity index 100% rename from t10/systemd/README.md rename to v0.11.0python_final/t10/systemd/README.md diff --git a/t10/systemd/ta.service b/v0.11.0python_final/t10/systemd/ta.service similarity index 100% rename from t10/systemd/ta.service rename to v0.11.0python_final/t10/systemd/ta.service diff --git a/t10/systemd/ta.start b/v0.11.0python_final/t10/systemd/ta.start similarity index 100% rename from t10/systemd/ta.start rename to v0.11.0python_final/t10/systemd/ta.start diff --git a/t10/systemd/ta.stop b/v0.11.0python_final/t10/systemd/ta.stop similarity index 100% rename from t10/systemd/ta.stop rename to v0.11.0python_final/t10/systemd/ta.stop diff --git a/tests/README.md b/v0.11.0python_final/tests/README.md similarity index 100% rename from tests/README.md rename to v0.11.0python_final/tests/README.md diff --git a/tests/a10resttests/delete.py b/v0.11.0python_final/tests/a10resttests/delete.py similarity index 100% rename from tests/a10resttests/delete.py rename to v0.11.0python_final/tests/a10resttests/delete.py diff --git a/tests/a10resttests/deltest b/v0.11.0python_final/tests/a10resttests/deltest similarity index 100% rename from tests/a10resttests/deltest rename to v0.11.0python_final/tests/a10resttests/deltest diff --git a/tests/a10resttests/evtest b/v0.11.0python_final/tests/a10resttests/evtest similarity index 100% rename from tests/a10resttests/evtest rename to v0.11.0python_final/tests/a10resttests/evtest diff --git a/tests/a10resttests/postelementtest.py b/v0.11.0python_final/tests/a10resttests/postelementtest.py similarity index 100% rename from tests/a10resttests/postelementtest.py rename to v0.11.0python_final/tests/a10resttests/postelementtest.py diff --git a/tests/a10resttests/puttest b/v0.11.0python_final/tests/a10resttests/puttest similarity index 100% rename from tests/a10resttests/puttest rename to v0.11.0python_final/tests/a10resttests/puttest diff --git a/tests/a10resttests/py/p.py b/v0.11.0python_final/tests/a10resttests/py/p.py similarity index 100% rename from tests/a10resttests/py/p.py rename to v0.11.0python_final/tests/a10resttests/py/p.py diff --git a/tests/attestall/a.py b/v0.11.0python_final/tests/attestall/a.py similarity index 100% rename from tests/attestall/a.py rename to v0.11.0python_final/tests/attestall/a.py diff --git a/tests/attestall/b.py b/v0.11.0python_final/tests/attestall/b.py similarity index 100% rename from tests/attestall/b.py rename to v0.11.0python_final/tests/attestall/b.py diff --git a/tests/attestall/c.py b/v0.11.0python_final/tests/attestall/c.py similarity index 100% rename from tests/attestall/c.py rename to v0.11.0python_final/tests/attestall/c.py diff --git a/tests/attestall/v2/elementstest.py b/v0.11.0python_final/tests/attestall/v2/elementstest.py similarity index 100% rename from tests/attestall/v2/elementstest.py rename to v0.11.0python_final/tests/attestall/v2/elementstest.py diff --git a/tests/attestall/v2/policytest.py b/v0.11.0python_final/tests/attestall/v2/policytest.py similarity index 100% rename from tests/attestall/v2/policytest.py rename to v0.11.0python_final/tests/attestall/v2/policytest.py diff --git a/tests/attesttest.py b/v0.11.0python_final/tests/attesttest.py similarity index 100% rename from tests/attesttest.py rename to v0.11.0python_final/tests/attesttest.py diff --git a/tests/basicDatabaseTests.py b/v0.11.0python_final/tests/basicDatabaseTests.py similarity index 100% rename from tests/basicDatabaseTests.py rename to v0.11.0python_final/tests/basicDatabaseTests.py diff --git a/tests/diffdicttest/test1.py b/v0.11.0python_final/tests/diffdicttest/test1.py similarity index 100% rename from tests/diffdicttest/test1.py rename to v0.11.0python_final/tests/diffdicttest/test1.py diff --git a/tests/pytsstests/p.py b/v0.11.0python_final/tests/pytsstests/p.py similarity index 100% rename from tests/pytsstests/p.py rename to v0.11.0python_final/tests/pytsstests/p.py diff --git a/tests/sessions.py b/v0.11.0python_final/tests/sessions.py similarity index 100% rename from tests/sessions.py rename to v0.11.0python_final/tests/sessions.py diff --git a/tests/snippets/makeactivatecredential_test.py b/v0.11.0python_final/tests/snippets/makeactivatecredential_test.py similarity index 100% rename from tests/snippets/makeactivatecredential_test.py rename to v0.11.0python_final/tests/snippets/makeactivatecredential_test.py diff --git a/tests/snippets/pytssExample1.py b/v0.11.0python_final/tests/snippets/pytssExample1.py similarity index 100% rename from tests/snippets/pytssExample1.py rename to v0.11.0python_final/tests/snippets/pytssExample1.py diff --git a/u10/.gitignore b/v0.11.0python_final/u10/.gitignore similarity index 100% rename from u10/.gitignore rename to v0.11.0python_final/u10/.gitignore diff --git a/u10/Dockerfile.local b/v0.11.0python_final/u10/Dockerfile.local similarity index 100% rename from u10/Dockerfile.local rename to v0.11.0python_final/u10/Dockerfile.local diff --git a/u10/README.md b/v0.11.0python_final/u10/README.md similarity index 100% rename from u10/README.md rename to v0.11.0python_final/u10/README.md diff --git a/u10/a10.conf b/v0.11.0python_final/u10/a10.conf similarity index 100% rename from u10/a10.conf rename to v0.11.0python_final/u10/a10.conf diff --git a/u10/blueprints/__init__.py b/v0.11.0python_final/u10/blueprints/__init__.py similarity index 100% rename from u10/blueprints/__init__.py rename to v0.11.0python_final/u10/blueprints/__init__.py diff --git a/u10/blueprints/__pycache__/__init__.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/__init__.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/__init__.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/__init__.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/attestation.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/attestation.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/attestation.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/attestation.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/claims.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/claims.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/claims.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/claims.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/edit.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/edit.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/edit.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/edit.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/elementanalytics.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/elementanalytics.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/elementanalytics.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/elementanalytics.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/elements.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/elements.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/elements.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/elements.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/expectedvalues.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/expectedvalues.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/expectedvalues.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/expectedvalues.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/formatting.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/formatting.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/formatting.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/formatting.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/hashes.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/hashes.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/hashes.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/hashes.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/home.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/home.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/home.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/home.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/log.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/log.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/log.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/log.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/ping.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/ping.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/ping.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/ping.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/policies.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/policies.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/policies.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/policies.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/protocols.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/protocols.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/protocols.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/protocols.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/results.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/results.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/results.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/results.cpython-38.pyc diff --git a/u10/blueprints/__pycache__/rules.cpython-38.pyc b/v0.11.0python_final/u10/blueprints/__pycache__/rules.cpython-38.pyc similarity index 100% rename from u10/blueprints/__pycache__/rules.cpython-38.pyc rename to v0.11.0python_final/u10/blueprints/__pycache__/rules.cpython-38.pyc diff --git a/u10/blueprints/attestation.py b/v0.11.0python_final/u10/blueprints/attestation.py similarity index 100% rename from u10/blueprints/attestation.py rename to v0.11.0python_final/u10/blueprints/attestation.py diff --git a/u10/blueprints/claims.py b/v0.11.0python_final/u10/blueprints/claims.py similarity index 100% rename from u10/blueprints/claims.py rename to v0.11.0python_final/u10/blueprints/claims.py diff --git a/u10/blueprints/edit.py b/v0.11.0python_final/u10/blueprints/edit.py similarity index 100% rename from u10/blueprints/edit.py rename to v0.11.0python_final/u10/blueprints/edit.py diff --git a/u10/blueprints/elementanalytics.py b/v0.11.0python_final/u10/blueprints/elementanalytics.py similarity index 100% rename from u10/blueprints/elementanalytics.py rename to v0.11.0python_final/u10/blueprints/elementanalytics.py diff --git a/u10/blueprints/elements.py b/v0.11.0python_final/u10/blueprints/elements.py similarity index 100% rename from u10/blueprints/elements.py rename to v0.11.0python_final/u10/blueprints/elements.py diff --git a/u10/blueprints/expectedvalues.py b/v0.11.0python_final/u10/blueprints/expectedvalues.py similarity index 100% rename from u10/blueprints/expectedvalues.py rename to v0.11.0python_final/u10/blueprints/expectedvalues.py diff --git a/u10/blueprints/formatting.py b/v0.11.0python_final/u10/blueprints/formatting.py similarity index 100% rename from u10/blueprints/formatting.py rename to v0.11.0python_final/u10/blueprints/formatting.py diff --git a/u10/blueprints/hashes.py b/v0.11.0python_final/u10/blueprints/hashes.py similarity index 100% rename from u10/blueprints/hashes.py rename to v0.11.0python_final/u10/blueprints/hashes.py diff --git a/u10/blueprints/home.py b/v0.11.0python_final/u10/blueprints/home.py similarity index 100% rename from u10/blueprints/home.py rename to v0.11.0python_final/u10/blueprints/home.py diff --git a/u10/blueprints/log.py b/v0.11.0python_final/u10/blueprints/log.py similarity index 100% rename from u10/blueprints/log.py rename to v0.11.0python_final/u10/blueprints/log.py diff --git a/u10/blueprints/pcrschemas.py b/v0.11.0python_final/u10/blueprints/pcrschemas.py similarity index 100% rename from u10/blueprints/pcrschemas.py rename to v0.11.0python_final/u10/blueprints/pcrschemas.py diff --git a/u10/blueprints/ping.py b/v0.11.0python_final/u10/blueprints/ping.py similarity index 100% rename from u10/blueprints/ping.py rename to v0.11.0python_final/u10/blueprints/ping.py diff --git a/u10/blueprints/policies.py b/v0.11.0python_final/u10/blueprints/policies.py similarity index 100% rename from u10/blueprints/policies.py rename to v0.11.0python_final/u10/blueprints/policies.py diff --git a/u10/blueprints/protocols.py b/v0.11.0python_final/u10/blueprints/protocols.py similarity index 100% rename from u10/blueprints/protocols.py rename to v0.11.0python_final/u10/blueprints/protocols.py diff --git a/u10/blueprints/qrcodes.py b/v0.11.0python_final/u10/blueprints/qrcodes.py similarity index 100% rename from u10/blueprints/qrcodes.py rename to v0.11.0python_final/u10/blueprints/qrcodes.py diff --git a/u10/blueprints/results.py b/v0.11.0python_final/u10/blueprints/results.py similarity index 100% rename from u10/blueprints/results.py rename to v0.11.0python_final/u10/blueprints/results.py diff --git a/u10/blueprints/rules.py b/v0.11.0python_final/u10/blueprints/rules.py similarity index 100% rename from u10/blueprints/rules.py rename to v0.11.0python_final/u10/blueprints/rules.py diff --git a/u10/blueprints/sessions.py b/v0.11.0python_final/u10/blueprints/sessions.py similarity index 100% rename from u10/blueprints/sessions.py rename to v0.11.0python_final/u10/blueprints/sessions.py diff --git a/u10/requirements.txt b/v0.11.0python_final/u10/requirements.txt similarity index 100% rename from u10/requirements.txt rename to v0.11.0python_final/u10/requirements.txt diff --git a/u10/static/favicon.ico b/v0.11.0python_final/u10/static/favicon.ico similarity index 100% rename from u10/static/favicon.ico rename to v0.11.0python_final/u10/static/favicon.ico diff --git a/u10/static/teapot.png b/v0.11.0python_final/u10/static/teapot.png similarity index 100% rename from u10/static/teapot.png rename to v0.11.0python_final/u10/static/teapot.png diff --git a/u10/static/tpm404.png b/v0.11.0python_final/u10/static/tpm404.png similarity index 100% rename from u10/static/tpm404.png rename to v0.11.0python_final/u10/static/tpm404.png diff --git a/u10/templates/attest.html b/v0.11.0python_final/u10/templates/attest.html similarity index 100% rename from u10/templates/attest.html rename to v0.11.0python_final/u10/templates/attest.html diff --git a/u10/templates/attestall.html b/v0.11.0python_final/u10/templates/attestall.html similarity index 100% rename from u10/templates/attestall.html rename to v0.11.0python_final/u10/templates/attestall.html diff --git a/u10/templates/base.html b/v0.11.0python_final/u10/templates/base.html similarity index 100% rename from u10/templates/base.html rename to v0.11.0python_final/u10/templates/base.html diff --git a/u10/templates/claim.html b/v0.11.0python_final/u10/templates/claim.html similarity index 100% rename from u10/templates/claim.html rename to v0.11.0python_final/u10/templates/claim.html diff --git a/u10/templates/claimprettyprint/firmwareinfo.html b/v0.11.0python_final/u10/templates/claimprettyprint/firmwareinfo.html similarity index 100% rename from u10/templates/claimprettyprint/firmwareinfo.html rename to v0.11.0python_final/u10/templates/claimprettyprint/firmwareinfo.html diff --git a/u10/templates/claimprettyprint/imalog.html b/v0.11.0python_final/u10/templates/claimprettyprint/imalog.html similarity index 100% rename from u10/templates/claimprettyprint/imalog.html rename to v0.11.0python_final/u10/templates/claimprettyprint/imalog.html diff --git a/u10/templates/claimprettyprint/incorrecttype.html b/v0.11.0python_final/u10/templates/claimprettyprint/incorrecttype.html similarity index 100% rename from u10/templates/claimprettyprint/incorrecttype.html rename to v0.11.0python_final/u10/templates/claimprettyprint/incorrecttype.html diff --git a/u10/templates/claimprettyprint/pcrs.html b/v0.11.0python_final/u10/templates/claimprettyprint/pcrs.html similarity index 100% rename from u10/templates/claimprettyprint/pcrs.html rename to v0.11.0python_final/u10/templates/claimprettyprint/pcrs.html diff --git a/u10/templates/claimprettyprint/quote.html b/v0.11.0python_final/u10/templates/claimprettyprint/quote.html similarity index 100% rename from u10/templates/claimprettyprint/quote.html rename to v0.11.0python_final/u10/templates/claimprettyprint/quote.html diff --git a/u10/templates/claimprettyprint/systeminfo.html b/v0.11.0python_final/u10/templates/claimprettyprint/systeminfo.html similarity index 100% rename from u10/templates/claimprettyprint/systeminfo.html rename to v0.11.0python_final/u10/templates/claimprettyprint/systeminfo.html diff --git a/u10/templates/claimprettyprint/uefieventlog.html b/v0.11.0python_final/u10/templates/claimprettyprint/uefieventlog.html similarity index 100% rename from u10/templates/claimprettyprint/uefieventlog.html rename to v0.11.0python_final/u10/templates/claimprettyprint/uefieventlog.html diff --git a/u10/templates/claimprettyprint/uefieventlograw.html b/v0.11.0python_final/u10/templates/claimprettyprint/uefieventlograw.html similarity index 100% rename from u10/templates/claimprettyprint/uefieventlograw.html rename to v0.11.0python_final/u10/templates/claimprettyprint/uefieventlograw.html diff --git a/u10/templates/claims.html b/v0.11.0python_final/u10/templates/claims.html similarity index 100% rename from u10/templates/claims.html rename to v0.11.0python_final/u10/templates/claims.html diff --git a/u10/templates/editraw.html b/v0.11.0python_final/u10/templates/editraw.html similarity index 100% rename from u10/templates/editraw.html rename to v0.11.0python_final/u10/templates/editraw.html diff --git a/u10/templates/element.html b/v0.11.0python_final/u10/templates/element.html similarity index 100% rename from u10/templates/element.html rename to v0.11.0python_final/u10/templates/element.html diff --git a/u10/templates/elementanalytics.html b/v0.11.0python_final/u10/templates/elementanalytics.html similarity index 100% rename from u10/templates/elementanalytics.html rename to v0.11.0python_final/u10/templates/elementanalytics.html diff --git a/u10/templates/elements.html b/v0.11.0python_final/u10/templates/elements.html similarity index 100% rename from u10/templates/elements.html rename to v0.11.0python_final/u10/templates/elements.html diff --git a/u10/templates/elements_archived.html b/v0.11.0python_final/u10/templates/elements_archived.html similarity index 100% rename from u10/templates/elements_archived.html rename to v0.11.0python_final/u10/templates/elements_archived.html diff --git a/u10/templates/expectedvalue.html b/v0.11.0python_final/u10/templates/expectedvalue.html similarity index 100% rename from u10/templates/expectedvalue.html rename to v0.11.0python_final/u10/templates/expectedvalue.html diff --git a/u10/templates/expectedvalues.html b/v0.11.0python_final/u10/templates/expectedvalues.html similarity index 100% rename from u10/templates/expectedvalues.html rename to v0.11.0python_final/u10/templates/expectedvalues.html diff --git a/u10/templates/hashes.html b/v0.11.0python_final/u10/templates/hashes.html similarity index 100% rename from u10/templates/hashes.html rename to v0.11.0python_final/u10/templates/hashes.html diff --git a/u10/templates/help/attestparametershelp.html b/v0.11.0python_final/u10/templates/help/attestparametershelp.html similarity index 100% rename from u10/templates/help/attestparametershelp.html rename to v0.11.0python_final/u10/templates/help/attestparametershelp.html diff --git a/u10/templates/home/404.html b/v0.11.0python_final/u10/templates/home/404.html similarity index 100% rename from u10/templates/home/404.html rename to v0.11.0python_final/u10/templates/home/404.html diff --git a/u10/templates/home/418.html b/v0.11.0python_final/u10/templates/home/418.html similarity index 100% rename from u10/templates/home/418.html rename to v0.11.0python_final/u10/templates/home/418.html diff --git a/u10/templates/home/451.html b/v0.11.0python_final/u10/templates/home/451.html similarity index 100% rename from u10/templates/home/451.html rename to v0.11.0python_final/u10/templates/home/451.html diff --git a/u10/templates/home/about.html b/v0.11.0python_final/u10/templates/home/about.html similarity index 100% rename from u10/templates/home/about.html rename to v0.11.0python_final/u10/templates/home/about.html diff --git a/u10/templates/home/help.html b/v0.11.0python_final/u10/templates/home/help.html similarity index 100% rename from u10/templates/home/help.html rename to v0.11.0python_final/u10/templates/home/help.html diff --git a/u10/templates/home/home.html b/v0.11.0python_final/u10/templates/home/home.html similarity index 100% rename from u10/templates/home/home.html rename to v0.11.0python_final/u10/templates/home/home.html diff --git a/u10/templates/informationpages/protocols.html b/v0.11.0python_final/u10/templates/informationpages/protocols.html similarity index 100% rename from u10/templates/informationpages/protocols.html rename to v0.11.0python_final/u10/templates/informationpages/protocols.html diff --git a/u10/templates/informationpages/qrcodes.html b/v0.11.0python_final/u10/templates/informationpages/qrcodes.html similarity index 100% rename from u10/templates/informationpages/qrcodes.html rename to v0.11.0python_final/u10/templates/informationpages/qrcodes.html diff --git a/u10/templates/informationpages/rules.html b/v0.11.0python_final/u10/templates/informationpages/rules.html similarity index 100% rename from u10/templates/informationpages/rules.html rename to v0.11.0python_final/u10/templates/informationpages/rules.html diff --git a/u10/templates/log.html b/v0.11.0python_final/u10/templates/log.html similarity index 100% rename from u10/templates/log.html rename to v0.11.0python_final/u10/templates/log.html diff --git a/u10/templates/newraw.html b/v0.11.0python_final/u10/templates/newraw.html similarity index 100% rename from u10/templates/newraw.html rename to v0.11.0python_final/u10/templates/newraw.html diff --git a/u10/templates/pcrschemas.html b/v0.11.0python_final/u10/templates/pcrschemas.html similarity index 100% rename from u10/templates/pcrschemas.html rename to v0.11.0python_final/u10/templates/pcrschemas.html diff --git a/u10/templates/ping.html b/v0.11.0python_final/u10/templates/ping.html similarity index 100% rename from u10/templates/ping.html rename to v0.11.0python_final/u10/templates/ping.html diff --git a/u10/templates/policies.html b/v0.11.0python_final/u10/templates/policies.html similarity index 100% rename from u10/templates/policies.html rename to v0.11.0python_final/u10/templates/policies.html diff --git a/u10/templates/policy.html b/v0.11.0python_final/u10/templates/policy.html similarity index 100% rename from u10/templates/policy.html rename to v0.11.0python_final/u10/templates/policy.html diff --git a/u10/templates/result.html b/v0.11.0python_final/u10/templates/result.html similarity index 100% rename from u10/templates/result.html rename to v0.11.0python_final/u10/templates/result.html diff --git a/u10/templates/results.html b/v0.11.0python_final/u10/templates/results.html similarity index 100% rename from u10/templates/results.html rename to v0.11.0python_final/u10/templates/results.html diff --git a/u10/templates/session.html b/v0.11.0python_final/u10/templates/session.html similarity index 100% rename from u10/templates/session.html rename to v0.11.0python_final/u10/templates/session.html diff --git a/u10/templates/sessions.html b/v0.11.0python_final/u10/templates/sessions.html similarity index 100% rename from u10/templates/sessions.html rename to v0.11.0python_final/u10/templates/sessions.html diff --git a/u10/u10.conf b/v0.11.0python_final/u10/u10.conf similarity index 100% rename from u10/u10.conf rename to v0.11.0python_final/u10/u10.conf diff --git a/u10/u10.py b/v0.11.0python_final/u10/u10.py similarity index 100% rename from u10/u10.py rename to v0.11.0python_final/u10/u10.py diff --git a/utilities/Database/README.md b/v0.11.0python_final/utilities/Database/README.md similarity index 100% rename from utilities/Database/README.md rename to v0.11.0python_final/utilities/Database/README.md diff --git a/utilities/Database/adbingest.py b/v0.11.0python_final/utilities/Database/adbingest.py similarity index 100% rename from utilities/Database/adbingest.py rename to v0.11.0python_final/utilities/Database/adbingest.py diff --git a/utilities/Database/clearDB.js b/v0.11.0python_final/utilities/Database/clearDB.js similarity index 100% rename from utilities/Database/clearDB.js rename to v0.11.0python_final/utilities/Database/clearDB.js diff --git a/utilities/Database/hashes.json b/v0.11.0python_final/utilities/Database/hashes.json similarity index 100% rename from utilities/Database/hashes.json rename to v0.11.0python_final/utilities/Database/hashes.json diff --git a/utilities/Database/pcrschemas.json b/v0.11.0python_final/utilities/Database/pcrschemas.json similarity index 100% rename from utilities/Database/pcrschemas.json rename to v0.11.0python_final/utilities/Database/pcrschemas.json diff --git a/utilities/Database/policies.json b/v0.11.0python_final/utilities/Database/policies.json similarity index 100% rename from utilities/Database/policies.json rename to v0.11.0python_final/utilities/Database/policies.json diff --git a/utilities/README.md b/v0.11.0python_final/utilities/README.md similarity index 100% rename from utilities/README.md rename to v0.11.0python_final/utilities/README.md diff --git a/utilities/TPMprovisioning/genakek.sh b/v0.11.0python_final/utilities/TPMprovisioning/genakek.sh similarity index 100% rename from utilities/TPMprovisioning/genakek.sh rename to v0.11.0python_final/utilities/TPMprovisioning/genakek.sh diff --git a/utilities/a10configurations/a10.conf b/v0.11.0python_final/utilities/a10configurations/a10.conf similarity index 100% rename from utilities/a10configurations/a10.conf rename to v0.11.0python_final/utilities/a10configurations/a10.conf diff --git a/utilities/dockercomposedeployment/a10.conf b/v0.11.0python_final/utilities/dockercomposedeployment/a10.conf similarity index 100% rename from utilities/dockercomposedeployment/a10.conf rename to v0.11.0python_final/utilities/dockercomposedeployment/a10.conf diff --git a/utilities/dockercomposedeployment/doc/README.md b/v0.11.0python_final/utilities/dockercomposedeployment/doc/README.md similarity index 100% rename from utilities/dockercomposedeployment/doc/README.md rename to v0.11.0python_final/utilities/dockercomposedeployment/doc/README.md diff --git a/utilities/dockercomposedeployment/doc/deployment.drawio b/v0.11.0python_final/utilities/dockercomposedeployment/doc/deployment.drawio similarity index 100% rename from utilities/dockercomposedeployment/doc/deployment.drawio rename to v0.11.0python_final/utilities/dockercomposedeployment/doc/deployment.drawio diff --git a/utilities/dockercomposedeployment/doc/deployment.png b/v0.11.0python_final/utilities/dockercomposedeployment/doc/deployment.png similarity index 100% rename from utilities/dockercomposedeployment/doc/deployment.png rename to v0.11.0python_final/utilities/dockercomposedeployment/doc/deployment.png diff --git a/utilities/dockercomposedeployment/docker-compose-traefik.yml b/v0.11.0python_final/utilities/dockercomposedeployment/docker-compose-traefik.yml similarity index 100% rename from utilities/dockercomposedeployment/docker-compose-traefik.yml rename to v0.11.0python_final/utilities/dockercomposedeployment/docker-compose-traefik.yml diff --git a/utilities/dockercomposedeployment/docker-compose.yml b/v0.11.0python_final/utilities/dockercomposedeployment/docker-compose.yml similarity index 100% rename from utilities/dockercomposedeployment/docker-compose.yml rename to v0.11.0python_final/utilities/dockercomposedeployment/docker-compose.yml diff --git a/utilities/dockercomposedeployment/mosquitto.conf b/v0.11.0python_final/utilities/dockercomposedeployment/mosquitto.conf similarity index 100% rename from utilities/dockercomposedeployment/mosquitto.conf rename to v0.11.0python_final/utilities/dockercomposedeployment/mosquitto.conf diff --git a/utilities/piFakeBoot/README.md b/v0.11.0python_final/utilities/piFakeBoot/README.md similarity index 100% rename from utilities/piFakeBoot/README.md rename to v0.11.0python_final/utilities/piFakeBoot/README.md diff --git a/utilities/piFakeBoot/install.eltt2 b/v0.11.0python_final/utilities/piFakeBoot/install.eltt2 similarity index 100% rename from utilities/piFakeBoot/install.eltt2 rename to v0.11.0python_final/utilities/piFakeBoot/install.eltt2 diff --git a/utilities/piFakeBoot/install.tpm2tools b/v0.11.0python_final/utilities/piFakeBoot/install.tpm2tools similarity index 100% rename from utilities/piFakeBoot/install.tpm2tools rename to v0.11.0python_final/utilities/piFakeBoot/install.tpm2tools diff --git a/utilities/piFakeBoot/measure.eltt2.service b/v0.11.0python_final/utilities/piFakeBoot/measure.eltt2.service similarity index 100% rename from utilities/piFakeBoot/measure.eltt2.service rename to v0.11.0python_final/utilities/piFakeBoot/measure.eltt2.service diff --git a/utilities/piFakeBoot/measure.start.eltt2 b/v0.11.0python_final/utilities/piFakeBoot/measure.start.eltt2 similarity index 100% rename from utilities/piFakeBoot/measure.start.eltt2 rename to v0.11.0python_final/utilities/piFakeBoot/measure.start.eltt2 diff --git a/utilities/piFakeBoot/measure.start.tpm2tools b/v0.11.0python_final/utilities/piFakeBoot/measure.start.tpm2tools similarity index 100% rename from utilities/piFakeBoot/measure.start.tpm2tools rename to v0.11.0python_final/utilities/piFakeBoot/measure.start.tpm2tools diff --git a/utilities/piFakeBoot/measure.tpm2tools.service b/v0.11.0python_final/utilities/piFakeBoot/measure.tpm2tools.service similarity index 100% rename from utilities/piFakeBoot/measure.tpm2tools.service rename to v0.11.0python_final/utilities/piFakeBoot/measure.tpm2tools.service diff --git a/utilities/piFakeBoot/measures1.d/1 b/v0.11.0python_final/utilities/piFakeBoot/measures1.d/1 similarity index 100% rename from utilities/piFakeBoot/measures1.d/1 rename to v0.11.0python_final/utilities/piFakeBoot/measures1.d/1 diff --git a/utilities/piFakeBoot/measures1.d/2 b/v0.11.0python_final/utilities/piFakeBoot/measures1.d/2 similarity index 100% rename from utilities/piFakeBoot/measures1.d/2 rename to v0.11.0python_final/utilities/piFakeBoot/measures1.d/2 diff --git a/utilities/piFakeBoot/measures1.d/3 b/v0.11.0python_final/utilities/piFakeBoot/measures1.d/3 similarity index 100% rename from utilities/piFakeBoot/measures1.d/3 rename to v0.11.0python_final/utilities/piFakeBoot/measures1.d/3 diff --git a/utilities/piFakeBoot/measures1.d/4 b/v0.11.0python_final/utilities/piFakeBoot/measures1.d/4 similarity index 100% rename from utilities/piFakeBoot/measures1.d/4 rename to v0.11.0python_final/utilities/piFakeBoot/measures1.d/4 diff --git a/utilities/piFakeBoot/measures1.d/5 b/v0.11.0python_final/utilities/piFakeBoot/measures1.d/5 similarity index 100% rename from utilities/piFakeBoot/measures1.d/5 rename to v0.11.0python_final/utilities/piFakeBoot/measures1.d/5 diff --git a/utilities/piFakeBoot/measures256.d/1 b/v0.11.0python_final/utilities/piFakeBoot/measures256.d/1 similarity index 100% rename from utilities/piFakeBoot/measures256.d/1 rename to v0.11.0python_final/utilities/piFakeBoot/measures256.d/1 diff --git a/utilities/piFakeBoot/measures256.d/2 b/v0.11.0python_final/utilities/piFakeBoot/measures256.d/2 similarity index 100% rename from utilities/piFakeBoot/measures256.d/2 rename to v0.11.0python_final/utilities/piFakeBoot/measures256.d/2 diff --git a/utilities/piFakeBoot/measures256.d/3 b/v0.11.0python_final/utilities/piFakeBoot/measures256.d/3 similarity index 100% rename from utilities/piFakeBoot/measures256.d/3 rename to v0.11.0python_final/utilities/piFakeBoot/measures256.d/3 diff --git a/utilities/piFakeBoot/measures256.d/4 b/v0.11.0python_final/utilities/piFakeBoot/measures256.d/4 similarity index 100% rename from utilities/piFakeBoot/measures256.d/4 rename to v0.11.0python_final/utilities/piFakeBoot/measures256.d/4 diff --git a/utilities/piFakeBoot/measures256.d/5 b/v0.11.0python_final/utilities/piFakeBoot/measures256.d/5 similarity index 100% rename from utilities/piFakeBoot/measures256.d/5 rename to v0.11.0python_final/utilities/piFakeBoot/measures256.d/5