custom.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. #!/usr/bin/env python3
  2. #
  3. # Copyright (c) 2022 Project CHIP Authors
  4. # All rights reserved.
  5. #
  6. # Licensed under the Apache License, Version 2.0 (the "License");
  7. # you may not use this file except in compliance with the License.
  8. # You may obtain a copy of the License at
  9. #
  10. # http://www.apache.org/licenses/LICENSE-2.0
  11. #
  12. # Unless required by applicable law or agreed to in writing, software
  13. # distributed under the License is distributed on an "AS IS" BASIS,
  14. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. # See the License for the specific language governing permissions and
  16. # limitations under the License.
  17. #
  18. '''This file should contain custom classes derived any class from default.py.
  19. Each class implemented here should describe an input parameter and should
  20. implement the InputArgument abstract interface, if its base class does not
  21. already offer an implementation or if there is a need of a custom behavior.
  22. Example of defining a new argument class:
  23. class FooArgument(IntArgument):
  24. def __init__(self, arg):
  25. super().__init__(arg)
  26. def key(self):
  27. return <unique key identifier>
  28. def length(self):
  29. return <actual length of data>
  30. def encode(self):
  31. return <data as encoded bytes>
  32. def custom_function(self):
  33. pass
  34. Then use this class in generate.py to create a FooArgument object from an
  35. option:
  36. parser.add_argument("--foo", required=True, type=FooArgument,
  37. help="[int | hex] Foo argument.")
  38. '''
  39. from cryptography.hazmat.backends import default_backend
  40. from cryptography.hazmat.primitives.serialization import load_der_private_key
  41. from default import Base64Argument, FileArgument, IntArgument, StrArgument
  42. class Verifier(Base64Argument):
  43. def __init__(self, arg):
  44. super().__init__(arg)
  45. def key(self):
  46. return 1
  47. class Salt(Base64Argument):
  48. def __init__(self, arg):
  49. super().__init__(arg)
  50. def key(self):
  51. return 2
  52. class IterationCount(IntArgument):
  53. def __init__(self, arg):
  54. super().__init__(arg)
  55. def key(self):
  56. return 3
  57. class DacPKey(FileArgument):
  58. def __init__(self, arg):
  59. super().__init__(arg)
  60. self.private_key = None
  61. def key(self):
  62. return 4
  63. def length(self):
  64. assert (self.private_key is not None)
  65. return len(self.private_key)
  66. def encode(self):
  67. assert (self.private_key is not None)
  68. return self.private_key
  69. def generate_private_key(self, password):
  70. keys = load_der_private_key(self.val, password, backend=default_backend())
  71. self.private_key = keys.private_numbers().private_value.to_bytes(
  72. 32, byteorder='big'
  73. )
  74. class DacCert(FileArgument):
  75. def __init__(self, arg):
  76. super().__init__(arg)
  77. def key(self):
  78. return 5
  79. class PaiCert(FileArgument):
  80. def __init__(self, arg):
  81. super().__init__(arg)
  82. def key(self):
  83. return 6
  84. class Discriminator(IntArgument):
  85. def __init__(self, arg):
  86. super().__init__(arg)
  87. def key(self):
  88. return 7
  89. class SetupPasscode(IntArgument):
  90. def __init__(self, arg):
  91. super().__init__(arg)
  92. def key(self):
  93. return 8
  94. class VendorId(IntArgument):
  95. def __init__(self, arg):
  96. super().__init__(arg)
  97. def key(self):
  98. return 9
  99. def length(self):
  100. return 2
  101. class ProductId(IntArgument):
  102. def __init__(self, arg):
  103. super().__init__(arg)
  104. def key(self):
  105. return 10
  106. def length(self):
  107. return 2
  108. class CertDeclaration(FileArgument):
  109. def __init__(self, arg):
  110. super().__init__(arg)
  111. def key(self):
  112. return 11
  113. class VendorName(StrArgument):
  114. def __init__(self, arg):
  115. super().__init__(arg)
  116. def key(self):
  117. return 12
  118. class ProductName(StrArgument):
  119. def __init__(self, arg):
  120. super().__init__(arg)
  121. def key(self):
  122. return 13
  123. class SerialNum(StrArgument):
  124. def __init__(self, arg):
  125. super().__init__(arg)
  126. def key(self):
  127. return 14
  128. class ManufacturingDate(StrArgument):
  129. def __init__(self, arg):
  130. super().__init__(arg)
  131. def key(self):
  132. return 15
  133. def max_length(self):
  134. return 16
  135. class HardwareVersion(IntArgument):
  136. def __init__(self, arg):
  137. super().__init__(arg)
  138. def key(self):
  139. return 16
  140. def length(self):
  141. return 2
  142. class HardwareVersionStr(StrArgument):
  143. def __init__(self, arg):
  144. super().__init__(arg)
  145. def key(self):
  146. return 17
  147. def max_length(self):
  148. return 64
  149. class UniqueId(StrArgument):
  150. def __init__(self, arg):
  151. super().__init__(arg)
  152. def key(self):
  153. return 18
  154. class PartNumber(StrArgument):
  155. def __init__(self, arg):
  156. super().__init__(arg)
  157. def key(self):
  158. return 19
  159. class ProductURL(StrArgument):
  160. def __init__(self, arg):
  161. super().__init__(arg)
  162. def key(self):
  163. return 20
  164. def max_length(self):
  165. return 256
  166. class ProductLabel(StrArgument):
  167. def __init__(self, arg):
  168. super().__init__(arg)
  169. def key(self):
  170. return 21
  171. def max_length(self):
  172. return 64