1
0

pkcs7.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. /*!
  2. \ingroup PKCS7
  3. \brief この関数は、DERフォーマットの証明書を使用してPKCS7構造を初期化します。空のPKCS7構造を初期化するには、NULL CERTとCERTSZの場合は0を渡すことができます。
  4. \return 0 PKCS7構造の初期化に成功しました
  5. \return MEMORY_E xmallocでメモリを割り当てるエラーがある場合
  6. \return ASN_PARSE_E 証明書ヘッダーの解析中にエラーがある場合
  7. \return ASN_OBJECT_ID_E 証明書から暗号化タイプの解析中にエラーがある場合に返されます
  8. \return ASN_EXPECT_0_E CERTファイルの暗号化仕様にフォーマットエラーがある場合
  9. \return ASN_BEFORE_DATE_E 日付が証明書開始日以前の場合返却
  10. \return ASN_AFTER_DATE_E 日付が証明書の有効期限の後にある場合に返されます
  11. \return ASN_BITSTR_E 証明書からビット文字列を解析したエラーがある場合に返されます。
  12. \return ECC_CURVE_OID_E 証明書からECCキーの解析中にエラーがある場合
  13. \return ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
  14. \return ASN_VERSION_E allow_v1_extensionsオプションが定義されておらず、証明書がV1またはV2の証明書の場合に返されます。
  15. \return BAD_FUNC_ARG 証明書拡張機能の処理中にエラーがある場合
  16. \return ASN_CRIT_EXT_E 証明書の処理中になじみのない重要な拡張機能が発生した場合に返されます。
  17. \return ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます。
  18. \return ASN_SIG_CONFIRM_E 認証署名が失敗したことを確認した場合に返されます
  19. \return ASN_NAME_INVALID_E 証明書の名前がCA名制約によって許可されていない場合に返されます。
  20. \return ASN_NO_SIGNER_E 証明書の真正性を確認するためのCA署名者がない場合に返されました
  21. \param pkcs7 デコードされた証明書を保存するPKCS7構造へのポインタ
  22. \param cert PKCS7構造を初期化するためのDERフォーマットのASN.1証明書を含むバッファへのポインタ
  23. _Example_
  24. \code
  25. PKCS7 pkcs7;
  26. byte derBuff[] = { }; // initialize with DER-encoded certificate
  27. if ( wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff)) != 0 ) {
  28. // error parsing certificate into pkcs7 format
  29. }
  30. \endcode
  31. \sa wc_PKCS7_Free
  32. */
  33. int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* cert, word32 certSz);
  34. /*!
  35. \ingroup PKCS7
  36. \brief この関数は、PKCS7の初期化装置によって割り当てられたメモリを解放します。
  37. \return none いいえ返します。
  38. _Example_
  39. \code
  40. PKCS7 pkcs7;
  41. // initialize and use PKCS7 object
  42. wc_PKCS7_Free(pkcs7);
  43. \endcode
  44. \sa wc_PKCS7_InitWithCert
  45. */
  46. void wc_PKCS7_Free(PKCS7* pkcs7);
  47. /*!
  48. \ingroup PKCS7
  49. \brief この関数はPKCS7データコンテンツタイプを構築し、PKCS7構造をパーセル可能なPKCS7データパケットを含むバッファにエンコードします。
  50. \return Success PKCS7データをバッファに正常にエンコードすると、PKCS7構造内の索引を返します。このインデックスは、出力バッファに書き込まれたバイトにも対応しています。
  51. \return BUFFER_E 指定されたバッファがエンコードされた証明書を保持するのに十分な大きさでない場合に返されます
  52. \param pkcs7 符号化するPKCS7構造へのポインタ
  53. \param output エンコードされた証明書を保存するバッファへのポインタ
  54. _Example_
  55. \code
  56. PKCS7 pkcs7;
  57. int ret;
  58. byte derBuff[] = { }; // initialize with DER-encoded certificate
  59. byte pkcs7Buff[FOURK_BUF];
  60. wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff));
  61. // update message and data to encode
  62. pkcs7.privateKey = key;
  63. pkcs7.privateKeySz = keySz;
  64. pkcs7.content = data;
  65. pkcs7.contentSz = dataSz;
  66. ... etc.
  67. ret = wc_PKCS7_EncodeData(&pkcs7, pkcs7Buff, sizeof(pkcs7Buff));
  68. if ( ret != 0 ) {
  69. // error encoding into output buffer
  70. }
  71. \endcode
  72. \sa wc_PKCS7_InitWithCert
  73. */
  74. int wc_PKCS7_EncodeData(PKCS7* pkcs7, byte* output,
  75. word32 outputSz);
  76. /*!
  77. \ingroup PKCS7
  78. \brief この関数はPKCS7署名付きデータコンテンツタイプを構築し、PKCS7構造をPARSable PKCS7署名付きデータパケットを含むバッファにエンコードします。
  79. \return Success PKCS7データをバッファに正常にエンコードすると、PKCS7構造内の索引を返します。このインデックスは、出力バッファに書き込まれたバイトにも対応しています。
  80. \return BAD_FUNC_ARG PKCS7構造が署名付きデータパケットを生成するための1つ以上の要求要素が欠落している場合に返されます。
  81. \return MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  82. \return PUBLIC_KEY_E 公開鍵の解析中にエラーがある場合
  83. \return RSA_BUFFER_E バッファエラーが発生した場合は、小さすぎたり入力が大きすぎたりし過ぎました
  84. \return BUFFER_E 指定されたバッファがエンコードされた証明書を保持するのに十分な大きさでない場合に返されます
  85. \return MP_INIT_E 署名を生成するエラーがある場合は返却される可能性があります
  86. \return MP_READ_E 署名を生成するエラーがある場合は返却される可能性があります
  87. \return MP_CMP_E 署名を生成するエラーがある場合は返却される可能性があります
  88. \return MP_INVMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  89. \return MP_EXPTMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  90. \return MP_MOD_E 署名を生成するエラーがある場合は返却される可能性があります
  91. \return MP_MUL_E 署名を生成するエラーがある場合は返却される可能性があります
  92. \return MP_ADD_E 署名を生成するエラーがある場合は返却される可能性があります
  93. \return MP_MULMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  94. \return MP_TO_E 署名を生成するエラーがある場合は返却される可能性があります
  95. \return MP_MEM 署名を生成するエラーがある場合は返却される可能性があります
  96. \param pkcs7 符号化するPKCS7構造へのポインタ
  97. \param output エンコードされた証明書を保存するバッファへのポインタ
  98. _Example_
  99. \code
  100. PKCS7 pkcs7;
  101. int ret;
  102. byte data[] = {}; // initialize with data to sign
  103. byte derBuff[] = { }; // initialize with DER-encoded certificate
  104. byte pkcs7Buff[FOURK_BUF];
  105. wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff));
  106. // update message and data to encode
  107. pkcs7.privateKey = key;
  108. pkcs7.privateKeySz = keySz;
  109. pkcs7.content = data;
  110. pkcs7.contentSz = dataSz;
  111. pkcs7.hashOID = SHAh;
  112. pkcs7.rng = &rng;
  113. ... etc.
  114. ret = wc_PKCS7_EncodeSignedData(&pkcs7, pkcs7Buff, sizeof(pkcs7Buff));
  115. if ( ret != 0 ) {
  116. // error encoding into output buffer
  117. }
  118. wc_PKCS7_Free(&pkcs7);
  119. \endcode
  120. \sa wc_PKCS7_InitWithCert
  121. \sa wc_PKCS7_VerifySignedData
  122. */
  123. int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7,
  124. byte* output, word32 outputSz);
  125. /*!
  126. \ingroup PKCS7
  127. \brief この関数は、PKCS7の署名付きデータコンテンツタイプを構築し、PKCS7構造をエンコードし、Parsable PKCS7署名付きデータパケットを含むヘッダーおよびフッターバッファにエンコードします。これにはコンテンツは含まれません。ハッシュを計算してデータに提供する必要があります
  128. \return 0=Success
  129. \return BAD_FUNC_ARG PKCS7構造が署名付きデータパケットを生成するための1つ以上の要求要素が欠落している場合に返されます。
  130. \return MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  131. \return PUBLIC_KEY_E 公開鍵の解析中にエラーがある場合
  132. \return RSA_BUFFER_E バッファエラーが発生した場合は、小さすぎたり入力が大きすぎたりし過ぎました
  133. \return BUFFER_E 指定されたバッファがエンコードされた証明書を保持するのに十分な大きさでない場合に返されます
  134. \return MP_INIT_E 署名を生成するエラーがある場合は返却される可能性があります
  135. \return MP_READ_E 署名を生成するエラーがある場合は返却される可能性があります
  136. \return MP_CMP_E 署名を生成するエラーがある場合は返却される可能性があります
  137. \return MP_INVMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  138. \return MP_EXPTMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  139. \return MP_MOD_E 署名を生成するエラーがある場合は返却される可能性があります
  140. \return MP_MUL_E 署名を生成するエラーがある場合は返却される可能性があります
  141. \return MP_ADD_E 署名を生成するエラーがある場合は返却される可能性があります
  142. \return MP_MULMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  143. \return MP_TO_E 署名を生成するエラーがある場合は返却される可能性があります
  144. \return MP_MEM 署名を生成するエラーがある場合は返却される可能性があります
  145. \param pkcs7 符号化するPKCS7構造へのポインタ
  146. \param hashBuf コンテンツデータの計算ハッシュへのポインタ
  147. \param hashSz ダイジェストのサイズ
  148. \param outputHead エンコードされた証明書ヘッダーを保存するバッファへのポインタ
  149. \param outputHeadSz 出力ヘッダーバッファのサイズが入力され、実際のサイズを返します。
  150. \param outputFoot エンコードされた証明書フッターを保存するバッファへのポインタ
  151. _Example_
  152. \code
  153. PKCS7 pkcs7;
  154. int ret;
  155. byte derBuff[] = { }; // initialize with DER-encoded certificate
  156. byte data[] = {}; // initialize with data to sign
  157. byte pkcs7HeadBuff[FOURK_BUF/2];
  158. byte pkcs7FootBuff[FOURK_BUF/2];
  159. word32 pkcs7HeadSz = (word32)sizeof(pkcs7HeadBuff);
  160. word32 pkcs7FootSz = (word32)sizeof(pkcs7HeadBuff);
  161. enum wc_HashType hashType = WC_HASH_TYPE_SHA;
  162. byte hashBuf[WC_MAX_DIGEST_SIZE];
  163. word32 hashSz = wc_HashGetDigestSize(hashType);
  164. wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff));
  165. // update message and data to encode
  166. pkcs7.privateKey = key;
  167. pkcs7.privateKeySz = keySz;
  168. pkcs7.content = NULL;
  169. pkcs7.contentSz = dataSz;
  170. pkcs7.hashOID = SHAh;
  171. pkcs7.rng = &rng;
  172. ... etc.
  173. // calculate hash for content
  174. ret = wc_HashInit(&hash, hashType);
  175. if (ret == 0) {
  176. ret = wc_HashUpdate(&hash, hashType, data, sizeof(data));
  177. if (ret == 0) {
  178. ret = wc_HashFinal(&hash, hashType, hashBuf);
  179. }
  180. wc_HashFree(&hash, hashType);
  181. }
  182. ret = wc_PKCS7_EncodeSignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff,
  183. &pkcs7HeadSz, pkcs7FootBuff, &pkcs7FootSz);
  184. if ( ret != 0 ) {
  185. // error encoding into output buffer
  186. }
  187. wc_PKCS7_Free(&pkcs7);
  188. \endcode
  189. \sa wc_PKCS7_InitWithCert
  190. \sa wc_PKCS7_VerifySignedData_ex
  191. */
  192. int wc_PKCS7_EncodeSignedData_ex(PKCS7* pkcs7, const byte* hashBuf,
  193. word32 hashSz, byte* outputHead, word32* outputHeadSz, byte* outputFoot,
  194. word32* outputFootSz);
  195. /*!
  196. \ingroup PKCS7
  197. \brief この関数は、送信されたPKCS7の署名付きデータメッセージを取り、証明書リストと証明書失効リストを抽出してから署名を検証します。与えられたPKCS7構造に抽出されたコンテンツを格納します。
  198. \return 0 メッセージから情報を抽出することに成功しました
  199. \return BAD_FUNC_ARG 入力パラメータの1つが無効な場合は返されます
  200. \return ASN_PARSE_E 与えられたPKIMSGから解析中のエラーがある場合に返されます
  201. \return PKCS7_OID_E 与えられたPKIMSGが署名付きデータ型ではない場合に返されます
  202. \return ASN_VERSION_E PKCS7署名者情報がバージョン1ではない場合に返されます
  203. \return MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  204. \return PUBLIC_KEY_E 公開鍵の解析中にエラーがある場合
  205. \return RSA_BUFFER_E バッファエラーが発生した場合は、小さすぎたり入力が大きすぎたりし過ぎません
  206. \return BUFFER_E 指定されたバッファがエンコードされた証明書を保持するのに十分な大きさでない場合に返されます
  207. \return MP_INIT_E 署名を生成するエラーがある場合は返却される可能性があります
  208. \return MP_READ_E 署名を生成するエラーがある場合は返却される可能性があります
  209. \return MP_CMP_E 署名を生成するエラーがある場合は返却される可能性があります
  210. \return MP_INVMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  211. \return MP_EXPTMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  212. \return MP_MOD_E 署名を生成するエラーがある場合は返却される可能性があります
  213. \return MP_MUL_E 署名を生成するエラーがある場合は返却される可能性があります
  214. \return MP_ADD_E 署名を生成するエラーがある場合は返却される可能性があります
  215. \return MP_MULMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  216. \return MP_TO_E 署名を生成するエラーがある場合は返却される可能性があります
  217. \return MP_MEM 署名を生成するエラーがある場合は返却される可能性があります
  218. \param pkcs7 解析された証明書を保存するPKCS7構造へのポインタ
  219. \param pkiMsg 署名されたメッセージを含むバッファへのポインタを検証および復号化する
  220. _Example_
  221. \code
  222. PKCS7 pkcs7;
  223. int ret;
  224. byte pkcs7Buff[] = {}; // the PKCS7 signature
  225. wc_PKCS7_InitWithCert(&pkcs7, NULL, 0);
  226. // update message and data to encode
  227. pkcs7.privateKey = key;
  228. pkcs7.privateKeySz = keySz;
  229. pkcs7.content = data;
  230. pkcs7.contentSz = dataSz;
  231. ... etc.
  232. ret = wc_PKCS7_VerifySignedData(&pkcs7, pkcs7Buff, sizeof(pkcs7Buff));
  233. if ( ret != 0 ) {
  234. // error encoding into output buffer
  235. }
  236. wc_PKCS7_Free(&pkcs7);
  237. \endcode
  238. \sa wc_PKCS7_InitWithCert
  239. \sa wc_PKCS7_EncodeSignedData
  240. */
  241. int wc_PKCS7_VerifySignedData(PKCS7* pkcs7,
  242. byte* pkiMsg, word32 pkiMsgSz);
  243. /*!
  244. \ingroup PKCS7
  245. \brief この機能は、送信されたPKCS7署名付きデータメッセージをHASH /ヘッダー/フッターとして取り出してから、証明書リストと証明書失効リストを抽出してから、署名を検証します。与えられたPKCS7構造に抽出されたコンテンツを格納します。
  246. \return 0 メッセージから情報を抽出することに成功しました
  247. \return BAD_FUNC_ARG 入力パラメータの1つが無効な場合は返されます
  248. \return ASN_PARSE_E 与えられたPKIMSGから解析中のエラーがある場合に返されます
  249. \return PKCS7_OID_E 与えられたPKIMSGが署名付きデータ型ではない場合に返されます
  250. \return ASN_VERSION_E PKCS7署名者情報がバージョン1ではない場合に返されます
  251. \return MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  252. \return PUBLIC_KEY_E 公開鍵の解析中にエラーがある場合
  253. \return RSA_BUFFER_E バッファエラーが発生した場合は、小さすぎたり入力が大きすぎたりし過ぎません
  254. \return BUFFER_E 指定されたバッファがエンコードされた証明書を保持するのに十分な大きさでない場合に返されます
  255. \return MP_INIT_E 署名を生成するエラーがある場合は返却される可能性があります
  256. \return MP_READ_E 署名を生成するエラーがある場合は返却される可能性があります
  257. \return MP_CMP_E 署名を生成するエラーがある場合は返却される可能性があります
  258. \return MP_INVMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  259. \return MP_EXPTMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  260. \return MP_MOD_E 署名を生成するエラーがある場合は返却される可能性があります
  261. \return MP_MUL_E 署名を生成するエラーがある場合は返却される可能性があります
  262. \return MP_ADD_E 署名を生成するエラーがある場合は返却される可能性があります
  263. \return MP_MULMOD_E 署名を生成するエラーがある場合は返却される可能性があります
  264. \return MP_TO_E 署名を生成するエラーがある場合は返却される可能性があります
  265. \return MP_MEM 署名を生成するエラーがある場合は返却される可能性があります
  266. \param pkcs7 解析された証明書を保存するPKCS7構造へのポインタ
  267. \param hashBuf コンテンツデータの計算ハッシュへのポインタ
  268. \param hashSz ダイジェストのサイズ
  269. \param pkiMsgHead 署名されたメッセージヘッダーを含むバッファへのポインタを検証およびデコードする
  270. \param pkiMsgHeadSz 署名付きメッセージヘッダーのサイズ
  271. \param pkiMsgFoot 署名されたメッセージフッターを含むバッファへのポインタを検証してデコードする
  272. _Example_
  273. \code
  274. PKCS7 pkcs7;
  275. int ret;
  276. byte data[] = {}; // initialize with data to sign
  277. byte pkcs7HeadBuff[] = {}; // initialize with PKCS7 header
  278. byte pkcs7FootBuff[] = {}; // initialize with PKCS7 footer
  279. enum wc_HashType hashType = WC_HASH_TYPE_SHA;
  280. byte hashBuf[WC_MAX_DIGEST_SIZE];
  281. word32 hashSz = wc_HashGetDigestSize(hashType);
  282. wc_PKCS7_InitWithCert(&pkcs7, NULL, 0);
  283. // update message and data to encode
  284. pkcs7.privateKey = key;
  285. pkcs7.privateKeySz = keySz;
  286. pkcs7.content = NULL;
  287. pkcs7.contentSz = dataSz;
  288. pkcs7.rng = &rng;
  289. ... etc.
  290. // calculate hash for content
  291. ret = wc_HashInit(&hash, hashType);
  292. if (ret == 0) {
  293. ret = wc_HashUpdate(&hash, hashType, data, sizeof(data));
  294. if (ret == 0) {
  295. ret = wc_HashFinal(&hash, hashType, hashBuf);
  296. }
  297. wc_HashFree(&hash, hashType);
  298. }
  299. ret = wc_PKCS7_VerifySignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff,
  300. sizeof(pkcs7HeadBuff), pkcs7FootBuff, sizeof(pkcs7FootBuff));
  301. if ( ret != 0 ) {
  302. // error encoding into output buffer
  303. }
  304. wc_PKCS7_Free(&pkcs7);
  305. \endcode
  306. \sa wc_PKCS7_InitWithCert
  307. \sa wc_PKCS7_EncodeSignedData_ex
  308. */
  309. int wc_PKCS7_VerifySignedData_ex(PKCS7* pkcs7, const byte* hashBuf,
  310. word32 hashSz, byte* pkiMsgHead, word32 pkiMsgHeadSz, byte* pkiMsgFoot,
  311. word32 pkiMsgFootSz);
  312. /*!
  313. \ingroup PKCS7
  314. \brief この関数は、PKCS7構造を編集し、PKCS7構造を符号化し、Parsable PKCS7エンベロープデータパケットを含むバッファに編集します。
  315. \return Success エンベロープデータ形式でメッセージを正常にエンコードする上で返信され、出力バッファに書き込まれたサイズを返します。
  316. \return BAD_FUNC_ARG: 入力パラメータの1つが無効な場合、またはPKCS7構造が必要な要素を欠落している場合
  317. \return ALGO_ID_E pkcs7構造がサポートされていないアルゴリズムタイプを使用している場合に返されます。現在、DESBとDES3Bのみがサポートされています
  318. \return BUFFER_E 与えられた出力バッファが小さすぎて出力データを保存する場合に返されます
  319. \return MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  320. \return RNG_FAILURE_E 暗号化の乱数発生器の初期化中にエラーがある場合
  321. \return DRBG_FAILED 暗号化に使用される乱数発生器を使用して数字を生成するエラーが発生した場合
  322. \param pkcs7 符号化するPKCS7構造へのポインタ
  323. \param output エンコードされた証明書を保存するバッファへのポインタ
  324. _Example_
  325. \code
  326. PKCS7 pkcs7;
  327. int ret;
  328. byte derBuff[] = { }; // initialize with DER-encoded certificate
  329. byte pkcs7Buff[FOURK_BUF];
  330. wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff));
  331. // update message and data to encode
  332. pkcs7.privateKey = key;
  333. pkcs7.privateKeySz = keySz;
  334. pkcs7.content = data;
  335. pkcs7.contentSz = dataSz;
  336. ... etc.
  337. ret = wc_PKCS7_EncodeEnvelopedData(&pkcs7, pkcs7Buff, sizeof(pkcs7Buff));
  338. if ( ret != 0 ) {
  339. // error encoding into output buffer
  340. }
  341. \endcode
  342. \sa wc_PKCS7_InitWithCert
  343. \sa wc_PKCS7_DecodeEnvelopedData
  344. */
  345. int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7,
  346. byte* output, word32 outputSz);
  347. /*!
  348. \ingroup PKCS7
  349. \brief この関数はPKCS7エンベロープデータコンテンツタイプをアントラップして復号化し、メッセージを出力にデコードします。渡されたPKCS7オブジェクトの秘密鍵を使用してメッセージを復号化します。
  350. \return On メッセージから情報を抽出するには、出力に書き込まれたバイト数を返します。
  351. \return BAD_FUNC_ARG 入力パラメータの1つが無効な場合は返されます
  352. \return ASN_PARSE_E 与えられたPKIMSGから解析中のエラーがある場合に返されます
  353. \return PKCS7_OID_E 与えられたPKIMSGがエンベロープデータ型ではない場合に返されます
  354. \return ASN_VERSION_E PKCS7署名者情報がバージョン0ではない場合に返されます
  355. \return MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます
  356. \return ALGO_ID_E pkcs7構造がサポートされていないアルゴリズムタイプを使用している場合に返されます。現在、Signature Generation for Signature GenerationのRSAKを使用して、DESBとDES3Bのみが暗号化でサポートされています。
  357. \return PKCS7_RECIP_E 提供された受信者と一致するエンベロープデータに受信者が見つからない場合
  358. \return RSA_BUFFER_E バッファエラーが原因でRSAシグネチャ検証中にエラーがある場合は、小さすぎたり入力が大きすぎたりすると元に戻されます。
  359. \return MP_INIT_E 署名検証中にエラーがある場合は返却される可能性があります
  360. \return MP_READ_E 署名検証中にエラーがある場合は返却される可能性があります
  361. \return MP_CMP_E 署名検証中にエラーがある場合は返却される可能性があります
  362. \return MP_INVMOD_E 署名検証中にエラーがある場合は返却される可能性があります
  363. \return MP_EXPTMOD_E 署名検証中にエラーがある場合は返却される可能性があります
  364. \return MP_MOD_E 署名検証中にエラーがある場合は返却される可能性があります
  365. \return MP_MUL_E 署名検証中にエラーがある場合は返却される可能性があります
  366. \return MP_ADD_E 署名検証中にエラーがある場合は返却される可能性があります
  367. \return MP_MULMOD_E 署名検証中にエラーがある場合は返却される可能性があります
  368. \return MP_TO_E 署名検証中にエラーがある場合は返却される可能性があります
  369. \return MP_MEM 署名検証中にエラーがある場合は返却される可能性があります
  370. \param pkcs7 エンベロープデータパッケージをデコードする秘密鍵を含むPKCS7構造へのポインタ
  371. \param pkiMsg エンベロープデータパッケージを含むバッファへのポインタ
  372. \param pkiMsgSz 包み込まれたデータパッケージのサイズ
  373. \param output デコードされたメッセージを保存するバッファへのポインタ
  374. _Example_
  375. \code
  376. PKCS7 pkcs7;
  377. byte received[] = { }; // initialize with received enveloped message
  378. byte decoded[FOURK_BUF];
  379. int decodedSz;
  380. // initialize pkcs7 with certificate
  381. // update key
  382. pkcs7.privateKey = key;
  383. pkcs7.privateKeySz = keySz;
  384. decodedSz = wc_PKCS7_DecodeEnvelopedData(&pkcs7, received,
  385. sizeof(received),decoded, sizeof(decoded));
  386. if ( decodedSz != 0 ) {
  387. // error decoding message
  388. }
  389. \endcode
  390. \sa wc_PKCS7_InitWithCert
  391. \sa wc_PKCS7_EncodeEnvelopedData
  392. */
  393. int wc_PKCS7_DecodeEnvelopedData(PKCS7* pkcs7, byte* pkiMsg,
  394. word32 pkiMsgSz, byte* output,
  395. word32 outputSz);