chacha20_poly1305.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*!
  2. \ingroup ChaCha20Poly1305
  3. \brief この関数は、Chacha20 Stream暗号を使用して、Output BufferTextに入力メッセージ、InPleaintextを暗号化します。
  4. また、Poly-1305認証(暗号テキスト)を実行し、生成した認証タグを出力バッファOutauthTagに格納します。
  5. \return 0 メッセージの暗号化に成功したら返されます
  6. \return BAD_FUNC_ARG 暗号化プロセス中にエラーがある場合
  7. \param inKey 暗号化に使用する32バイトの鍵を含むバッファへのポインタ
  8. \param inIv 暗号化に使用する12バイトのIVを含むバッファへのポインタ
  9. \param inAAD 任意の長さの追加認証データ(AAD)を含むバッファへのポインタ
  10. \param inAADLen 入力AADの長さ
  11. \param inPlaintext 暗号化する平文を含むバッファへのポインタ
  12. \param inPlaintextLen 暗号化するプレーンテキストの長さ
  13. \param outCiphertext 暗号文を保存するバッファーへのポインタ
  14. _Example_
  15. \code
  16. byte key[] = { // initialize 32 byte key };
  17. byte iv[] = { // initialize 12 byte key };
  18. byte inAAD[] = { // initialize AAD };
  19. byte plain[] = { // initialize message to encrypt };
  20. byte cipher[sizeof(plain)];
  21. byte authTag[16];
  22. int ret = wc_ChaCha20Poly1305_Encrypt(key, iv, inAAD, sizeof(inAAD),
  23. plain, sizeof(plain), cipher, authTag);
  24. if(ret != 0) {
  25. // error running encrypt
  26. }
  27. \endcode
  28. \sa wc_ChaCha20Poly1305_Decrypt
  29. \sa wc_ChaCha_*
  30. \sa wc_Poly1305*
  31. */
  32. int wc_ChaCha20Poly1305_Encrypt(
  33. const byte inKey[CHACHA20_POLY1305_AEAD_KEYSIZE],
  34. const byte inIV[CHACHA20_POLY1305_AEAD_IV_SIZE],
  35. const byte* inAAD, const word32 inAADLen,
  36. const byte* inPlaintext, const word32 inPlaintextLen,
  37. byte* outCiphertext,
  38. byte outAuthTag[CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE]);
  39. /*!
  40. \ingroup ChaCha20Poly1305
  41. \brief この関数は、Chacha20 Stream暗号を使用して、出力バッファOutpleAntextに復号したデータを出力します。
  42. また、Poly-1305認証を実行し、指定されたinAuthTagをinAADで生成された認証(任意の長さの追加認証データ)と比較します。
  43. 注:生成された認証タグが提供された認証タグと一致しない場合、テキストは復号されません。
  44. \return 0 メッセージの復号に成功したときに返されました
  45. \return BAD_FUNC_ARG 関数引数のいずれかが予想されるものと一致しない場合に返されます
  46. \return MAC_CMP_FAILED_E 生成された認証タグが提供されているinAuthTagと一致しない場合に返されます。
  47. \param inKey 復号に使用する32バイトの鍵を含むバッファへのポインタ
  48. \param inIv 復号に使用する12バイトのIVを含むバッファへのポインタ
  49. \param inAAD 任意の長さの追加認証データ(AAD)を含むバッファへのポインタ
  50. \param inAADLen 入力AADの長さ
  51. \param inCiphertext 復号する暗号文を含むバッファへのポインタ
  52. \param outCiphertextLen 復号する暗号文の長さ
  53. \param inAuthTag 認証のための16バイトのダイジェストを含むバッファへのポインタ
  54. _Example_
  55. \code
  56. byte key[] = { // initialize 32 byte key };
  57. byte iv[] = { // initialize 12 byte key };
  58. byte inAAD[] = { // initialize AAD };
  59. byte cipher[] = { // initialize with received ciphertext };
  60. byte authTag[16] = { // initialize with received authentication tag };
  61. byte plain[sizeof(cipher)];
  62. int ret = wc_ChaCha20Poly1305_Decrypt(key, iv, inAAD, sizeof(inAAD),
  63. cipher, sizeof(cipher), authTag, plain);
  64. if(ret == MAC_CMP_FAILED_E) {
  65. // error during authentication
  66. } else if( ret != 0) {
  67. // error with function arguments
  68. }
  69. \endcode
  70. \sa wc_ChaCha20Poly1305_Encrypt
  71. \sa wc_ChaCha_*
  72. \sa wc_Poly1305*
  73. */
  74. int wc_ChaCha20Poly1305_Decrypt(
  75. const byte inKey[CHACHA20_POLY1305_AEAD_KEYSIZE],
  76. const byte inIV[CHACHA20_POLY1305_AEAD_IV_SIZE],
  77. const byte* inAAD, const word32 inAADLen,
  78. const byte* inCiphertext, const word32 inCiphertextLen,
  79. const byte inAuthTag[CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE],
  80. byte* outPlaintext);