asn_public.h
Functions
| Name | |
|---|---|
| int | wc_InitCert(Cert * ) この関数は、デフォルトのオプションでデフォルトの証明書を初期化します: version = 3(0x2)、serial = 0、sigType = SHA_WITH_RSA、issuer = 空白、 daysValid = 500、selfSigned = 1(true)発行者としてsubjectを使用、 subject = 空白 |
| Cert * | wc_CertNew(void * heap) この関数は、証明書操作中に使用するための新しいCert構造体を割り当てます。アプリケーションが構造体自体を割り当てる必要はありません。Cert構造体もこの関数によって初期化されるため、wc_InitCert()を呼び出す必要がなくなります。アプリケーションが割り当てられたCert構造体の使用を終了したら、wc_CertFree()を呼び出す必要があります。 |
| void | wc_CertFree(Cert * cert) この関数は、wc_CertNew()への以前の呼び出しによってcert構造体に割り当てられたメモリを解放します。 |
| int | wc_MakeCert(Cert * cert, byte * derBuffer, word32 derSz, RsaKey * rsaKey, ecc_key * eccKey, WC_RNG * rng) CA署名付き証明書を作成するために使用されます。subject情報が入力された後に呼び出されます。この関数は、cert入力からx509証明書v3 RSAまたはECCを作成します。次に、この証明書をderBufferに書き込みます。証明書を生成するために、rsaKeyまたはeccKeyのいずれかを受け取ります。このメソッドを呼び出す前に、証明書をwc_InitCertで初期化する必要があります。 |
| int | wc_MakeCertReq(Cert * cert, byte * derBuffer, word32 derSz, RsaKey * rsaKey, ecc_key * eccKey) この関数は、入力証明書を使用して証明書署名要求を作成し、出力をderBufferに書き込みます。証明書要求を生成するために、rsaKeyまたはeccKeyのいずれかを受け取ります。証明書署名要求に署名するには、この関数の後にwc_SignCert()を呼び出す必要があります。この関数の使用例については、wolfCryptテストアプリケーション(./wolfcrypt/test/test.c)を参照してください。 |
| int | wc_SignCert(int requestSz, int sigType, byte * derBuffer, word32 derSz, RsaKey * rsaKey, ecc_key * eccKey, WC_RNG * rng) この関数はbufferに署名し、署名をbufferの末尾に追加します。署名タイプを受け取ります。CA署名付き証明書を作成する場合は、wc_MakeCert()またはwc_MakeCertReq()の後に呼び出す必要があります。 |
| int | wc_MakeSelfCert(Cert * cert, byte * derBuffer, word32 derSz, RsaKey * key, WC_RNG * rng) この関数は、自己署名用の前の2つの関数、wc_MakeCertとwc_SignCertの組み合わせです(前の関数はCA要求に使用できます)。証明書を作成してから署名し、自己署名証明書を生成します。 |
| int | wc_SetIssuer(Cert * cert, const char * issuerFile) この関数は、証明書の発行者を、提供されたpem issuerFileの発行者に設定します。また、証明書の自己署名属性をfalseに変更します。issuerFileで指定された発行者は、cert発行者を設定する前に検証されます。このメソッドは、署名前にフィールドを設定するために使用されます。 |
| int | wc_SetSubject(Cert * cert, const char * subjectFile) この関数は、証明書のsubjectを、提供されたpem subjectFileのsubjectに設定します。このメソッドは、署名前にフィールドを設定するために使用されます。 |
| int | wc_SetSubjectRaw(Cert * cert, const byte * der, int derSz) この関数は、提供されたderバッファのsubjectから証明書の生のsubjectを設定します。このメソッドは、署名前に生のsubjectフィールドを設定するために使用されます。 |
| int | wc_GetSubjectRaw(byte ** subjectRaw, Cert * cert) この関数は、証明書構造体から生のsubjectを取得します。 |
| int | wc_SetAltNames(Cert * cert, const char * file) この関数は、証明書の代替名を、提供されたpemファイル内の代替名に設定します。これは、同じ証明書で複数のドメインを保護したい場合に便利です。このメソッドは、署名前にフィールドを設定するために使用されます。 |
| int | wc_SetIssuerBuffer(Cert * cert, const byte * der, int derSz) この関数は、提供されたderバッファの発行者から証明書の発行者を設定します。また、証明書の自己署名属性をfalseに変更します。このメソッドは、署名前にフィールドを設定するために使用されます。 |
| int | wc_SetIssuerRaw(Cert * cert, const byte * der, int derSz) この関数は、提供されたderバッファの発行者から証明書の生の発行者を設定します。このメソッドは、署名前に生の発行者フィールドを設定するために使用されます。 |
| int | wc_SetSubjectBuffer(Cert * cert, const byte * der, int derSz) この関数は、提供されたderバッファのsubjectから証明書のsubjectを設定します。このメソッドは、署名前にフィールドを設定するために使用されます。 |
| int | wc_SetAltNamesBuffer(Cert * cert, const byte * der, int derSz) この関数は、提供されたderバッファの代替名から証明書の代替名を設定します。これは、同じ証明書で複数のドメインを保護したい場合に便利です。このメソッドは、署名前にフィールドを設定するために使用されます。 |
| int | wc_SetDatesBuffer(Cert * cert, const byte * der, int derSz) この関数は、提供されたderバッファの日付範囲から証明書の日付を設定します。このメソッドは、署名前にフィールドを設定するために使用されます。 |
| int | wc_SetAuthKeyIdFromPublicKey(Cert * cert, RsaKey * rsakey, ecc_key * eckey) RSAまたはECC公開鍵からAKIDを設定します。注:rsakeyまたはeckeyのいずれか一方のみを設定し、両方は設定しないでください。 |
| int | wc_SetAuthKeyIdFromCert(Cert * cert, const byte * der, int derSz) DERエンコードされた証明書からAKIDを設定します。 |
| int | wc_SetAuthKeyId(Cert * cert, const char * file) PEM形式の証明書ファイルからAKIDを設定します。 |
| int | wc_SetSubjectKeyIdFromPublicKey(Cert * cert, RsaKey * rsakey, ecc_key * eckey) RSAまたはECC公開鍵からSKIDを設定します。 |
| int | wc_SetSubjectKeyId(Cert * cert, const char * file) PEM形式の公開鍵ファイルからSKIDを設定します。両方の引数が必要です。 |
| int | wc_SetKeyUsage(Cert * cert, const char * value) この関数を使用すると、カンマ区切りのトークン文字列を使用してキー使用法を設定できます。受け入れられるトークンは:digitalSignature、nonRepudiation、contentCommitment、keyCertSign、cRLSign、dataEncipherment、keyAgreement、keyEncipherment、encipherOnly、decipherOnlyです。例:"digitalSignature,nonRepudiation" nonRepudiationとcontentCommitmentは同じ用途です。 |
| int | wc_PemPubKeyToDer(const char * fileName, unsigned char * derBuf, int derSz) ファイルからPEMキーを読み込み、DERエンコードされたバッファに変換します。 |
| int | wc_PubKeyPemToDer(const unsigned char * pem, int pemSz, unsigned char * buff, int buffSz) PEMエンコードされた公開鍵をDERに変換します。バッファに書き込まれたバイト数、またはエラーの場合は負の値を返します。 |
| int | wc_PemCertToDer(const char * fileName, unsigned char * derBuf, int derSz) この関数は、pem証明書をder証明書に変換し、結果の証明書を提供されたderBufバッファに配置します。 |
| int | wc_DerToPem(const byte * der, word32 derSz, byte * output, word32 outSz, int type) この関数は、derバッファに含まれるder形式の入力証明書を、outputバッファに含まれるpem形式の出力証明書に変換します。これはインプレース変換ではなく、pem形式の出力を格納するために別のバッファを使用する必要があることに注意してください。 |
| int | wc_DerToPemEx(const byte * der, word32 derSz, byte * output, word32 outSz, byte * cipher_info, int type) この関数は、der形式の入力証明書を変換します、 derバッファに含まれる、pem形式の出力証明書に変換し、outputバッファに格納します。これはインプレース変換ではなく、pem形式の出力を格納するために別のバッファを使用する必要があることに注意してください。暗号情報の設定を許可します。 |
| int | wc_KeyPemToDer(const unsigned char * pem, int pemSz, unsigned char * buff, int buffSz, const char * pass) PEM形式のキーをDER形式に変換します。 |
| int | wc_CertPemToDer(const unsigned char * pem, int pemSz, unsigned char * buff, int buffSz, int type) この関数は、PEM形式の証明書をDER形式に変換します。OpenSSL関数PemToDerを呼び出します。 |
| int | wc_GetPubKeyDerFromCert(struct DecodedCert * cert, byte * derKey, word32 * derKeySz) この関数は、入力されたDecodedCert構造体からDER形式の公開鍵を取得します。このAPIを呼び出す前に、ユーザーはwc_InitDecodedCert()とwc_ParseCert()を呼び出す必要があります。wc_InitDecodedCert()はDER/ASN.1エンコードされた証明書を受け入れます。PEM証明書をDERに変換するには、wc_InitDecodedCert()を呼び出す前にまずwc_CertPemToDer()を使用してください。 |
| int | wc_EccPrivateKeyDecode(const byte * input, word32 * inOutIdx, ecc_key * key, word32 inSz) この関数は、入力バッファinputからECC秘密鍵を読み取り、秘密鍵を解析し、それを使用してecc_keyオブジェクトを生成し、keyに格納します。 |
| int | wc_EccKeyToDer(ecc_key * key, byte * output, word32 inLen) この関数は、秘密ECCキーをder形式に書き込みます。 |
| int | wc_EccPublicKeyDecode(const byte * input, word32 * inOutIdx, ecc_key * key, word32 inSz) 入力バッファからECC公開鍵をデコードします。ECCキーを取得するためにASNシーケンスを解析します。 |
| int | wc_EccPublicKeyToDer(ecc_key * key, byte * output, word32 inLen, int with_AlgCurve) この関数は、ECC公開鍵をDER形式に変換します。使用されたバッファのサイズを返します。DER形式のECC公開鍵は出力バッファに格納されます。with_AlgCurveフラグは、アルゴリズムと曲線情報を持つヘッダーを含めます |
| int | wc_EccPublicKeyToDer_ex(ecc_key * key, byte * output, word32 inLen, int with_AlgCurve, int comp) この関数は、ECC公開鍵をDER形式に変換します。使用されたバッファのサイズを返します。DER形式のECC公開鍵は出力バッファに格納されます。with_AlgCurveフラグは、アルゴリズムと曲線情報を持つヘッダーを含めます。compパラメータは、公開鍵を圧縮形式でエクスポートするかどうかを決定します。 |
| int | wc_Curve25519PrivateKeyDecode(const byte * input, word32 * inOutIdx, curve25519_key * key, word32 inSz) この関数は、DERエンコードされたバッファからCurve25519秘密鍵(のみ)をデコードします |
| int | wc_Curve25519PublicKeyDecode(const byte * input, word32 * inOutIdx, curve25519_key * key, word32 inSz) この関数は、DERエンコードされたバッファからCurve25519公開鍵(のみ)をデコードします。 |
| int | wc_Curve25519KeyDecode(const byte * input, word32 * inOutIdx, curve25519_key * key, word32 inSz) この関数は、DERエンコードされたバッファからCurve25519キーをデコードします。秘密鍵、公開鍵、または両方をデコードできます。 |
| int | wc_Curve25519PrivateKeyToDer(curve25519_key * key, byte * output, word32 inLen) この関数は、Curve25519秘密鍵をDER形式にエンコードします。入力キー構造体に公開鍵が含まれている場合、それは無視されます。 |
| int | wc_Curve25519PublicKeyToDer(curve25519_key * key, byte * output, word32 inLen, int withAlg) この関数は、Curve25519公開鍵をDER形式にエンコードします。入力キー構造体に秘密鍵が含まれている場合、それは無視されます。 |
| int | wc_Curve25519KeyToDer(curve25519_key * key, byte * output, word32 inLen, int withAlg) この関数は、Curve25519キーをDER形式にエンコードします。秘密鍵、公開鍵、または両方をエンコードできます。 |
| word32 | wc_EncodeSignature(byte * out, const byte * digest, word32 digSz, int hashOID) この関数は、デジタル署名を出力バッファにエンコードし、作成されたエンコードされた署名のサイズを返します。 |
| int | wc_GetCTC_HashOID(int type) この関数は、ハッシュタイプに対応するハッシュOIDを返します。例えば、WC_SHA512タイプが与えられた場合、この関数はSHA512ハッシュに対応する識別子SHA512hを返します。 |
| void | wc_SetCert_Free(Cert * cert) この関数は、証明書構造体のデコードされた証明書キャッシュによって使用されるメモリとリソースをクリーンアップします。WOLFSSL_CERT_GEN_CACHEが定義されている場合、デコードされた証明書構造体は証明書構造体にキャッシュされます。これにより、証明書設定関数への後続の呼び出しで、各呼び出しでデコードされた証明書を解析することを回避できます。 |
| int | wc_GetPkcs8TraditionalOffset(byte * input, word32 * inOutIdx, word32 sz) この関数は、PKCS#8暗号化されていないバッファ内の従来の秘密鍵の先頭を見つけます。 |
| int | wc_CreatePKCS8Key(byte * out, word32 * outSz, byte * key, word32 keySz, int algoID, const byte * curveOID, word32 oidSz) この関数は、DER秘密鍵を受け取り、PKCS#8形式に変換します。PKCS#12縮小キーバッグの作成にも使用されます。RFC 5208を参照してください。 |
| int | wc_EncryptPKCS8Key(byte * key, word32 keySz, byte * out, word32 * outSz, const char * password, int passwordSz, int vPKCS, int pbeOid, int encAlgId, byte * salt, word32 saltSz, int itt, WC_RNG * rng, void * heap) この関数は、暗号化されていないPKCS#8 DERキー(例:wc_CreatePKCS8Keyによって作成されたもの)を受け取り、PKCS#8暗号化形式に変換します。結果の暗号化されたキーは、wc_DecryptPKCS8Keyを使用して復号できます。RFC 5208を参照してください。 |
| int | wc_DecryptPKCS8Key(byte * input, word32 sz, const char * password, int passwordSz) この関数は、暗号化されたPKCS#8 DERキーを受け取り、PKCS#8暗号化されていないDERに復号します。wc_EncryptPKCS8Keyによって行われた暗号化を元に戻します。RFC5208を参照してください。入力バッファは復号されたデータで上書きされます。 |
| int | wc_CreateEncryptedPKCS8Key(byte * key, word32 keySz, byte * out, word32 * outSz, const char * password, int passwordSz, int vPKCS, int pbeOid, int encAlgId, byte * salt, word32 saltSz, int itt, WC_RNG * rng, void * heap) この関数は、従来のDERキーを受け取り、PKCS#8形式に変換し、暗号化します。これを行うためにwc_CreatePKCS8Keyとwc_EncryptPKCS8Keyを使用します。 |
| void | wc_InitDecodedCert(struct DecodedCert * cert, const byte * source, word32 inSz, void * heap) この関数は、"cert"パラメータが指すDecodedCertを初期化します。長さ"inSz"のDERエンコードされた証明書への"source"ポインタを保存します。この証明書は、wc_ParseCertへの後続の呼び出しによって解析できます。 |
| int | wc_ParseCert(DecodedCert * cert, int type, int verify, void * cm) この関数は、DecodedCertオブジェクトに保存されたDERエンコードされた証明書を解析し、そのオブジェクトのフィールドを設定します。DecodedCertは、wc_InitDecodedCertへの事前の呼び出しで初期化されている必要があります。この関数は、CertificateManagerオブジェクトへのオプションのポインタを取り、CAがCertificateManagerで見つかった場合、DecodedCertの証明機関情報を設定するために使用されます。 |
| void | wc_FreeDecodedCert(struct DecodedCert * cert) この関数は、wc_InitDecodedCertで以前に初期化されたDecodedCertを解放します。 |
| int | wc_SetTimeCb(wc_time_cb f) この関数は、wolfSSLが現在時刻を取得する必要があるときに使用される時刻コールバックを登録します。コールバックのプロトタイプは、C標準ライブラリの"time"関数と同じである必要があります。 |
| time_t | wc_Time(time_t * t) この関数は、現在時刻を取得します。デフォルトでは、プラットフォーム間で異なるXTIMEマクロを使用します。ユーザーは、wc_SetTimeCb関数を介して任意の関数を使用できます。 |
| int | wc_SetCustomExtension(Cert * cert, int critical, const char * oid, const byte * der, word32 derSz) この関数は、X.509証明書にカスタム拡張を挿入します。 注:ポインタであるパラメータのいずれかが指すアドレスのコンテンツは、 証明書が生成されてder出力が得られるまで変更してはいけません。 この関数はコンテンツを別のバッファにコピーしません。 |
| int | wc_SetUnknownExtCallback(DecodedCert * cert, wc_UnknownExtCallback cb) この関数は、wolfSSLが証明書の解析中に証明書内の不明なX.509拡張に遭遇したときに使用されるコールバックを登録します。コールバックのプロトタイプは次のようにする必要があります: |
| int | wc_CheckCertSigPubKey(const byte * cert, word32 certSz, void * heap, const byte * pubKey, word32 pubKeySz, int pubKeyOID) この関数は、X.509証明書のder形式の署名を公開鍵に対して検証します。公開鍵は、der形式の完全なサブジェクト公開鍵情報であることが期待されます。 |
| int | wc_Asn1PrintOptions_Init(Asn1PrintOptions * opts) この関数は、ASN.1プリントオプションを初期化します。 |
| int | wc_Asn1PrintOptions_Set(Asn1PrintOptions * opts, enum Asn1PrintOpt opt, word32 val) この関数は、ASN.1プリントオプションオブジェクトにプリントオプションを設定します。 |
| int | wc_Asn1_Init(Asn1 * asn1) この関数は、ASN.1解析オブジェクトを初期化します。 |
| int | wc_Asn1_SetFile(Asn1 * asn1, XFILE file) この関数は、ASN.1解析オブジェクトへのプリント時に使用するファイルを設定します。 |
| int | wc_Asn1_PrintAll(Asn1 * asn1, Asn1PrintOptions * opts, unsigned char * data, word32 len) すべてのASN.1項目をプリントします。 |
Functions Documentation
function wc_InitCert
int wc_InitCert(
Cert *
)
この関数は、デフォルトのオプションでデフォルトの証明書を初期化します: version = 3(0x2)、serial = 0、sigType = SHA_WITH_RSA、issuer = 空白、 daysValid = 500、selfSigned = 1(true)発行者としてsubjectを使用、 subject = 空白
Parameters:
- cert 初期化する未初期化のcert構造体へのポインタ
See:
Return: none 返り値なし。
Example
Cert myCert;
wc_InitCert(&myCert);
function wc_CertNew
Cert * wc_CertNew(
void * heap
)
この関数は、証明書操作中に使用するための新しいCert構造体を割り当てます。アプリケーションが構造体自体を割り当てる必要はありません。Cert構造体もこの関数によって初期化されるため、wc_InitCert()を呼び出す必要がなくなります。アプリケーションが割り当てられたCert構造体の使用を終了したら、wc_CertFree()を呼び出す必要があります。
Parameters:
- A 動的割り当てに使用されるヒープへのポインタ。NULLでも可。
See:
Return:
- pointer 成功した場合、呼び出しは新しく割り当てられ初期化されたCertへのポインタを返します。
- NULL メモリ割り当て失敗時。
Example
Cert* myCert;
myCert = wc_CertNew(NULL);
if (myCert == NULL) {
// Cert作成失敗
}
function wc_CertFree
void wc_CertFree(
Cert * cert
)
この関数は、wc_CertNew()への以前の呼び出しによってcert構造体に割り当てられたメモリを解放します。
Parameters:
- A 解放するcert構造体へのポインタ。
See:
Return: None.
Example
Cert* myCert;
myCert = wc_CertNew(NULL);
// 証明書操作を実行。
wc_CertFree(myCert);
function wc_MakeCert
int wc_MakeCert(
Cert * cert,
byte * derBuffer,
word32 derSz,
RsaKey * rsaKey,
ecc_key * eccKey,
WC_RNG * rng
)
CA署名付き証明書を作成するために使用されます。subject情報が入力された後に呼び出されます。この関数は、cert入力からx509証明書v3 RSAまたはECCを作成します。次に、この証明書をderBufferに書き込みます。証明書を生成するために、rsaKeyまたはeccKeyのいずれかを受け取ります。このメソッドを呼び出す前に、証明書をwc_InitCertで初期化する必要があります。
Parameters:
- cert 初期化されたcert構造体へのポインタ
- derBuffer 生成された証明書を保持するバッファへのポインタ
- derSz 証明書を格納するバッファのサイズ
- rsaKey 証明書の生成に使用されるrsaキーを含むRsaKey構造体へのポインタ
- eccKey 証明書の生成に使用されるeccキーを含むEccKey構造体へのポインタ
- rng 証明書を作成するために使用される乱数生成器へのポインタ
See:
Return:
- Success 指定された入力certからx509証明書を正常に作成すると、生成された証明書のサイズを返します。
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- BUFFER_E 提供されたderBufferが生成された証明書を格納するには小さすぎる場合に返されます
- Others 証明書の生成が成功しない場合、追加のエラーメッセージが返される可能性があります。
Example
Cert myCert;
wc_InitCert(&myCert);
WC_RNG rng;
// rngを初期化;
RsaKey key;
// keyを初期化;
byte * derCert = malloc(FOURK_BUF);
word32 certSz;
certSz = wc_MakeCert(&myCert, derCert, FOURK_BUF, &key, NULL, &rng);
function wc_MakeCertReq
int wc_MakeCertReq(
Cert * cert,
byte * derBuffer,
word32 derSz,
RsaKey * rsaKey,
ecc_key * eccKey
)
この関数は、入力証明書を使用して証明書署名要求を作成し、出力をderBufferに書き込みます。証明書要求を生成するために、rsaKeyまたはeccKeyのいずれかを受け取ります。証明書署名要求に署名するには、この関数の後にwc_SignCert()を呼び出す必要があります。この関数の使用例については、wolfCryptテストアプリケーション(./wolfcrypt/test/test.c)を参照してください。
Parameters:
- cert 初期化されたcert構造体へのポインタ
- derBuffer 生成された証明書要求を保持するバッファへのポインタ
- derSz 証明書要求を格納するバッファのサイズ
- rsaKey 証明書要求の生成に使用されるrsaキーを含むRsaKey構造体へのポインタ
- eccKey 証明書要求の生成に使用されるeccキーを含むEccKey構造体へのポインタ
See:
Return:
- Success 指定された入力certからX.509証明書要求を正常に作成すると、生成された証明書要求のサイズを返します。
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- BUFFER_E 提供されたderBufferが生成された証明書を格納するには小さすぎる場合に返されます
- Other 証明書要求の生成が成功しない場合、追加のエラーメッセージが返される可能性があります。
Example
Cert myCert;
// myCertを初期化
EccKey key;
// keyを初期化;
byte* derCert = (byte*)malloc(FOURK_BUF);
word32 certSz;
certSz = wc_MakeCertReq(&myCert, derCert, FOURK_BUF, NULL, &key);
function wc_SignCert
int wc_SignCert(
int requestSz,
int sigType,
byte * derBuffer,
word32 derSz,
RsaKey * rsaKey,
ecc_key * eccKey,
WC_RNG * rng
)
この関数はbufferに署名し、署名をbufferの末尾に追加します。署名タイプを受け取ります。CA署名付き証明書を作成する場合は、wc_MakeCert()またはwc_MakeCertReq()の後に呼び出す必要があります。
Parameters:
- requestSz 署名を要求している証明書本文のサイズ
- sType 作成する署名のタイプ。有効なオプションは:CTC_MD5wRSA、CTC_SHAwRSA、CTC_SHAwECDSA、CTC_SHA256wECDSA、およびCTC_SHA256wRSA
- buffer 署名される証明書を含むバッファへのポインタ。成功時:新しく署名された証明書を保持します
- buffSz 新しく署名された証明書を格納するバッファの(合計)サイズ
- rsaKey 証明書に署名するために使用されるrsaキーを含むRsaKey構造体へのポインタ
- eccKey 証明書に署名するために使用されるeccキーを含むEccKey構造体へのポインタ
- rng 証明書に署名するために使用される乱数生成器へのポインタ
See:
Return:
- Success 証明書の署名に成功すると、証明書の新しいサイズ(署名を含む)を返します。
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- BUFFER_E 提供されたバッファが生成された証明書を格納するには小さすぎる場合に返されます
- Other 証明書の生成が成功しない場合、追加のエラーメッセージが返される可能性があります。
Example
Cert myCert;
byte* derCert = (byte*)malloc(FOURK_BUF);
// myCert、derCertを初期化
RsaKey key;
// keyを初期化;
WC_RNG rng;
// rngを初期化
word32 certSz;
certSz = wc_SignCert(myCert.bodySz, myCert.sigType,derCert,FOURK_BUF,
&key, NULL,
&rng);
function wc_MakeSelfCert
int wc_MakeSelfCert(
Cert * cert,
byte * derBuffer,
word32 derSz,
RsaKey * key,
WC_RNG * rng
)
この関数は、自己署名用の前の2つの関数、wc_MakeCertとwc_SignCertの組み合わせです(前の関数はCA要求に使用できます)。証明書を作成してから署名し、自己署名証明書を生成します。
Parameters:
- cert 作成して署名する証明書へのポインタ
- buffer 署名された証明書を保持するバッファへのポインタ
- buffSz 署名された証明書を格納するバッファのサイズ
- key 証明書に署名するために使用されるrsaキーを含むRsaKey構造体へのポインタ
- rng 証明書の生成と署名に使用される乱数生成器へのポインタ
See:
Return:
- Success 証明書の署名に成功すると、証明書の新しいサイズを返します。
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- BUFFER_E 提供されたバッファが生成された証明書を格納するには小さすぎる場合に返されます
- Other 証明書の生成が成功しない場合、追加のエラーメッセージが返される可能性があります。
Example
Cert myCert;
byte* derCert = (byte*)malloc(FOURK_BUF);
// myCert、derCertを初期化
RsaKey key;
// keyを初期化;
WC_RNG rng;
// rngを初期化
word32 certSz;
certSz = wc_MakeSelfCert(&myCert, derCert, FOURK_BUF, &key, NULL, &rng);
function wc_SetIssuer
int wc_SetIssuer(
Cert * cert,
const char * issuerFile
)
この関数は、証明書の発行者を、提供されたpem issuerFileの発行者に設定します。また、証明書の自己署名属性をfalseに変更します。issuerFileで指定された発行者は、cert発行者を設定する前に検証されます。このメソッドは、署名前にフィールドを設定するために使用されます。
Parameters:
- cert 発行者を設定する証明書へのポインタ
- issuerFile pem形式の証明書を含むファイルのパス
See:
Return:
- 0 証明書の発行者を正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
if(wc_SetIssuer(&myCert, "./path/to/ca-cert.pem") != 0) {
// 発行者設定エラー
}
function wc_SetSubject
int wc_SetSubject(
Cert * cert,
const char * subjectFile
)
この関数は、証明書のsubjectを、提供されたpem subjectFileのsubjectに設定します。このメソッドは、署名前にフィールドを設定するために使用されます。
Parameters:
- cert 発行者を設定する証明書へのポインタ
- subjectFile pem形式の証明書を含むファイルのパス
See:
Return:
- 0 証明書の発行者を正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
if(wc_SetSubject(&myCert, "./path/to/ca-cert.pem") != 0) {
// subject設定エラー
}
function wc_SetSubjectRaw
int wc_SetSubjectRaw(
Cert * cert,
const byte * der,
int derSz
)
この関数は、提供されたderバッファのsubjectから証明書の生のsubjectを設定します。このメソッドは、署名前に生のsubjectフィールドを設定するために使用されます。
Parameters:
- cert 生のsubjectを設定する証明書へのポインタ
- der subjectを取得するder形式の証明書を含むバッファへのポインタ
- derSz subjectを取得するder形式の証明書を含むバッファのサイズ
See:
Return:
- 0 証明書のsubjectを正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
byte* der;
der = (byte*)malloc(FOURK_BUF);
// derを初期化
if(wc_SetSubjectRaw(&myCert, der, FOURK_BUF) != 0) {
// subject設定エラー
}
function wc_GetSubjectRaw
int wc_GetSubjectRaw(
byte ** subjectRaw,
Cert * cert
)
この関数は、証明書構造体から生のsubjectを取得します。
Parameters:
- subjectRaw 正常に返された場合の生のsubjectへのポインタのポインタ
- cert 生のsubjectを取得する証明書へのポインタ
See:
Return:
- 0 証明書からsubjectを正常に取得した場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
Example
Cert myCert;
byte *subjRaw;
// myCertを初期化
if(wc_GetSubjectRaw(&subjRaw, &myCert) != 0) {
// subject設定エラー
}
function wc_SetAltNames
int wc_SetAltNames(
Cert * cert,
const char * file
)
この関数は、証明書の代替名を、提供されたpemファイル内の代替名に設定します。これは、同じ証明書で複数のドメインを保護したい場合に便利です。このメソッドは、署名前にフィールドを設定するために使用されます。
Parameters:
- cert 代替名を設定する証明書へのポインタ
- file pem形式の証明書を含むファイルのパス
See:
Return:
- 0 証明書の代替名を正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
if(wc_SetSubject(&myCert, "./path/to/ca-cert.pem") != 0) {
// 代替名設定エラー
}
function wc_SetIssuerBuffer
int wc_SetIssuerBuffer(
Cert * cert,
const byte * der,
int derSz
)
この関数は、提供されたderバッファの発行者から証明書の発行者を設定します。また、証明書の自己署名属性をfalseに変更します。このメソッドは、署名前にフィールドを設定するために使用されます。
Parameters:
- cert 発行者を設定する証明書へのポインタ
- der 発行者を取得するder形式の証明書を含むバッファへのポインタ
- derSz 発行者を取得するder形式の証明書を含むバッファのサイズ
See:
Return:
- 0 証明書の発行者を正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
byte* der;
der = (byte*)malloc(FOURK_BUF);
// derを初期化
if(wc_SetIssuerBuffer(&myCert, der, FOURK_BUF) != 0) {
// issuer設定エラー
}
function wc_SetIssuerRaw
int wc_SetIssuerRaw(
Cert * cert,
const byte * der,
int derSz
)
この関数は、提供されたderバッファの発行者から証明書の生の発行者を設定します。このメソッドは、署名前に生の発行者フィールドを設定するために使用されます。
Parameters:
- cert 生の発行者を設定する証明書へのポインタ
- der subjectを取得するder形式の証明書を含むバッファへのポインタ
- derSz subjectを取得するder形式の証明書を含むバッファのサイズ
See:
Return:
- 0 証明書の発行者を正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
byte* der;
der = (byte*)malloc(FOURK_BUF);
// derを初期化
if(wc_SetIssuerRaw(&myCert, der, FOURK_BUF) != 0) {
// subject設定エラー
}
function wc_SetSubjectBuffer
int wc_SetSubjectBuffer(
Cert * cert,
const byte * der,
int derSz
)
この関数は、提供されたderバッファのsubjectから証明書のsubjectを設定します。このメソッドは、署名前にフィールドを設定するために使用されます。
Parameters:
- cert subjectを設定する証明書へのポインタ
- der subjectを取得するder形式の証明書を含むバッファへのポインタ
- derSz subjectを取得するder形式の証明書を含むバッファのサイズ
See:
Return:
- 0 証明書のsubjectを正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
byte* der;
der = (byte*)malloc(FOURK_BUF);
// derを初期化
if(wc_SetSubjectBuffer(&myCert, der, FOURK_BUF) != 0) {
// subject設定エラー
}
function wc_SetAltNamesBuffer
int wc_SetAltNamesBuffer(
Cert * cert,
const byte * der,
int derSz
)
この関数は、提供されたderバッファの代替名から証明書の代替名を設定します。これは、同じ証明書で複数のドメインを保護したい場合に便利です。このメソッドは、署名前にフィールドを設定するために使用されます。
Parameters:
- cert 代替名を設定する証明書へのポインタ
- der 代替名を取得するder形式の証明書を含むバッファへのポインタ
- derSz 代替名を取得するder形式の証明書を含むバッファのサイズ
See:
Return:
- 0 証明書の代替名を正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
byte* der;
der = (byte*)malloc(FOURK_BUF);
// derを初期化
if(wc_SetAltNamesBuffer(&myCert, der, FOURK_BUF) != 0) {
// subject設定エラー
}
function wc_SetDatesBuffer
int wc_SetDatesBuffer(
Cert * cert,
const byte * der,
int derSz
)
この関数は、提供されたderバッファの日付範囲から証明書の日付を設定します。このメソッドは、署名前にフィールドを設定するために使用されます。
Parameters:
- cert 日付を設定する証明書へのポインタ
- der 日付範囲を取得するder形式の証明書を含むバッファへのポインタ
- derSz 日付範囲を取得するder形式の証明書を含むバッファのサイズ
See: wc_InitCert
Return:
- 0 証明書の日付を正常に設定した場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_PARSE_E 証明書ヘッダーファイルの解析エラーがある場合に返されます
- ASN_OBJECT_ID_E 証明書から暗号化タイプを解析する際にエラーがある場合に返されます
- ASN_EXPECT_0_E 証明書ファイルの暗号化仕様にフォーマットエラーがある場合に返されます
- ASN_BEFORE_DATE_E 日付が証明書の開始日より前の場合に返されます
- ASN_AFTER_DATE_E 日付が証明書の有効期限より後の場合に返されます
- ASN_BITSTR_E 証明書からビット文字列を解析する際にエラーがある場合に返されます
- ECC_CURVE_OID_E 証明書からECCキーを解析する際にエラーがある場合に返されます
- ASN_UNKNOWN_OID_E 証明書が不明なキーオブジェクトIDを使用している場合に返されます
- ASN_VERSION_E ALLOW_V1_EXTENSIONSオプションが定義されておらず、証明書がV1またはV2証明書の場合に返されます
- BAD_FUNC_ARG 証明書拡張の処理エラーがある場合に返されます
- ASN_CRIT_EXT_E 証明書の処理中に見慣れない重要な拡張に遭遇した場合に返されます
- ASN_SIG_OID_E 署名暗号化タイプが提供されたファイル内の証明書の暗号化タイプと同じでない場合に返されます
- ASN_SIG_CONFIRM_E 証明書署名の確認が失敗した場合に返されます
- ASN_NAME_INVALID_E 証明書の名前がCA名前制約で許可されていない場合に返されます
- ASN_NO_SIGNER_E 証明書の真正性を検証するCA署名者がいない場合に返されます
Example
Cert myCert;
// myCertを初期化
byte* der;
der = (byte*)malloc(FOURK_BUF);
// derを初期化
if(wc_SetDatesBuffer(&myCert, der, FOURK_BUF) != 0) {
// subject設定エラー
}
function wc_SetAuthKeyIdFromPublicKey
int wc_SetAuthKeyIdFromPublicKey(
Cert * cert,
RsaKey * rsakey,
ecc_key * eckey
)
RSAまたはECC公開鍵からAKIDを設定します。注:rsakeyまたはeckeyのいずれか一方のみを設定し、両方は設定しないでください。
Parameters:
- cert SKIDを設定する証明書へのポインタ。
- rsakey 読み取り元のRsaKey構造体へのポインタ。
- eckey 読み取り元のecc_keyへのポインタ。
See:
Return:
- 0 成功
- BAD_FUNC_ARG certがnullまたはrsakeyとeckeyの両方がnullの場合。
- MEMORY_E メモリの割り当てエラー。
- PUBLIC_KEY_E キーへの書き込みエラー。
Example
Cert myCert;
RsaKey keypub;
wc_InitRsaKey(&keypub, 0);
if (wc_SetAuthKeyIdFromPublicKey(&myCert, &keypub, NULL) != 0)
{
// エラーを処理
}
function wc_SetAuthKeyIdFromCert
int wc_SetAuthKeyIdFromCert(
Cert * cert,
const byte * der,
int derSz
)
DERエンコードされた証明書からAKIDを設定します。
Parameters:
- cert 書き込み先のCert構造体。
- der DERエンコードされた証明書バッファ。
- derSz derのサイズ(バイト単位)。
See:
Return:
- 0 成功
- BAD_FUNC_ARG いずれかの引数がnullまたはderSzが0未満の場合のエラー。
- MEMORY_E メモリの割り当てに問題がある場合のエラー。
- ASN_NO_SKID サブジェクトキーIDが見つかりません。
Example
Cert some_cert;
byte some_der[] = { // DERバッファを初期化 };
wc_InitCert(&some_cert);
if(wc_SetAuthKeyIdFromCert(&some_cert, some_der, sizeof(some_der) != 0)
{
// エラーを処理
}
function wc_SetAuthKeyId
int wc_SetAuthKeyId(
Cert * cert,
const char * file
)
PEM形式の証明書ファイルからAKIDを設定します。
Parameters:
- cert AKIDを設定したいCert構造体。
- file PEM証明書ファイルを含むバッファ。
See:
Return:
- 0 成功
- BAD_FUNC_ARG certまたはfileがnullの場合のエラー。
- MEMORY_E メモリの割り当てに問題がある場合のエラー。
Example
char* file_name = "/path/to/file";
cert some_cert;
wc_InitCert(&some_cert);
if(wc_SetAuthKeyId(&some_cert, file_name) != 0)
{
// エラーを処理
}
function wc_SetSubjectKeyIdFromPublicKey
int wc_SetSubjectKeyIdFromPublicKey(
Cert * cert,
RsaKey * rsakey,
ecc_key * eckey
)
RSAまたはECC公開鍵からSKIDを設定します。
Parameters:
- cert 使用するCert構造体へのポインタ。
- rsakey RsaKey構造体へのポインタ
- eckey ecc_key構造体へのポインタ
See: wc_SetSubjectKeyId
Return:
- 0 成功
- BAD_FUNC_ARG certまたはrsakeyとeckeyがnullの場合に返されます。
- MEMORY_E メモリの割り当てエラーがある場合に返されます。
- PUBLIC_KEY_E 公開鍵の取得エラーがある場合に返されます。
Example
Cert some_cert;
RsaKey some_key;
wc_InitCert(&some_cert);
wc_InitRsaKey(&some_key);
if(wc_SetSubjectKeyIdFromPublicKey(&some_cert,&some_key, NULL) != 0)
{
// エラーを処理
}
function wc_SetSubjectKeyId
int wc_SetSubjectKeyId(
Cert * cert,
const char * file
)
PEM形式の公開鍵ファイルからSKIDを設定します。両方の引数が必要です。
Parameters:
- cert SKIDを設定するCert構造体。
- file PEMエンコードされたファイルを含む。
See: wc_SetSubjectKeyIdFromPublicKey
Return:
- 0 成功
- BAD_FUNC_ARG certまたはfileがnullの場合に返されます。
- MEMORY_E キー用のメモリ割り当てに問題がある場合に返されます。
- PUBLIC_KEY_E 公開鍵のデコードエラーがある場合に返されます。
Example
const char* file_name = "path/to/file";
Cert some_cert;
wc_InitCert(&some_cert);
if(wc_SetSubjectKeyId(&some_cert, file_name) != 0)
{
// エラーを処理
}
function wc_SetKeyUsage
int wc_SetKeyUsage(
Cert * cert,
const char * value
)
この関数を使用すると、カンマ区切りのトークン文字列を使用してキー使用法を設定できます。受け入れられるトークンは:digitalSignature、nonRepudiation、contentCommitment、keyCertSign、cRLSign、dataEncipherment、keyAgreement、keyEncipherment、encipherOnly、decipherOnlyです。例:"digitalSignature,nonRepudiation" nonRepudiationとcontentCommitmentは同じ用途です。
Parameters:
- cert 初期化されたCert構造体へのポインタ。
- value 使用法を設定するトークンのカンマ区切り文字列。
See:
Return:
- 0 成功
- BAD_FUNC_ARG いずれかの引数がnullの場合に返されます。
- MEMORY_E メモリの割り当てエラーがある場合に返されます。
- KEYUSAGE_E 認識されないトークンが入力された場合に返されます。
Example
Cert cert;
wc_InitCert(&cert);
if(wc_SetKeyUsage(&cert, "cRLSign,keyCertSign") != 0)
{
// エラーを処理
}
function wc_PemPubKeyToDer
int wc_PemPubKeyToDer(
const char * fileName,
unsigned char * derBuf,
int derSz
)
ファイルからPEMキーを読み込み、DERエンコードされたバッファに変換します。
Parameters:
- fileName ロードするファイルの名前。
- derBuf DERエンコードされたキー用のバッファ。
- derSz DERバッファのサイズ。
See: wc_PubKeyPemToDer
Return:
- 0 成功
- <0 エラー
- SSL_BAD_FILE ファイルを開く際に問題があります。
- MEMORY_E ファイルバッファ用のメモリ割り当てエラーがあります。
- BUFFER_E derBufが変換されたキーを保持するのに十分な大きさではありません。
Example
char* some_file = "filename";
unsigned char der[];
if(wc_PemPubKeyToDer(some_file, der, sizeof(der)) != 0)
{
// エラーを処理
}
function wc_PubKeyPemToDer
int wc_PubKeyPemToDer(
const unsigned char * pem,
int pemSz,
unsigned char * buff,
int buffSz
)
PEMエンコードされた公開鍵をDERに変換します。バッファに書き込まれたバイト数、またはエラーの場合は負の値を返します。
Parameters:
- pem PEMエンコードされたキー
- pemSz pemのサイズ
- buff 出力用バッファへのポインタ。
- buffSz バッファのサイズ。
See: wc_PemPubKeyToDer
Return:
-
0 成功、書き込まれたバイト数。
- BAD_FUNC_ARG pem、buff、またはbuffSzがnullの場合に返されます
- <0 関数内でエラーが発生しました。
Example
byte some_pem[] = { PEMキーで初期化 }
unsigned char out_buffer[1024]; // バッファがDERを格納するのに十分な大きさであることを確認
if(wc_PubKeyPemToDer(some_pem, sizeof(some_pem), out_buffer,
sizeof(out_buffer)) < 0)
{
// エラーを処理
}
function wc_PemCertToDer
int wc_PemCertToDer(
const char * fileName,
unsigned char * derBuf,
int derSz
)
この関数は、pem証明書をder証明書に変換し、結果の証明書を提供されたderBufバッファに配置します。
Parameters:
- fileName der証明書に変換するpem証明書を含むファイルへのパス
- derBuf 変換された証明書を格納するcharバッファへのポインタ
- derSz 変換された証明書を格納するcharバッファのサイズ
See: なし
Return:
- Success 成功時に生成されたderBufのサイズを返します
- BUFFER_E derBufのサイズが生成された証明書を保持するには小さすぎる場合に返されます
- MEMORY_E XMALLOCの呼び出しが失敗した場合に返されます
Example
char * file = "./certs/client-cert.pem";
int derSz;
byte* der = (byte*)XMALLOC((8*1024), NULL, DYNAMIC_TYPE_CERT);
derSz = wc_PemCertToDer(file, der, (8*1024));
if (derSz <= 0) {
// PemCertToDerエラー
}
function wc_DerToPem
int wc_DerToPem(
const byte * der,
word32 derSz,
byte * output,
word32 outSz,
int type
)
この関数は、derバッファに含まれるder形式の入力証明書を、outputバッファに含まれるpem形式の出力証明書に変換します。これはインプレース変換ではなく、pem形式の出力を格納するために別のバッファを使用する必要があることに注意してください。
Parameters:
- der 変換する証明書のバッファへのポインタ
- derSz 変換する証明書のサイズ
- output pem形式の証明書を格納するバッファへのポインタ
- outSz pem形式の証明書を格納するバッファのサイズ
- type 生成する証明書のタイプ。有効なタイプは:CERT_TYPE、PRIVATEKEY_TYPE、ECC_PRIVATEKEY_TYPE、およびCERTREQ_TYPE。
See: wc_PemCertToDer
Return:
- Success 入力der証明書から正常にpem証明書を作成すると、生成されたpem証明書のサイズを返します。
- BAD_FUNC_ARG derファイルを解析してpemファイルとして格納する際にエラーがある場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_INPUT_E base64エンコードエラーの場合に返されます
- BUFFER_E 出力バッファがpem形式の証明書を格納するには小さすぎる場合に返される可能性があります
Example
byte* der;
// 証明書でderを初期化
byte* pemFormatted[FOURK_BUF];
word32 pemSz;
pemSz = wc_DerToPem(der, derSz,pemFormatted,FOURK_BUF, CERT_TYPE);
function wc_DerToPemEx
int wc_DerToPemEx(
const byte * der,
word32 derSz,
byte * output,
word32 outSz,
byte * cipher_info,
int type
)
この関数は、der形式の入力証明書を変換します、 derバッファに含まれる、pem形式の出力証明書に変換し、outputバッファに格納します。これはインプレース変換ではなく、pem形式の出力を格納するために別のバッファを使用する必要があることに注意してください。暗号情報の設定を許可します。
Parameters:
- der 変換する証明書のバッファへのポインタ
- derSz 変換する証明書のサイズ
- output pem形式の証明書を格納するバッファへのポインタ
- outSz pem形式の証明書を格納するバッファのサイズ
- cipher_info 追加の暗号情報。
- type 生成する証明書のタイプ。有効なタイプは:CERT_TYPE、PRIVATEKEY_TYPE、ECC_PRIVATEKEY_TYPE、およびCERTREQ_TYPE。
See: wc_PemCertToDer
Return:
- Success 入力der証明書から正常にpem証明書を作成すると、生成されたpem証明書のサイズを返します。
- BAD_FUNC_ARG derファイルを解析してpemファイルとして格納する際にエラーがある場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- ASN_INPUT_E base64エンコードエラーの場合に返されます
- BUFFER_E 出力バッファがpem形式の証明書を格納するには小さすぎる場合に返される可能性があります
Example
byte* der;
// 証明書でderを初期化
byte* pemFormatted[FOURK_BUF];
word32 pemSz;
byte* cipher_info[] { 追加の暗号情報。 }
pemSz = wc_DerToPemEx(der, derSz, pemFormatted, FOURK_BUF, cipher_info, CERT_TYPE);
function wc_KeyPemToDer
int wc_KeyPemToDer(
const unsigned char * pem,
int pemSz,
unsigned char * buff,
int buffSz,
const char * pass
)
PEM形式のキーをDER形式に変換します。
Parameters:
- pem PEMエンコードされた証明書へのポインタ。
- pemSz PEMバッファ(pem)のサイズ
- buff DerBuffer構造体のbufferメンバーのコピーへのポインタ。
- buffSz DerBuffer構造体に割り当てられたバッファスペースのサイズ。
- pass 関数に渡されるパスワード。
See: wc_PemToDer
Return:
- int 関数は正常実行時にバッファに書き込まれたバイト数を返します。
- int エラーを示す負の整数が返されます。
Example
byte* loadBuf;
long fileSz = 0;
byte* bufSz;
static int LoadKeyFile(byte** keyBuf, word32* keyBufSz,
const char* keyFile,
int typeKey, const char* password);
…
bufSz = wc_KeyPemToDer(loadBuf, (int)fileSz, saveBuf,
(int)fileSz, password);
if(saveBufSz > 0){
// バイトがバッファに書き込まれました。
}
function wc_CertPemToDer
int wc_CertPemToDer(
const unsigned char * pem,
int pemSz,
unsigned char * buff,
int buffSz,
int type
)
この関数は、PEM形式の証明書をDER形式に変換します。OpenSSL関数PemToDerを呼び出します。
Parameters:
- pem PEM形式の証明書へのポインタ。
- pemSz 証明書のサイズ。
- buff DER形式にコピーされるバッファ。
- buffSz バッファのサイズ。
- type asn_public.h enum CertTypeにある証明書ファイルタイプ。
See: wc_PemToDer
Return: buffer バッファに書き込まれたバイトを返します。
Example
const unsigned char* pem;
int pemSz;
unsigned char buff[BUFSIZE];
int buffSz = sizeof(buff)/sizeof(char);
int type;
...
if(wc_CertPemToDer(pem, pemSz, buff, buffSz, type) <= 0) {
// バッファにバイトが書き込まれました
}
function wc_GetPubKeyDerFromCert
int wc_GetPubKeyDerFromCert(
struct DecodedCert * cert,
byte * derKey,
word32 * derKeySz
)
この関数は、入力されたDecodedCert構造体からDER形式の公開鍵を取得します。このAPIを呼び出す前に、ユーザーはwc_InitDecodedCert()とwc_ParseCert()を呼び出す必要があります。wc_InitDecodedCert()はDER/ASN.1エンコードされた証明書を受け入れます。PEM証明書をDERに変換するには、wc_InitDecodedCert()を呼び出す前にまずwc_CertPemToDer()を使用してください。
Parameters:
- cert X.509証明書を保持する入力されたDecodedCert構造体
- derKey DERエンコードされた公開鍵を配置する出力バッファ
- derKeySz [IN/OUT] 入力時のderKeyバッファのサイズ、返却時の公開鍵のサイズ。derKeyがNULLとして渡された場合、derKeySzは公開鍵に必要なバッファサイズに設定され、関数からLENGTH_ONLY_Eが返されます。
Return: 0 成功時、エラー時は負の値。derKeyがNULLで長さのみを返す場合はLENGTH_ONLY_E。
function wc_EccPrivateKeyDecode
int wc_EccPrivateKeyDecode(
const byte * input,
word32 * inOutIdx,
ecc_key * key,
word32 inSz
)
この関数は、入力バッファinputからECC秘密鍵を読み取り、秘密鍵を解析し、それを使用してecc_keyオブジェクトを生成し、keyに格納します。
Parameters:
- input 入力秘密鍵を含むバッファへのポインタ
- inOutIdx バッファ内で開始するインデックスを含むword32オブジェクトへのポインタ
- key デコードされた秘密鍵を格納する初期化されたeccオブジェクトへのポインタ
- inSz 秘密鍵を含む入力バッファのサイズ
See: wc_RSA_PrivateKeyDecode
Return:
- 0 秘密鍵のデコードに成功し、結果をecc_key構造体に格納した場合
- ASN_PARSE_E derファイルを解析してpemファイルとして格納する際にエラーがある場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- BUFFER_E 変換する証明書が指定された最大証明書サイズより大きい場合に返されます
- ASN_OBJECT_ID_E 証明書エンコーディングに無効なオブジェクトIDがある場合に返されます
- ECC_CURVE_OID_E 提供されたキーのECC曲線がサポートされていない場合に返されます
- ECC_BAD_ARG_E ECCキー形式にエラーがある場合に返されます
- NOT_COMPILED_IN 秘密鍵が圧縮されており、圧縮キーが提供されていない場合に返されます
- MP_MEM 秘密鍵の解析中に使用される数学ライブラリにエラーがある場合に返されます
- MP_VAL 秘密鍵の解析中に使用される数学ライブラリにエラーがある場合に返されます
- MP_RANGE 秘密鍵の解析中に使用される数学ライブラリにエラーがある場合に返されます
Example
int ret, idx=0;
ecc_key key; // キーを格納
byte* tmp; // キーを読み取るための一時バッファ
tmp = (byte*) malloc(FOURK_BUF);
int inSz;
inSz = fread(tmp, 1, FOURK_BUF, privateKeyFile);
// tmpバッファにキーを読み取る
wc_ecc_init(&key); // キーを初期化
ret = wc_EccPrivateKeyDecode(tmp, &idx, &key, (word32)inSz);
if(ret < 0) {
// eccキーのデコードエラー
}
function wc_EccKeyToDer
int wc_EccKeyToDer(
ecc_key * key,
byte * output,
word32 inLen
)
この関数は、秘密ECCキーをder形式に書き込みます。
Parameters:
- key 入力eccキーを含むバッファへのポインタ
- output der形式のキーを格納するバッファへのポインタ
- inLen der形式のキーを格納するバッファの長さ
See: wc_RsaKeyToDer
Return:
- Success ECCキーのder形式への書き込みに成功すると、バッファに書き込まれた長さを返します
- BAD_FUNC_ARG keyまたはoutputがnull、またはinLenがゼロの場合に返されます
- MEMORY_E XMALLOCでメモリを割り当てる際にエラーがある場合に返されます
- BUFFER_E 変換された証明書が出力バッファに格納するには大きすぎる場合に返されます
- ASN_UNKNOWN_OID_E 使用されているECCキーが不明なタイプの場合に返されます
- MP_MEM 秘密鍵の解析中に使用される数学ライブラリにエラーがある場合に返されます
- MP_VAL 秘密鍵の解析中に使用される数学ライブラリにエラーがある場合に返されます
- MP_RANGE 秘密鍵の解析中に使用される数学ライブラリにエラーがある場合に返されます
Example
int derSz;
ecc_key key;
// キーを初期化して作成
byte der[FOURK_BUF];
// ここにder形式のキーを格納
derSz = wc_EccKeyToDer(&key, der, FOURK_BUF);
if(derSz < 0) {
// eccキーをderバッファに変換する際のエラー
}
function wc_EccPublicKeyDecode
int wc_EccPublicKeyDecode(
const byte * input,
word32 * inOutIdx,
ecc_key * key,
word32 inSz
)
入力バッファからECC公開鍵をデコードします。ECCキーを取得するためにASNシーケンスを解析します。
Parameters:
- input デコードするDERエンコードされたキーを含むバッファ。
- inOutIdx 入力バッファの読み取り開始位置のインデックス。出力時、インデックスは入力バッファの最後に解析された位置に設定されます。
- key 公開鍵を格納するecc_key構造体へのポインタ。
- inSz 入力バッファのサイズ。
See: wc_ecc_import_x963
Return:
- 0 成功
- BAD_FUNC_ARG いずれかの引数がnullの場合に返されます。
- ASN_PARSE_E 解析エラーがある場合に返されます
- ASN_ECC_KEY_E キーのインポートエラーがある場合に返されます。 考えられる理由についてはwc_ecc_import_x963を参照してください。
Example
int ret;
word32 idx = 0;
byte buff[] = { // キーで初期化 };
ecc_key pubKey;
wc_ecc_init(&pubKey);
if ( wc_EccPublicKeyDecode(buff, &idx, &pubKey, sizeof(buff)) != 0) {
// キーのデコードエラー
}
function wc_EccPublicKeyToDer
int wc_EccPublicKeyToDer(
ecc_key * key,
byte * output,
word32 inLen,
int with_AlgCurve
)
この関数は、ECC公開鍵をDER形式に変換します。使用されたバッファのサイズを返します。DER形式のECC公開鍵は出力バッファに格納されます。with_AlgCurveフラグは、アルゴリズムと曲線情報を持つヘッダーを含めます
Parameters:
- key ECCキーへのポインタ
- output 書き込み先の出力バッファへのポインタ。
- inLen バッファのサイズ。
- with_AlgCurve アルゴリズムと曲線情報を持つヘッダーを含めるタイミングのフラグ。
See:
Return:
-
0 成功、使用されたバッファのサイズ
- BAD_FUNC_ARG outputまたはkeyがnullの場合に返されます。
- LENGTH_ONLY_E ECC公開鍵のサイズ取得エラー。
- BUFFER_E 出力バッファが小さすぎる場合に返されます。
Example
ecc_key key;
wc_ecc_init(&key);
WC_RNG rng;
wc_InitRng(&rng);
wc_ecc_make_key(&rng, 32, &key);
int derSz = // der用の適切なサイズ;
byte der[derSz];
if(wc_EccPublicKeyToDer(&key, der, derSz, 1) < 0)
{
// ECC公開鍵のder変換エラー
}
function wc_EccPublicKeyToDer_ex
int wc_EccPublicKeyToDer_ex(
ecc_key * key,
byte * output,
word32 inLen,
int with_AlgCurve,
int comp
)
この関数は、ECC公開鍵をDER形式に変換します。使用されたバッファのサイズを返します。DER形式のECC公開鍵は出力バッファに格納されます。with_AlgCurveフラグは、アルゴリズムと曲線情報を持つヘッダーを含めます。compパラメータは、公開鍵を圧縮形式でエクスポートするかどうかを決定します。
Parameters:
- key ECCキーへのポインタ
- output 書き込み先の出力バッファへのポインタ。
- inLen バッファのサイズ。
- with_AlgCurve アルゴリズムと曲線情報を持つヘッダーを含めるタイミングのフラグ。
- comp 1(ゼロ以外)の場合、ECC公開鍵は圧縮形式で書き込まれます。0の場合、非圧縮形式で書き込まれます。
See:
Return:
-
0 成功、使用されたバッファのサイズ
- BAD_FUNC_ARG outputまたはkeyがnullの場合に返されます。
- LENGTH_ONLY_E ECC公開鍵のサイズ取得エラー。
- BUFFER_E 出力バッファが小さすぎる場合に返されます。
Example
ecc_key key;
wc_ecc_init(&key);
WC_RNG rng;
wc_InitRng(&rng);
wc_ecc_make_key(&rng, 32, &key);
int derSz = // der用の適切なサイズ;
byte der[derSz];
// 圧縮されたECCキーを書き出す
if(wc_EccPublicKeyToDer_ex(&key, der, derSz, 1, 1) < 0)
{
// ECC公開鍵のder変換エラー
}
function wc_Curve25519PrivateKeyDecode
int wc_Curve25519PrivateKeyDecode(
const byte * input,
word32 * inOutIdx,
curve25519_key * key,
word32 inSz
)
この関数は、DERエンコードされたバッファからCurve25519秘密鍵(のみ)をデコードします
Parameters:
- input DERエンコードされた秘密鍵を含むバッファへのポインタ
- inOutIdx 入力バッファの読み取り開始位置のインデックス。出力時、インデックスは入力バッファの最後に解析された位置に設定されます。
- key デコードされたキーを格納するcurve25519_key構造体へのポインタ
- inSz 入力DERバッファのサイズ
See:
Return:
- 0 成功
- BAD_FUNC_ARG input、inOutIdxまたはkeyがnullの場合に返されます
- ASN_PARSE_E DERエンコードされたデータの解析エラーがある場合に返されます
- ECC_BAD_ARG_E キー長がCURVE25519_KEYSIZEでない場合、またはDERキーが適切にフォーマットされているにもかかわらず他の問題を含む場合に返されます。
- BUFFER_E 入力バッファが有効なDERエンコードされたキーを含むには小さすぎる場合に返されます。
Example
byte der[] = { // DERエンコードされたキー };
word32 idx = 0;
curve25519_key key;
wc_curve25519_init(&key);
if (wc_Curve25519PrivateKeyDecode(der, &idx, &key, sizeof(der)) != 0) {
// 秘密鍵のデコードエラー
}
function wc_Curve25519PublicKeyDecode
int wc_Curve25519PublicKeyDecode(
const byte * input,
word32 * inOutIdx,
curve25519_key * key,
word32 inSz
)
この関数は、DERエンコードされたバッファからCurve25519公開鍵(のみ)をデコードします。
Parameters:
- input DERエンコードされた公開鍵を含むバッファへのポインタ
- inOutIdx 入力バッファの読み取り開始位置のインデックス。出力時、インデックスは入力バッファの最後に解析された位置に設定されます。
- key デコードされたキーを格納するcurve25519_key構造体へのポインタ
- inSz 入力DERバッファのサイズ
See:
Return:
- 0 成功
- BAD_FUNC_ARG input、inOutIdxまたはkeyがnullの場合に返されます
- ASN_PARSE_E DERエンコードされたデータの解析エラーがある場合に返されます
- ECC_BAD_ARG_E キー長がCURVE25519_KEYSIZEでない場合、またはDERキーが適切にフォーマットされているにもかかわらず他の問題を含む場合に返されます。
- BUFFER_E 入力バッファが有効なDERエンコードされたキーを含むには小さすぎる場合に返されます。
Example
byte der[] = { // DERエンコードされたキー };
word32 idx = 0;
curve25519_key key;
wc_curve25519_init(&key);
if (wc_Curve25519PublicKeyDecode(der, &idx, &key, sizeof(der)) != 0) {
// 公開鍵のデコードエラー
}
function wc_Curve25519KeyDecode
int wc_Curve25519KeyDecode(
const byte * input,
word32 * inOutIdx,
curve25519_key * key,
word32 inSz
)
この関数は、DERエンコードされたバッファからCurve25519キーをデコードします。秘密鍵、公開鍵、または両方をデコードできます。
Parameters:
- input DERエンコードされたキーを含むバッファへのポインタ
- inOutIdx 入力バッファの読み取り開始位置のインデックス。出力時、インデックスは入力バッファの最後に解析された位置に設定されます。
- key デコードされたキーを格納するcurve25519_key構造体へのポインタ
- inSz 入力DERバッファのサイズ
See:
Return:
- 0 成功
- BAD_FUNC_ARG input、inOutIdxまたはkeyがnullの場合に返されます
- ASN_PARSE_E DERエンコードされたデータの解析エラーがある場合に返されます
- ECC_BAD_ARG_E キー長がCURVE25519_KEYSIZEでない場合、またはDERキーが適切にフォーマットされているにもかかわらず他の問題を含む場合に返されます。
- BUFFER_E 入力バッファが有効なDERエンコードされたキーを含むには小さすぎる場合に返されます。
Example
byte der[] = { // DERエンコードされたキー };
word32 idx = 0;
curve25519_key key;
wc_curve25519_init(&key);
if (wc_Curve25519KeyDecode(der, &idx, &key, sizeof(der)) != 0) {
// キーのデコードエラー
}
function wc_Curve25519PrivateKeyToDer
int wc_Curve25519PrivateKeyToDer(
curve25519_key * key,
byte * output,
word32 inLen
)
この関数は、Curve25519秘密鍵をDER形式にエンコードします。入力キー構造体に公開鍵が含まれている場合、それは無視されます。
Parameters:
- key エンコードする秘密鍵を含むcurve25519_key構造体へのポインタ
- output DERエンコーディングを保持するバッファ
- inLen 出力バッファのサイズ
See:
Return:
-
0 成功、DERエンコーディングの長さ
- BAD_FUNC_ARG keyまたはoutputがnullの場合に返されます
- MEMORY_E 割り当て失敗がある場合に返されます
- BUFFER_E 出力バッファが小さすぎる場合に返されます
Example
curve25519_key key;
wc_curve25519_init(&key);
...
int derSz = 128; // 出力DER用の適切なサイズ
byte der[derSz];
wc_Curve25519PrivateKeyToDer(&key, der, derSz);
function wc_Curve25519PublicKeyToDer
int wc_Curve25519PublicKeyToDer(
curve25519_key * key,
byte * output,
word32 inLen,
int withAlg
)
この関数は、Curve25519公開鍵をDER形式にエンコードします。入力キー構造体に秘密鍵が含まれている場合、それは無視されます。
Parameters:
- key エンコードする公開鍵を含むcurve25519_key構造体へのポインタ
- output DERエンコーディングを保持するバッファ
- inLen 出力バッファのサイズ
- withAlg DERエンコーディングにアルゴリズム識別子を含めるかどうか
See:
Return:
-
0 成功、DERエンコーディングの長さ
- BAD_FUNC_ARG keyまたはoutputがnullの場合に返されます
- MEMORY_E 割り当て失敗がある場合に返されます
- BUFFER_E 出力バッファが小さすぎる場合に返されます
Example
curve25519_key key;
wc_curve25519_init(&key);
...
int derSz = 128; // 出力DER用の適切なサイズ
byte der[derSz];
wc_Curve25519PublicKeyToDer(&key, der, derSz, 1);
function wc_Curve25519KeyToDer
int wc_Curve25519KeyToDer(
curve25519_key * key,
byte * output,
word32 inLen,
int withAlg
)
この関数は、Curve25519キーをDER形式にエンコードします。秘密鍵、公開鍵、または両方をエンコードできます。
Parameters:
- key エンコードするキーを含むcurve25519_key構造体へのポインタ
- output DERエンコーディングを保持するバッファ
- inLen 出力バッファのサイズ
- withAlg DERエンコーディングにアルゴリズム識別子を含めるかどうか
See:
Return:
-
0 成功、DERエンコーディングの長さ
- BAD_FUNC_ARG keyまたはoutputがnullの場合に返されます
- MEMORY_E 割り当て失敗がある場合に返されます
- BUFFER_E 出力バッファが小さすぎる場合に返されます
Example
curve25519_key key;
wc_curve25519_init(&key);
...
int derSz = 128; // 出力DER用の適切なサイズ
byte der[derSz];
wc_Curve25519KeyToDer(&key, der, derSz, 1);
function wc_EncodeSignature
word32 wc_EncodeSignature(
byte * out,
const byte * digest,
word32 digSz,
int hashOID
)
この関数は、デジタル署名を出力バッファにエンコードし、作成されたエンコードされた署名のサイズを返します。
Parameters:
- out エンコードされた署名が書き込まれるバッファへのポインタ
- digest 署名のエンコードに使用するダイジェストへのポインタ
- digSz ダイジェストを含むバッファの長さ
- hashOID 署名の生成に使用されるハッシュタイプを識別するOID。ビルド構成に応じた有効なオプションは:SHAh、SHA256h、SHA384h、SHA512h、MD2h、MD5h、DESb、DES3b、CTC_MD5wRSA、CTC_SHAwRSA、CTC_SHA256wRSA、CTC_SHA384wRSA、CTC_SHA512wRSA、CTC_SHAwECDSA、CTC_SHA256wECDSA、CTC_SHA384wECDSA、およびCTC_SHA512wECDSA。
See: なし
Return: Success エンコードされた署名をoutputに正常に書き込むと、バッファに書き込まれた長さを返します
int signSz;
byte encodedSig[MAX_ENCODED_SIG_SZ];
Sha256 sha256;
// ハッシュ化のためにsha256を初期化
byte* dig = = (byte*)malloc(WC_SHA256_DIGEST_SIZE);
// ハッシュ化とハッシュ更新を実行してdigにSHA-256ハッシュを格納
// (wc_InitSha256、wc_Sha256Update、wc_Sha256Finalを参照)
signSz = wc_EncodeSignature(encodedSig, dig, WC_SHA256_DIGEST_SIZE, SHA256h);
function wc_GetCTC_HashOID
int wc_GetCTC_HashOID(
int type
)
この関数は、ハッシュタイプに対応するハッシュOIDを返します。例えば、WC_SHA512タイプが与えられた場合、この関数はSHA512ハッシュに対応する識別子SHA512hを返します。
Parameters:
- type OIDを見つけるハッシュタイプ。ビルド構成に応じた有効なオプションには:WC_MD5、WC_SHA、WC_SHA256、WC_SHA384、WC_SHA512、WC_SHA3_224、WC_SHA3_256、WC_SHA3_384、またはWC_SHA3_512
See: なし
Return:
- Success 成功時に、その暗号化タイプで使用する適切なハッシュに対応するOIDを返します。
- 0 認識されないハッシュタイプが引数として渡された場合に返されます。
Example
int hashOID;
hashOID = wc_GetCTC_HashOID(WC_SHA512);
if (hashOID == 0) {
// WOLFSSL_SHA512が定義されていません
}
function wc_SetCert_Free
void wc_SetCert_Free(
Cert * cert
)
この関数は、証明書構造体のデコードされた証明書キャッシュによって使用されるメモリとリソースをクリーンアップします。WOLFSSL_CERT_GEN_CACHEが定義されている場合、デコードされた証明書構造体は証明書構造体にキャッシュされます。これにより、証明書設定関数への後続の呼び出しで、各呼び出しでデコードされた証明書を解析することを回避できます。
Parameters:
- cert 初期化されていない証明書情報構造体へのポインタ。
See:
- wc_SetAuthKeyIdFromCert
- wc_SetIssuerBuffer
- wc_SetSubjectBuffer
- wc_SetSubjectRaw
- wc_SetIssuerRaw
- wc_SetAltNamesBuffer
- wc_SetDatesBuffer
Return:
- 0 成功時。
- BAD_FUNC_ARG 無効なポインタが引数として渡された場合に返されます。
Example
Cert cert; // 初期化された証明書構造体
wc_SetCert_Free(&cert);
function wc_GetPkcs8TraditionalOffset
int wc_GetPkcs8TraditionalOffset(
byte * input,
word32 * inOutIdx,
word32 sz
)
この関数は、PKCS#8暗号化されていないバッファ内の従来の秘密鍵の先頭を見つけます。
Parameters:
- input 暗号化されていないPKCS#8秘密鍵を含むバッファ。
- inOutIdx 入力バッファへのインデックス。入力時、PKCS#8バッファの先頭へのバイトオフセットである必要があります。出力時、入力バッファ内の従来の秘密鍵へのバイトオフセットになります。
- sz 入力バッファのバイト数。
See:
Return:
- Length 成功時に従来の秘密鍵の長さ。
- Negative 失敗時に負の値。
Example
byte* pkcs8Buf; // PKCS#8キーを含むバッファ。
word32 idx = 0;
word32 sz; // pkcs8Bufのサイズ。
...
ret = wc_GetPkcs8TraditionalOffset(pkcs8Buf, &idx, sz);
// pkcs8Buf + idxは従来の秘密鍵バイトの先頭になります。
function wc_CreatePKCS8Key
int wc_CreatePKCS8Key(
byte * out,
word32 * outSz,
byte * key,
word32 keySz,
int algoID,
const byte * curveOID,
word32 oidSz
)
この関数は、DER秘密鍵を受け取り、PKCS#8形式に変換します。PKCS#12縮小キーバッグの作成にも使用されます。RFC 5208を参照してください。
Parameters:
- out 結果を配置するバッファ。NULLの場合、outSzに必要な出力バッファサイズが返されます。
- outSz outバッファのサイズ。
- key 従来のDERキーを持つバッファ。
- keySz keyバッファのサイズ。
- algoID アルゴリズムID(例:RSAk)。
- curveOID 使用される場合のECC曲線OID。RSAキーの場合はNULLである必要があります。
- oidSz 曲線OIDのサイズ。curveOIDがNULLの場合は0に設定されます。
See:
Return:
- The 成功時にoutに配置されたPKCS#8キーのサイズ。
- LENGTH_ONLY_E outがNULLの場合、outSzに必要な出力バッファサイズが返されます。
- Other 失敗時に負の値。
Example
ecc_key eccKey; // wolfSSL ECCキーオブジェクト。
byte* der; // DERエンコードされたECCキー。
word32 derSize; // derのサイズ。
const byte* curveOid = NULL; // eccKeyで使用される曲線のOID。
word32 curveOidSz = 0; // 曲線OIDのサイズ。
byte* pkcs8; // PKCS#8キー用の出力バッファ。
word32 pkcs8Sz; // 出力バッファのサイズ。
derSize = wc_EccKeyDerSize(&eccKey, 1);
...
derSize = wc_EccKeyToDer(&eccKey, der, derSize);
...
ret = wc_ecc_get_oid(eccKey.dp->oidSum, &curveOid, &curveOidSz);
...
ret = wc_CreatePKCS8Key(NULL, &pkcs8Sz, der,
derSize, ECDSAk, curveOid, curveOidSz); // pkcs8Szに必要なサイズを取得。
...
ret = wc_CreatePKCS8Key(pkcs8, &pkcs8Sz, der,
derSize, ECDSAk, curveOid, curveOidSz);
function wc_EncryptPKCS8Key
int wc_EncryptPKCS8Key(
byte * key,
word32 keySz,
byte * out,
word32 * outSz,
const char * password,
int passwordSz,
int vPKCS,
int pbeOid,
int encAlgId,
byte * salt,
word32 saltSz,
int itt,
WC_RNG * rng,
void * heap
)
この関数は、暗号化されていないPKCS#8 DERキー(例:wc_CreatePKCS8Keyによって作成されたもの)を受け取り、PKCS#8暗号化形式に変換します。結果の暗号化されたキーは、wc_DecryptPKCS8Keyを使用して復号できます。RFC 5208を参照してください。
Parameters:
- key 従来のDERキーを持つバッファ。
- keySz keyバッファのサイズ。
- out 結果を配置するバッファ。NULLの場合、outSzに必要な出力バッファサイズが返されます。
- outSz outバッファのサイズ。
- password パスワードベースの暗号化アルゴリズムに使用するパスワード。
- passwordSz パスワードの長さ(NULLターミネータを含まない)。
- vPKCS 使用するPKCSバージョン。PKCS12またはPKCS5の場合は1。
- pbeOid 使用するPBEスキームのOID(例:PBES2またはRFC 2898 A.3のPBES1のOIDの1つ)。
- encAlgId 使用する暗号化アルゴリズムID(例:AES256CBCb)。
- salt 使用するソルトバッファ。NULLの場合、ランダムなソルトが使用されます。
- saltSz ソルトバッファの長さ。saltにNULLを渡す場合は0。
- itt KDFに使用する反復回数。
- rng 初期化されたWC_RNGオブジェクトへのポインタ。
- heap 動的割り当てに使用されるヒープへのポインタ。NULLでも可。
See:
Return:
- The 成功時にoutに配置された暗号化されたキーのサイズ。
- LENGTH_ONLY_E outがNULLの場合、outSzに必要な出力バッファサイズが返されます。
- Other 失敗時に負の値。
Example
byte* pkcs8; // 暗号化されていないPKCS#8キー。
word32 pkcs8Sz; // pkcs8のサイズ。
byte* pkcs8Enc; // 暗号化されたPKCS#8キー。
word32 pkcs8EncSz; // pkcs8Encのサイズ。
const char* password; // 暗号化に使用するパスワード。
int passwordSz; // パスワードの長さ(NULLターミネータを含まない)。
WC_RNG rng;
// 以下は、pkcs8Encにpkcs8の暗号化されたバージョンを生成します。暗号化は
// PKCS#5のパスワードベース暗号化スキーム2(PBE2)とCBCモードの256ビット
// キーを持つAES暗号を使用します。PKCS#5の詳細についてはRFC 8018を参照してください。
ret = wc_EncryptPKCS8Key(pkcs8, pkcs8Sz, pkcs8Enc, &pkcs8EncSz, password,
passwordSz, PKCS5, PBES2, AES256CBCb, NULL, 0,
WC_PKCS12_ITT_DEFAULT, &rng, NULL);
function wc_DecryptPKCS8Key
int wc_DecryptPKCS8Key(
byte * input,
word32 sz,
const char * password,
int passwordSz
)
この関数は、暗号化されたPKCS#8 DERキーを受け取り、PKCS#8暗号化されていないDERに復号します。wc_EncryptPKCS8Keyによって行われた暗号化を元に戻します。RFC5208を参照してください。入力バッファは復号されたデータで上書きされます。
Parameters:
- input 入力時、暗号化されたPKCS#8キーを含むバッファ。出力が成功すると、復号されたキーを含みます。
- sz 入力バッファのサイズ。
- password キーの暗号化に使用されたパスワード。
- passwordSz パスワードの長さ(NULLターミネータを含まない)。
See:
Return:
- The 成功時に復号されたバッファの長さ。
- Negative 失敗時に負の値。
Example
byte* pkcs8Enc; // wc_EncryptPKCS8Keyで作成された暗号化されたPKCS#8キー。
word32 pkcs8EncSz; // pkcs8Encのサイズ。
const char* password; // 復号に使用するパスワード。
int passwordSz; // パスワードの長さ(NULLターミネータを含まない)。
ret = wc_DecryptPKCS8Key(pkcs8Enc, pkcs8EncSz, password, passwordSz);
function wc_CreateEncryptedPKCS8Key
int wc_CreateEncryptedPKCS8Key(
byte * key,
word32 keySz,
byte * out,
word32 * outSz,
const char * password,
int passwordSz,
int vPKCS,
int pbeOid,
int encAlgId,
byte * salt,
word32 saltSz,
int itt,
WC_RNG * rng,
void * heap
)
この関数は、従来のDERキーを受け取り、PKCS#8形式に変換し、暗号化します。これを行うためにwc_CreatePKCS8Keyとwc_EncryptPKCS8Keyを使用します。
Parameters:
- key 従来のDERキーを持つバッファ。
- keySz keyバッファのサイズ。
- out 結果を配置するバッファ。NULLの場合、outSzに必要な出力バッファサイズが返されます。
- outSz outバッファのサイズ。
- password パスワードベースの暗号化アルゴリズムに使用するパスワード。
- passwordSz パスワードの長さ(NULLターミネータを含まない)。
- vPKCS 使用するPKCSバージョン。PKCS12またはPKCS5の場合は1。
- pbeOid 使用するPBEスキームのOID(例:PBES2またはRFC 2898 A.3のPBES1のOIDの1つ)。
- encAlgId 使用する暗号化アルゴリズムID(例:AES256CBCb)。
- salt 使用するソルトバッファ。NULLの場合、ランダムなソルトが使用されます。
- saltSz ソルトバッファの長さ。saltにNULLを渡す場合は0。
- itt KDFに使用する反復回数。
- rng 初期化されたWC_RNGオブジェクトへのポインタ。
- heap 動的割り当てに使用されるヒープへのポインタ。NULLでも可。
See:
Return:
- The 成功時にoutに配置された暗号化されたキーのサイズ。
- LENGTH_ONLY_E outがNULLの場合、outSzに必要な出力バッファサイズが返されます。
- Other 失敗時に負の値。
Example
byte* key; // 従来の秘密鍵(DER形式)。
word32 keySz; // keyのサイズ。
byte* pkcs8Enc; // 暗号化されたPKCS#8キー。
word32 pkcs8EncSz; // pkcs8Encのサイズ。
const char* password; // 暗号化に使用するパスワード。
int passwordSz; // パスワードの長さ(NULLターミネータを含まない)。
WC_RNG rng;
// 以下は、pkcs8Encにkeyの暗号化されたPKCS#8バージョンを生成します。
// 暗号化はPKCS#5のパスワードベース暗号化スキーム2(PBE2)とCBCモードの
// 256ビットキーを持つAES暗号を使用します。PKCS#5の詳細については
// RFC 8018を参照してください。
ret = wc_CreateEncryptedPKCS8Key(key, keySz, pkcs8Enc, &pkcs8EncSz,
password, passwordSz, PKCS5, PBES2, AES256CBCb, NULL, 0,
WC_PKCS12_ITT_DEFAULT, &rng, NULL);
function wc_InitDecodedCert
void wc_InitDecodedCert(
struct DecodedCert * cert,
const byte * source,
word32 inSz,
void * heap
)
この関数は、"cert"パラメータが指すDecodedCertを初期化します。長さ"inSz"のDERエンコードされた証明書への"source"ポインタを保存します。この証明書は、wc_ParseCertへの後続の呼び出しによって解析できます。
Parameters:
- cert 割り当てられたDecodedCertオブジェクトへのポインタ。
- source DERエンコードされた証明書へのポインタ。
- inSz DERエンコードされた証明書の長さ(バイト単位)。
- heap 動的割り当てに使用されるヒープへのポインタ。NULLでも可。
See:
Example
DecodedCert decodedCert; // デコードされた証明書オブジェクト。
byte* certBuf; // DERエンコードされた証明書バッファ。
word32 certBufSz; // certBufのサイズ(バイト単位)。
wc_InitDecodedCert(&decodedCert, certBuf, certBufSz, NULL);
function wc_ParseCert
int wc_ParseCert(
DecodedCert * cert,
int type,
int verify,
void * cm
)
この関数は、DecodedCertオブジェクトに保存されたDERエンコードされた証明書を解析し、そのオブジェクトのフィールドを設定します。DecodedCertは、wc_InitDecodedCertへの事前の呼び出しで初期化されている必要があります。この関数は、CertificateManagerオブジェクトへのオプションのポインタを取り、CAがCertificateManagerで見つかった場合、DecodedCertの証明機関情報を設定するために使用されます。
Parameters:
- cert 初期化されたDecodedCertオブジェクトへのポインタ。
- type 証明書のタイプ。asn_public.hのCertType列挙型を参照してください。
- verify 設定されている場合、ユーザーが証明書の有効性を検証したいことを示すフラグ。
- cm CertificateManagerへのオプションのポインタ。NULLでも可。
See:
Return:
- 0 成功時。
- Other 失敗時に負の値。
Example
int ret;
DecodedCert decodedCert; // デコードされた証明書オブジェクト。
byte* certBuf; // DERエンコードされた証明書バッファ。
word32 certBufSz; // certBufのサイズ(バイト単位)。
wc_InitDecodedCert(&decodedCert, certBuf, certBufSz, NULL);
ret = wc_ParseCert(&decodedCert, CERT_TYPE, NO_VERIFY, NULL);
if (ret != 0) {
fprintf(stderr, "wc_ParseCert failed.\n");
}
function wc_FreeDecodedCert
void wc_FreeDecodedCert(
struct DecodedCert * cert
)
この関数は、wc_InitDecodedCertで以前に初期化されたDecodedCertを解放します。
Parameters:
- cert 初期化されたDecodedCertオブジェクトへのポインタ。
See:
Example
int ret;
DecodedCert decodedCert; // デコードされた証明書オブジェクト。
byte* certBuf; // DERエンコードされた証明書バッファ。
word32 certBufSz; // certBufのサイズ(バイト単位)。
wc_InitDecodedCert(&decodedCert, certBuf, certBufSz, NULL);
ret = wc_ParseCert(&decodedCert, CERT_TYPE, NO_VERIFY, NULL);
if (ret != 0) {
fprintf(stderr, "wc_ParseCert failed.\n");
}
wc_FreeDecodedCert(&decodedCert);
function wc_SetTimeCb
int wc_SetTimeCb(
wc_time_cb f
)
この関数は、wolfSSLが現在時刻を取得する必要があるときに使用される時刻コールバックを登録します。コールバックのプロトタイプは、C標準ライブラリの"time"関数と同じである必要があります。
Parameters:
- f 時刻コールバックとして登録する関数。
See: wc_Time
Return: 0 成功時に返されます。
Example
int ret = 0;
// 時刻コールバックのプロトタイプ
time_t my_time_cb(time_t* t);
// 登録する
ret = wc_SetTimeCb(my_time_cb);
if (ret != 0) {
// 時刻コールバックの設定失敗
}
time_t my_time_cb(time_t* t)
{
// カスタム時刻関数
}
function wc_Time
time_t wc_Time(
time_t * t
)
この関数は、現在時刻を取得します。デフォルトでは、プラットフォーム間で異なるXTIMEマクロを使用します。ユーザーは、wc_SetTimeCb関数を介して任意の関数を使用できます。
Parameters:
- t 現在時刻を設定するオプションのtime_tポインタ。
See: wc_SetTimeCb
Return: Time 成功時に返される現在時刻。
Example
time_t currentTime = 0;
currentTime = wc_Time(NULL);
wc_Time(¤tTime);
function wc_SetCustomExtension
int wc_SetCustomExtension(
Cert * cert,
int critical,
const char * oid,
const byte * der,
word32 derSz
)
この関数は、X.509証明書にカスタム拡張を挿入します。 注:ポインタであるパラメータのいずれかが指すアドレスのコンテンツは、 証明書が生成されてder出力が得られるまで変更してはいけません。 この関数はコンテンツを別のバッファにコピーしません。
Parameters:
- cert 初期化されたDecodedCertオブジェクトへのポインタ。
- critical 0の場合、拡張は重要としてマークされません。それ以外の場合は重要としてマークされます。
- oid ドット区切りのoidを文字列として。例:"1.2.840.10045.3.1.7"
- der 拡張のコンテンツのderエンコーディング。
- derSz derエンコーディングのサイズ(バイト単位)。
See:
Return:
- 0 成功時に返されます。
- Other 失敗時に負の値。
Example
int ret = 0;
Cert newCert;
wc_InitCert(&newCert);
// subject、公開鍵、発行者、その他のものを設定するコードがここに入ります。
ret = wc_SetCustomExtension(&newCert, 1, "1.2.3.4.5",
(const byte *)"This is a critical extension", 28);
if (ret < 0) {
// 拡張の設定失敗。
}
ret = wc_SetCustomExtension(&newCert, 0, "1.2.3.4.6",
(const byte *)"This is NOT a critical extension", 32)
if (ret < 0) {
// 拡張の設定失敗。
}
// 証明書に署名してから書き出すコードがここに入ります。
function wc_SetUnknownExtCallback
int wc_SetUnknownExtCallback(
DecodedCert * cert,
wc_UnknownExtCallback cb
)
この関数は、wolfSSLが証明書の解析中に証明書内の不明なX.509拡張に遭遇したときに使用されるコールバックを登録します。コールバックのプロトタイプは次のようにする必要があります:
Parameters:
- cert このコールバックに関連付けられるDecodedCert構造体。
- cb 時刻コールバックとして登録する関数。
See:
- ParseCert
- wc_SetCustomExtension
Return:
- 0 成功時に返されます。
- Other 失敗時に負の値。
Example
int ret = 0;
// 不明な拡張コールバックのプロトタイプ
int myUnknownExtCallback(const word16* oid, word32 oidSz, int crit,
const unsigned char* der, word32 derSz);
// 登録する
ret = wc_SetUnknownExtCallback(cert, myUnknownExtCallback);
if (ret != 0) {
// コールバックの設定失敗
}
// oid: oidのドット区切り値である整数の配列。
// oidSz: oid内の値の数。
// crit: 拡張が重要としてマークされたかどうか。
// der: 拡張のコンテンツのderエンコーディング。
// derSz: derエンコーディングのサイズ(バイト単位)。
int myCustomExtCallback(const word16* oid, word32 oidSz, int crit,
const unsigned char* der, word32 derSz) {
// 拡張を解析するロジックがここに入ります。
// 注:0を返すことで、この拡張を受け入れ、wolfSSLに
// それが許容可能であることを通知しています。許容できない拡張が
// 見つかった場合は、エラーを返す必要があります。重要フラグが
// 設定された不明な拡張に遭遇した場合の標準的な動作は、
// ASN_CRIT_EXT_Eを返すことです。簡潔にするため、この例では
// 常にすべての拡張を受け入れています。異なるロジックを
// 使用する必要があります。
return 0;
}
function wc_CheckCertSigPubKey
int wc_CheckCertSigPubKey(
const byte * cert,
word32 certSz,
void * heap,
const byte * pubKey,
word32 pubKeySz,
int pubKeyOID
)
この関数は、X.509証明書のder形式の署名を公開鍵に対して検証します。公開鍵は、der形式の完全なサブジェクト公開鍵情報であることが期待されます。
Parameters:
- cert X.509証明書のderエンコーディング。
- certSz certのサイズ(バイト単位)。
- heap 動的割り当てに使用されるヒープへのポインタ。NULLでも可。
- pubKey 公開鍵のderエンコーディング。
- pubKeySz pubKeyのサイズ(バイト単位)。
- pubKeyOID 公開鍵のアルゴリズムを識別するOID。 (例:ECDSAk、DSAkまたはRSAk)
Return:
- 0 成功時に返されます。
- Other 失敗時に負の値。
function wc_Asn1PrintOptions_Init
int wc_Asn1PrintOptions_Init(
Asn1PrintOptions * opts
)
この関数は、ASN.1プリントオプションを初期化します。
Parameters:
- opts プリント用のASN.1オプション。
See:
Return:
- 0 成功時。
- BAD_FUNC_ARG asn1がNULLの場合。
Example
Asn1PrintOptions opt;
// 使用前にASN.1プリントオプションを初期化します。
wc_Asn1PrintOptions_Init(&opt);
function wc_Asn1PrintOptions_Set
int wc_Asn1PrintOptions_Set(
Asn1PrintOptions * opts,
enum Asn1PrintOpt opt,
word32 val
)
この関数は、ASN.1プリントオプションオブジェクトにプリントオプションを設定します。
Parameters:
- opts プリント用のASN.1オプション。
- opt 値を設定するオプション。
- val 設定する値。
See:
Return:
- 0 成功時。
- BAD_FUNC_ARG asn1がNULLの場合。
- BAD_FUNC_ARG valがoptionの範囲外の場合。
Example
Asn1PrintOptions opt;
// 使用前にASN.1プリントオプションを初期化します。
wc_Asn1PrintOptions_Init(&opt);
// タグ名をプリントする際のインデント数を1に設定します。
wc_Asn1PrintOptions_Set(&opt, ASN1_PRINT_OPT_INDENT, 1);
function wc_Asn1_Init
int wc_Asn1_Init(
Asn1 * asn1
)
この関数は、ASN.1解析オブジェクトを初期化します。
Parameters:
- asn1 ASN.1解析オブジェクト。
See:
Return:
- 0 成功時。
- BAD_FUNC_ARG asn1がNULLの場合。
Example
Asn1 asn1;
// 使用前にASN.1解析オブジェクトを初期化します。
wc_Asn1_Init(&asn1);
function wc_Asn1_SetFile
int wc_Asn1_SetFile(
Asn1 * asn1,
XFILE file
)
この関数は、ASN.1解析オブジェクトへのプリント時に使用するファイルを設定します。
Parameters:
- asn1 ASN.1解析オブジェクト。
- file プリント先のファイル。
See:
Return:
- 0 成功時。
- BAD_FUNC_ARG asn1がNULLの場合。
- BAD_FUNC_ARG fileがXBADFILEの場合。
Example
Asn1 asn1;
// 使用前にASN.1解析オブジェクトを初期化します。
wc_Asn1_Init(&asn1);
// 標準出力を書き込み先のファイル記述子として設定します。
wc_Asn1_SetFile(&asn1, stdout);
function wc_Asn1_PrintAll
int wc_Asn1_PrintAll(
Asn1 * asn1,
Asn1PrintOptions * opts,
unsigned char * data,
word32 len
)
すべてのASN.1項目をプリントします。
Parameters:
- asn1 ASN.1解析オブジェクト。
- opts ASN.1プリントオプション。
- data プリントするBER/DERデータを含むバッファ。
- len プリントするデータの長さ(バイト単位)。
See:
Return:
- 0 成功時。
- BAD_FUNC_ARG asn1またはoptsがNULLの場合。
- ASN_LEN_E ASN.1項目の長さが長すぎる場合。
- ASN_DEPTH_E 終了オフセットが無効な場合。
- ASN_PARSE_E ASN.1項目のすべてが解析されなかった場合。
Asn1PrintOptions opts;
Asn1 asn1;
unsigned char data[] = { DER/BERデータで初期化 };
word32 len = sizeof(data);
// 使用前にASN.1プリントオプションを初期化します。
wc_Asn1PrintOptions_Init(&opt);
// タグ名をプリントする際のインデント数を1に設定します。
wc_Asn1PrintOptions_Set(&opt, ASN1_PRINT_OPT_INDENT, 1);
// 使用前にASN.1解析オブジェクトを初期化します。
wc_Asn1_Init(&asn1);
// 標準出力を書き込み先のファイル記述子として設定します。
wc_Asn1_SetFile(&asn1, stdout);
// 指定されたプリントオプションでバッファ内のすべてのASN.1項目をプリントします。
wc_Asn1_PrintAll(&asn1, &opts, data, len);
Source code
int wc_InitCert(Cert*);
Cert* wc_CertNew(void* heap);
void wc_CertFree(Cert* cert);
int wc_MakeCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey,
ecc_key* eccKey, WC_RNG* rng);
int wc_MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz,
RsaKey* rsaKey, ecc_key* eccKey);
int wc_SignCert(int requestSz, int sigType, byte* derBuffer,
word32 derSz, RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng);
int wc_MakeSelfCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* key,
WC_RNG* rng);
int wc_SetIssuer(Cert* cert, const char* issuerFile);
int wc_SetSubject(Cert* cert, const char* subjectFile);
int wc_SetSubjectRaw(Cert* cert, const byte* der, int derSz);
int wc_GetSubjectRaw(byte **subjectRaw, Cert *cert);
int wc_SetAltNames(Cert* cert, const char* file);
int wc_SetIssuerBuffer(Cert* cert, const byte* der, int derSz);
int wc_SetIssuerRaw(Cert* cert, const byte* der, int derSz);
int wc_SetSubjectBuffer(Cert* cert, const byte* der, int derSz);
int wc_SetAltNamesBuffer(Cert* cert, const byte* der, int derSz);
int wc_SetDatesBuffer(Cert* cert, const byte* der, int derSz);
int wc_SetAuthKeyIdFromPublicKey(Cert *cert, RsaKey *rsakey,
ecc_key *eckey);
int wc_SetAuthKeyIdFromCert(Cert *cert, const byte *der, int derSz);
int wc_SetAuthKeyId(Cert *cert, const char* file);
int wc_SetSubjectKeyIdFromPublicKey(Cert *cert, RsaKey *rsakey,
ecc_key *eckey);
int wc_SetSubjectKeyId(Cert *cert, const char* file);
int wc_SetKeyUsage(Cert *cert, const char *value);
int wc_PemPubKeyToDer(const char* fileName,
unsigned char* derBuf, int derSz);
int wc_PubKeyPemToDer(const unsigned char* pem, int pemSz,
unsigned char* buff, int buffSz);
int wc_PemCertToDer(const char* fileName, unsigned char* derBuf, int derSz);
int wc_DerToPem(const byte* der, word32 derSz, byte* output,
word32 outSz, int type);
int wc_DerToPemEx(const byte* der, word32 derSz, byte* output,
word32 outSz, byte *cipher_info, int type);
int wc_KeyPemToDer(const unsigned char* pem, int pemSz,
unsigned char* buff, int buffSz, const char* pass);
int wc_CertPemToDer(const unsigned char* pem, int pemSz,
unsigned char* buff, int buffSz, int type);
int wc_GetPubKeyDerFromCert(struct DecodedCert* cert,
byte* derKey, word32* derKeySz);
int wc_EccPrivateKeyDecode(const byte* input, word32* inOutIdx,
ecc_key* key, word32 inSz);
int wc_EccKeyToDer(ecc_key* key, byte* output, word32 inLen);
int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
ecc_key* key, word32 inSz);
int wc_EccPublicKeyToDer(ecc_key* key, byte* output,
word32 inLen, int with_AlgCurve);
int wc_EccPublicKeyToDer_ex(ecc_key* key, byte* output,
word32 inLen, int with_AlgCurve, int comp);
int wc_Curve25519PrivateKeyDecode(const byte* input, word32* inOutIdx,
curve25519_key* key, word32 inSz);
int wc_Curve25519PublicKeyDecode(const byte* input, word32* inOutIdx,
curve25519_key* key, word32 inSz);
int wc_Curve25519KeyDecode(const byte* input, word32* inOutIdx,
curve25519_key* key, word32 inSz);
int wc_Curve25519PrivateKeyToDer(curve25519_key* key, byte* output,
word32 inLen);
int wc_Curve25519PublicKeyToDer(curve25519_key* key, byte* output, word32 inLen,
int withAlg);
int wc_Curve25519KeyToDer(curve25519_key* key, byte* output, word32 inLen,
int withAlg);
word32 wc_EncodeSignature(byte* out, const byte* digest,
word32 digSz, int hashOID);
int wc_GetCTC_HashOID(int type);
void wc_SetCert_Free(Cert* cert);
int wc_GetPkcs8TraditionalOffset(byte* input,
word32* inOutIdx, word32 sz);
int wc_CreatePKCS8Key(byte* out, word32* outSz,
byte* key, word32 keySz, int algoID, const byte* curveOID,
word32 oidSz);
int wc_EncryptPKCS8Key(byte* key, word32 keySz, byte* out,
word32* outSz, const char* password, int passwordSz, int vPKCS,
int pbeOid, int encAlgId, byte* salt, word32 saltSz, int itt,
WC_RNG* rng, void* heap);
int wc_DecryptPKCS8Key(byte* input, word32 sz, const char* password,
int passwordSz);
int wc_CreateEncryptedPKCS8Key(byte* key, word32 keySz, byte* out,
word32* outSz, const char* password, int passwordSz, int vPKCS,
int pbeOid, int encAlgId, byte* salt, word32 saltSz, int itt,
WC_RNG* rng, void* heap);
void wc_InitDecodedCert(struct DecodedCert* cert,
const byte* source, word32 inSz, void* heap);
int wc_ParseCert(DecodedCert* cert, int type, int verify, void* cm);
void wc_FreeDecodedCert(struct DecodedCert* cert);
int wc_SetTimeCb(wc_time_cb f);
time_t wc_Time(time_t* t);
int wc_SetCustomExtension(Cert *cert, int critical, const char *oid,
const byte *der, word32 derSz);
int wc_SetUnknownExtCallback(DecodedCert* cert,
wc_UnknownExtCallback cb);
int wc_CheckCertSigPubKey(const byte* cert, word32 certSz,
void* heap, const byte* pubKey,
word32 pubKeySz, int pubKeyOID);
int wc_Asn1PrintOptions_Init(Asn1PrintOptions* opts);
int wc_Asn1PrintOptions_Set(Asn1PrintOptions* opts, enum Asn1PrintOpt opt,
word32 val);
int wc_Asn1_Init(Asn1* asn1);
int wc_Asn1_SetFile(Asn1* asn1, XFILE file);
int wc_Asn1_PrintAll(Asn1* asn1, Asn1PrintOptions* opts, unsigned char* data,
word32 len);
Updated on 2025-12-12 at 03:08:17 +0000