Files
wolfssl/doc/dox_comments/header_files-ja/pkcs7.h

429 lines
26 KiB
C
Raw Normal View History

/*!
\ingroup PKCS7
\brief DERフォーマットの証明書を使用してPKCS7構造を初期化しますPKCS7構造を初期化するにはNULL CERTとCERTSZの場合は0を渡すことができます
\return 0 PKCS7構造の初期化に成功しました
\return MEMORY_E xmallocでメモリを割り当てるエラーがある場合
\return ASN_PARSE_E
\return ASN_OBJECT_ID_E
\return ASN_EXPECT_0_E CERTファイルの暗号化仕様にフォーマットエラーがある場合
\return ASN_BEFORE_DATE_E
\return ASN_AFTER_DATE_E
\return ASN_BITSTR_E
\return ECC_CURVE_OID_E ECCキーの解析中にエラーがある場合
\return ASN_UNKNOWN_OID_E IDを使用している場合に返されます
\return ASN_VERSION_E allow_v1_extensionsオプションが定義されておらずV1またはV2の証明書の場合に返されます
\return BAD_FUNC_ARG
\return ASN_CRIT_EXT_E
\return ASN_SIG_OID_E
\return ASN_SIG_CONFIRM_E
\return ASN_NAME_INVALID_E CA名制約によって許可されていない場合に返されます
\return ASN_NO_SIGNER_E CA署名者がない場合に返されました
\param pkcs7 PKCS7構造へのポインタ
\param cert PKCS7構造を初期化するためのDERフォーマットのASN.1
_Example_
\code
PKCS7 pkcs7;
byte derBuff[] = { }; // initialize with DER-encoded certificate
if ( wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff)) != 0 ) {
// error parsing certificate into pkcs7 format
}
\endcode
\sa wc_PKCS7_Free
*/
int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* cert, word32 certSz);
/*!
\ingroup PKCS7
\brief PKCS7の初期化装置によって割り当てられたメモリを解放します
\return none
_Example_
\code
PKCS7 pkcs7;
// initialize and use PKCS7 object
wc_PKCS7_Free(pkcs7);
\endcode
\sa wc_PKCS7_InitWithCert
*/
void wc_PKCS7_Free(PKCS7* pkcs7);
/*!
\ingroup PKCS7
\brief PKCS7データコンテンツタイプを構築しPKCS7構造をパーセル可能なPKCS7データパケットを含むバッファにエンコードします
\return Success PKCS7データをバッファに正常にエンコードするとPKCS7構造内の索引を返します
\return BUFFER_E
\param pkcs7 PKCS7構造へのポインタ
\param output
_Example_
\code
PKCS7 pkcs7;
int ret;
byte derBuff[] = { }; // initialize with DER-encoded certificate
byte pkcs7Buff[FOURK_BUF];
wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff));
// update message and data to encode
pkcs7.privateKey = key;
pkcs7.privateKeySz = keySz;
pkcs7.content = data;
pkcs7.contentSz = dataSz;
... etc.
ret = wc_PKCS7_EncodeData(&pkcs7, pkcs7Buff, sizeof(pkcs7Buff));
if ( ret != 0 ) {
// error encoding into output buffer
}
\endcode
\sa wc_PKCS7_InitWithCert
*/
int wc_PKCS7_EncodeData(PKCS7* pkcs7, byte* output,
word32 outputSz);
/*!
\ingroup PKCS7
\brief PKCS7署名付きデータコンテンツタイプを構築しPKCS7構造をPARSable PKCS7署名付きデータパケットを含むバッファにエンコードします
\return Success PKCS7データをバッファに正常にエンコードするとPKCS7構造内の索引を返します
\return BAD_FUNC_ARG PKCS7構造が署名付きデータパケットを生成するための1つ以上の要求要素が欠落している場合に返されます
\return MEMORY_E
\return PUBLIC_KEY_E
\return RSA_BUFFER_E
\return BUFFER_E
\return MP_INIT_E
\return MP_READ_E
\return MP_CMP_E
\return MP_INVMOD_E
\return MP_EXPTMOD_E
\return MP_MOD_E
\return MP_MUL_E
\return MP_ADD_E
\return MP_MULMOD_E
\return MP_TO_E
\return MP_MEM
\param pkcs7 PKCS7構造へのポインタ
\param output
_Example_
\code
PKCS7 pkcs7;
int ret;
byte data[] = {}; // initialize with data to sign
byte derBuff[] = { }; // initialize with DER-encoded certificate
byte pkcs7Buff[FOURK_BUF];
wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff));
// update message and data to encode
pkcs7.privateKey = key;
pkcs7.privateKeySz = keySz;
pkcs7.content = data;
pkcs7.contentSz = dataSz;
pkcs7.hashOID = SHAh;
pkcs7.rng = &rng;
... etc.
ret = wc_PKCS7_EncodeSignedData(&pkcs7, pkcs7Buff, sizeof(pkcs7Buff));
if ( ret != 0 ) {
// error encoding into output buffer
}
wc_PKCS7_Free(&pkcs7);
\endcode
\sa wc_PKCS7_InitWithCert
\sa wc_PKCS7_VerifySignedData
*/
int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7,
byte* output, word32 outputSz);
/*!
\ingroup PKCS7
\brief PKCS7の署名付きデータコンテンツタイプを構築しPKCS7構造をエンコードしParsable PKCS7署名付きデータパケットを含むヘッダーおよびフッターバッファにエンコードします
\return 0=Success
\return BAD_FUNC_ARG PKCS7構造が署名付きデータパケットを生成するための1つ以上の要求要素が欠落している場合に返されます
\return MEMORY_E
\return PUBLIC_KEY_E
\return RSA_BUFFER_E
\return BUFFER_E
\return MP_INIT_E
\return MP_READ_E
\return MP_CMP_E
\return MP_INVMOD_E
\return MP_EXPTMOD_E
\return MP_MOD_E
\return MP_MUL_E
\return MP_ADD_E
\return MP_MULMOD_E
\return MP_TO_E
\return MP_MEM
\param pkcs7 PKCS7構造へのポインタ
\param hashBuf
\param hashSz
\param outputHead
\param outputHeadSz
\param outputFoot
_Example_
\code
PKCS7 pkcs7;
int ret;
byte derBuff[] = { }; // initialize with DER-encoded certificate
byte data[] = {}; // initialize with data to sign
byte pkcs7HeadBuff[FOURK_BUF/2];
byte pkcs7FootBuff[FOURK_BUF/2];
word32 pkcs7HeadSz = (word32)sizeof(pkcs7HeadBuff);
word32 pkcs7FootSz = (word32)sizeof(pkcs7HeadBuff);
enum wc_HashType hashType = WC_HASH_TYPE_SHA;
byte hashBuf[WC_MAX_DIGEST_SIZE];
word32 hashSz = wc_HashGetDigestSize(hashType);
wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff));
// update message and data to encode
pkcs7.privateKey = key;
pkcs7.privateKeySz = keySz;
pkcs7.content = NULL;
pkcs7.contentSz = dataSz;
pkcs7.hashOID = SHAh;
pkcs7.rng = &rng;
... etc.
// calculate hash for content
ret = wc_HashInit(&hash, hashType);
if (ret == 0) {
ret = wc_HashUpdate(&hash, hashType, data, sizeof(data));
if (ret == 0) {
ret = wc_HashFinal(&hash, hashType, hashBuf);
}
wc_HashFree(&hash, hashType);
}
ret = wc_PKCS7_EncodeSignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff,
&pkcs7HeadSz, pkcs7FootBuff, &pkcs7FootSz);
if ( ret != 0 ) {
// error encoding into output buffer
}
wc_PKCS7_Free(&pkcs7);
\endcode
\sa wc_PKCS7_InitWithCert
\sa wc_PKCS7_VerifySignedData_ex
*/
int wc_PKCS7_EncodeSignedData_ex(PKCS7* pkcs7, const byte* hashBuf,
word32 hashSz, byte* outputHead, word32* outputHeadSz, byte* outputFoot,
word32* outputFootSz);
/*!
\ingroup PKCS7
\brief PKCS7の署名付きデータメッセージを取りPKCS7構造に抽出されたコンテンツを格納します
\return 0
\return BAD_FUNC_ARG 1
\return ASN_PARSE_E PKIMSGから解析中のエラーがある場合に返されます
\return PKCS7_OID_E PKIMSGが署名付きデータ型ではない場合に返されます
\return ASN_VERSION_E PKCS7署名者情報がバージョン1ではない場合に返されます
\return MEMORY_E
\return PUBLIC_KEY_E
\return RSA_BUFFER_E
\return BUFFER_E
\return MP_INIT_E
\return MP_READ_E
\return MP_CMP_E
\return MP_INVMOD_E
\return MP_EXPTMOD_E
\return MP_MOD_E
\return MP_MUL_E
\return MP_ADD_E
\return MP_MULMOD_E
\return MP_TO_E
\return MP_MEM
\param pkcs7 PKCS7構造へのポインタ
\param pkiMsg
_Example_
\code
PKCS7 pkcs7;
int ret;
byte pkcs7Buff[] = {}; // the PKCS7 signature
wc_PKCS7_InitWithCert(&pkcs7, NULL, 0);
// update message and data to encode
pkcs7.privateKey = key;
pkcs7.privateKeySz = keySz;
pkcs7.content = data;
pkcs7.contentSz = dataSz;
... etc.
ret = wc_PKCS7_VerifySignedData(&pkcs7, pkcs7Buff, sizeof(pkcs7Buff));
if ( ret != 0 ) {
// error encoding into output buffer
}
wc_PKCS7_Free(&pkcs7);
\endcode
\sa wc_PKCS7_InitWithCert
\sa wc_PKCS7_EncodeSignedData
*/
int wc_PKCS7_VerifySignedData(PKCS7* pkcs7,
byte* pkiMsg, word32 pkiMsgSz);
/*!
\ingroup PKCS7
\brief PKCS7署名付きデータメッセージをHASH //PKCS7構造に抽出されたコンテンツを格納します
\return 0
\return BAD_FUNC_ARG 1
\return ASN_PARSE_E PKIMSGから解析中のエラーがある場合に返されます
\return PKCS7_OID_E PKIMSGが署名付きデータ型ではない場合に返されます
\return ASN_VERSION_E PKCS7署名者情報がバージョン1ではない場合に返されます
\return MEMORY_E
\return PUBLIC_KEY_E
\return RSA_BUFFER_E
\return BUFFER_E
\return MP_INIT_E
\return MP_READ_E
\return MP_CMP_E
\return MP_INVMOD_E
\return MP_EXPTMOD_E
\return MP_MOD_E
\return MP_MUL_E
\return MP_ADD_E
\return MP_MULMOD_E
\return MP_TO_E
\return MP_MEM
\param pkcs7 PKCS7構造へのポインタ
\param hashBuf
\param hashSz
\param pkiMsgHead
\param pkiMsgHeadSz
\param pkiMsgFoot
_Example_
\code
PKCS7 pkcs7;
int ret;
byte data[] = {}; // initialize with data to sign
byte pkcs7HeadBuff[] = {}; // initialize with PKCS7 header
byte pkcs7FootBuff[] = {}; // initialize with PKCS7 footer
enum wc_HashType hashType = WC_HASH_TYPE_SHA;
byte hashBuf[WC_MAX_DIGEST_SIZE];
word32 hashSz = wc_HashGetDigestSize(hashType);
wc_PKCS7_InitWithCert(&pkcs7, NULL, 0);
// update message and data to encode
pkcs7.privateKey = key;
pkcs7.privateKeySz = keySz;
pkcs7.content = NULL;
pkcs7.contentSz = dataSz;
pkcs7.rng = &rng;
... etc.
// calculate hash for content
ret = wc_HashInit(&hash, hashType);
if (ret == 0) {
ret = wc_HashUpdate(&hash, hashType, data, sizeof(data));
if (ret == 0) {
ret = wc_HashFinal(&hash, hashType, hashBuf);
}
wc_HashFree(&hash, hashType);
}
ret = wc_PKCS7_VerifySignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff,
sizeof(pkcs7HeadBuff), pkcs7FootBuff, sizeof(pkcs7FootBuff));
if ( ret != 0 ) {
// error encoding into output buffer
}
wc_PKCS7_Free(&pkcs7);
\endcode
\sa wc_PKCS7_InitWithCert
\sa wc_PKCS7_EncodeSignedData_ex
*/
int wc_PKCS7_VerifySignedData_ex(PKCS7* pkcs7, const byte* hashBuf,
word32 hashSz, byte* pkiMsgHead, word32 pkiMsgHeadSz, byte* pkiMsgFoot,
word32 pkiMsgFootSz);
/*!
\ingroup PKCS7
\brief PKCS7構造を編集しPKCS7構造を符号化しParsable PKCS7エンベロープデータパケットを含むバッファに編集します
\return Success
\return BAD_FUNC_ARG: 1PKCS7構造が必要な要素を欠落している場合
\return ALGO_ID_E pkcs7構造がサポートされていないアルゴリズムタイプを使用している場合に返されますDESBとDES3Bのみがサポートされています
\return BUFFER_E
\return MEMORY_E
\return RNG_FAILURE_E
\return DRBG_FAILED 使使
\param pkcs7 PKCS7構造へのポインタ
\param output
_Example_
\code
PKCS7 pkcs7;
int ret;
byte derBuff[] = { }; // initialize with DER-encoded certificate
byte pkcs7Buff[FOURK_BUF];
wc_PKCS7_InitWithCert(&pkcs7, derBuff, sizeof(derBuff));
// update message and data to encode
pkcs7.privateKey = key;
pkcs7.privateKeySz = keySz;
pkcs7.content = data;
pkcs7.contentSz = dataSz;
... etc.
ret = wc_PKCS7_EncodeEnvelopedData(&pkcs7, pkcs7Buff, sizeof(pkcs7Buff));
if ( ret != 0 ) {
// error encoding into output buffer
}
\endcode
\sa wc_PKCS7_InitWithCert
\sa wc_PKCS7_DecodeEnvelopedData
*/
int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7,
byte* output, word32 outputSz);
/*!
\ingroup PKCS7
\brief PKCS7エンベロープデータコンテンツタイプをアントラップして復号化しPKCS7オブジェクトの秘密鍵を使用してメッセージを復号化します
\return On
\return BAD_FUNC_ARG 1
\return ASN_PARSE_E PKIMSGから解析中のエラーがある場合に返されます
\return PKCS7_OID_E PKIMSGがエンベロープデータ型ではない場合に返されます
\return ASN_VERSION_E PKCS7署名者情報がバージョン0ではない場合に返されます
\return MEMORY_E
\return ALGO_ID_E pkcs7構造がサポートされていないアルゴリズムタイプを使用している場合に返されますSignature Generation for Signature GenerationのRSAKを使用してDESBとDES3Bのみが暗号化でサポートされています
\return PKCS7_RECIP_E
\return RSA_BUFFER_E RSAシグネチャ検証中にエラーがある場合は
\return MP_INIT_E
\return MP_READ_E
\return MP_CMP_E
\return MP_INVMOD_E
\return MP_EXPTMOD_E
\return MP_MOD_E
\return MP_MUL_E
\return MP_ADD_E
\return MP_MULMOD_E
\return MP_TO_E
\return MP_MEM
\param pkcs7 PKCS7構造へのポインタ
\param pkiMsg
\param pkiMsgSz
\param output
_Example_
\code
PKCS7 pkcs7;
byte received[] = { }; // initialize with received enveloped message
byte decoded[FOURK_BUF];
int decodedSz;
// initialize pkcs7 with certificate
// update key
pkcs7.privateKey = key;
pkcs7.privateKeySz = keySz;
decodedSz = wc_PKCS7_DecodeEnvelopedData(&pkcs7, received,
sizeof(received),decoded, sizeof(decoded));
if ( decodedSz != 0 ) {
// error decoding message
}
\endcode
\sa wc_PKCS7_InitWithCert
\sa wc_PKCS7_EncodeEnvelopedData
*/
int wc_PKCS7_DecodeEnvelopedData(PKCS7* pkcs7, byte* pkiMsg,
word32 pkiMsgSz, byte* output,
word32 outputSz);