@super-protocol/sp-nvtrust-wrapper 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/nvtrust_wrapper.d.ts +20 -0
- package/dist/nvtrust_wrapper.js +216 -0
- package/dist/nvtrust_wrapper.js.map +1 -0
- package/dist/proto/nvtrust_wrapper_types.d.ts +254 -0
- package/dist/proto/nvtrust_wrapper_types.js +498 -0
- package/dist/proto/nvtrust_wrapper_types.js.map +1 -0
- package/package.json +56 -0
- package/py/__pycache__/nvml_helper.cpython-312.pyc +0 -0
- package/py/__pycache__/nvtrust_wrapper.cpython-312.pyc +0 -0
- package/py/nvml_helper.py +39 -0
- package/py/nvtrust_wrapper.py +100 -0
- package/py/proto/nvtrust_wrapper_types_pb2.py +39 -0
- package/py/proto/nvtrust_wrapper_types_pb2.pyi +65 -0
- package/py/requirements.txt +3 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
import proto.nvtrust_wrapper_types_pb2 as proto
|
|
4
|
+
from nv_attestation_sdk import attestation
|
|
5
|
+
from nvml_helper import NvmlHelper
|
|
6
|
+
|
|
7
|
+
def get_nvidia_topology():
|
|
8
|
+
nvmlHelper = NvmlHelper()
|
|
9
|
+
|
|
10
|
+
result = proto.GPUTopologyResult()
|
|
11
|
+
result.gpuCount = nvmlHelper.get_number_of_gpus()
|
|
12
|
+
result.nvswitchCount = nvmlHelper.get_number_of_switches()
|
|
13
|
+
|
|
14
|
+
return result
|
|
15
|
+
|
|
16
|
+
def create_attestation_client(deviceType: proto.NvidiaDeviceType):
|
|
17
|
+
client = attestation.Attestation()
|
|
18
|
+
client.set_name("superprotocol-node")
|
|
19
|
+
|
|
20
|
+
url = ""
|
|
21
|
+
device = None
|
|
22
|
+
if deviceType == proto.NvidiaDeviceType.GPU:
|
|
23
|
+
device = attestation.Devices.GPU
|
|
24
|
+
url = "https://nras.attestation.nvidia.com/v3/attest/gpu"
|
|
25
|
+
elif deviceType == proto.NvidiaDeviceType.SWITCH:
|
|
26
|
+
device = attestation.Devices.SWITCH
|
|
27
|
+
url = "https://nras.attestation.nvidia.com/v3/attest/switch"
|
|
28
|
+
else:
|
|
29
|
+
raise Exception("Unsupported device type: {}".format(device))
|
|
30
|
+
|
|
31
|
+
client.add_verifier(device, attestation.Environment.REMOTE, url, "")
|
|
32
|
+
return client
|
|
33
|
+
|
|
34
|
+
def get_nras_token(params: proto.GetNRASToken):
|
|
35
|
+
client = create_attestation_client(params.device)
|
|
36
|
+
client.set_nonce(params.nonce)
|
|
37
|
+
|
|
38
|
+
evidence_list=[
|
|
39
|
+
{
|
|
40
|
+
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURlekNDQXdLZ0F3SUJBZ0lVUndiRHFzZ1NYMmlXMUhETEhSSkxaUEplVG1Bd0NnWUlLb1pJemowRUF3TXcKWkRFYk1Ca0dBMVVFQlJNU05ERXpRekV3UkRBME56SXlPRVUzT1RnMU1Rc3dDUVlEVlFRR0V3SlZVekViTUJrRwpBMVVFQ2d3U1RsWkpSRWxCSUVOdmNuQnZjbUYwYVc5dU1Sc3dHUVlEVlFRRERCSkhTREV3TUNCQk1ERWdSMU5RCklFSlNUMDB3SUJjTk1qQXhNREUzTURBd01EQXdXaGdQT1RrNU9URXlNekV5TXpVNU5UbGFNSHd4TVRBdkJnTlYKQkFVVEtEUTNNRFpETTBGQlF6Z3hNalZHTmpnNU5rUTBOekJEUWpGRU1USTBRalkwUmpJMVJUUkZOakF4Q3pBSgpCZ05WQkFZVEFsVlRNUnN3R1FZRFZRUUtEQkpPVmtsRVNVRWdRMjl5Y0c5eVlYUnBiMjR4SFRBYkJnTlZCQU1NCkZFZElNVEF3SUVFd01TQkhVMUFnUmsxRElFeEdNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRVI1ZnUKK1hMSCtyZ0pEUGtiZTI1eXJlWGUzTVVtUVBhYWNLV1N1Mm1BTjJXc0xOSVR0bnhiK0xaMWpkYVhoNFpBS2J5bQpzenN0NU5TajJtNWg3d2VQRXJzbWR5bmM2S2dlWlNPckFxVm9wTWowMjBMSDhVQS9Yc25nYk9wNWZObEJvNElCCldUQ0NBVlV3RGdZRFZSMFBBUUgvQkFRREFnZUFNQjBHQTFVZERnUVdCQlNIQnNPcXlCSmZhSmJVY01zZEVrdGsKOGw1T1lEQWZCZ05WSFNNRUdEQVdnQlQrQzlFQ0VmWjhia0hyRm1rVEtGZElSc25WempBNEJnTlZIUkVFTVRBdgpvQzBHQ2lzR0FRUUJneHlDRWdHZ0h3d2RUbFpKUkVsQk9rZElNVEF3T2pRNFFqQXlSRVU1T1VaRU0wTTNOVFV3CmdjZ0dCbWVCQlFVRUFRU0J2VENCdWdJQkFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkkrM0o0emMKbWZoZFVrVUlzVDhsdEJQNHc4a3VWamJzUHcxT0xwV3NENnZOSHE1Q1FleTVTUFFVYVU4M3lWcEd1MmNWcTRpbwpld2M2NGNScjYzZjB2ektvTC9BTWNWazRnK0QycnVUVWFOY3NFelh4NW9OczVzWFE2NUtZMGtFZTdEQTlCZ2xnCmhrZ0JaUU1FQWdJRU1BYUd2OFR4SjdyUjVIaHRpZVA1WkNlcFdRYVM0YWdRR0VnMDBtbnYrZml3QU9LVjJFUHQKblBlSDBRakFGSHJwTHpBS0JnZ3Foa2pPUFFRREF3Tm5BREJrQWpBK3JaTGNGYmlMWHBEVDI2djh5Ynp3aFhETQp3Q0NGS29iS3RhcndMQjAwNUFySjBaUjJyTk1rUW5SYzJKKzF3ZzBDTUhWZU1EczJ0NUVYRDRGQlkvUTNNM25iCkRlT2g3NzFUVk5aRGo3bVRHUHNKRUFCTCtIUzI4cCsweVlDYUJQMkFxZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVVENDQWRhZ0F3SUJBZ0lKUVR3UTBFY2lqbm1GTUFvR0NDcUdTTTQ5QkFNRE1GTXhKekFsQmdOVkJBTU0KSGs1V1NVUkpRU0JIU0RFd01DQlFjbTkyYVhOcGIyNWxjaUJKUTBFZ01URWJNQmtHQTFVRUNnd1NUbFpKUkVsQgpJRU52Y25CdmNtRjBhVzl1TVFzd0NRWURWUVFHRXdKVlV6QWdGdzB5TURFd01UY3dNREF3TURCYUdBODVPVGs1Ck1USXpNVEl6TlRrMU9Wb3daREViTUJrR0ExVUVCUk1TTkRFelF6RXdSREEwTnpJeU9FVTNPVGcxTVFzd0NRWUQKVlFRR0V3SlZVekViTUJrR0ExVUVDZ3dTVGxaSlJFbEJJRU52Y25CdmNtRjBhVzl1TVJzd0dRWURWUVFEREJKSApTREV3TUNCQk1ERWdSMU5RSUVKU1QwMHdkakFRQmdjcWhrak9QUUlCQmdVcmdRUUFJZ05pQUFTUHR5ZU0zSm40ClhWSkZDTEUvSmJRVCtNUEpMbFkyN0Q4TlRpNlZyQStyelI2dVFrSHN1VWowRkdsUE44bGFScnRuRmF1SXFIc0gKT3VIRWErdDM5TDh5cUMvd0RIRlpPSVBnOXE3azFHalhMQk0xOGVhRGJPYkYwT3VTbU5KQkh1eWpZekJoTUE4RwpBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0lFTUIwR0ExVWREZ1FXQkJUK0M5RUNFZlo4CmJrSHJGbWtUS0ZkSVJzblZ6akFmQmdOVkhTTUVHREFXZ0JRcGFNc1dMTkIzbFhLaWVSQUQ1cDY2RE13S2xEQUsKQmdncWhrak9QUVFEQXdOcEFEQm1BakVBd1ZnNmJsTGZwbUhuWFFDMG9YNHQvVXVPbGRkZUZuQlhHRnp6N05pcwpWR2xZTkk0eHg2Y3Nxbit1bG9TMkZmQkZBakVBOFlVNldCRnk5N3BjUUIwaHFmcG9MY3l6dGM5UmE1bmpDakV3Ck9odWRVcFNtTkptMkc2eUdhak42YUxGRmdXVXgKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ3FqQ0NBaStnQXdJQkFnSVFhdjV4aFBraU1zamZleVFpWVhkdVZqQUtCZ2dxaGtqT1BRUURBekE5TVI0dwpIQVlEVlFRRERCVk9Wa2xFU1VFZ1IwZ3hNREFnU1dSbGJuUnBkSGt4R3pBWkJnTlZCQW9NRWs1V1NVUkpRU0JECmIzSndiM0poZEdsdmJqQWdGdzB5TWpBek1ERXdNREF3TURCYUdBODVPVGs1TVRJek1USXpOVGsxT1Zvd1V6RW4KTUNVR0ExVUVBd3dlVGxaSlJFbEJJRWRJTVRBd0lGQnliM1pwYzJsdmJtVnlJRWxEUVNBeE1Sc3dHUVlEVlFRSwpEQkpPVmtsRVNVRWdRMjl5Y0c5eVlYUnBiMjR4Q3pBSkJnTlZCQVlUQWxWVE1IWXdFQVlIS29aSXpqMENBUVlGCks0RUVBQ0lEWWdBRXpVZFdxam4xT2xYaExmRk9LQUZUZ2hxRytRM3pGNHhnU0JiWnNVRXlXWUNDM3JLakU5Tm4Kbzg4WnBCUXg4NU9vMFBrcVAyZHdvTVZOVFFNdjVjdnk5akxhVHZTVFhad04ySFFIRTl1N3g3QklZcldpMHNHMwo1cTFJSk5TT0dPNUxvNEhiTUlIWU1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0VHCk1Ed0dBMVVkSHdRMU1ETXdNYUF2b0MyR0syaDBkSEE2THk5amNtd3VibVJwY3k1dWRtbGthV0V1WTI5dEwyTnkKYkM5c01pMW5hREV3TUM1amNtd3dOd1lJS3dZQkJRVUhBUUVFS3pBcE1DY0dDQ3NHQVFVRkJ6QUJoaHRvZEhSdwpPaTh2YjJOemNDNXVaR2x6TG01MmFXUnBZUzVqYjIwd0hRWURWUjBPQkJZRUZDbG95eFlzMEhlVmNxSjVFQVBtCm5yb016QXFVTUI4R0ExVWRJd1FZTUJhQUZBZENvT3NEbklCZ2U2RkJZWmxOcmlYM3dwc2VNQW9HQ0NxR1NNNDkKQkFNREEya0FNR1lDTVFESzBCQ3I0OUROSjQ4WWg1d3UzODhiWmlmREZ4QXNpVVM0VTFmR21wSlpGaENiT0RINgptUndjTXhwNkVPYXladVlDTVFEWUtUeU5jMkZ4V0Z1aEh0ZENFM2xzNFM3U0luZWhkRXJUWk51aEZ5bWM0WU9NCjZWbExXVFkvQ00rcmVzampxeFE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNpakNDQWhDZ0F3SUJBZ0lRVENWZTNqdlFBYjgvU2p0Z1g4cUppakFLQmdncWhrak9QUVFEQXpBMU1TSXcKSUFZRFZRUUREQmxPVmtsRVNVRWdSR1YyYVdObElFbGtaVzUwYVhSNUlFTkJNUTh3RFFZRFZRUUtEQVpPVmtsRQpTVUV3SUJjTk1qSXdNVEV5TURBd01EQXdXaGdQT1RrNU9URXlNekV5TXpVNU5UbGFNRDB4SGpBY0JnTlZCQU1NCkZVNVdTVVJKUVNCSFNERXdNQ0JKWkdWdWRHbDBlVEViTUJrR0ExVUVDZ3dTVGxaSlJFbEJJRU52Y25CdmNtRjAKYVc5dU1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFK3BnK3REVXVJTGxaSUxrNXdnMjJZRUo5T2g2Ywp5UGNzdjNJdmdSV2NWNExlWksxcFRDb1FESXBsWjBFNHFzTEczRzA0cHhzYk1oeGJxa2l6OXBxbFRWMnJ0dVZnClNtSXFuU1lrVTFqV1hzUFM5b1ZMQ0dFOFZSTGwxSnZxeU94VW80SGFNSUhYTUE4R0ExVWRFd0VCL3dRRk1BTUIKQWY4d0RnWURWUjBQQVFIL0JBUURBZ0VHTURzR0ExVWRId1EwTURJd01LQXVvQ3lHS21oMGRIQTZMeTlqY213dQpibVJwY3k1dWRtbGthV0V1WTI5dEwyTnliQzlzTVMxeWIyOTBMbU55YkRBM0JnZ3JCZ0VGQlFjQkFRUXJNQ2t3Ckp3WUlLd1lCQlFVSE1BR0dHMmgwZEhBNkx5OXZZM053TG01a2FYTXViblpwWkdsaExtTnZiVEFkQmdOVkhRNEUKRmdRVUIwS2c2d09jZ0dCN29VRmhtVTJ1SmZmQ214NHdId1lEVlIwakJCZ3dGb0FVVjRYL2cvSmp6R1Y5YUxjNgpXL1NOU3N2N1NWOHdDZ1lJS29aSXpqMEVBd01EYUFBd1pRSXhBUElRaG52ZUZ4WUlyUHpCcVZpVDJJMzRTZlM0CkpHV0Zuay8xVWNkbWdKbXArN2w2ckgvQzRxeHdudFlTZ2VZcmxRSXdkalF1b2ZIbmhkMVJMMDlPQk8zNDU2NkoKQzliWUFvc1QvODZjQ29qaUdqaExuYWw5aEpPSDBuUy9scmJhb2M1YQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDQ3pDQ0FaQ2dBd0lCQWdJUUxUWndzY29RQkJIQi9zRG9LZ1piVkRBS0JnZ3Foa2pPUFFRREF6QTFNU0l3CklBWURWUVFEREJsT1ZrbEVTVUVnUkdWMmFXTmxJRWxrWlc1MGFYUjVJRU5CTVE4d0RRWURWUVFLREFaT1ZrbEUKU1VFd0lCY05NakV4TVRBMU1EQXdNREF3V2hnUE9UazVPVEV5TXpFeU16VTVOVGxhTURVeElqQWdCZ05WQkFNTQpHVTVXU1VSSlFTQkVaWFpwWTJVZ1NXUmxiblJwZEhrZ1EwRXhEekFOQmdOVkJBb01CazVXU1VSSlFUQjJNQkFHCkJ5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJBNU1GS003K0tWaVpsamJRU2xnZmt5L1JSbkVRU2NXOU5EWkY4U1gKZ0FXOTZyNnUvVmU4WmdndGNZcFBpMkJTNFZGdTZLZkVJcmhONkZjSEc3V1AwNVcrb00raHhqN255QTFyMWprQgoyUnk3MFlmVGhYM0JhMXpPcnlPUCtNSjl2YU5qTUdFd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCCkFmOEVCQU1DQVFZd0hRWURWUjBPQkJZRUZGZUYvNFB5WTh4bGZXaTNPbHYwalVyTCswbGZNQjhHQTFVZEl3UVkKTUJhQUZGZUYvNFB5WTh4bGZXaTNPbHYwalVyTCswbGZNQW9HQ0NxR1NNNDlCQU1EQTJrQU1HWUNNUUNQZUZNMwpUQVNzS1FWYVQrOFMwc085dTk3UFZHQ3BFOWQvSTQySVQ3azNVVU9MU1IvcXZKeW5WT0QxdlFLVlhmMENNUUMrCkVZNTVXWW9EQnZzMndQQUgxR3c0TGJjd1VOOFFDZmY4YkZtVjRaeGpDUnI0V1hUTEZIQktqYmZuZUdTQld3QT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
|
|
41
|
+
"evidence": "EeAB/zu4bS3yc22sVXZ3LkvvbCWjiiwf09G9o3zT55gKNEddABFgAABAwA0AAQEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBMwABMAC1WP2smvU7kf872wb/WJhZ1vvBBQ2HXIgyk0fyT/ez0RrFNoi6VtsDz4dRkTEH4NsDATMAATAAspgBekI60MlnL+AzBTaVD7o6ZWnvhkWvX52zSkbbBSX9h66BMfNipYO5TCFdDsuYBAEzAAEwAHO781giVJ4ouo+yZx+3tY9GQkoAaSBbPs8dD6dire+QtTjMnWkutcBQFH8vHoIUqwUBMwABMABWi4kpGjTOzgOxKqo1LZr+JzYQMHUluEQ+kPqnjYLs+px4J9j3kVw1svq5cuEIZoYGATMAATAAyeT+Zo6dwmmkZXFGteKKIjR83hiksOedgUZTLyfrw4bzBEAOpdS/QVm1ppFt1FZOBwEzAAEwAGhQsKgufnfA9R4OZzIWOGYAM5DE6yhtjfsmpy9xGpyLzfQCof1OXXC5dwgQenhe/AgBMwABMABKXks9UB/jH5G9i28pIbWEN3BKUE2+26lxRA6EDJOMgFYSaJrjrASxAJUVoXkGPUkJATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgEzAAEwAAWbMucSoVP0kNv7eXap4nXXieKL1IA8NX3vK2EjMnxDBSa/rswgD0ltThSfxereAwsBMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMATMAATAAsdMC35LLzD2q48GqXL2LlCvsQp9TtlminiE/c+u98qkBuZPVqUfP1ITFmwJreJoeDQEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEBMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgEzAAEwAGhFTUu1VFp05HjiiEaaZUi7TUqoVWpRL53dQbAzemArPwUKRpV4E5xs6g4PfJhhyBcBMwABMACfJZq2osHNk4tiIZGl7e7mQNQNsKvAihbKdQzmPxOe9dGAXw94iPYX3zm21YmFD1EYATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoBMwABMAC3GJSMA1CS69DH1vBpFB5r0M1A2N3UNqoNGnBa/t/mfBKJHSOebd8w6gl3XRBWrBobATMAATAAbbx/jiOsb2nEvzy0xhVm15V/zi8PFqSZrB9yS6ywk17vpb4W9Ui6UUFEn0NVXyQMHAEzAAEwACGRoG2frQMMuKcHOR8uUYONjKHhcQkyWxVfd03csr9wTKAjunEaKCyToa/NWQziCx0BMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeATMAATAAHQQP3DyN49ivvOu3m/Op7Amid2Ubes4WYn9iAckEFNmRe1envWdIKxkpyewL0aFdHwEzAAEwABvUXIo0wzrGoxYFDLB1KqZIrExs0mrxZc7EFlV0aNIfemG2xcfE6m0TG+knBlk5OSABMwABMADXcDY5h/WBrw2XSEsGmb0HSebFTiM/khf8kwStOGDQlqerlvHzNV7tOSYgxDF1+iEhATMAATAAn5dugvow/Mb4K84slCrUcHw99rduYpXOTJXPm7YqCDklcen7eH8Zsxvw8/BLqIemIgEzAAEwABmLgdnAzv4LM61l3j+tI4pUYdjuMkh79w/BkmBBQIyxFGJLjKaw1fyXAotY2c23jSMBMwABMAAHu8UE0zJ8t21MTzs/Ha+HeeQMwx1ggmyxHcxdCdxZqDv2k/D7mx8LXljtTNw6WA8kATMAATAAJhFIM3zPCO1TUVhKlVV7JFMmy8XvURylsivBYrmTJSn8EY8P5pOd0hRUXJOIFYeBJQEzAAEwABBXD2QuJ0z8K58clV+rCqVrYZPVxeonGnTrl2QzSGVpWSFFbcHKOD1+355ndgk3yiYBMwABMAD8zW76diZ/W0P8SnZHzoQ6ORLwlEqbzJB0VkCMNorV6FvsRRLZ2a7eurMcO4CVBicnATMAATAAx+oTXco4mRh4lFSGG7WTCV3ET4rTkDVmXaqB+gLPb706GCJ7YiTc7XAoi5/TFhzAKAEzAAEwALQj4WGek/Ljk2HUcima6SXbzZysINtRe9obRNknLz4pW2bOPbSOwmN5anWP9y40fykBMwABMADS+e/pJf78DOPvmbTU2kq+g7CwnHnqCZlMOT4O50ciHKmLQjGuDYSBGloTk2vaYAoqATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwBMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8BMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIBMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUBMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANwEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgBMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5ATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsBMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4BMwABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ATMAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEzAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIoYH1Tp02+DeSaJZjKmyaZvhRgw8TGsvrNT0VPOVJMpwEGAAgAAHQAlhEAAAAOAAQACAUAAA8ACQA4ODYAAAAAAAAQAAUAMAAAAAARAAUAMTAxMAASAAUAMDIxMAATAAIAAAADAAsANTUwLjE0NC4wMwAEAAgAgAEAAAAAAAAMAAABAAAAAAEAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAQAAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ABAAAwAEACwABAFUUADAABoa/xPEnutHkeG2J4/lkJ6lZBpLhqBAYSDTSae/5+LAA4pXYQ+2c94fRCMAUeukvFQABAFXePzlMwkm4QIeQYYNrg1whwEp+cBRqZkA2T4SrKBNIjvcNQpbmMKLPPQGJTpklhAurhefDIPG8W6aj+dDCJbvrKy5Lg+wnl5EJ3GZ1Y3jIh1KqTV6V/47e3L40CbPbgZY="
|
|
42
|
+
}]
|
|
43
|
+
evidence_list = client.get_evidence({ 'ppcie_mode': params.ppcieMode })
|
|
44
|
+
|
|
45
|
+
attest = client.attest(evidence_list)
|
|
46
|
+
if attest == False:
|
|
47
|
+
raise Exception("Attest return false")
|
|
48
|
+
|
|
49
|
+
result = proto.NvidiaToken()
|
|
50
|
+
|
|
51
|
+
result.jwt = client.get_token()
|
|
52
|
+
return result
|
|
53
|
+
|
|
54
|
+
def nras_validate_token(params: proto.ValidateToken):
|
|
55
|
+
client = create_attestation_client(params.device)
|
|
56
|
+
attestation_result = client.validate_token(params.policy, params.token.jwt)
|
|
57
|
+
if attestation_result == False:
|
|
58
|
+
raise Exception("Token verification failed")
|
|
59
|
+
|
|
60
|
+
result = proto.VerificationResult()
|
|
61
|
+
result.success = True
|
|
62
|
+
return result
|
|
63
|
+
|
|
64
|
+
def handle_request(serialized_data):
|
|
65
|
+
request = proto.MethodCallRequest()
|
|
66
|
+
request.ParseFromString(serialized_data)
|
|
67
|
+
|
|
68
|
+
result = None
|
|
69
|
+
if request.HasField("topology"):
|
|
70
|
+
result = get_nvidia_topology()
|
|
71
|
+
elif request.HasField("nrasToken"):
|
|
72
|
+
result = get_nras_token(request.nrasToken)
|
|
73
|
+
elif request.HasField("validateToken"):
|
|
74
|
+
result = nras_validate_token(request.validateToken)
|
|
75
|
+
|
|
76
|
+
else:
|
|
77
|
+
raise Exception("Unknown method in request")
|
|
78
|
+
|
|
79
|
+
return result.SerializeToString()
|
|
80
|
+
|
|
81
|
+
if __name__ == "__main__":
|
|
82
|
+
print("main")
|
|
83
|
+
_, tmpDir = sys.argv
|
|
84
|
+
|
|
85
|
+
exitcode = 0
|
|
86
|
+
try:
|
|
87
|
+
with open(os.path.join(tmpDir, "request.bin"), "rb") as f:
|
|
88
|
+
serialized_data = f.read()
|
|
89
|
+
serialized_response = handle_request(serialized_data)
|
|
90
|
+
|
|
91
|
+
with open(os.path.join(tmpDir, "response.bin"), "wb") as f:
|
|
92
|
+
f.write(serialized_response)
|
|
93
|
+
except Exception as e:
|
|
94
|
+
print(e)
|
|
95
|
+
with open(os.path.join(tmpDir, "error.txt"), "w") as f:
|
|
96
|
+
f.write(str(e))
|
|
97
|
+
exitcode = 1
|
|
98
|
+
exit(exitcode)
|
|
99
|
+
|
|
100
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: nvtrust_wrapper_types.proto
|
|
4
|
+
"""Generated protocol buffer code."""
|
|
5
|
+
from google.protobuf.internal import builder as _builder
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
# @@protoc_insertion_point(imports)
|
|
10
|
+
|
|
11
|
+
_sym_db = _symbol_database.Default()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bnvtrust_wrapper_types.proto\x12\x15nvtrust_wrapper_types\"\x10\n\x0eGetGPUTopology\"<\n\x11GPUTopologyResult\x12\x10\n\x08gpuCount\x18\x01 \x01(\r\x12\x15\n\rnvswitchCount\x18\x02 \x01(\r\"i\n\x0cGetNRASToken\x12\x37\n\x06\x64\x65vice\x18\x01 \x01(\x0e\x32\'.nvtrust_wrapper_types.NvidiaDeviceType\x12\r\n\x05nonce\x18\x02 \x01(\t\x12\x11\n\tppcieMode\x18\x03 \x01(\x08\"\x1a\n\x0bNvidiaToken\x12\x0b\n\x03jwt\x18\x01 \x01(\t\"\x8b\x01\n\rValidateToken\x12\x31\n\x05token\x18\x01 \x01(\x0b\x32\".nvtrust_wrapper_types.NvidiaToken\x12\x0e\n\x06policy\x18\x02 \x01(\t\x12\x37\n\x06\x64\x65vice\x18\x03 \x01(\x0e\x32\'.nvtrust_wrapper_types.NvidiaDeviceType\"%\n\x12VerificationResult\x12\x0f\n\x07success\x18\x01 \x01(\x08\"\xd1\x01\n\x11MethodCallRequest\x12\x39\n\x08topology\x18\x01 \x01(\x0b\x32%.nvtrust_wrapper_types.GetGPUTopologyH\x00\x12\x38\n\tnrasToken\x18\x02 \x01(\x0b\x32#.nvtrust_wrapper_types.GetNRASTokenH\x00\x12=\n\rvalidateToken\x18\x03 \x01(\x0b\x32$.nvtrust_wrapper_types.ValidateTokenH\x00\x42\x08\n\x06method*\'\n\x10NvidiaDeviceType\x12\x07\n\x03GPU\x10\x00\x12\n\n\x06SWITCH\x10\x01\x62\x06proto3')
|
|
17
|
+
|
|
18
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
|
19
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'nvtrust_wrapper_types_pb2', globals())
|
|
20
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
21
|
+
|
|
22
|
+
DESCRIPTOR._options = None
|
|
23
|
+
_NVIDIADEVICETYPE._serialized_start=662
|
|
24
|
+
_NVIDIADEVICETYPE._serialized_end=701
|
|
25
|
+
_GETGPUTOPOLOGY._serialized_start=54
|
|
26
|
+
_GETGPUTOPOLOGY._serialized_end=70
|
|
27
|
+
_GPUTOPOLOGYRESULT._serialized_start=72
|
|
28
|
+
_GPUTOPOLOGYRESULT._serialized_end=132
|
|
29
|
+
_GETNRASTOKEN._serialized_start=134
|
|
30
|
+
_GETNRASTOKEN._serialized_end=239
|
|
31
|
+
_NVIDIATOKEN._serialized_start=241
|
|
32
|
+
_NVIDIATOKEN._serialized_end=267
|
|
33
|
+
_VALIDATETOKEN._serialized_start=270
|
|
34
|
+
_VALIDATETOKEN._serialized_end=409
|
|
35
|
+
_VERIFICATIONRESULT._serialized_start=411
|
|
36
|
+
_VERIFICATIONRESULT._serialized_end=448
|
|
37
|
+
_METHODCALLREQUEST._serialized_start=451
|
|
38
|
+
_METHODCALLREQUEST._serialized_end=660
|
|
39
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
|
2
|
+
from google.protobuf import descriptor as _descriptor
|
|
3
|
+
from google.protobuf import message as _message
|
|
4
|
+
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
|
5
|
+
|
|
6
|
+
DESCRIPTOR: _descriptor.FileDescriptor
|
|
7
|
+
GPU: NvidiaDeviceType
|
|
8
|
+
SWITCH: NvidiaDeviceType
|
|
9
|
+
|
|
10
|
+
class GPUTopologyResult(_message.Message):
|
|
11
|
+
__slots__ = ["gpuCount", "nvswitchCount"]
|
|
12
|
+
GPUCOUNT_FIELD_NUMBER: _ClassVar[int]
|
|
13
|
+
NVSWITCHCOUNT_FIELD_NUMBER: _ClassVar[int]
|
|
14
|
+
gpuCount: int
|
|
15
|
+
nvswitchCount: int
|
|
16
|
+
def __init__(self, gpuCount: _Optional[int] = ..., nvswitchCount: _Optional[int] = ...) -> None: ...
|
|
17
|
+
|
|
18
|
+
class GetGPUTopology(_message.Message):
|
|
19
|
+
__slots__ = []
|
|
20
|
+
def __init__(self) -> None: ...
|
|
21
|
+
|
|
22
|
+
class GetNRASToken(_message.Message):
|
|
23
|
+
__slots__ = ["device", "nonce", "ppcieMode"]
|
|
24
|
+
DEVICE_FIELD_NUMBER: _ClassVar[int]
|
|
25
|
+
NONCE_FIELD_NUMBER: _ClassVar[int]
|
|
26
|
+
PPCIEMODE_FIELD_NUMBER: _ClassVar[int]
|
|
27
|
+
device: NvidiaDeviceType
|
|
28
|
+
nonce: str
|
|
29
|
+
ppcieMode: bool
|
|
30
|
+
def __init__(self, device: _Optional[_Union[NvidiaDeviceType, str]] = ..., nonce: _Optional[str] = ..., ppcieMode: bool = ...) -> None: ...
|
|
31
|
+
|
|
32
|
+
class MethodCallRequest(_message.Message):
|
|
33
|
+
__slots__ = ["nrasToken", "topology", "validateToken"]
|
|
34
|
+
NRASTOKEN_FIELD_NUMBER: _ClassVar[int]
|
|
35
|
+
TOPOLOGY_FIELD_NUMBER: _ClassVar[int]
|
|
36
|
+
VALIDATETOKEN_FIELD_NUMBER: _ClassVar[int]
|
|
37
|
+
nrasToken: GetNRASToken
|
|
38
|
+
topology: GetGPUTopology
|
|
39
|
+
validateToken: ValidateToken
|
|
40
|
+
def __init__(self, topology: _Optional[_Union[GetGPUTopology, _Mapping]] = ..., nrasToken: _Optional[_Union[GetNRASToken, _Mapping]] = ..., validateToken: _Optional[_Union[ValidateToken, _Mapping]] = ...) -> None: ...
|
|
41
|
+
|
|
42
|
+
class NvidiaToken(_message.Message):
|
|
43
|
+
__slots__ = ["jwt"]
|
|
44
|
+
JWT_FIELD_NUMBER: _ClassVar[int]
|
|
45
|
+
jwt: str
|
|
46
|
+
def __init__(self, jwt: _Optional[str] = ...) -> None: ...
|
|
47
|
+
|
|
48
|
+
class ValidateToken(_message.Message):
|
|
49
|
+
__slots__ = ["device", "policy", "token"]
|
|
50
|
+
DEVICE_FIELD_NUMBER: _ClassVar[int]
|
|
51
|
+
POLICY_FIELD_NUMBER: _ClassVar[int]
|
|
52
|
+
TOKEN_FIELD_NUMBER: _ClassVar[int]
|
|
53
|
+
device: NvidiaDeviceType
|
|
54
|
+
policy: str
|
|
55
|
+
token: NvidiaToken
|
|
56
|
+
def __init__(self, token: _Optional[_Union[NvidiaToken, _Mapping]] = ..., policy: _Optional[str] = ..., device: _Optional[_Union[NvidiaDeviceType, str]] = ...) -> None: ...
|
|
57
|
+
|
|
58
|
+
class VerificationResult(_message.Message):
|
|
59
|
+
__slots__ = ["success"]
|
|
60
|
+
SUCCESS_FIELD_NUMBER: _ClassVar[int]
|
|
61
|
+
success: bool
|
|
62
|
+
def __init__(self, success: bool = ...) -> None: ...
|
|
63
|
+
|
|
64
|
+
class NvidiaDeviceType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
65
|
+
__slots__ = []
|