Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

396 linhas
10 KiB

  1. # This file is dual licensed under the terms of the Apache License, Version
  2. # 2.0, and the BSD License. See the LICENSE file in the root of this repository
  3. # for complete details.
  4. from __future__ import absolute_import, division, print_function
  5. import abc
  6. import six
  7. @six.add_metaclass(abc.ABCMeta)
  8. class CipherBackend(object):
  9. @abc.abstractmethod
  10. def cipher_supported(self, cipher, mode):
  11. """
  12. Return True if the given cipher and mode are supported.
  13. """
  14. @abc.abstractmethod
  15. def create_symmetric_encryption_ctx(self, cipher, mode):
  16. """
  17. Get a CipherContext that can be used for encryption.
  18. """
  19. @abc.abstractmethod
  20. def create_symmetric_decryption_ctx(self, cipher, mode):
  21. """
  22. Get a CipherContext that can be used for decryption.
  23. """
  24. @six.add_metaclass(abc.ABCMeta)
  25. class HashBackend(object):
  26. @abc.abstractmethod
  27. def hash_supported(self, algorithm):
  28. """
  29. Return True if the hash algorithm is supported by this backend.
  30. """
  31. @abc.abstractmethod
  32. def create_hash_ctx(self, algorithm):
  33. """
  34. Create a HashContext for calculating a message digest.
  35. """
  36. @six.add_metaclass(abc.ABCMeta)
  37. class HMACBackend(object):
  38. @abc.abstractmethod
  39. def hmac_supported(self, algorithm):
  40. """
  41. Return True if the hash algorithm is supported for HMAC by this
  42. backend.
  43. """
  44. @abc.abstractmethod
  45. def create_hmac_ctx(self, key, algorithm):
  46. """
  47. Create a context for calculating a message authentication code.
  48. """
  49. @six.add_metaclass(abc.ABCMeta)
  50. class CMACBackend(object):
  51. @abc.abstractmethod
  52. def cmac_algorithm_supported(self, algorithm):
  53. """
  54. Returns True if the block cipher is supported for CMAC by this backend
  55. """
  56. @abc.abstractmethod
  57. def create_cmac_ctx(self, algorithm):
  58. """
  59. Create a context for calculating a message authentication code.
  60. """
  61. @six.add_metaclass(abc.ABCMeta)
  62. class PBKDF2HMACBackend(object):
  63. @abc.abstractmethod
  64. def pbkdf2_hmac_supported(self, algorithm):
  65. """
  66. Return True if the hash algorithm is supported for PBKDF2 by this
  67. backend.
  68. """
  69. @abc.abstractmethod
  70. def derive_pbkdf2_hmac(self, algorithm, length, salt, iterations,
  71. key_material):
  72. """
  73. Return length bytes derived from provided PBKDF2 parameters.
  74. """
  75. @six.add_metaclass(abc.ABCMeta)
  76. class RSABackend(object):
  77. @abc.abstractmethod
  78. def generate_rsa_private_key(self, public_exponent, key_size):
  79. """
  80. Generate an RSAPrivateKey instance with public_exponent and a modulus
  81. of key_size bits.
  82. """
  83. @abc.abstractmethod
  84. def rsa_padding_supported(self, padding):
  85. """
  86. Returns True if the backend supports the given padding options.
  87. """
  88. @abc.abstractmethod
  89. def generate_rsa_parameters_supported(self, public_exponent, key_size):
  90. """
  91. Returns True if the backend supports the given parameters for key
  92. generation.
  93. """
  94. @abc.abstractmethod
  95. def load_rsa_private_numbers(self, numbers):
  96. """
  97. Returns an RSAPrivateKey provider.
  98. """
  99. @abc.abstractmethod
  100. def load_rsa_public_numbers(self, numbers):
  101. """
  102. Returns an RSAPublicKey provider.
  103. """
  104. @six.add_metaclass(abc.ABCMeta)
  105. class DSABackend(object):
  106. @abc.abstractmethod
  107. def generate_dsa_parameters(self, key_size):
  108. """
  109. Generate a DSAParameters instance with a modulus of key_size bits.
  110. """
  111. @abc.abstractmethod
  112. def generate_dsa_private_key(self, parameters):
  113. """
  114. Generate a DSAPrivateKey instance with parameters as a DSAParameters
  115. object.
  116. """
  117. @abc.abstractmethod
  118. def generate_dsa_private_key_and_parameters(self, key_size):
  119. """
  120. Generate a DSAPrivateKey instance using key size only.
  121. """
  122. @abc.abstractmethod
  123. def dsa_hash_supported(self, algorithm):
  124. """
  125. Return True if the hash algorithm is supported by the backend for DSA.
  126. """
  127. @abc.abstractmethod
  128. def dsa_parameters_supported(self, p, q, g):
  129. """
  130. Return True if the parameters are supported by the backend for DSA.
  131. """
  132. @abc.abstractmethod
  133. def load_dsa_private_numbers(self, numbers):
  134. """
  135. Returns a DSAPrivateKey provider.
  136. """
  137. @abc.abstractmethod
  138. def load_dsa_public_numbers(self, numbers):
  139. """
  140. Returns a DSAPublicKey provider.
  141. """
  142. @abc.abstractmethod
  143. def load_dsa_parameter_numbers(self, numbers):
  144. """
  145. Returns a DSAParameters provider.
  146. """
  147. @six.add_metaclass(abc.ABCMeta)
  148. class EllipticCurveBackend(object):
  149. @abc.abstractmethod
  150. def elliptic_curve_signature_algorithm_supported(
  151. self, signature_algorithm, curve
  152. ):
  153. """
  154. Returns True if the backend supports the named elliptic curve with the
  155. specified signature algorithm.
  156. """
  157. @abc.abstractmethod
  158. def elliptic_curve_supported(self, curve):
  159. """
  160. Returns True if the backend supports the named elliptic curve.
  161. """
  162. @abc.abstractmethod
  163. def generate_elliptic_curve_private_key(self, curve):
  164. """
  165. Return an object conforming to the EllipticCurvePrivateKey interface.
  166. """
  167. @abc.abstractmethod
  168. def load_elliptic_curve_public_numbers(self, numbers):
  169. """
  170. Return an EllipticCurvePublicKey provider using the given numbers.
  171. """
  172. @abc.abstractmethod
  173. def load_elliptic_curve_private_numbers(self, numbers):
  174. """
  175. Return an EllipticCurvePrivateKey provider using the given numbers.
  176. """
  177. @abc.abstractmethod
  178. def elliptic_curve_exchange_algorithm_supported(self, algorithm, curve):
  179. """
  180. Returns whether the exchange algorithm is supported by this backend.
  181. """
  182. @abc.abstractmethod
  183. def derive_elliptic_curve_private_key(self, private_value, curve):
  184. """
  185. Compute the private key given the private value and curve.
  186. """
  187. @six.add_metaclass(abc.ABCMeta)
  188. class PEMSerializationBackend(object):
  189. @abc.abstractmethod
  190. def load_pem_private_key(self, data, password):
  191. """
  192. Loads a private key from PEM encoded data, using the provided password
  193. if the data is encrypted.
  194. """
  195. @abc.abstractmethod
  196. def load_pem_public_key(self, data):
  197. """
  198. Loads a public key from PEM encoded data.
  199. """
  200. @abc.abstractmethod
  201. def load_pem_parameters(self, data):
  202. """
  203. Load encryption parameters from PEM encoded data.
  204. """
  205. @six.add_metaclass(abc.ABCMeta)
  206. class DERSerializationBackend(object):
  207. @abc.abstractmethod
  208. def load_der_private_key(self, data, password):
  209. """
  210. Loads a private key from DER encoded data. Uses the provided password
  211. if the data is encrypted.
  212. """
  213. @abc.abstractmethod
  214. def load_der_public_key(self, data):
  215. """
  216. Loads a public key from DER encoded data.
  217. """
  218. @abc.abstractmethod
  219. def load_der_parameters(self, data):
  220. """
  221. Load encryption parameters from DER encoded data.
  222. """
  223. @six.add_metaclass(abc.ABCMeta)
  224. class X509Backend(object):
  225. @abc.abstractmethod
  226. def load_pem_x509_certificate(self, data):
  227. """
  228. Load an X.509 certificate from PEM encoded data.
  229. """
  230. @abc.abstractmethod
  231. def load_der_x509_certificate(self, data):
  232. """
  233. Load an X.509 certificate from DER encoded data.
  234. """
  235. @abc.abstractmethod
  236. def load_der_x509_csr(self, data):
  237. """
  238. Load an X.509 CSR from DER encoded data.
  239. """
  240. @abc.abstractmethod
  241. def load_pem_x509_csr(self, data):
  242. """
  243. Load an X.509 CSR from PEM encoded data.
  244. """
  245. @abc.abstractmethod
  246. def create_x509_csr(self, builder, private_key, algorithm):
  247. """
  248. Create and sign an X.509 CSR from a CSR builder object.
  249. """
  250. @abc.abstractmethod
  251. def create_x509_certificate(self, builder, private_key, algorithm):
  252. """
  253. Create and sign an X.509 certificate from a CertificateBuilder object.
  254. """
  255. @abc.abstractmethod
  256. def create_x509_crl(self, builder, private_key, algorithm):
  257. """
  258. Create and sign an X.509 CertificateRevocationList from a
  259. CertificateRevocationListBuilder object.
  260. """
  261. @abc.abstractmethod
  262. def create_x509_revoked_certificate(self, builder):
  263. """
  264. Create a RevokedCertificate object from a RevokedCertificateBuilder
  265. object.
  266. """
  267. @abc.abstractmethod
  268. def x509_name_bytes(self, name):
  269. """
  270. Compute the DER encoded bytes of an X509 Name object.
  271. """
  272. @six.add_metaclass(abc.ABCMeta)
  273. class DHBackend(object):
  274. @abc.abstractmethod
  275. def generate_dh_parameters(self, generator, key_size):
  276. """
  277. Generate a DHParameters instance with a modulus of key_size bits.
  278. Using the given generator. Often 2 or 5.
  279. """
  280. @abc.abstractmethod
  281. def generate_dh_private_key(self, parameters):
  282. """
  283. Generate a DHPrivateKey instance with parameters as a DHParameters
  284. object.
  285. """
  286. @abc.abstractmethod
  287. def generate_dh_private_key_and_parameters(self, generator, key_size):
  288. """
  289. Generate a DHPrivateKey instance using key size only.
  290. Using the given generator. Often 2 or 5.
  291. """
  292. @abc.abstractmethod
  293. def load_dh_private_numbers(self, numbers):
  294. """
  295. Load a DHPrivateKey from DHPrivateNumbers
  296. """
  297. @abc.abstractmethod
  298. def load_dh_public_numbers(self, numbers):
  299. """
  300. Load a DHPublicKey from DHPublicNumbers.
  301. """
  302. @abc.abstractmethod
  303. def load_dh_parameter_numbers(self, numbers):
  304. """
  305. Load DHParameters from DHParameterNumbers.
  306. """
  307. @abc.abstractmethod
  308. def dh_parameters_supported(self, p, g, q=None):
  309. """
  310. Returns whether the backend supports DH with these parameter values.
  311. """
  312. @abc.abstractmethod
  313. def dh_x942_serialization_supported(self):
  314. """
  315. Returns True if the backend supports the serialization of DH objects
  316. with subgroup order (q).
  317. """
  318. @six.add_metaclass(abc.ABCMeta)
  319. class ScryptBackend(object):
  320. @abc.abstractmethod
  321. def derive_scrypt(self, key_material, salt, length, n, r, p):
  322. """
  323. Return bytes derived from provided Scrypt parameters.
  324. """