@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.
@@ -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": "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"
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__ = []
@@ -0,0 +1,3 @@
1
+ nv-attestation-sdk==2.3.0
2
+ protobuf
3
+ pynvml