asn_public.h 91 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984
  1. /*!
  2. \ingroup ASN
  3. \brief この関数はCert構造体をデフォルトの値で初期化します。デフォルトのオプション:version = 3(0x2)、sigtype = sha_with_rsa、issuer =空白、dayValid = 500、selfsigned = 1(true)発行者としての件名=空白
  4. \return 成功した場合0を返します。
  5. _Example_
  6. \code
  7. Cert myCert;
  8. wc_InitCert(&myCert);
  9. \endcode
  10. \sa wc_MakeCert
  11. \sa wc_MakeCertReq
  12. */
  13. int wc_InitCert(Cert*);
  14. /*!
  15. \ingroup ASN
  16. \brief この関数は証明書操作の為に新たなCert構造体を割り当てます。
  17. 割り当てたCert構造体はこの関数内で初期化されるので、wc_InitCert()を呼び出す必要はありません。
  18. アプリケーションがこのCert構造体の使用を終了する際にはwc_CertFree()を呼び出す必要があります。
  19. \return 処理が成功した際には新に割り当てられたCert構造体へのポインタを返します。
  20. \return メモリ確保に失敗した場合にはNULLを返します。
  21. \param メモリの動的確保で使用されるヒープへのポインタ。NULLの指定も可。
  22. _Example_
  23. \code
  24. Cert* myCert;
  25. myCert = wc_CertNew(NULL);
  26. if (myCert == NULL) {
  27. // Cert creation failure
  28. }
  29. \endcode
  30. \sa wc_InitCert
  31. \sa wc_MakeCert
  32. \sa wc_CertFree
  33. */
  34. Cert* wc_CertNew(void* heap);
  35. /*!
  36. \ingroup ASN
  37. \brief この関数はwc_CertNew()で確保されたCert構造体を解放します。
  38. \return 無し
  39. \param 解放すべきCert構造体へのポインタ
  40. _Example_
  41. \code
  42. Cert* myCert;
  43. myCert = wc_CertNew(NULL);
  44. // Perform cert operations.
  45. wc_CertFree(myCert);
  46. \endcode
  47. \sa wc_InitCert
  48. \sa wc_MakeCert
  49. \sa wc_CertNew
  50. */
  51. void wc_CertFree(Cert* cert);
  52. /*!
  53. \ingroup ASN
  54. \brief CA署名付き証明書を作成するために使用されます。
  55. サブジェクト情報を入力した後に呼び出す必要があります。
  56. この関数は、証明書入力からX.509v3 RSAまたはECC証明書を作成しderBufferに書き込みます。
  57. 証明書を生成するためのRsaKeyまたはEccKeyのいずれかを引数として取ります。
  58. この関数が呼び出される前に、証明書をwc_InitCertで初期化する必要があります。
  59. \return 指定された入力証明書からX509証明書が正常に生成された場合、生成された証明書のサイズを返します。
  60. \return MEMORY_E xmallocでのメモリ割り当でエラーが発生した場合に返ります。
  61. \return BUFFER_E 提供されたderBufferが生成された証明書を保存するには小さすぎる場合に返されます
  62. \return Others 証明書の生成が成功しなかった場合、追加のエラーメッセージが返される可能性があります。
  63. \param cert 初期化されたCert構造体へのポインタ
  64. \param derBuffer 生成された証明書を保持するバッファへのポインタ
  65. \param derSz 証明書を保存するバッファのサイズ
  66. \param rsaKey 証明書の生成に使用されるRSA鍵を含むRsaKey構造体へのポインタ
  67. \param eccKey 証明書の生成に使用されるECC鍵を含むEccKey構造体へのポインタ
  68. _Example_
  69. \code
  70. Cert myCert;
  71. wc_InitCert(&myCert);
  72. WC_RNG rng;
  73. //initialize rng;
  74. RsaKey key;
  75. //initialize key;
  76. byte * derCert = malloc(FOURK_BUF);
  77. word32 certSz;
  78. certSz = wc_MakeCert(&myCert, derCert, FOURK_BUF, &key, NULL, &rng);
  79. \endcode
  80. \sa wc_InitCert
  81. \sa wc_MakeCertReq
  82. */
  83. int wc_MakeCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey,
  84. ecc_key* eccKey, WC_RNG* rng);
  85. /*!
  86. \ingroup ASN
  87. \brief この関数は、入力されたCert構造体を使用して証明書署名要求を作成しderBufferに書き込みます。
  88. 証明書要求の生成にはRsaKeyまたはEccKeyのいずれかの鍵を受け取り使用します。
  89. この関数の後に、署名するためにwc_SignCert()を呼び出す必要があります。
  90. この関数の使用例については、wolfCryptテストアプリケーション(./wolfcrypt/test/test.c)を参照してください。
  91. \return 証明書署名要求が正常に生成されると、生成された証明書署名要求のサイズを返します。
  92. \return MEMORY_E xmallocでのメモリ割り当てでエラーが発生した場合
  93. \return BUFFER_E 提供されたderBufferが生成された証明書を保存するには小さすぎる場合
  94. \return Other 証明書署名要求の生成が成功しなかった場合、追加のエラーメッセージが返される可能性があります。
  95. \param cert 初期化されたCert構造体へのポインタ
  96. \param derBuffer 生成された証明書署名要求を保持するバッファへのポインタ
  97. \param derSz 証明書署名要求を保存するバッファのサイズ
  98. \param rsaKey 証明書署名要求を生成するために使用されるRSA鍵を含むRsaKey構造体へのポインタ
  99. \param eccKey 証明書署名要求を生成するために使用されるRECC鍵を含むEccKey構造体へのポインタ
  100. _Example_
  101. \code
  102. Cert myCert;
  103. // initialize myCert
  104. EccKey key;
  105. //initialize key;
  106. byte* derCert = (byte*)malloc(FOURK_BUF);
  107. word32 certSz;
  108. certSz = wc_MakeCertReq(&myCert, derCert, FOURK_BUF, NULL, &key);
  109. \endcode
  110. \sa wc_InitCert
  111. \sa wc_MakeCert
  112. */
  113. int wc_MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz,
  114. RsaKey* rsaKey, ecc_key* eccKey);
  115. /*!
  116. \ingroup ASN
  117. \brief この関数はバッファーの内容に署名し、署名をバッファの最後に追加します。署名の種類を取ります。
  118. CA署名付き証明書を作成する場合は、wc_MakeCert()またはwc_MakeCertReq()の後に呼び出す必要があります。
  119. \return 証明書への署名に成功した場合は、証明書の新しいサイズ(署名を含む)を返します。
  120. \return MEMORY_E xmallocでのメモリを割り当てでエラーがある場合
  121. \return BUFFER_E 提供された証明書を保存するには提供されたバッファが小さすぎる場合に返されます。
  122. \return Other 証明書の生成が成功しなかった場合、追加のエラーメッセージが返される可能性があります。
  123. \param requestSz 署名対象の証明書本文のサイズ
  124. \param sigType 作成する署名の種類。有効なオプションは次のとおりです:CTC_MD5WRSA、CTC_SHAWRSA、CTC_SHAWECDSA、CTC_SHA256WECDSA、ANDCTC_SHA256WRSA
  125. \param derBuffer 署名対象の証明書を含むバッファへのポインタ。関数の処理成功時には署名が付加された証明書を保持します。
  126. \param derSz 新たに署名された証明書を保存するバッファの(合計)サイズ
  127. \param rsaKey 証明書に署名するために使用されるRSA鍵を含むRsaKey構造体へのポインタ
  128. \param eccKey 証明書に署名するために使用されるECC鍵を含むEccKey構造体へのポインタ
  129. \param rng 署名に使用する乱数生成器(WC_RNG構造体)へのポインタ
  130. _Example_
  131. \code
  132. Cert myCert;
  133. byte* derCert = (byte*)malloc(FOURK_BUF);
  134. // initialize myCert, derCert
  135. RsaKey key;
  136. // initialize key;
  137. WC_RNG rng;
  138. // initialize rng
  139. word32 certSz;
  140. certSz = wc_SignCert(myCert.bodySz, myCert.sigType, derCert, FOURK_BUF,
  141. &key, NULL, &rng);
  142. \endcode
  143. \sa wc_InitCert
  144. \sa wc_MakeCert
  145. */
  146. int wc_SignCert(int requestSz, int sigType, byte* derBuffer,
  147. word32 derSz, RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng);
  148. /*!
  149. \ingroup ASN
  150. \brief この関数は、以前の2つの関数、wc_MakeCert、および自己署名のためのwc_SignCertの組み合わせです(前の関数はCA要求に使用される場合があります)。
  151. 証明書を作成してから、それに署名し、自己署名証明書を生成します。
  152. \return 証明書への署名が成功した場合は、証明書の新しいサイズを返します。
  153. \return MEMORY_E xmallocでのメモリを割り当てでエラーがある場合
  154. \return BUFFER_E 提供された証明書を保存するには提供されたバッファが小さすぎる場合に返されます。
  155. \return Other 証明書の生成が成功しなかった場合、追加のエラーメッセージが返される可能性があります。
  156. \param cert 署名する対象のCert構造体へのポインタ
  157. \param derBuffer 署名付き証明書を保持するためのバッファへのポインタ
  158. \param derSz 署名付き証明書を保存するバッファのサイズ
  159. \param key 証明書に署名するために使用されるRSA鍵を含むRsaKey構造体へのポインタ
  160. \param rng 署名に使用する乱数生成器(WC_RNG構造体)へのポインタ
  161. _Example_
  162. \code
  163. Cert myCert;
  164. byte* derCert = (byte*)malloc(FOURK_BUF);
  165. // initialize myCert, derCert
  166. RsaKey key;
  167. // initialize key;
  168. WC_RNG rng;
  169. // initialize rng
  170. word32 certSz;
  171. certSz = wc_MakeSelfCert(&myCert, derCert, FOURK_BUF, &key, NULL, &rng);
  172. \endcode
  173. \sa wc_InitCert
  174. \sa wc_MakeCert
  175. \sa wc_SignCert
  176. */
  177. int wc_MakeSelfCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* key,
  178. WC_RNG* rng);
  179. /*!
  180. \ingroup ASN
  181. \brief この関数はPEM形式のissureFileで与えられた発行者を証明書の発行者として設定します。
  182. また、その際に、証明書の自己署名プロパティをfalseに変更します。
  183. 発行者は証明書の発行者として設定される前に検証されます。
  184. この関数は証明書への署名に先立ち呼び出される必要があります。
  185. \return 0 証明書の発行者の設定に成功した場合に返されます。
  186. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  187. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  188. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  189. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  190. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  191. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  192. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  193. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  194. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  195. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  196. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  197. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  198. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  199. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  200. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  201. \return ASN_NO_SIGNER_E CA証明書の発行者を検証することができない場合に返されます。
  202. \param cert 発行者を設定する対象のCert構造体へのポインタ
  203. \param issuerFile PEM形式の証明書ファイルへのファイルパス
  204. _Example_
  205. \code
  206. Cert myCert;
  207. // initialize myCert
  208. if(wc_SetIssuer(&myCert, ”./path/to/ca-cert.pem”) != 0) {
  209. // error setting issuer
  210. }
  211. \endcode
  212. \sa wc_InitCert
  213. \sa wc_SetSubject
  214. \sa wc_SetIssuerBuffer
  215. */
  216. int wc_SetIssuer(Cert* cert, const char* issuerFile);
  217. /*!
  218. \ingroup ASN
  219. \brief この関数はPEM形式のsubjectFileで与えられた主体者を証明書の主体者として設定します。
  220. この関数は証明書への署名に先立ち呼び出される必要があります。
  221. \return 0 証明書の主体者の設定に成功した場合に返されます。
  222. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  223. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  224. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  225. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  226. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  227. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  228. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  229. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  230. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  231. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  232. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  233. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  234. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  235. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  236. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  237. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  238. \param 主体者を設定する対象のCert構造体へのポインタ
  239. \param subjectFile PEM形式の証明書ファイルへのファイルパス
  240. _Example_
  241. \code
  242. Cert myCert;
  243. // initialize myCert
  244. if(wc_SetSubject(&myCert, ”./path/to/ca-cert.pem”) != 0) {
  245. // error setting subject
  246. }
  247. \endcode
  248. \sa wc_InitCert
  249. \sa wc_SetIssuer
  250. */
  251. int wc_SetSubject(Cert* cert, const char* subjectFile);
  252. /*!
  253. \ingroup ASN
  254. \brief この関数はDER形式でバッファに格納されているRaw-Subject情報を証明書のRaw-Subject情報として設定します。
  255. この関数は証明書への署名に先立ち呼び出される必要があります。
  256. \return 0 証明書のRaw-Subject情報の設定に成功した場合に返されます。
  257. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  258. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  259. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  260. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  261. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  262. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  263. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  264. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  265. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  266. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  267. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  268. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  269. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  270. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  271. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  272. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  273. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  274. \param cert Raw-Subject情報を設定する対象のCert構造体へのポインタ
  275. \param der DER形式の証明書を格納しているバッファへのポインタ。この証明書のRaw-Subject情報が取り出されてcertに設定されます。
  276. \param derSz DER形式の証明書を格納しているバッファのサイズ
  277. _Example_
  278. \code
  279. Cert myCert;
  280. // initialize myCert
  281. byte* der;
  282. der = (byte*)malloc(FOURK_BUF);
  283. // initialize der
  284. if(wc_SetSubjectRaw(&myCert, der, FOURK_BUF) != 0) {
  285. // error setting subject
  286. }
  287. \endcode
  288. \sa wc_InitCert
  289. \sa wc_SetSubject
  290. */
  291. int wc_SetSubjectRaw(Cert* cert, const byte* der, int derSz);
  292. /*!
  293. \ingroup ASN
  294. \brief この関数はCert構造体からRaw-Subject情報を取り出します。
  295. \return 0 証明書のRaw-Subject情報の取得に成功した場合に返されます。
  296. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  297. \param subjectRaw 処理が成功した際に返されるRaw-Subject情報を格納するバッファへのポインタのポインタ
  298. \param cert Raw-Subject情報を保持するCert構造体へのポインタ
  299. _Example_
  300. \code
  301. Cert myCert;
  302. byte *subjRaw;
  303. // initialize myCert
  304. if(wc_GetSubjectRaw(&subjRaw, &myCert) != 0) {
  305. // error setting subject
  306. }
  307. \endcode
  308. \sa wc_InitCert
  309. \sa wc_SetSubjectRaw
  310. */
  311. int wc_GetSubjectRaw(byte **subjectRaw, Cert *cert);
  312. /*!
  313. \ingroup ASN
  314. \brief この関数は引数で与えられたPEM形式の証明書の主体者の別名をCert構造体に設定します。
  315. 複数のドメインで同一の証明書を使用する際には主体者の別名を付与する機能は有用です。
  316. この関数は証明書への署名に先立ち呼び出される必要があります。
  317. \return 0 証明書の主体者の設定に成功した場合に返されます。
  318. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  319. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  320. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  321. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  322. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  323. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  324. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  325. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  326. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  327. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  328. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  329. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  330. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  331. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  332. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  333. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  334. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  335. \param cert 主体者の別名を設定する対象のCert構造体へのポインタ
  336. \param file PEM形式の証明書のファイルパス
  337. _Example_
  338. \code
  339. Cert myCert;
  340. // initialize myCert
  341. if(wc_SetSubject(&myCert, ”./path/to/ca-cert.pem”) != 0) {
  342. // error setting alt names
  343. }
  344. \endcode
  345. \sa wc_InitCert
  346. \sa wc_SetIssuer
  347. */
  348. int wc_SetAltNames(Cert* cert, const char* file);
  349. /*!
  350. \ingroup ASN
  351. \brief この関数はDER形式でバッファに格納されている発行者を証明書の発行者として設定します。
  352. 加えて、証明書の事故署名プロパティをfalseに設定します。
  353. この関数は証明書への署名に先立ち呼び出される必要があります。
  354. \return 0 証明書の発行者の設定に成功した場合に返されます。
  355. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  356. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  357. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  358. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  359. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  360. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  361. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  362. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  363. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  364. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  365. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  366. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  367. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  368. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  369. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  370. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  371. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  372. \param cert 発行者を設定する対象のCert構造体へのポインタ
  373. \param der DER形式の証明書を格納しているバッファへのポインタ。この証明書の発行者情報が取り出されてcertに設定されます。
  374. \param derSz DER形式の証明書を格納しているバッファのサイズ
  375. _Example_
  376. \code
  377. Cert myCert;
  378. // initialize myCert
  379. byte* der;
  380. der = (byte*)malloc(FOURK_BUF);
  381. // initialize der
  382. if(wc_SetIssuerBuffer(&myCert, der, FOURK_BUF) != 0) {
  383. // error setting issuer
  384. }
  385. \endcode
  386. \sa wc_InitCert
  387. \sa wc_SetIssuer
  388. */
  389. int wc_SetIssuerBuffer(Cert* cert, const byte* der, int derSz);
  390. /*!
  391. \ingroup ASN
  392. \brief この関数はDER形式でバッファに格納されているRaw-Issuer情報を証明書のRaw-Issuer情報として設定します。
  393. この関数は証明書への署名に先立ち呼び出される必要があります。
  394. \return 0 証明書のRaw-Issuer情報の設定に成功した場合に返されます。
  395. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  396. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  397. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  398. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  399. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  400. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  401. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  402. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  403. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  404. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  405. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  406. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  407. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  408. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  409. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  410. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  411. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  412. \param cert Raw-Issuer情報を設定する対象のCert構造体へのポインタ
  413. \param der DER形式の証明書を格納しているバッファへのポインタ。この証明書のRaw-Issuer情報が取り出されてcertに設定されます。
  414. \param derSz DER形式の証明書を格納しているバッファのサイズ
  415. _Example_
  416. \code
  417. Cert myCert;
  418. // initialize myCert
  419. byte* der;
  420. der = (byte*)malloc(FOURK_BUF);
  421. // initialize der
  422. if(wc_SetIssuerRaw(&myCert, der, FOURK_BUF) != 0) {
  423. // error setting subject
  424. }
  425. \endcode
  426. \sa wc_InitCert
  427. \sa wc_SetIssuer
  428. */
  429. int wc_SetIssuerRaw(Cert* cert, const byte* der, int derSz);
  430. /*!
  431. \ingroup ASN
  432. \brief この関数はDER形式でバッファに格納されている主体者を証明書の主体者として設定します。
  433. この関数は証明書への署名に先立ち呼び出される必要があります。
  434. \return 0 証明書の主体者の設定に成功した場合に返されます。
  435. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  436. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  437. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  438. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  439. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  440. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  441. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  442. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  443. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  444. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  445. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  446. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  447. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  448. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  449. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  450. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  451. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  452. \param cert 主体者を設定する対象のCert構造体へのポインタ
  453. \param der DER形式の証明書を格納しているバッファへのポインタ。この証明書の主体者が取り出されてcertに設定されます。
  454. \param derSz DER形式の証明書を格納しているバッファのサイズ
  455. _Example_
  456. \code
  457. Cert myCert;
  458. // initialize myCert
  459. byte* der;
  460. der = (byte*)malloc(FOURK_BUF);
  461. // initialize der
  462. if(wc_SetSubjectBuffer(&myCert, der, FOURK_BUF) != 0) {
  463. // error setting subject
  464. }
  465. \endcode
  466. \sa wc_InitCert
  467. \sa wc_SetSubject
  468. */
  469. int wc_SetSubjectBuffer(Cert* cert, const byte* der, int derSz);
  470. /*!
  471. \ingroup ASN
  472. \brief この関数はDER形式でバッファに格納されている「別名情報」を証明書の「別名情報」として設定します。
  473. この機能は複数ドメインを一つの証明書を使ってセキュアにする際に有用です。
  474. この関数は証明書への署名に先立ち呼び出される必要があります。
  475. \return 0 証明書の別名情報の設定に成功した場合に返されます。
  476. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  477. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  478. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  479. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  480. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  481. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  482. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  483. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  484. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  485. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  486. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  487. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  488. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  489. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  490. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  491. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  492. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  493. \param cert 別名情報を設定する対象のCert構造体へのポインタ
  494. \param der DER形式の証明書を格納しているバッファへのポインタ。この証明書の別名情報が取り出されてcertに設定されます。
  495. \param derSz DER形式の証明書を格納しているバッファのサイズ
  496. _Example_
  497. \code
  498. Cert myCert;
  499. // initialize myCert
  500. byte* der;
  501. der = (byte*)malloc(FOURK_BUF);
  502. // initialize der
  503. if(wc_SetAltNamesBuffer(&myCert, der, FOURK_BUF) != 0) {
  504. // error setting subject
  505. }
  506. \endcode
  507. \sa wc_InitCert
  508. \sa wc_SetAltNames
  509. */
  510. int wc_SetAltNamesBuffer(Cert* cert, const byte* der, int derSz);
  511. /*!
  512. \ingroup ASN
  513. \brief この関数はDER形式でバッファに格納されている「有効期間」情報を証明書の「有効期間」情報として設定します。
  514. この関数は証明書への署名に先立ち呼び出される必要があります。
  515. \return 0 証明書の有効期間情報の設定に成功した場合に返されます。
  516. \return MEMORY_E XMALLOCでメモリの確保に失敗した際に返されます。
  517. \return ASN_PARSE_E 証明書のヘッダーファイルの解析に失敗した際に返されます。
  518. \return ASN_OBJECT_ID_E 証明書の暗号タイプの解析でエラーが発生した際に返されます。
  519. \return ASN_EXPECT_0_E 証明書の暗号化仕様にフォーマットエラーが検出された際に返されます。
  520. \return ASN_BEFORE_DATE_E 証明書の使用開始日より前であった場合に返されます。
  521. \return ASN_AFTER_DATE_E 証明書の有効期限日より後であった場合に返されます。
  522. \return ASN_BITSTR_E 証明書のビットストリング要素の解析でエラーが発生した際に返されます。
  523. \return ECC_CURVE_OID_E 証明書のECC鍵の解析でエラーが発生した際に返されます。
  524. \return ASN_UNKNOWN_OID_E 証明書が未知のオブジェクトIDを使用していた際に返されます。
  525. \return ASN_VERSION_E ALLOW_V1_EXTENSIONSマクロが定義されていないのに証明書がV1あるいはV2形式であった場合に返されます。
  526. \return BAD_FUNC_ARG 証明書の拡張情報の解析でエラーが発生した際に返されます。
  527. \return ASN_CRIT_EXT_E 証明書の解析中に未知のクリティカル拡張に遭遇した際に返されます。
  528. \return ASN_SIG_OID_E 署名暗号化タイプが引数で渡された証明書のタイプと異なる場合に返されます。
  529. \return ASN_SIG_CONFIRM_E 証明書の署名の検証に失敗した際に返されます。
  530. \return ASN_NAME_INVALID_E 証明書の名前がCAの名前に関数制限によって許されていない場合に返されます。
  531. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  532. \return ASN_NO_SIGNER_E CA証明書の主体者を検証することができない場合に返されます。
  533. \param cert 有効期間情報を設定する対象のCert構造体へのポインタ
  534. \param der DER形式の証明書を格納しているバッファへのポインタ。この証明書の有効期間情報が取り出されてcertに設定されます。
  535. \param derSz DER形式の証明書を格納しているバッファのサイズ
  536. _Example_
  537. \code
  538. Cert myCert;
  539. // initialize myCert
  540. byte* der;
  541. der = (byte*)malloc(FOURK_BUF);
  542. // initialize der
  543. if(wc_SetDatesBuffer(&myCert, der, FOURK_BUF) != 0) {
  544. // error setting subject
  545. }
  546. \endcode
  547. \sa wc_InitCert
  548. */
  549. int wc_SetDatesBuffer(Cert* cert, const byte* der, int derSz);
  550. /*!
  551. \ingroup ASN
  552. \brief この関数は指定されたRSAあるいはECC公開鍵の一方から得たAKID(認証者鍵ID)を証明書のAKIDとして設定します。
  553. \return 0 証明書のAKIDの設定に成功した場合に返されます。
  554. \return BAD_FUNC_ARG Cert構造体へのポインタ(cert)がNULLかRsaKey構造体へのポインタ(rsakey)とecc_key構造体へのポインタ(eckey)の両方がNULLである場合に返されます。
  555. \return MEMORY_E メモリの確保に失敗した際に返されます。
  556. \return PUBLIC_KEY_E 公開鍵の取得に失敗した際に返されます。
  557. \param cert AKIDを設定する対象のCert構造体へのポインタ
  558. \param rsakey RsaKey構造体へのポインタ
  559. \param eckey ecc_key構造体へのポインタ
  560. _Example_
  561. \code
  562. Cert myCert;
  563. RsaKey keypub;
  564. wc_InitRsaKey(&keypub, 0);
  565. if (wc_SetAuthKeyIdFromPublicKey(&myCert, &keypub, NULL) != 0)
  566. {
  567. // Handle error
  568. }
  569. \endcode
  570. \sa wc_SetSubjectKeyId
  571. \sa wc_SetAuthKeyId
  572. \sa wc_SetAuthKeyIdFromCert
  573. */
  574. int wc_SetAuthKeyIdFromPublicKey(Cert *cert, RsaKey *rsakey,
  575. ecc_key *eckey);
  576. /*!
  577. \ingroup ASN
  578. \brief この関数はDER形式でバッファに格納された証明書から得たAKID(認証者鍵ID)を証明書のAKIDとして設定します。
  579. \return 0 証明書のAKIDの設定に成功した場合に返されます。
  580. \return BAD_FUNC_ARG 引数のいずれかがNULL,あるいはderSzが0より小さい場合に返されます。
  581. \return MEMORY_E メモリの確保に失敗した際に返されます。
  582. \return ASN_NO_SKID 認証者鍵IDが見つからない場合に返されます。
  583. \param cert AKIDを設定する対象のCert構造体へのポインタ。
  584. \param der DER形式の証明書を格納しているバッファへのポインタ。
  585. \param derSz DER形式の証明書を格納しているバッファのサイズ。
  586. _Example_
  587. \code
  588. Cert some_cert;
  589. byte some_der[] = { // Initialize a DER buffer };
  590. wc_InitCert(&some_cert);
  591. if(wc_SetAuthKeyIdFromCert(&some_cert, some_der, sizeof(some_der) != 0)
  592. {
  593. // Handle error
  594. }
  595. \endcode
  596. \sa wc_SetAuthKeyIdFromPublicKey
  597. \sa wc_SetAuthKeyId
  598. */
  599. int wc_SetAuthKeyIdFromCert(Cert *cert, const byte *der, int derSz);
  600. /*!
  601. \ingroup ASN
  602. \brief この関数はPEM形式の証明書から得たAKID(認証者鍵ID)を証明書のAKIDとして設定します。
  603. \return 0 証明書のAKIDの設定に成功した場合に返されます。
  604. \return BAD_FUNC_ARG 引数のいずれかがNULLの場合に返されます。
  605. \return MEMORY_E メモリの確保に失敗した際に返されます。
  606. \param cert AKIDを設定する対象のCert構造体へのポインタ。
  607. \param file PEM形式の証明書ファイルへのファイルパス
  608. _Example_
  609. \code
  610. char* file_name = "/path/to/file";
  611. cert some_cert;
  612. wc_InitCert(&some_cert);
  613. if(wc_SetAuthKeyId(&some_cert, file_name) != 0)
  614. {
  615. // Handle Error
  616. }
  617. \endcode
  618. \sa wc_SetAuthKeyIdFromPublicKey
  619. \sa wc_SetAuthKeyIdFromCert
  620. */
  621. int wc_SetAuthKeyId(Cert *cert, const char* file);
  622. /*!
  623. \ingroup ASN
  624. \brief この関数は指定されたRSAあるいはECC公開鍵の一方から得たSKID(主体者鍵ID)を証明書のSKIDとして設定します。
  625. \return 0 証明書のSKIDの設定に成功した場合に返されます。
  626. \return BAD_FUNC_ARG Cert構造体へのポインタ(cert)がNULLかRsaKey構造体へのポインタ(rsakey)とecc_key構造体へのポインタ(eckey)の両方がNULLである場合に返されます。
  627. \return MEMORY_E メモリの確保に失敗した際に返されます。
  628. \return PUBLIC_KEY_E 公開鍵の取得に失敗した際に返されます。
  629. \param cert SKIDを設定する対象のCert構造体へのポインタ
  630. \param rsakey RsaKey構造体へのポインタ
  631. \param eckey ecc_key構造体へのポインタ
  632. _Example_
  633. \code
  634. Cert some_cert;
  635. RsaKey some_key;
  636. wc_InitCert(&some_cert);
  637. wc_InitRsaKey(&some_key);
  638. if(wc_SetSubjectKeyIdFromPublicKey(&some_cert,&some_key, NULL) != 0)
  639. {
  640. // Handle Error
  641. }
  642. \endcode
  643. \sa wc_SetSubjectKeyId
  644. */
  645. int wc_SetSubjectKeyIdFromPublicKey(Cert *cert, RsaKey *rsakey,
  646. ecc_key *eckey);
  647. /*!
  648. \ingroup ASN
  649. \brief この関数はPEM形式の証明書から得たSKID(主体者鍵ID)を証明書のSKIDとして設定します。
  650. 引数は両方が与えられることが必要です。
  651. \return 0 証明書のSKIDの設定に成功した場合に返されます。
  652. \return BAD_FUNC_ARG 引数のいずれかがNULLの場合に返されます。
  653. \return MEMORY_E メモリの確保に失敗した際に返されます。
  654. \return PUBLIC_KEY_E 公開鍵のデコードに失敗した際に返されます。
  655. \param cert SKIDを設定する対象のCert構造体へのポインタ。
  656. \param file PEM形式の証明書ファイルへのファイルパス
  657. _Example_
  658. \code
  659. const char* file_name = "path/to/file";
  660. Cert some_cert;
  661. wc_InitCert(&some_cert);
  662. if(wc_SetSubjectKeyId(&some_cert, file_name) != 0)
  663. {
  664. // Handle Error
  665. }
  666. \endcode
  667. \sa wc_SetSubjectKeyIdFromPublicKey
  668. */
  669. int wc_SetSubjectKeyId(Cert *cert, const char* file);
  670. /*!
  671. \ingroup RSA
  672. \brief この関数は鍵の用途を設定します。設定値の指定はコンマ区切りトークンを使用できます。
  673. 受け付けられるトークンは:digitalSignature, nonRepudiation, contentCommitment, keyCertSign, cRLSign, dataEncipherment,
  674. keyAgreement, keyEncipherment, encipherOnly, decipherOnly です。
  675. 指定例:"digitalSignature,nonRepudiation"。
  676. nonRepudiation と contentCommitment は同じ用途を意味します。
  677. \return 0 証明書の用途の設定に成功した場合に返されます。
  678. \return BAD_FUNC_ARG 引数のいずれかがNULLの場合に返されます。
  679. \return MEMORY_E メモリの確保に失敗した際に返されます。
  680. \return KEYUSAGE_E 未知のトークンが検出された際に返されます。
  681. \param cert 鍵の用途を設定する対象の初期化済みCert構造体へのポインタ。
  682. \param value 鍵の用途を意味するコンマ区切りトークン文字列へのポインタ
  683. _Example_
  684. \code
  685. Cert cert;
  686. wc_InitCert(&cert);
  687. if(wc_SetKeyUsage(&cert, "cRLSign,keyCertSign") != 0)
  688. {
  689. // Handle error
  690. }
  691. \endcode
  692. \sa wc_InitCert
  693. \sa wc_MakeRsaKey
  694. */
  695. int wc_SetKeyUsage(Cert *cert, const char *value);
  696. /*!
  697. \ingroup ASN
  698. \brief PEM形式の鍵ファイルをロードしDER形式に変換してバッファに出力します。
  699. \return 0 処理成功時に返されます。
  700. \return <0 エラー発生時に返されます。
  701. \return SSL_BAD_FILE ファイルのオープンに問題が生じた際に返されます。
  702. \return MEMORY_E メモリの確保に失敗した際に返されます。
  703. \return BUFFER_E 与えられた出力バッファderBufが結果を保持するのに十分な大きさがない場合に返されます。
  704. \param fileName PEM形式のファイルパス
  705. \param derBuf DER形式鍵を出力する先のバッファ
  706. \param derSz 出力先バッファのサイズ
  707. _Example_
  708. \code
  709. char* some_file = "filename";
  710. unsigned char der[];
  711. if(wc_PemPubKeyToDer(some_file, der, sizeof(der)) != 0)
  712. {
  713. //Handle Error
  714. }
  715. \endcode
  716. \sa wc_PubKeyPemToDer
  717. */
  718. int wc_PemPubKeyToDer(const char* fileName,
  719. unsigned char* derBuf, int derSz);
  720. /*!
  721. \ingroup ASN
  722. \brief PEM形式の鍵データをDER形式に変換してバッファに出力し、出力バイト数あるいは負のエラー値を返します。
  723. \return >0 処理成功時には出力したバイト数が返されます。
  724. \return BAD_FUNC_ARG 引数のpem, buff, あるいは buffSz のいずれかばNULLの場合に返されます。
  725. \return <0 エラーが発生した際に返されます。
  726. \param pem PEM形式の鍵を含んだバッファへのポインタ
  727. \param pemSz PEM形式の鍵を含んだバッファのサイズ
  728. \param buff 出力先バッファへのポインタ
  729. \param buffSz 出力先バッファのサイズ
  730. _Example_
  731. \code
  732. byte some_pem[] = { Initialize with PEM key }
  733. unsigned char out_buffer[1024]; // Ensure buffer is large enough to fit DER
  734. if(wc_PubKeyPemToDer(some_pem, sizeof(some_pem), out_buffer,
  735. sizeof(out_buffer)) < 0)
  736. {
  737. // Handle error
  738. }
  739. \endcode
  740. \sa wc_PemPubKeyToDer
  741. */
  742. int wc_PubKeyPemToDer(const unsigned char* pem, int pemSz,
  743. unsigned char* buff, int buffSz);
  744. /*!
  745. \ingroup ASN
  746. \brief この関数はPEM形式の証明書をDER形式に変換し、与えられたバッファに出力します。
  747. \return 処理成功時には出力したバイト数が返されます。
  748. \return BUFFER_E 与えられた出力バッファderBufが結果を保持するのに十分な大きさがない場合に返されます。
  749. \return MEMORY_E メモリの確保に失敗した際に返されます。
  750. \param fileName PEM形式のファイルパス
  751. \param derBuf DER形式証明書を出力する先のバッファへのポインタ
  752. \param derSz DER形式証明書を出力する先のバッファのサイズ
  753. _Example_
  754. \code
  755. char * file = “./certs/client-cert.pem”;
  756. int derSz;
  757. byte* der = (byte*)XMALLOC((8*1024), NULL, DYNAMIC_TYPE_CERT);
  758. derSz = wc_PemCertToDer(file, der, (8*1024));
  759. if (derSz <= 0) {
  760. //PemCertToDer error
  761. }
  762. \endcode
  763. \sa none
  764. */
  765. int wc_PemCertToDer(const char* fileName, unsigned char* derBuf, int derSz);
  766. /*!
  767. \ingroup ASN
  768. \brief この関数はバッファで与えられたDER形式の証明書をPEM形式に変換し、与えられた出力用バッファに出力します。
  769. この関数は入力バッファと出力バッファを共用することはできません。両バッファは必ず別のものを用意してください。
  770. \return 処理成功時には変換後のPEM形式データのサイズを返します。
  771. \return BAD_FUNC_ARG DER形式証明書データの解析中にエラーが発生した際、あるいはPEM形式に変換の際にエラーが発生した際に返されます。
  772. \return MEMORY_E メモリの確保に失敗した際に返されます。
  773. \return ASN_INPUT_E Base64エンコーディングエラーが検出された際に返されます。
  774. \return BUFFER_E 与えられた出力バッファが結果を保持するのに十分な大きさがない場合に返されます。
  775. \param der DER形式証明書データを保持するバッファへのポインタ
  776. \param derSz DER形式証明書データのサイズ
  777. \param output PEM形式証明書データを出力する先のバッファへのポインタ
  778. \param outSz PEM形式証明書データを出力する先のバッファのサイズ
  779. \param type 変換する証明書のタイプ。次のタイプが指定可: CERT_TYPE, PRIVATEKEY_TYPE, ECC_PRIVATEKEY_TYPE, and CERTREQ_TYPE.
  780. _Example_
  781. \code
  782. byte* der;
  783. // initialize der with certificate
  784. byte* pemFormatted[FOURK_BUF];
  785. word32 pemSz;
  786. pemSz = wc_DerToPem(der, derSz,pemFormatted,FOURK_BUF, CERT_TYPE);
  787. \endcode
  788. \sa wc_PemCertToDer
  789. */
  790. int wc_DerToPem(const byte* der, word32 derSz, byte* output,
  791. word32 outputSz, int type);
  792. /*!
  793. \ingroup ASN
  794. \brief この関数はDER形式証明書を入力バッファから読み出し、PEM形式に変換して出力バッファに出力します。
  795. この関数は入力バッファと出力バッファを共用することはできません。両バッファは必ず別のものを用意してください。
  796. 追加の暗号情報を指定することができます。
  797. \return 処理成功時には変換後のPEM形式データのサイズを返します。
  798. \return BAD_FUNC_ARG Returned DER形式証明書データの解析中にエラーが発生した際、あるいはPEM形式に変換の際にエラーが発生した際に返されます。
  799. \return MEMORY_E メモリの確保に失敗した際に返されます。
  800. \return ASN_INPUT_E Base64エンコーディングエラーが検出された際に返されます。
  801. \return BUFFER_E 与えられた出力バッファが結果を保持するのに十分な大きさがない場合に返されます。
  802. \param der DER形式証明書データを保持するバッファへのポインタ
  803. \param derSz DER形式証明書データのサイズ
  804. \param output PEM形式証明書データを出力する先のバッファへのポインタ
  805. \param outSz PEM形式証明書データを出力する先のバッファのサイズ
  806. \param cipher_inf 追加の暗号情報
  807. \param type 生成する証明書タイプ。指定可能なタイプ: CERT_TYPE, PRIVATEKEY_TYPE, ECC_PRIVATEKEY_TYPE と CERTREQ_TYPE
  808. _Example_
  809. \code
  810. byte* der;
  811. // initialize der with certificate
  812. byte* pemFormatted[FOURK_BUF];
  813. word32 pemSz;
  814. byte* cipher_info[] { Additional cipher info. }
  815. pemSz = wc_DerToPemEx(der, derSz, pemFormatted, FOURK_BUF, cipher_info, CERT_TYPE);
  816. \endcode
  817. \sa wc_PemCertToDer
  818. */
  819. int wc_DerToPemEx(const byte* der, word32 derSz, byte* output,
  820. word32 outputSz, byte *cipherIno, int type);
  821. /*!
  822. \ingroup CertsKeys
  823. \brief PEM形式の鍵をDER形式に変換します。
  824. \return 変換に成功した際には出力バッファに書き込んだデータサイズを返します。
  825. \return エラー発生時には負の整数値を返します。
  826. \param pem PEM形式の証明書データへのポインタ
  827. \param pemSz PEM形式の証明書データのサイズ
  828. \param buff DerBuffer構造体のbufferメンバーのコピーへのポインタ
  829. \param buffSz DerBuffer構造体のbufferメンバーへ確保されたバッファのサイズ
  830. \param pass パスワード
  831. _Example_
  832. \code
  833. byte* loadBuf;
  834. long fileSz = 0;
  835. byte* bufSz;
  836. static int LoadKeyFile(byte** keyBuf, word32* keyBufSz,
  837. const char* keyFile,
  838. int typeKey, const char* password);
  839. bufSz = wc_KeyPemToDer(loadBuf, (int)fileSz, saveBuf,
  840. (int)fileSz, password);
  841. if(saveBufSz > 0){
  842. // Bytes were written to the buffer.
  843. }
  844. \endcode
  845. \sa wc_PemToDer
  846. */
  847. int wc_KeyPemToDer(const unsigned char* pem, int pemSz,
  848. unsigned char* buff, int buffSz, const char* pass);
  849. /*!
  850. \ingroup CertsKeys
  851. \brief この関数はPEM形式の証明書をDER形式に変換します。内部ではOpenSSL互換APIのPemToDerを呼び出します。
  852. \return バッファに出力したサイズを返します。
  853. \param pem PEM形式の証明書を含むバッファへのポインタ
  854. \param pemSz PEM形式の証明書を含むバッファのサイズ
  855. \param buff DER形式に変換した証明書データの出力先バッファへのポインタ
  856. \param buffSz 出力先バッファのサイズ
  857. \param type 証明書のタイプ。asn_public.h で定義のenum CertTypeの値。
  858. _Example_
  859. \code
  860. const unsigned char* pem;
  861. int pemSz;
  862. unsigned char buff[BUFSIZE];
  863. int buffSz = sizeof(buff)/sizeof(char);
  864. int type;
  865. ...
  866. if(wc_CertPemToDer(pem, pemSz, buff, buffSz, type) <= 0) {
  867. // There were bytes written to buffer
  868. }
  869. \endcode
  870. \sa wc_PemToDer
  871. */
  872. int wc_CertPemToDer(const unsigned char* pem, int pemSz,
  873. unsigned char* buff, int buffSz, int type);
  874. /*!
  875. \ingroup CertsKeys
  876. \brief この関数は公開鍵をDER形式でDecodedCert構造体から取り出します。
  877. wc_InitDecodedCert()とwc_ParseCert()を事前に呼び出しておく必要があります。
  878. wc_InitDecodedCert()はDER/ASN.1エンコードされた証明書を受け付けます。
  879. PEM形式の鍵をDER形式で取得する場合には、wc_InitDecodedCert()より先にwc_CertPemToDer()を呼び出してください。
  880. \return 成功時に0を返します。エラー発生時には負の整数を返します。
  881. \return LENGTH_ONLY_E derKeyがNULLの際に返されます。
  882. \param cert X.509証明書を保持したDecodedCert構造体へのポインタ
  883. \param derKey DER形式の公開鍵を出力する先のバッファへのポインタ
  884. \param derKeySz [IN/OUT] 入力時にはderKeyで与えられるバッファのサイズ,出力時には公開鍵のサイズを保持します。
  885. もし、derKeyがNULLで渡された場合には, derKeySzには必要なバッファサイズが格納され、LENGTH_ONLY_Eが戻り値として返されます。
  886. \sa wc_GetPubKeyDerFromCert
  887. */
  888. int wc_GetPubKeyDerFromCert(struct DecodedCert* cert,
  889. byte* derKey, word32* derKeySz);
  890. /*!
  891. \ingroup ASN
  892. \brief この関数はECC秘密鍵を入力バッファから読み込み、解析の後ecc_key構造体を作成してそこに鍵を格納します。
  893. \return 0 秘密鍵のデコードと結果のecc_key構造体への格納成功時に返されます。
  894. \return ASN_PARSE_E 入力バッファの解析あるいは結果の格納時にエラーが発生した場合に返されます。
  895. \return MEMORY_E メモリの確保に失敗した際に返されます。
  896. \return BUFFER_E 入力された証明書が最大証明書サイズより大きかった場合に返されます。
  897. \return ASN_OBJECT_ID_E 証明書が無効なオブジェクトIDを含んでいる場合に返されます。
  898. \return ECC_CURVE_OID_E 与えられた秘密鍵のECC曲線がサポートされていない場合に返されます。
  899. \return ECC_BAD_ARG_E ECC秘密鍵のフォーマットにエラーがある場合に返されます。
  900. \return NOT_COMPILED_IN 秘密鍵が圧縮されていて圧縮鍵が提供されていない場合に返されます。
  901. \return MP_MEM 秘密鍵の解析で使用される数学ライブラリがエラーを検出した場合に返されます。
  902. \return MP_VAL 秘密鍵の解析で使用される数学ライブラリがエラーを検出した場合に返されます。
  903. \return MP_RANGE 秘密鍵の解析で使用される数学ライブラリがエラーを検出した場合に返されます。
  904. \param input 入力となる秘密鍵データを含んでいるバッファへのポインタ
  905. \param inOutIdx word32型変数で内容として入力バッファの処理開始位置を先頭からのインデクス値として保持している。
  906. \param key デコードされた秘密鍵が格納される初期化済みのecc_key構造体へのポインタ
  907. \param inSz 秘密鍵を含んでいる入力バッファのサイズ
  908. _Example_
  909. \code
  910. int ret, idx=0;
  911. ecc_key key; // to store key in
  912. byte* tmp; // tmp buffer to read key from
  913. tmp = (byte*) malloc(FOURK_BUF);
  914. int inSz;
  915. inSz = fread(tmp, 1, FOURK_BUF, privateKeyFile);
  916. // read key into tmp buffer
  917. wc_ecc_init(&key); // initialize key
  918. ret = wc_EccPrivateKeyDecode(tmp, &idx, &key, (word32)inSz);
  919. if(ret < 0) {
  920. // error decoding ecc key
  921. }
  922. \endcode
  923. \sa wc_RSA_PrivateKeyDecode
  924. */
  925. int wc_EccPrivateKeyDecode(const byte* input, word32* inOutIdx,
  926. ecc_key* key, word32 inSz);
  927. /*!
  928. \ingroup ASN
  929. \brief この関数はECC秘密鍵をDER形式でバッファに出力します。
  930. \return ECC秘密鍵をDER形式での出力に成功した場合にはバッファへ出力したサイズを返します。
  931. \return BAD_FUNC_ARG 出力バッファoutputがNULLあるいはinLenがゼロの場合に返します。
  932. \return MEMORY_E メモリの確保に失敗した際に返されます。
  933. \return BUFFER_E 出力バッファが必要量より小さい
  934. \return ASN_UNKNOWN_OID_E ECC秘密鍵が未知のタイプの場合に返します。
  935. \return MP_MEM 秘密鍵の解析で使用される数学ライブラリがエラーを検出した場合に返されます。
  936. \return MP_VAL 秘密鍵の解析で使用される数学ライブラリがエラーを検出した場合に返されます。
  937. \return MP_RANGE 秘密鍵の解析で使用される数学ライブラリがエラーを検出した場合に返されます。
  938. \param key 入力となるECC秘密鍵データを含んでいるバッファへのポインタ
  939. \param output DER形式のECC秘密鍵を出力する先のバッファへのポインタ
  940. \param inLen DER形式のECC秘密鍵を出力する先のバッファのサイズ
  941. _Example_
  942. \code
  943. int derSz;
  944. ecc_key key;
  945. // initialize and make key
  946. byte der[FOURK_BUF];
  947. // store der formatted key here
  948. derSz = wc_EccKeyToDer(&key, der, FOURK_BUF);
  949. if(derSz < 0) {
  950. // error converting ecc key to der buffer
  951. }
  952. \endcode
  953. \sa wc_RsaKeyToDer
  954. */
  955. int wc_EccKeyToDer(ecc_key* key, byte* output, word32 inLen);
  956. /*!
  957. \ingroup ASN
  958. \brief この関数は入力バッファのECC公開鍵をASNシーケンスをデコードして取り出します。
  959. \return 0 処理成功時に返します。
  960. \return BAD_FUNC_ARG Returns いずれかの引数がNULLの場合に返します。
  961. \return ASN_PARSE_E 解析中にエラーが発生した場合に返します。
  962. \return ASN_ECC_KEY_E 鍵のインポートでエラーが発生した場合に返します。
  963. 発生理由についてはwc_ecc_import_x963()を参照のこと。
  964. \param input DER形式の公開鍵を含んだバッファへのポインタ
  965. \param inOutIdx バッファの読み出し位置インデクス値を保持している変数へのポインタ(入力時)。
  966. 出力時にはこの変数に解析済みのバッファのインデクス値が格納されます。
  967. \param key ecc_key構造体へのポインタ
  968. \param inSz 入力バッファのサイズ
  969. _Example_
  970. \code
  971. int ret;
  972. word32 idx = 0;
  973. byte buff[] = { // initialize with key };
  974. ecc_key pubKey;
  975. wc_ecc_init(&pubKey);
  976. if ( wc_EccPublicKeyDecode(buff, &idx, &pubKey, sizeof(buff)) != 0) {
  977. // error decoding key
  978. }
  979. \endcode
  980. \sa wc_ecc_import_x963
  981. */
  982. int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
  983. ecc_key* key, word32 inSz);
  984. /*!
  985. \ingroup ASN
  986. \brief この関数はECC公開鍵をDER形式に変換します。
  987. 処理したバッファのサイズを返します。変換して得られるDER形式のECC公開鍵は出力バッファに格納されます。
  988. AlgCurveフラグの指定により、アルゴリズムと曲線情報をヘッダーに含めることができます。
  989. \return 成功時には処理したバッファのサイズを返します。
  990. \return BAD_FUNC_ARG 出力バッファoutputあるいはecc_key構造体keyがNULLの場合に返します。
  991. \return LENGTH_ONLY_E ECC公開鍵のサイズ取得に失敗した場合に返します。
  992. \return BUFFER_E 出力バッファが必要量より小さい場合に返します。
  993. \param key ecc_key構造体へのポインタ
  994. \param output 出力バッファへのポインタ
  995. \param inLen 出力バッファのサイズ
  996. \param with_AlgCurve アルゴリズムと曲線情報をヘッダーに含める際には1を指定
  997. _Example_
  998. \code
  999. ecc_key key;
  1000. wc_ecc_init(&key);
  1001. WC_RNG rng;
  1002. wc_InitRng(&rng);
  1003. wc_ecc_make_key(&rng, 32, &key);
  1004. int derSz = // Some appropriate size for der;
  1005. byte der[derSz];
  1006. if(wc_EccPublicKeyToDer(&key, der, derSz, 1) < 0)
  1007. {
  1008. // Error converting ECC public key to der
  1009. }
  1010. \endcode
  1011. \sa wc_EccKeyToDer
  1012. \sa wc_EccPrivateKeyDecode
  1013. */
  1014. int wc_EccPublicKeyToDer(ecc_key* key, byte* output,
  1015. word32 inLen, int with_AlgCurve);
  1016. /*!
  1017. \ingroup ASN
  1018. \brief この関数はECC公開鍵をDER形式に変換します。
  1019. 処理したバッファサイズを返します。変換されたDER形式のECC公開鍵は出力バッファに格納されます。
  1020. AlgCurveフラグの指定により、アルゴリズムと曲線情報をヘッダーに含めることができます。
  1021. compパラメータは公開鍵を圧縮して出力するか否かを指定します。
  1022. \return >0 成功時には処理したバッファのサイズを返します。
  1023. \return BAD_FUNC_ARG 出力バッファoutputあるいはecc_key構造体keyがNULLの場合に返します。
  1024. \return LENGTH_ONLY_E ECC公開鍵のサイズ取得に失敗した場合に返します。
  1025. \return BUFFER_E 出力バッファが必要量より小さい場合に返します。
  1026. \param key ecc_key構造体へのポインタ
  1027. \param output 出力バッファへのポインタ
  1028. \param inLen 出力バッファのサイズ
  1029. \param with_AlgCurve アルゴリズムと曲線情報をヘッダーに含める際には1を指定
  1030. \param comp 非ゼロ値の指定時にはECC公開鍵は圧縮形式で出力されます。ゼロが指定された場合には非圧縮で出力されます。
  1031. _Example_
  1032. \code
  1033. ecc_key key;
  1034. wc_ecc_init(&key);
  1035. WC_RNG rng;
  1036. wc_InitRng(&rng);
  1037. wc_ecc_make_key(&rng, 32, &key);
  1038. int derSz = // Some appropriate size for der;
  1039. byte der[derSz];
  1040. // Write out a compressed ECC key
  1041. if(wc_EccPublicKeyToDer_ex(&key, der, derSz, 1, 1) < 0)
  1042. {
  1043. // Error converting ECC public key to der
  1044. }
  1045. \endcode
  1046. \sa wc_EccKeyToDer
  1047. \sa wc_EccPublicKeyDecode
  1048. */
  1049. int wc_EccPublicKeyToDer_ex(ecc_key* key, byte* output,
  1050. word32 inLen, int with_AlgCurve, int comp);
  1051. /*!
  1052. \ingroup ASN
  1053. \brief この関数はデジタル署名をエンコードして出力バッファに出力し、生成された署名のサイズを返します。
  1054. \return 成功時には署名を出力バッファに出力し、出力したサイズを返します。
  1055. \param out エンコードした署名データを出力する先のバッファへのポインタ
  1056. \param digest 署名データのエンコードに使用するダイジェストへのポインタ
  1057. \param digSz ダイジェストを含んでいるバッファのサイズ
  1058. \param hashOID ハッシュタイプを示すオブジェクトID。有効な値は: SHAh, SHA256h, SHA384h, SHA512h, MD2h, MD5h, DESb, DES3b, CTC_MD5wRSA,
  1059. CTC_SHAwRSA, CTC_SHA256wRSA, CTC_SHA384wRSA, CTC_SHA512wRSA, CTC_SHAwECDSA, CTC_SHA256wECDSA, CTC_SHA384wECDSA, と CTC_SHA512wECDSA。
  1060. \endcode
  1061. \code
  1062. int signSz;
  1063. byte encodedSig[MAX_ENCODED_SIG_SZ];
  1064. Sha256 sha256;
  1065. // initialize sha256 for hashing
  1066. byte* dig = = (byte*)malloc(WC_SHA256_DIGEST_SIZE);
  1067. // perform hashing and hash updating so dig stores SHA-256 hash
  1068. // (see wc_InitSha256, wc_Sha256Update and wc_Sha256Final)
  1069. signSz = wc_EncodeSignature(encodedSig, dig, WC_SHA256_DIGEST_SIZE, SHA256h);
  1070. \endcode
  1071. \sa none
  1072. */
  1073. word32 wc_EncodeSignature(byte* out, const byte* digest,
  1074. word32 digSz, int hashOID);
  1075. /*!
  1076. \ingroup ASN
  1077. \brief この関数はハッシュタイプに対応したハッシュOIDを返します。
  1078. 例えば、ハッシュタイプが"WC_SHA512"の場合、この関数は"SHA512h"を対応するハッシュOIDとして返します。
  1079. \return 成功時には指定されたハッシュタイプと対応するハッシュOIDを返します。
  1080. \return 0 認識できないハッシュタイプが引数として指定された場合に返します。
  1081. \param type ハッシュタイプ。指定可能なタイプ: WC_MD5, WC_SHA, WC_SHA256, WC_SHA384, WC_SHA512, WC_SHA3_224, WC_SHA3_256, WC_SHA3_384, WC_SHA3_512
  1082. _Example_
  1083. \code
  1084. int hashOID;
  1085. hashOID = wc_GetCTC_HashOID(WC_SHA512);
  1086. if (hashOID == 0) {
  1087. // WOLFSSL_SHA512 not defined
  1088. }
  1089. \endcode
  1090. \sa none
  1091. */
  1092. int wc_GetCTC_HashOID(int type);
  1093. /*!
  1094. \ingroup ASN
  1095. \brief この関数はキャッシュされていたCert構造体で使用されたメモリとリソースをクリーンアップします。
  1096. WOLFSSL_CERT_GEN_CACHEが定義されている場合にはDecodedCert構造体がCert構造体内部にキャッシュされ、後続するset系関数の呼び出しの都度DecodedCert構造体がパースされることを防ぎます。
  1097. \return 0 成功時に返されます。
  1098. \return BAD_FUNC_ARG 引数として無効な値が渡された場合に返されます。
  1099. \param cert 未初期化のCert構造体へのポインタ
  1100. _Example_
  1101. \code
  1102. Cert cert; // Initialized certificate structure
  1103. wc_SetCert_Free(&cert);
  1104. \endcode
  1105. \sa wc_SetAuthKeyIdFromCert
  1106. \sa wc_SetIssuerBuffer
  1107. \sa wc_SetSubjectBuffer
  1108. \sa wc_SetSubjectRaw
  1109. \sa wc_SetIssuerRaw
  1110. \sa wc_SetAltNamesBuffer
  1111. \sa wc_SetDatesBuffer
  1112. */
  1113. void wc_SetCert_Free(Cert* cert);
  1114. /*!
  1115. \ingroup ASN
  1116. \brief この関数はPKCS#8の暗号化されていないバッファ内部の従来の秘密鍵の開始位置を検出して返します。
  1117. \return 成功時には従来の秘密鍵の長さを返します。
  1118. \return エラー時には負の整数値を返します。
  1119. \param input PKCS#8の暗号化されていない秘密鍵を保持するバッファへのポインタ
  1120. \param inOutIdx バッファのインデクス位置を保持する変数へのポインタ。入力時にはこの変数の内容はバッファ内部のPKCS#8の開始位置を示します。出力時には、秘密鍵の先頭位置を保持します。
  1121. \param sz 入力バッファのサイズ
  1122. _Example_
  1123. \code
  1124. byte* pkcs8Buf; // Buffer containing PKCS#8 key.
  1125. word32 idx = 0;
  1126. word32 sz; // Size of pkcs8Buf.
  1127. ...
  1128. ret = wc_GetPkcs8TraditionalOffset(pkcs8Buf, &idx, sz);
  1129. // pkcs8Buf + idx is now the beginning of the traditional private key bytes.
  1130. \endcode
  1131. \sa wc_CreatePKCS8Key
  1132. \sa wc_EncryptPKCS8Key
  1133. \sa wc_DecryptPKCS8Key
  1134. \sa wc_CreateEncryptedPKCS8Key
  1135. */
  1136. int wc_GetPkcs8TraditionalOffset(byte* input,
  1137. word32* inOutIdx, word32 sz);
  1138. /*!
  1139. \ingroup ASN
  1140. \brief この関数はDER形式の秘密鍵を入力とし、RKCS#8形式に変換します。
  1141. また、PKCS#12のシュロ―ディットキーバッグの作成にも使用できます。RFC5208を参照のこと。
  1142. \return 成功時には出力されたPKCS#8 鍵のサイズを返します。
  1143. \return LENGTH_ONLY_E 出力先バッファoutがNULLとして渡された場合にはこのエラーコードが返され、outSzに必要な出力バッファのサイズが格納されます。
  1144. \return エラー時には負の整数値が返されます。
  1145. \param out 結果の出力先バッファへのポインタ。NULLの場合には必要な出力先バッファのサイズがoutSzに格納されます。
  1146. \param outSz 出力先バッファのサイズ
  1147. \param key 従来のDER形式の秘密鍵を含むバッファへのポインタ
  1148. \param keySz 秘密鍵を含むバッファのサイズ
  1149. \param algoID アルゴリズムID (RSAk等の)
  1150. \param curveOID ECC曲線OID。RSA鍵を使用する場合にはNULLにすること。
  1151. \param oidSz ECC曲線OIDのサイズ。curveOIDがNULLの場合には0にすること。
  1152. _Example_
  1153. \code
  1154. ecc_key eccKey; // wolfSSL ECC key object.
  1155. byte* der; // DER-encoded ECC key.
  1156. word32 derSize; // Size of der.
  1157. const byte* curveOid = NULL; // OID of curve used by eccKey.
  1158. word32 curveOidSz = 0; // Size of curve OID.
  1159. byte* pkcs8; // Output buffer for PKCS#8 key.
  1160. word32 pkcs8Sz; // Size of output buffer.
  1161. derSize = wc_EccKeyDerSize(&eccKey, 1);
  1162. ...
  1163. derSize = wc_EccKeyToDer(&eccKey, der, derSize);
  1164. ...
  1165. ret = wc_ecc_get_oid(eccKey.dp->oidSum, &curveOid, &curveOidSz);
  1166. ...
  1167. ret = wc_CreatePKCS8Key(NULL, &pkcs8Sz, der,
  1168. derSize, ECDSAk, curveOid, curveOidSz); // Get size needed in pkcs8Sz.
  1169. ...
  1170. ret = wc_CreatePKCS8Key(pkcs8, &pkcs8Sz, der,
  1171. derSize, ECDSAk, curveOid, curveOidSz);
  1172. \endcode
  1173. \sa wc_GetPkcs8TraditionalOffset
  1174. \sa wc_EncryptPKCS8Key
  1175. \sa wc_DecryptPKCS8Key
  1176. \sa wc_CreateEncryptedPKCS8Key
  1177. */
  1178. int wc_CreatePKCS8Key(byte* out, word32* outSz,
  1179. byte* key, word32 keySz, int algoID, const byte* curveOID,
  1180. word32 oidSz);
  1181. /*!
  1182. \ingroup ASN
  1183. \brief この関数は暗号化されていないPKCS#8のDER形式の鍵(例えばwc_CreatePKCS8Keyで生成された鍵)を受け取り、PKCS#8 暗号化形式に変換します。
  1184. 結果として得られた暗号化鍵はwc_DecryptPKCS8Keyを使って復号できます。RFC5208を参照してください。
  1185. \return 成功時には出力先バッファに出力された暗号化鍵のサイズを返します。
  1186. \return LENGTH_ONLY_E 出力先バッファoutがNULLとして渡された場合にはこのエラーコードが返され、outSzに必要な出力バッファのサイズが格納されます。
  1187. \return エラー時には負の整数値が返されます。
  1188. \param key 従来のDER形式の鍵を含んだバッファへのポインタ
  1189. \param keySz 鍵を含んだバッファのサイズ
  1190. \param out 出力結果を格納する先のバッファへのポインタ。NULLの場合には必要な出力先バッファのサイズがoutSzに格納されます。
  1191. \param outSz 出力先バッファのサイズ
  1192. \param password パスワードベース暗号化アルゴリズムに使用されるパスワード
  1193. \param passwordSz パスワードのサイズ(NULL終端文字は含まない)
  1194. \param vPKCS 使用するPKCSのバージョン番号。1 はPKCS12 かPKCS5。
  1195. \param pbeOid パスワードベース暗号化スキームのOID(PBES2 あるいはRFC2898 A.3にあるOIDの一つ)
  1196. \param encAlgId 暗号化アルゴリズムID(例えばAES256CBCb)。
  1197. \param salt ソルト。NULLの場合はランダムに選定したソルトが使用されます。
  1198. \param saltSz ソルトサイズ。saltにNULLを渡した場合には0を指定できます。
  1199. \param itt 鍵導出のための繰り返し回数
  1200. \param rng 初期化済みのWC_RNG構造体へのポインタ
  1201. \param heap 動的メモリ確保のためのヒープ。NULL指定も可。
  1202. _Example_
  1203. \code
  1204. byte* pkcs8; // Unencrypted PKCS#8 key.
  1205. word32 pkcs8Sz; // Size of pkcs8.
  1206. byte* pkcs8Enc; // Encrypted PKCS#8 key.
  1207. word32 pkcs8EncSz; // Size of pkcs8Enc.
  1208. const char* password; // Password to use for encryption.
  1209. int passwordSz; // Length of password (not including NULL terminator).
  1210. WC_RNG rng;
  1211. // The following produces an encrypted version of pkcs8 in pkcs8Enc. The
  1212. // encryption uses password-based encryption scheme 2 (PBE2) from PKCS#5 and
  1213. // the AES cipher in CBC mode with a 256-bit key. See RFC 8018 for more on
  1214. // PKCS#5.
  1215. ret = wc_EncryptPKCS8Key(pkcs8, pkcs8Sz, pkcs8Enc, &pkcs8EncSz, password,
  1216. passwordSz, PKCS5, PBES2, AES256CBCb, NULL, 0,
  1217. WC_PKCS12_ITT_DEFAULT, &rng, NULL);
  1218. \endcode
  1219. \sa wc_GetPkcs8TraditionalOffset
  1220. \sa wc_CreatePKCS8Key
  1221. \sa wc_DecryptPKCS8Key
  1222. \sa wc_CreateEncryptedPKCS8Key
  1223. */
  1224. int wc_EncryptPKCS8Key(byte* key, word32 keySz, byte* out,
  1225. word32* outSz, const char* password, int passwordSz, int vPKCS,
  1226. int pbeOid, int encAlgId, byte* salt, word32 saltSz, int itt,
  1227. WC_RNG* rng, void* heap);
  1228. /*!
  1229. \ingroup ASN
  1230. \brief この関数は暗号化されたPKCS#8のDER形式の鍵を受け取り、復号してPKCS#8 DER形式に変換します。
  1231. wc_EncryptPKCS8Keyによって行われた暗号化を元に戻します。RFC5208を参照してください。
  1232. 入力データは復号データによって上書きされます。
  1233. \return 成功時には復号データの長さを返します。
  1234. \return エラー発生時には負の整数値を返します。
  1235. \param input 入力時には暗号化されたPKCS#8鍵データを含みます。出力時には復号されたPKCS#8鍵データを含みます。
  1236. \param sz 入力バッファのサイズ
  1237. \param password 鍵を暗号化する際のパスワード
  1238. \param passwordSz パスワードのサイズ(NULL終端文字は含まない)
  1239. _Example_
  1240. \code
  1241. byte* pkcs8Enc; // Encrypted PKCS#8 key made with wc_EncryptPKCS8Key.
  1242. word32 pkcs8EncSz; // Size of pkcs8Enc.
  1243. const char* password; // Password to use for decryption.
  1244. int passwordSz; // Length of password (not including NULL terminator).
  1245. ret = wc_DecryptPKCS8Key(pkcs8Enc, pkcs8EncSz, password, passwordSz);
  1246. \endcode
  1247. \sa wc_GetPkcs8TraditionalOffset
  1248. \sa wc_CreatePKCS8Key
  1249. \sa wc_EncryptPKCS8Key
  1250. \sa wc_CreateEncryptedPKCS8Key
  1251. */
  1252. int wc_DecryptPKCS8Key(byte* input, word32 sz, const char* password,
  1253. int passwordSz);
  1254. /*!
  1255. \ingroup ASN
  1256. \brief この関数は従来のDER形式の鍵をPKCS#8フォーマットに変換し、暗号化を行います。
  1257. この処理にはwc_CreatePKCS8Keyとwc_EncryptPKCS8Keyを使用します。
  1258. \return 成功時には出力した暗号化鍵のサイズを返します。
  1259. \return LENGTH_ONLY_E もし出力用バッファoutにNULLが渡された場合に返されます。その際にはoutSz変数に必要な出力用バッファサイズを格納します。
  1260. \return エラー発生時には負の整数値を返します。
  1261. \param key 従来のDER形式の鍵を含んだバッファへのポインタ
  1262. \param keySz 鍵を含んだバッファのサイズ
  1263. \param out 結果を出力する先のバッファへのポインタ。NULLが指定された場合には、必要なバッファサイズがoutSzに格納されます。
  1264. \param outSz 結果を出力する先のバッファのサイズ
  1265. \param password パスワードベース暗号アルゴリズムに使用されるパスワード
  1266. \param passwordSz パスワードのサイズ(NULL終端文字は含まない)
  1267. \param vPKCS 使用するPKCSのバージョン番号。1 はPKCS12 かPKCS5。
  1268. \param pbeOid パスワードベース暗号化スキームのOID(PBES2 あるいはRFC2898 A.3にあるOIDの一つ)
  1269. \param encAlgId 暗号化アルゴリズムID(例えばAES256CBCb)。
  1270. \param salt ソルト。NULLの場合はランダムに選定したソルトが使用されます。
  1271. \param saltSz ソルトサイズ。saltにNULLを渡した場合には0を指定できます。
  1272. \param itt 鍵導出のための繰り返し回数
  1273. \param rng 初期化済みのWC_RNG構造体へのポインタ
  1274. \param heap 動的メモリ確保のためのヒープ。NULL指定も可。
  1275. _Example_
  1276. \code
  1277. byte* key; // Traditional private key (DER formatted).
  1278. word32 keySz; // Size of key.
  1279. byte* pkcs8Enc; // Encrypted PKCS#8 key.
  1280. word32 pkcs8EncSz; // Size of pkcs8Enc.
  1281. const char* password; // Password to use for encryption.
  1282. int passwordSz; // Length of password (not including NULL terminator).
  1283. WC_RNG rng;
  1284. // The following produces an encrypted, PKCS#8 version of key in pkcs8Enc.
  1285. // The encryption uses password-based encryption scheme 2 (PBE2) from PKCS#5
  1286. // and the AES cipher in CBC mode with a 256-bit key. See RFC 8018 for more
  1287. // on PKCS#5.
  1288. ret = wc_CreateEncryptedPKCS8Key(key, keySz, pkcs8Enc, &pkcs8EncSz,
  1289. password, passwordSz, PKCS5, PBES2, AES256CBCb, NULL, 0,
  1290. WC_PKCS12_ITT_DEFAULT, &rng, NULL);
  1291. \endcode
  1292. \sa wc_GetPkcs8TraditionalOffset
  1293. \sa wc_CreatePKCS8Key
  1294. \sa wc_EncryptPKCS8Key
  1295. \sa wc_DecryptPKCS8Key
  1296. */
  1297. int wc_CreateEncryptedPKCS8Key(byte* key, word32 keySz, byte* out,
  1298. word32* outSz, const char* password, int passwordSz, int vPKCS,
  1299. int pbeOid, int encAlgId, byte* salt, word32 saltSz, int itt,
  1300. WC_RNG* rng, void* heap);
  1301. /*!
  1302. \ingroup ASN
  1303. \brief この関数はcert引数で与えられたDecodedCert構造体を初期化します。
  1304. DER形式の証明書を含んでいるsource引数の指すポインタから証明書サイズinSzの長さを内部に保存します。
  1305. この関数の後に呼び出されるwc_ParseCertによって証明書が解析されます。
  1306. \param cert DecodedCert構造体へのポインタ
  1307. \param source DER形式の証明書データへのポインタ
  1308. \param inSz 証明書データのサイズ(バイト数)
  1309. \param heap 動的メモリ確保のためのヒープ。NULL指定も可。
  1310. _Example_
  1311. \code
  1312. DecodedCert decodedCert; // Decoded certificate object.
  1313. byte* certBuf; // DER-encoded certificate buffer.
  1314. word32 certBufSz; // Size of certBuf in bytes.
  1315. wc_InitDecodedCert(&decodedCert, certBuf, certBufSz, NULL);
  1316. \endcode
  1317. \sa wc_ParseCert
  1318. \sa wc_FreeDecodedCert
  1319. */
  1320. void wc_InitDecodedCert(struct DecodedCert* cert,
  1321. const byte* source, word32 inSz, void* heap);
  1322. /*!
  1323. \ingroup ASN
  1324. \brief この関数はDecodedCert構造体に保存されているDER形式の証明書を解析し、その構造体に各種フィールドを設定します。
  1325. DecodedCert構造体はwc_InitDecodedCertを呼び出して初期化しておく必要があります。
  1326. この関数はオプションでCertificateManager構造体へのポインタを受け取り、CAが証明書マネジャーで検索できた場合には、
  1327. そのCAに関する情報もDecodedCert構造体に追加設定します。
  1328. \return 0 成功時に返します。
  1329. \return エラー発生時には負の整数値を返します。
  1330. \param cert 初期化済みのDecodedCert構造体へのポインタ。
  1331. \param type 証明書タイプ。タイプの設定値についてはasn_public.hのCertType enum定義を参照してください。
  1332. \param verify 呼び出し側が証明書の検証を求めていることを指示すフラグです。
  1333. \param cm CertificateManager構造体へのポインタ。オプションで指定可。NULLでも可。
  1334. _Example_
  1335. \code
  1336. int ret;
  1337. DecodedCert decodedCert; // Decoded certificate object.
  1338. byte* certBuf; // DER-encoded certificate buffer.
  1339. word32 certBufSz; // Size of certBuf in bytes.
  1340. wc_InitDecodedCert(&decodedCert, certBuf, certBufSz, NULL);
  1341. ret = wc_ParseCert(&decodedCert, CERT_TYPE, NO_VERIFY, NULL);
  1342. if (ret != 0) {
  1343. fprintf(stderr, "wc_ParseCert failed.\n");
  1344. }
  1345. \endcode
  1346. \sa wc_InitDecodedCert
  1347. \sa wc_FreeDecodedCert
  1348. */
  1349. int wc_ParseCert(DecodedCert* cert, int type, int verify, void* cm);
  1350. /*!
  1351. \ingroup ASN
  1352. \brief この関数はwc_InitDecodedCertで初期化済みのDecodedCert構造体を解放します。
  1353. \param cert 初期化済みのDecodedCert構造体へのポインタ。
  1354. _Example_
  1355. \code
  1356. int ret;
  1357. DecodedCert decodedCert; // Decoded certificate object.
  1358. byte* certBuf; // DER-encoded certificate buffer.
  1359. word32 certBufSz; // Size of certBuf in bytes.
  1360. wc_InitDecodedCert(&decodedCert, certBuf, certBufSz, NULL);
  1361. ret = wc_ParseCert(&decodedCert, CERT_TYPE, NO_VERIFY, NULL);
  1362. if (ret != 0) {
  1363. fprintf(stderr, "wc_ParseCert failed.\n");
  1364. }
  1365. wc_FreeDecodedCert(&decodedCert);
  1366. \endcode
  1367. \sa wc_InitDecodedCert
  1368. \sa wc_ParseCert
  1369. */
  1370. void wc_FreeDecodedCert(struct DecodedCert* cert);
  1371. /*!
  1372. \ingroup ASN
  1373. \brief この関数はタイムコールバック関数を登録します。wolfSSLが現在時刻を必要としたタイミングでこのコールバックを呼び出します。
  1374. このタイムコールバック関数のプロトタイプ(シグネチャ)はC標準ライブラリの"time"関数と同一です。
  1375. \return 0 成功時に返します。
  1376. \param f タイムコールバック関数ポインタ
  1377. _Example_
  1378. \code
  1379. int ret = 0;
  1380. // Time callback prototype
  1381. time_t my_time_cb(time_t* t);
  1382. // Register it
  1383. ret = wc_SetTimeCb(my_time_cb);
  1384. if (ret != 0) {
  1385. // failed to set time callback
  1386. }
  1387. time_t my_time_cb(time_t* t)
  1388. {
  1389. // custom time function
  1390. }
  1391. \endcode
  1392. \sa wc_Time
  1393. */
  1394. int wc_SetTimeCb(wc_time_cb f);
  1395. /*!
  1396. \ingroup ASN
  1397. \brief この関数は現在時刻を取得します。デフォルトでXTIMEマクロ関数を使います。このマクロ関数はプラットフォーム依存です。
  1398. ユーザーはこのマクロの代わりにwc_SetTimeCbでタイムコールバック関数を使うように設定することができます
  1399. \return 成功時には現在時刻を返します。
  1400. \param t 現在時刻を返却するオプションのtime_t型変数。
  1401. _Example_
  1402. \code
  1403. time_t currentTime = 0;
  1404. currentTime = wc_Time(NULL);
  1405. wc_Time(&currentTime);
  1406. \endcode
  1407. \sa wc_SetTimeCb
  1408. */
  1409. time_t wc_Time(time_t* t);
  1410. /*!
  1411. \ingroup ASN
  1412. \brief この関数はX.509証明書にカスタム拡張を追加します。
  1413. 注: この関数に渡すポインタ引数が保持する内容は証明書が生成されるまで変更されてはいけません。
  1414. この関数ではポインタが指す先の内容は別のバッファには複製しません。
  1415. \return 0 成功時に返します。
  1416. \return エラー発生時には負の整数値を返します。
  1417. \param cert 初期化済みのDecodedCert構造体へのポインタ。
  1418. \param critical 0が指定された場合には追加する拡張はクリティカルとはマークされません。
  1419. 0以外が指定された場合にはクリティカルとマークされます。
  1420. \param oid ドット区切りのoid文字列。例えば、"1.2.840.10045.3.1.7"
  1421. \param der 拡張情報のDERエンコードされた内容を含むバッファへのポインタ。
  1422. \param derSz DERエンコードされた内容を含むバッファのサイズ
  1423. _Example_
  1424. \code
  1425. int ret = 0;
  1426. Cert newCert;
  1427. wc_InitCert(&newCert);
  1428. // Code to setup subject, public key, issuer, and other things goes here.
  1429. ret = wc_SetCustomExtension(&newCert, 1, "1.2.3.4.5",
  1430. (const byte *)"This is a critical extension", 28);
  1431. if (ret < 0) {
  1432. // Failed to set the extension.
  1433. }
  1434. ret = wc_SetCustomExtension(&newCert, 0, "1.2.3.4.6",
  1435. (const byte *)"This is NOT a critical extension", 32)
  1436. if (ret < 0) {
  1437. // Failed to set the extension.
  1438. }
  1439. // Code to sign the certificate and then write it out goes here.
  1440. \endcode
  1441. \sa wc_InitCert
  1442. \sa wc_SetUnknownExtCallback
  1443. */
  1444. int wc_SetCustomExtension(Cert *cert, int critical, const char *oid,
  1445. const byte *der, word32 derSz);
  1446. /*!
  1447. \ingroup ASN
  1448. \brief この関数はwolfSSLが証明書の解析中に未知のX.509拡張に遭遇した際に呼び出すコールバック関数を登録します。
  1449. コールバック関数のプロトタイプは使用例を参照してください。
  1450. \return 0 成功時に返します。
  1451. \return エラー発生時には負の整数値を返します。
  1452. \param cert コールバック関数を登録する対象のDecodedCert構造体へのポインタ。
  1453. \param cb 登録されるコールバック関数ポインタ
  1454. _Example_
  1455. \code
  1456. int ret = 0;
  1457. // Unknown extension callback prototype
  1458. int myUnknownExtCallback(const word16* oid, word32 oidSz, int crit,
  1459. const unsigned char* der, word32 derSz);
  1460. // Register it
  1461. ret = wc_SetUnknownExtCallback(cert, myUnknownExtCallback);
  1462. if (ret != 0) {
  1463. // failed to set the callback
  1464. }
  1465. // oid: OIDを構成するドット区切りの数を格納した配列
  1466. // oidSz: oid内の値の数
  1467. // crit: 拡張がクリティカルとマークされているか
  1468. // der: DERエンコードされている拡張の内容
  1469. // derSz: 拡張の内容のサイズ
  1470. int myCustomExtCallback(const word16* oid, word32 oidSz, int crit,
  1471. const unsigned char* der, word32 derSz) {
  1472. // 拡張を解析するロジックはここに記述します
  1473. // NOTE: コールバック関数から0を返すとwolfSSLに対してこの拡張を受け入れ可能と
  1474. // 表明することになります。この拡張を処理できると判断できない場合にはエラーを
  1475. // 返してください。クリティカルとマークされている未知の拡張に遭遇した際の標準的
  1476. // な振る舞いはASN_CRIT_EXT_Eを返すことです。
  1477. // 簡潔にするためにこの例ではすべての拡張情報を受け入れ可としていますが、実際には実情に沿うようにロジックを追加してください。
  1478. return 0;
  1479. }
  1480. \endcode
  1481. \sa ParseCert
  1482. \sa wc_SetCustomExtension
  1483. */
  1484. int wc_SetUnknownExtCallback(DecodedCert* cert,
  1485. wc_UnknownExtCallback cb);
  1486. /*!
  1487. \ingroup ASN
  1488. \brief この関数はDER形式のX.509 証明書の署名を与えられた公開鍵を使って検証します。
  1489. 公開鍵はDER形式で全公開鍵情報を含んだものが求められます。
  1490. \return 0 成功時に返します。
  1491. \return エラー発生時には負の整数値を返します。
  1492. \param cert DER形式のX.509証明書を含んだバッファへのポインタ
  1493. \param certSz 証明書を含んだバッファのサイズ
  1494. \param heap 動的メモリ確保のためのヒープ。NULL指定も可。
  1495. \param pubKey DER形式の公開鍵を含んだバッファへのポインタ
  1496. \param pubKeySz 公開鍵を含んだバッファのサイズ
  1497. \param pubKeyOID 公開鍵のアルゴリズムを特定するOID(すなわち: ECDSAk, DSAk や RSAk)
  1498. */
  1499. int wc_CheckCertSigPubKey(const byte* cert, word32 certSz,
  1500. void* heap, const byte* pubKey,
  1501. word32 pubKeySz, int pubKeyOID);
  1502. /*!
  1503. \ingroup ASN
  1504. \brief この関数はAsn1PrintOptions構造体を初期化します。
  1505. \return 0 成功時に返します。
  1506. \return BAD_FUNC_ARG asn1がNULLの場合に返されます。
  1507. \param opts プリントのためのAsn1PrintOptions構造体へのポインタ
  1508. _Example_
  1509. \code
  1510. Asn1PrintOptions opt;
  1511. // Initialize ASN.1 print options before use.
  1512. wc_Asn1PrintOptions_Init(&opt);
  1513. \endcode
  1514. \sa wc_Asn1PrintOptions_Set
  1515. \sa wc_Asn1_PrintAll
  1516. */
  1517. int wc_Asn1PrintOptions_Init(Asn1PrintOptions* opts);
  1518. /*!
  1519. \ingroup ASN
  1520. \brief この関数はAsn1PrintOptions構造体にプリント情報を設定します。
  1521. \return 0 成功時に返します。
  1522. \return BAD_FUNC_ARG asn1がNULLの場合に返されます。
  1523. \return BAD_FUNC_ARG valが範囲外の場合に返されます。
  1524. \param opts Asn1PrintOptions構造体へのポインタ
  1525. \param opt 設定する情報へのポインタ
  1526. \param val 設定値
  1527. _Example_
  1528. \code
  1529. Asn1PrintOptions opt;
  1530. // Initialize ASN.1 print options before use.
  1531. wc_Asn1PrintOptions_Init(&opt);
  1532. // Set the number of indents when printing tag name to be 1.
  1533. wc_Asn1PrintOptions_Set(&opt, ASN1_PRINT_OPT_INDENT, 1);
  1534. \endcode
  1535. \sa wc_Asn1PrintOptions_Init
  1536. \sa wc_Asn1_PrintAll
  1537. */
  1538. int wc_Asn1PrintOptions_Set(Asn1PrintOptions* opts, enum Asn1PrintOpt opt,
  1539. word32 val);
  1540. /*!
  1541. \ingroup ASN
  1542. \brief この関数はAsn1構造体を初期化します。
  1543. \return 0 成功時に返します。
  1544. \return BAD_FUNC_ARG asn1がNULLの場合に返されます。
  1545. \param asn1 Asn1構造体へのポインタ
  1546. _Example_
  1547. \code
  1548. Asn1 asn1;
  1549. // Initialize ASN.1 parse object before use.
  1550. wc_Asn1_Init(&asn1);
  1551. \endcode
  1552. \sa wc_Asn1_SetFile
  1553. \sa wc_Asn1_PrintAll
  1554. */
  1555. int wc_Asn1_Init(Asn1* asn1);
  1556. /*!
  1557. \ingroup ASN
  1558. \brief この関数は出力先として使用するファイルをAsn1構造体にセットします。
  1559. \return 0 成功時に返します。
  1560. \return BAD_FUNC_ARG asn1がNULLの場合に返されます。
  1561. \return BAD_FUNC_ARG fileがXBADFILEの場合に返されます。.
  1562. \param asn1 Asn1構造体へのポインタ
  1563. \param file プリント先のファイル
  1564. _Example_
  1565. \code
  1566. Asn1 asn1;
  1567. // Initialize ASN.1 parse object before use.
  1568. wc_Asn1_Init(&asn1);
  1569. // Set standard out to be the file descriptor to write to.
  1570. wc_Asn1_SetFile(&asn1, stdout);
  1571. \endcode
  1572. \sa wc_Asn1_Init
  1573. \sa wc_Asn1_PrintAll
  1574. */
  1575. int wc_Asn1_SetFile(Asn1* asn1, XFILE file);
  1576. /*!
  1577. \ingroup ASN
  1578. \brief ASN.1アイテムをプリントします。
  1579. \return 0 成功時に返します。
  1580. \return BAD_FUNC_ARG asn1かoptsがNULLの場合に返されます。
  1581. \return ASN_LEN_E ASN.1アイテムが長すぎる場合に返されます。
  1582. \return ASN_DEPTH_E 終了オフセットが無効の場合に返されます。
  1583. \return ASN_PARSE_E 全のASN.1アイテムの解析が完了できなかった場合に返されます。
  1584. \param asn1 Asn1構造体へのポインタ
  1585. \param opts Asn1PrintOptions構造体へのポインタ
  1586. \param data BER/DER形式のプリント対象データへのポインタ
  1587. \param len プリント対象データのサイズ(バイト数)
  1588. \code
  1589. Asn1PrintOptions opts;
  1590. Asn1 asn1;
  1591. unsigned char data[] = { Initialize with DER/BER data };
  1592. word32 len = sizeof(data);
  1593. // Initialize ASN.1 print options before use.
  1594. wc_Asn1PrintOptions_Init(&opt);
  1595. // Set the number of indents when printing tag name to be 1.
  1596. wc_Asn1PrintOptions_Set(&opt, ASN1_PRINT_OPT_INDENT, 1);
  1597. // Initialize ASN.1 parse object before use.
  1598. wc_Asn1_Init(&asn1);
  1599. // Set standard out to be the file descriptor to write to.
  1600. wc_Asn1_SetFile(&asn1, stdout);
  1601. // Print all ASN.1 items in buffer with the specified print options.
  1602. wc_Asn1_PrintAll(&asn1, &opts, data, len);
  1603. \endcode
  1604. \sa wc_Asn1_Init
  1605. \sa wc_Asn1_SetFile
  1606. */
  1607. int wc_Asn1_PrintAll(Asn1* asn1, Asn1PrintOptions* opts, unsigned char* data,
  1608. word32 len);