doxygen_groups.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. /*!
  2. \defgroup 3DES Algorithms - 3DES
  3. \defgroup AES Algorithms - AES
  4. \defgroup ARC4 Algorithms - ARC4
  5. \defgroup BLAKE2 Algorithms - BLAKE2
  6. \defgroup Camellia Algorithms - Camellia
  7. \defgroup ChaCha Algorithms - ChaCha
  8. \defgroup ChaCha20Poly1305 Algorithms - ChaCha20_Poly1305
  9. \defgroup CMAC Algorithm - CMAC
  10. \defgroup Crypto Callbacks - CryptoCb
  11. \defgroup Curve25519 Algorithms - Curve25519
  12. \defgroup Curve448 Algorithms - Curve448
  13. \defgroup DSA Algorithms - DSA
  14. \defgroup Diffie-Hellman Algorithms - Diffie-Hellman
  15. \defgroup ECC Algorithms - ECC
  16. \defgroup ED25519 Algorithms - ED25519
  17. \defgroup ED448 Algorithms - ED448
  18. \defgroup ECCSI_Overview Overview of ECCSI
  19. ECCSI (Elliptic Curve-Based Certificateless Signatures for Identity-Based Encryption) is specified in RFC 6507 (https://tools.ietf.org/html/rfc6507).
  20. In Identity-Based cryptography, there is a Key Management Service that generates keys based on an identity for a client.
  21. The private key (SSK) and public key (PVT) are delivered to the signer and the public key (PVT) only delivered to the verifier on request.\n\n
  22. wolfCrypt offers the ability to:
  23. -# Create KMS keys,
  24. -# Generate signing key pairs,
  25. -# Validate signing key pairs,
  26. -# Sign messages and
  27. -# Verify messages.
  28. KMS:
  29. -# Initialize ECCSI Key: wc_InitEccsiKey()
  30. -# Make and save or load ECCSI Key:
  31. -# wc_MakeEccsiKey(), wc_ExportEccsiKey(), wc_ExportEccsiPublicKey() or
  32. -# wc_ImportEccsiKey()
  33. -# Wait for request:
  34. -# Receive signing ID from client.
  35. -# Generate signing key pair from ID: wc_MakeEccsiPair()
  36. -# Encode result:
  37. -# For signer, signing key pair: wc_EncodeEccsiPair()
  38. -# Send KPAK and result
  39. -# Free ECCSI Key: wc_FreeEccsiKey()
  40. Client, signer:
  41. -# Initialize ECCSI Key: wc_InitEccsiKey()
  42. -# (When signing pair not cached) Request KPAK and signing pair from KMS
  43. -# Send signing ID to KMS.
  44. -# Receive signing key pair from KMS.
  45. -# Load KMS Public Key: wc_ImportEccsiPublicKey()
  46. -# Decode signing key pair: wc_DecodeEccsiPair()
  47. -# Validate the key pair: wc_ValidateEccsiPair()
  48. -# (If not done above) Load KMS Public Key: wc_ImportEccsiPublicKey()
  49. -# (If not cached) Calculate hash of the ID and PVT: wc_HashEccsiId()
  50. -# For each message:
  51. -# Set Hash of Identity: wc_SetEccsiHash()
  52. -# Sign message: wc_SignEccsiHash()
  53. -# Send hash ID, message and signature to peer.
  54. -# Free ECCSI Key: wc_FreeEccsiKey()
  55. Client, verifier:
  56. -# Receive hash ID, message and signature from signer.
  57. -# Request KPAK (if not cached) and PVT (if not cached) for hash ID from KMS.
  58. -# Receive KPAK (if not cached) and PVT (if not cached) for hash ID from KMS.
  59. -# Initialize ECCSI Key: wc_InitEccsiKey()
  60. -# Load KMS Public Key: wc_ImportEccsiPublicKey()
  61. -# Decode PVT: wc_DecodeEccsiPvtFromSig()
  62. -# Calculate hash of the ID and PVT: wc_HashEccsiId()
  63. -# Set ECCSI key pair: wc_SetEccsiPair()
  64. -# Verify signature of message: wc_VerifyEccsiHash()
  65. -# Free ECCSI Key: wc_FreeEccsiKey()
  66. \defgroup ECCSI_Setup Setup ECCSI Key
  67. Operations for establinshing an ECCSI key.
  68. Initialize ECCSI Key before use (wc_InitEccsiKey()).\n
  69. Initialize ECCSI Key before use (wc_InitEccsiKey_ex()) for use with a curve other than P256.\n
  70. Either make a new key (wc_MakeEccsiKey()), import an existing key (wc_ImportEccsiKey()) or import existing private key (wc_ImportEccsiPrivateKey()) and public key (wc_ImportEccsiPublicKey()).\n
  71. Export the key (wc_ExportEccsiKey()) after making a new key for future use.\n
  72. Export the private key (wc_ExportEccsiPrivateKey()) after making a new key for future use.\n
  73. Export the public key (wc_ExportEccsiPublicKey()) from KMS to pass to client.\n
  74. Import the public key (wc_ImportEccsiPublicKey()) into client.\n
  75. Free the ECCSI Key (wc_FreeEccsiKey()) when finished.
  76. \defgroup ECCSI_Operations Operations for Signing and Verifying with ECCSI Key
  77. These operations are for signing and verifying with ECCSI keys.
  78. Make an ECCSI key pair (wc_MakeEccsiPair()) with the signer's ID for use when signing.\n
  79. Validate the ECCSI key pair (wc_ValidateEccsiPair()) with the signer's ID.\n
  80. Validate the ECCSI Public Validation Token (PVT) (wc_ValidateEccsiPvt()).\n
  81. Encode the ECCSI key pair (wc_EncodeEccsiPair()) for transfer to client.\n
  82. Encode the ECCSI SSK (wc_EncodeEccsiSsk()) for transfer to client.\n
  83. Encode the ECCSI PVT (wc_EncodeEccsiPvt()) for transfer to verifier.\n
  84. Decode the ECCSI key pair (wc_DecodeEccsiPair()) on client for signing.\n
  85. Decode the ECCSI SSK (wc_DecodeEccsiSsk()) on client for signing.\n
  86. Decode the ECCSI PVT (wc_DecodeEccsiPvt()) on client for signing.\n
  87. Decode the ECCSI PVT from the signature (wc_DecodeEccsiPvtFromSig()) on client for verifying.\n
  88. Calculate hash of the ID (wc_HashEccsiId()) for signing/verifying using ID and Public Validation Token (PVT).\n
  89. Sign (wc_SignEccsiHash()) a message with the hash of the ID and the Secret Signing Key (SSK) and Public Validation Token (PVT).\n
  90. Verify (wc_VerifyEccsiHash()) a message with the hash of the signer's ID.
  91. \defgroup SAKKE_Overview Overview of SAKKE Key
  92. SAKKE (Sakai-Kasahara Key Encryption) is specified in RFC 6508 (https://tools.ietf.org/html/rfc6508).
  93. SAKKE is used to transfer a secret to a peer using Identity Based cryptography.\n
  94. The Key Management Service (KMS) is responsible for issuing Receiver Secret %Keys (RSKs).
  95. Data up to (2^hashlen)^hashlen bytes of data can be transferred.\n
  96. The sender must know the identity of the receiver and the KMS Public Key.\n
  97. The receiver must have obtained a Receiver Secret Key (RSK) for the identity from a KMS in order to derive the secret.
  98. KMS:
  99. -# Initialize SAKKE Key: wc_InitSakkeKey()
  100. -# Make and save or load SAKKE Key:
  101. -# wc_MakeSakkeKey(), wc_ExportSakkeKey(), wc_ExportSakkePublicKey() or
  102. -# wc_ImportSakkeKey()
  103. -# Wait for request:
  104. -# Make an RSK base on ID for the client: wc_MakeSakkeRsk()
  105. -# Encode RSK for transfer to client: wc_EncodeSakkeRsk()
  106. -# Free SAKKE Key: wc_FreeSakkeKey()
  107. Key Exchange, Peer A:
  108. -# Initialize SAKKE Key: wc_InitSakkeKey()
  109. -# Load KMS Public Key: wc_ImportSakkePublicKey()
  110. -# Generate a random SSV: wc_GenerateSakkeSSV()
  111. -# Set the identity of Peer B: wc_SetSakkeIdentity()
  112. -# Make an encapsulated SSV and auth data: wc_MakeSakkeEncapsulatedSSV()
  113. -# Send encapsulated data to Peer B
  114. -# Free SAKKE Key: wc_FreeSakkeKey()
  115. Key Exchange, Peer B:
  116. -# Receive encapsulated data.
  117. -# Initialize SAKKE Key: wc_InitSakkeKey()
  118. -# Load KMS Public Key: wc_ImportSakkePublicKey()
  119. -# Decode RSK transferred from KMS or stored locally: wc_DecodeSakkeRsk()
  120. -# [Optional] Validate RSK before first use: wc_ValidateSakkeRsk()
  121. -# Set the identity: wc_SetSakkeIdentity()
  122. -# Set the RSK and, optionally precomputation table: wc_SetSakkeRsk()
  123. -# Derive SSV with auth data: wc_DeriveSakkeSSV()
  124. -# Free SAKKE Key: wc_FreeSakkeKey()
  125. Transfer secret, Peer A:
  126. -# Initialize SAKKE Key: wc_InitSakkeKey()
  127. -# Load KMS Public Key: wc_ImportSakkePublicKey()
  128. -# Set the identity of Peer B: wc_SetSakkeIdentity()
  129. -# Make an encapsulation of the SSV and auth data: wc_MakeSakkeEncapsulatedSSV()
  130. -# Send encapsulated data to Peer B
  131. -# Free SAKKE Key: wc_FreeSakkeKey()
  132. Transfer secret, Peer B:
  133. -# Initialize SAKKE Key: wc_InitSakkeKey()
  134. -# Load KMS Public Key: wc_ImportSakkePublicKey()
  135. -# Decode RSK transferred from KMS or stored locally: wc_DecodeSakkeRsk()
  136. -# [Optional] Validate RSK before first use: wc_ValidateSakkeRsk()
  137. -# Receive encapsulated data.
  138. -# Set the identity: wc_SetSakkeIdentity()
  139. -# Set the RSK and, optionally precomputation table: wc_SetSakkeRsk()
  140. -# Derive SSV and auth data: wc_DeriveSakkeSSV()
  141. -# Free SAKKE Key: wc_FreeSakkeKey()
  142. \defgroup SAKKE_Setup Setup SAKKE Key
  143. Operations for establishing a SAKKE key.
  144. Initialization SAKKE Key before use (wc_InitSakkeKey() or wc_InitSakkeKey_ex()).\n
  145. Either make a new key (wc_MakeSakkeKey()) or import an existing key (wc_ImportSakkeKey()).\n
  146. Export the key (wc_ExportSakkeKey()) after making a new key for future use.\n
  147. If only the private part of the KMS SAKKE Key is available, make the public key (wc_MakeSakkePublicKey()).\n
  148. Export the private key (wc_ExportSakkePrivateKey()) from KMS from storage.\n
  149. Import the private key (wc_ImportSakkePrivateKey()) into KMS from storage.\n
  150. Export the public key (wc_ExportSakkePublicKey()) from KMS to pass to client.\n
  151. Import the public key (wc_ImportSakkePublicKey()) into client.\n
  152. Set the identity to use (wc_SetSakkeIdentity()) into client.\n
  153. Free the SAKKE Key (wc_FreeSakkeKey()) when finished.
  154. \defgroup SAKKE_RSK Operations on/with SAKKE RSK
  155. These operations make, validate, encode and decode a Receiver Secret Key (RSK).
  156. An RSK is required to derive an SSV (see wc_DeriveSakkeSSV()).\n
  157. On the KMS, make an RSK (wc_MakeSakkeRsk()) from the client's ID.\n
  158. On the client, validate the RSK (wc_ValidateSakkeRsk()) with the ID.\n
  159. Encode the RSK (wc_EncodeSakkeRsk()) to pass to client or for storage.\n
  160. Decode the RSK (wc_DecodeSakkeRsk()) on the client when needed.\n
  161. Import the RSK (wc_ImportSakkeRsk()) on the client when needed.\n
  162. Set the RSK and, optionally, a pre-computation table (wc_SetSakkeRsk()) on the client when needed.
  163. \defgroup SAKKE_Operations Operations using SAKKE Key
  164. These operations transfer a Shared Secret Value (SSV) from one client to another. The SSV may be randomly generated.
  165. Calculate the size of the authentication data (wc_GetSakkeAuthSize()) to determine where the SSV starts in a buffer.\n
  166. Make the intermediate point I (wc_MakeSakkePointI()) to speed making an encapsulated and deriving SSV.\n
  167. Get intermediate point I (wc_GetSakkePointI()) for storage.\n
  168. Set intermediate point I (wc_SetSakkePointI()) from storage.\n
  169. Generate a pre-computation table for intermediate point I (wc_GenerateSakkePointITable()) to further enhance performance. Store as necessary.\n
  170. Set the pre-computation table for intermediate point I (wc_SetSakkePointITable()) to further enhance performance.\n
  171. Clear the pre-computation table for intermediate point I (wc_ClearSakkePointITable()) to remove reference to external table pointer.\n
  172. Make an encapsulated SSV (wc_MakeSakkeEncapsulatedSSV()) to share with another client. Data in SSV is modified.\n
  173. Generate a random SSV (wc_GenerateSakkeSSV()) for key exchange.\n
  174. Derive the SSV, (wc_DeriveSakkeSSV()) on the recipient from the encapsulated SSV.
  175. \defgroup HMAC Algorithms - HMAC
  176. \defgroup MD2 Algorithms - MD2
  177. \defgroup MD4 Algorithms - MD4
  178. \defgroup MD5 Algorithms - MD5
  179. \defgroup PKCS7 Algorithms - PKCS7
  180. \defgroup PKCS11 Algorithms - PKCS11
  181. \defgroup Password Algorithms - Password Based
  182. \defgroup Poly1305 Algorithms - Poly1305
  183. \defgroup RIPEMD Algorithms - RIPEMD
  184. \defgroup RSA Algorithms - RSA
  185. \defgroup SHA Algorithms - SHA 128/224/256/384/512
  186. \defgroup SipHash Algorithm - SipHash
  187. \defgroup SrtpKdf Algorithm - SRTP KDF
  188. \defgroup SRP Algorithms - SRP
  189. \defgroup ASN ASN.1
  190. \defgroup Base_Encoding Base Encoding
  191. \defgroup CertManager CertManager API
  192. \defgroup Compression Compression
  193. \defgroup Error Error Reporting
  194. \defgroup IoTSafe IoT-Safe Module
  195. IoT-Safe (IoT-SIM Applet For Secure End-2-End Communication) is a technology that leverage the SIM as robust,
  196. scalable and standardized hardware Root of Trust to protect data communication.
  197. IoT-Safe SSL sessions use the SIM as Hardware Security Module, offloading all the crypto public
  198. key operations and reducing the attack surface by restricting access to certificate and keys
  199. to the SIM.
  200. IoT-Safe support can be enabled on an existing WOLFSSL_CTX context, using wolfSSL_CTX_iotsafe_enable().\n
  201. Session created within the context can set the parameters for IoT-Safe key and files usage, and enable
  202. the public keys callback, with wolfSSL_iotsafe_on().
  203. If compiled in, the module supports IoT-Safe random number generator as source of entropy for wolfCrypt.
  204. \defgroup PSA Platform Security Architecture (PSA) API
  205. \defgroup Keys Key and Cert Conversion
  206. \defgroup Logging Logging
  207. \defgroup Math Math API
  208. \defgroup Memory Memory Handling
  209. \defgroup Random Random Number Generation
  210. \defgroup Signature Signature API
  211. \defgroup openSSL OpenSSL API
  212. \defgroup wolfCrypt wolfCrypt Init and Cleanup
  213. \defgroup TLS wolfSSL Initialization/Shutdown
  214. \defgroup CertsKeys wolfSSL Certificates and Keys
  215. \defgroup Setup wolfSSL Context and Session Set Up
  216. \defgroup IO wolfSSL Connection, Session, and I/O
  217. \defgroup Debug wolfSSL Error Handling and Reporting
  218. */