poly1305.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*!
  2. \ingroup Poly1305
  3. \brief この関数は、Poly1305コンテキスト構造のキーを設定し、ハッシュに初期化します。注:セキュリティを確保するために、WC_POLY1305FINALでメッセージハッシュを生成した後に新しいキーを設定する必要があります。
  4. \return 0 キーを正常に設定し、Poly1305構造の初期化
  5. \return BAD_FUNC_ARG 与えられたキーが32バイトの長さでない場合、またはPoly1305コンテキストがNULLの場合
  6. \param ctx 初期化するためのPoly1305構造へのポインタ
  7. \param key ハッシュに使用する鍵を含むバッファへのポインタ
  8. _Example_
  9. \code
  10. Poly1305 enc;
  11. byte key[] = { initialize with 32 byte key to use for hashing };
  12. wc_Poly1305SetKey(&enc, key, sizeof(key));
  13. \endcode
  14. \sa wc_Poly1305Update
  15. \sa wc_Poly1305Final
  16. */
  17. int wc_Poly1305SetKey(Poly1305* poly1305, const byte* key,
  18. word32 kySz);
  19. /*!
  20. \ingroup Poly1305
  21. \brief この関数は、Poly1305構造を持つハッシュにメッセージを更新します。
  22. \return 0 ハッシュへのメッセージの更新に成功しました
  23. \return BAD_FUNC_ARG Poly1305構造がNULLの場合に返されます
  24. \param ctx HASHにメッセージを更新するためのPoly1305構造へのポインタ
  25. \param m ハッシュに追加する必要があるメッセージを含むバッファへのポインタ
  26. _Example_
  27. \code
  28. Poly1305 enc;
  29. byte key[] = { }; // initialize with 32 byte key to use for encryption
  30. byte msg[] = { }; // initialize with message to hash
  31. wc_Poly1305SetKey(&enc, key, sizeof(key));
  32. if( wc_Poly1305Update(key, msg, sizeof(msg)) != 0 ) {
  33. // error updating message to hash
  34. }
  35. \endcode
  36. \sa wc_Poly1305SetKey
  37. \sa wc_Poly1305Final
  38. */
  39. int wc_Poly1305Update(Poly1305* poly1305, const byte* m, word32 bytes);
  40. /*!
  41. \ingroup Poly1305
  42. \brief この関数は入力メッセージのハッシュを計算し、結果をMACに格納します。この後、キーをリセットする必要があります。
  43. \return 0 最後のMacの計算に成功した
  44. \return BAD_FUNC_ARG Poly1305構造がNULLの場合に返されます
  45. \param ctx MACを生成するためのPoly1305構造へのポインタ
  46. _Example_
  47. \code
  48. Poly1305 enc;
  49. byte mac[POLY1305_DIGEST_SIZE]; // space for a 16 byte mac
  50. byte key[] = { }; // initialize with 32 byte key to use for encryption
  51. byte msg[] = { }; // initialize with message to hash
  52. wc_Poly1305SetKey(&enc, key, sizeof(key));
  53. wc_Poly1305Update(key, msg, sizeof(msg));
  54. if ( wc_Poly1305Final(&enc, mac) != 0 ) {
  55. // error computing final MAC
  56. }
  57. \endcode
  58. \sa wc_Poly1305SetKey
  59. \sa wc_Poly1305Update
  60. */
  61. int wc_Poly1305Final(Poly1305* poly1305, byte* tag);
  62. /*!
  63. \ingroup Poly1305
  64. \brief 鍵がロードされ、最近のTLS AEADパディング方式を使用してMAC(タグ)を作成する初期化されたPoly1305構造体を取ります。
  65. \return 0 成功
  66. \return BAD_FUNC_ARG CTX、INPUT、またはTAGがNULLの場合、または追加がNULLで、ADDSZが0より大きい場合、またはTAGSZがWC_POLY1305_MAC_SZより小さい場合に返されます。
  67. \param ctx 初期化されたPoly1305構造物
  68. \param additional 使用する追加データ
  69. \param addSz 追加バッファのサイズ
  70. \param input からタグを作成するための入力バッファ
  71. \param sz 入力バッファのサイズ
  72. \param tag 作成したタグを保持するためのバッファー
  73. _Example_
  74. \code
  75. Poly1305 ctx;
  76. byte key[] = { }; // initialize with 32 byte key to use for hashing
  77. byte additional[] = { }; // initialize with additional data
  78. byte msg[] = { }; // initialize with message
  79. byte tag[16];
  80. wc_Poly1305SetKey(&ctx, key, sizeof(key));
  81. if(wc_Poly1305_MAC(&ctx, additional, sizeof(additional), (byte*)msg,
  82. sizeof(msg), tag, sizeof(tag)) != 0)
  83. {
  84. // Handle the error
  85. }
  86. \endcode
  87. \sa wc_Poly1305SetKey
  88. \sa wc_Poly1305Update
  89. \sa wcPoly1305Final
  90. */
  91. int wc_Poly1305_MAC(Poly1305* ctx, byte* additional, word32 addSz,
  92. byte* input, word32 sz, byte* tag, word32 tagSz);