11 Oracle Key VaultクライアントSDKのKMIPおよびバッチAPI

SDKのKMIP APIには、キーの作成、キーのアクティブ化、キーへの属性の追加、キーの破棄などの操作に対応する関数が用意されています。そうしたアクティビティは、バッチAPIによってバッチ操作で実行できます。

11.1 Oracle Key VaultクライアントSDKのKMIP API

この項では、KMIP操作のためのOracle Key Vault関数に対応するインタフェースについて説明します。

11.1.1 Oracle Key VaultクライアントSDKのKMIP APIについて

Oracle Key Vault KMIP APIを使用すると、キーおよびシークレット・データの管理などの作業を実行できます。

こうした関数の多くは、入力引数として一意識別子を受け取ります。KMIP v1.1によると、KMIPサーバーが以前のコマンドから単一の一意識別子を判別できる場合は、コマンドがバッチ化されているときの一意識別子はオプションになります。そのため、以前のコマンド(検索など)で、考えられるユースケースに対して1つのみの一意識別子が返されたときに、その後のコマンドでこの一意識別子に対する操作を続ける場合、それ以降のコマンドの一意識別子は省略できます。

一意識別子とその長さがは、KMIP API関数から返されます。一意識別子は、エンドポイント・プログラムでNULL終端する必要があります。

エンドポイント・プログラムでは一意識別子を大きめのバッファで渡すことができるため、大きなバッファ内にある一意識別子の実際のビット数を判断するために長さが使用されます。

11.1.2 okvActivate

okvActivateでは、KMIPアクティブ化操作を実装します。

カテゴリ

KMIP API

用途

okvActivateでは、KMIPアクティブ化操作を実装します。一意識別子で特定されたKMIPオブジェクトをアクティブ化します。

構文

OKVErrNo okvActivate(OKVEnv *env, oratext *uid);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

uid

IN

一意識別子(バッチ処理の場合はNULLも可)。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Create the KMIP object, say Key for example and get its unique
   identifier as part of its creation in ‘uid’ and then activate
   it as below
*/

okvActivate(env, &uid[0]);

if (okvErrGetNum(env))
{
   printf("Error while activating the object\n");
}

11.1.3 okvAddAttribute

okvAddAttributeにより、KMIPの属性追加操作を実装します。

カテゴリ

KMIP API

用途

okvAddAttributeにより、KMIPの属性追加操作を実装します。一意識別子で指定したKMIPオブジェクトに属性を追加します。

構文

OKVErrNo okvAddAttribute(OKVEnv *env, oratext *uid,
                         OKVTTLV **attr);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

uid IN

一意識別子(バッチ処理の場合はNULLも可)。

attr IN

KMIPオブジェクトに追加する属性。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

Oracle Key Vaultサーバーで使用する場合、このAPIには次の例外があります。
  • このAPIを使用して不透明オブジェクトまたはテンプレート・オブジェクトに属性を追加すると、Oracle Key Vaultサーバーで一般的な失敗エラーが発生して、その属性はKMIPオブジェクトに追加されなくなります。回避策として、APIのokvRegOpaqueDataおよびokvRegTemplateを使用することで、その属性を登録時に追加できます。
  • このAPIを使用してオブジェクトに単一インスタンス属性を追加したときに、そのオブジェクトがすでに属性のインスタンスを保持している場合、その属性が上書きされることはありませんが、一般的な失敗エラーがスローされます。属性値の変更には、okvModifyAttribute APIを使用してください。
  • リクエストTTLVで非アクティブ化日より後の保護停止日が渡された場合は、サーバーでエラーが発生することはなく、登録済KMIPオブジェクトに保護停止日が追加されます。
  • このAPIを使用してプロセス開始日を追加すると、サーバーで権限拒否エラーが発生します。回避策として、APIのokvRegKeyokvRegSecretDataokvRegOpaqueDataおよびokvRegTemplateを使用することで、その属性を登録時に追加できます。

/* Create the KMIP object, say Key for example and get its unique
   identifier as part of its creation in ‘uid’, we can add an attribute
   to it as shown below */

OKVTTLV *attr_in = (OKVTTLV *)NULL;
OKVTTLV *req = (OKVTTLV *)NULL;
oratext *name_value = (oratext *)"attribute_name";
ub4 name_valuel = strlen("attribute_name");
req = okvEnvGetOpRequestObj(env);
attr_in = okvAddAttributeObject(env, req, OKVAttrName, (ub4) 0);

okvAttrAddName(env, attr_in, name_value, name_valuel, 1);
okvAddAttribute(env, &uid[0], &attr_in);

if (okvErrGetNum(env))
{
   printf("Error while adding Name attribute to the object\n");
}

11.1.4 okvCreateKey

okvCreateKeyでは、KMIP対称キー・オブジェクトのKMIP作成操作を実装します。

カテゴリ

KMIP API

用途

okvCreateKeyでは、KMIP対称キー・オブジェクトのKMIP作成操作を実装します。Oracle Key Vaultサーバーによって生成された対称キー・オブジェクトの一意識別子は、ouidとして返されます。Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

構文

OKVErrNo okvCreateKey(OKVEnv *env,
                      OKVType alg, ub4 len, ub4 mask,
                      OKVTTLV *template_names_attrs,
                      oratext *wallet_name, ub4 wallet_namel,
                      oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

alg

IN

対称キー・アルゴリズム。

len

IN

対称キーのキー長。

mask

IN

対称キーの暗号化使用方法マスク。

template_names_attrs

IN テンプレート-属性を形成するテンプレート名または属性。

wallet_name

IN ウォレット名の値。

wallet_namel

IN ウォレット名の値の長さ。

ouid

OUT

生成されたキーの一意識別子。

ouidl

OUT

生成されたキーの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

対称キー・オブジェクトにはKMIP名前属性を追加して、そのオブジェクトが今後識別しやすくなるようにすることをお薦めします。

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てるメモリーの長さは、一意識別子の長さの引数ouidlで渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

指定したアルゴリズムと特定の用途(暗号化使用方法マスク)に応じて指定した長さの対称キーは、ウォレットwallet_nameが指定されている場合、そのウォレット内に生成されます。指定されていない場合は、デフォルト・ウォレットに生成されます(そのウォレットがエンドポイントに存在する場合)。

/* Parameters to create symmetric key */
OKVType  algo = CRYPTO_ALG_AES;

/* Key length 128, because AES keys are 128, 192 or 256 bits in length*/
ub4      key_len = 128;
ub4      usage_mask = CRYPTO_MASK_ENCRYPT | CRYPTO_MASK_DECRYPT;
oratext  uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4      uidl = sizeof(uid);
OKVTTLV *template = (OKVTTLV *)NULL;
OKVTTLV *attr_in = (OKVTTLV *)NULL;

/* Set up the environment handle 'env' and also the memory and connection
   management as shown in previous sections */
memset(uid, 0, uidl);
template = okvEnvGetOpRequestObj(env);

/* Add name attribute object to template attribute */
attr_in = okvAddAttributeObject(env, template, OKVAttrName, (ub4) 0);
okvAttrAddName(env, attr_in, (oratext *)"My New Key", strlen("My New Key"), 1);
printf("\tCreating a Symmetric key\n");

okvCreateKey(env, algo, key_len, usage_mask, template,
             (oratext *)NULL, (ub4)0, &uid[0], uidl);

if (okvErrGetNum(env))
{
   printf("Error while creating the key\n");
}

11.1.5 okvDecrypt

okvDecryptでは、KMIPオブジェクトを使用して、指定されたデータに対して復号化操作を実行します。

カテゴリ

KMIP API

用途

okvDecryptでは、KMIPオブジェクトを使用して、指定されたデータに対して復号化操作を実行します。

構文

OKVErrNo okvDecrypt(OKVEnv *env, oratext *uid, ub1 *data, ub4 datal,
                    OKVCryptoContext *crypto_context,
                    OKVDecryptResponse *decrypt_response);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

uid

IN

一意識別子(バッチ処理の場合はNULLも可)。

data

IN

復号化するデータ。

datal

IN

復号化するデータの長さ。

crypto_context

IN

暗号化コンテキストには、暗号化パラメータやIVなどの復号化に必要なパラメータが含まれています。

decrypt_response

OUT

復号化操作のレスポンスの詳細が含まれます。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKリリース21.4.0.0.0以降。

コメント

crypto_contextは、okvCryptoContextCreateおよびokvCryptoContextFreeのヘルパーAPIを使用して作成および解放できます。これには、復号化に必要なパラメータが含まれており、ユーザーはokvCryptoContextSetBlockCipherModeokvCryptoContextSetPaddingokvCryptoContextSetRandomIVokvCryptoContextSetIVokvCryptoContextSetAuthEncryptionAdditionalDataokvCryptoContextSetAuthEncryptionTagなどのヘルパーAPIを使用して明示的にこれを設定する必要があります。ユーザーは、ヘルパーAPI okvCryptoContextGetBlockCipherModeokvCryptoContextGetPaddingokvCryptoContextGetRandomIVokvCryptoContextGetIVokvCryptoContextGetAuthEncryptionAdditionalDataおよびokvCryptoContextGetAuthEncryptionTagを使用して、crypto_contextで設定された各パラメータ値を取得することもできます。

ヘルパーAPI okvDecryptResponseCreateを使用してdecrypt_responseを明示的に割り当ててから、それをOUTパラメータとしてokvDecrypt APIに渡す必要があります。復号化操作が完了したら、ヘルパーAPI okvCryptoResponseGetDecryptedDataを使用して、decrypt_responseから、復号化されたデータの詳細を取得できます。decrypt_responseは、okvDecryptResponseFreeヘルパーAPIを使用して解放する必要があります。

/* Create a Symmetric Key for example and get its unique identifier as part of its creation in uid, we can use the 'uid' for decrypting the encrypted data as shown below */

OKVCryptoContext *crypto_context = (OKVCryptoContext *)NULL;
OKVEncryptResponse *encrypt_response = (OKVEncryptResponse *)NULL;
OKVDecryptResponse *decrypt_response = (OKVDecryptResponse *)NULL;
ub1 data[] = "OKV crypto operations demo.";
ub4 datal = strlen((const char *) data);
ub1 iv[] = "5432109876543210";
ub4 ivl = strlen((const char *) iv);
ub1 encrypted_data[100];
ub4 encrypted_datal = sizeof(encrypted_data);
ub1 decrypted_data[100];
ub4 decrypted_datal = sizeof(decrypted_data);

/* Encrypt */
crypto_context = okvCryptoContextCreate(env, OKVOpEncrypt);
okvCryptoContextSetBlockCipherMode(env, crypto_context, BLK_CIPHER_CBC);
okvCryptoContextSetPadding(env, crypto_context, PADDING_PKCS5);
okvCryptoContextSetIV(env, crypto_context, iv, ivl);

encrypt_response = okvEncryptResponseCreate(env);

okvEncrypt(env, uid, data, datal, crypto_context, encrypt_response);
if (okvErrGetNum(env))
{
  printf("Error while performing the encryption operation.\n");
}

memset(encrypted_data, 0, encrypted_datal);
okvCryptoResponseGetEncryptedData(env, encrypt_response, encrypted_data, &encrypted_datal);
printf("Successfully encrypted the data\n");
printf("\tEncrypted Data Length: %d\n", encrypted_datal);
printf("\tEncrypted Data: %s\n", encrypted_data);

okvCryptoContextFree(env, &crypto_context);
okvEncryptResponseFree(env, &encrypt_response);


/*Decrypt */
crypto_context = okvCryptoContextCreate(env, OKVOpEncrypt);
okvCryptoContextSetBlockCipherMode(env, crypto_context, BLK_CIPHER_CBC);
okvCryptoContextSetPadding(env, crypto_context, PADDING_PKCS5);
okvCryptoContextSetIV(env, crypto_context, iv, ivl);

decrypt_response = okvDecryptResponseCreate(env);
okvDecrypt(env, uid, encrypted_data, encrypted_datal, crypto_context, decrypt_response);
if (okvErrGetNum(env))
{
  printf("Error while performing the decryption operation.\n");
}

memset(decrypted_data, 0, decrypted_datal);
okvCryptoResponseGetDecryptedData(env, decrypt_response, decrypted_data, &decrypted_datal);
printf("Successfully decrypted the data\n");
printf("\tDecrypted Data Length: %d\n", decrypted_datal);
printf("\tDecrypted Data: %s\n", decrypted_data);

okvCryptoContextFree(env, &crypto_context);
okvDecryptResponseFree(env, &decrypt_response);

11.1.6 okvDeleteAttribute

okvDeleteAttributeにより、KMIPの属性削除操作を実装します。

カテゴリ

KMIP API

用途

okvDeleteAttributeにより、KMIPの属性削除操作を実装します。一意識別子で指定したKMIPオブジェクトから属性名と属性索引で指定した属性を削除します。

構文

OKVErrNo okvDeleteAttribute(OKVEnv *env, oratext *uid,
                            oratext *attr_name,
                            ub4 attr_index,
                            OKVTTLV **attr);

パラメータ

パラメータ IN/OUT 説明
env IN Oracle Key Vault環境ハンドル。
uid IN 一意識別子(バッチ処理の場合はNULLも可)。
attr_name IN

削除する属性の名前。

attr_index IN

削除する属性の索引。

attr OUT

KMIPオブジェクトから削除する属性。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Create the KMIP object, say Key for example and get its unique identifier
   as part of its creation in 'uid'. Add contact information attribute and
   to delete it, it can done as shown below */

OKVTTLV *attr_del = (OKVTTLV *) NULL;
oratext *attr_name = okvGetTextForAttributeNum(OKVAttrContactInfo);

/* Passing Contact Info attribute to be deleted at attribute index 0 */
okvDeleteAttribute(env, &uid[0], attr_name, (ub4)0, &attr_del);

if (okvErrGetNum(env))
{
   printf("Error while deleting the contact info attribute of the object\n");
}

11.1.7 okvDestroy

okvDestroyにより、KMIPの破棄操作を実装します。

カテゴリ

KMIP API

用途

okvDestroyにより、KMIPの破棄操作を実装します。一意識別子で識別されるKMIPオブジェクトを破棄します。

構文

OKVErrNo okvDestroy(OKVEnv *env, oratext *uid);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

uid IN

一意識別子(バッチ処理の場合はNULLも可)。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Create the KMIP object, say Key for example and get its unique
   identifier as part of its creation in 'uid', activate it,
   revoke it and then you can destroy it as below */

okvDestroy(env, &uid[0]);

if (okvErrGetNum(env))
{
   printf("Error while destroying the object\n");
}

11.1.8 okvEncrypt

okvEncryptでは、KMIPオブジェクトを使用して、指定されたデータに対して暗号化操作を実行します。

カテゴリ

KMIP API

用途

okvEncryptでは、KMIPオブジェクトを使用して、指定されたデータに対して暗号化操作を実行します。

構文

OKVErrNo okvEncrypt(OKVEnv *env, oratext *uid, ub1 *data, ub4 datal,
                    OKVCryptoContext *crypto_context,
                    OKVEncryptResponse *encrypt_response);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

uid

IN

一意識別子(バッチ処理の場合はNULLも可)。

data

IN

暗号化するデータ

datal

IN

暗号化するデータの長さ。

crypto_context

IN

暗号化コンテキストには、暗号化パラメータやIVなどの暗号化に必要なパラメータが含まれています。

encrypt_response

OUT

暗号化操作のレスポンスの詳細が含まれます。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKリリース21.4.0.0.0以降。

コメント

crypto_contextは、okvCryptoContextCreateおよびokvCryptoContextFreeのヘルパーAPIを使用して作成および解放できます。これには、暗号化に必要なパラメータが含まれており、ユーザーはokvCryptoContextSetBlockCipherModeokvCryptoContextSetPaddingokvCryptoContextSetRandomIVokvCryptoContextSetIVokvCryptoContextSetAuthEncryptionAdditionalDataokvCryptoContextSetAuthEncryptionTagなどのヘルパーAPIを使用して明示的にこれを設定する必要があります。ユーザーは、ヘルパーAPI okvCryptoContextGetBlockCipherModeokvCryptoContextGetPaddingokvCryptoContextGetRandomIVokvCryptoContextGetIVokvCryptoContextGetAuthEncryptionAdditionalDataおよびokvCryptoContextGetAuthEncryptionTagを使用して、crypto_contextで設定された各パラメータ値を取得することもできます。

ヘルパーAPI okvEncryptResponseCreateを使用してencrypt_responseを明示的に割り当ててから、それをOUTパラメータとしてokvEncrypt APIに渡す必要があります。暗号化操作が完了したら、ヘルパーAPI okvCryptoResponseGetEncryptedDataokvCryptoResponseGetIVおよびokvCryptoResponseGetAuthEncryptionTagを使用して、encrypt_responseから、暗号化されたデータの詳細を取得できます。encrypt_responseは、okvEncryptResponseFreeヘルパーAPIを使用して解放する必要があります。

/* Create a Symmetric Key for example and get its unique identifier as part of its creation in ‘uid’, we can use the 'uid' for encryption as shown below */

OKVCryptoContext *crypto_context = (OKVCryptoContext *)NULL;
OKVEncryptResponse *encrypt_response = (OKVEncryptResponse *)NULL;
ub1 data[] = "OKV crypto operations demo.";
ub4 datal = strlen((const char *) data);
ub1 iv[] = "5432109876543210";
ub4 ivl = strlen((const char *) iv);
ub1 encrypted_data[100];
ub4 encrypted_datal = sizeof(encrypted_data);

/* Encrypt */
crypto_context = okvCryptoContextCreate(env, OKVOpEncrypt);
okvCryptoContextSetBlockCipherMode(env, crypto_context, BLK_CIPHER_CBC);
okvCryptoContextSetPadding(env, crypto_context, PADDING_PKCS5);
okvCryptoContextSetIV(env, crypto_context, iv, ivl);

encrypt_response = okvEncryptResponseCreate(env);

okvEncrypt(env, uid, data, datal, crypto_context, encrypt_response);
if (okvErrGetNum(env))
{
  printf("Error while performing the encryption operation.\n");
}

memset(encrypted_data, 0, encrypted_datal);
okvCryptoResponseGetEncryptedData(env, encrypt_response, encrypted_data, &encrypted_datal);
printf("Successfully encrypted the data\n");
printf("\tEncrypted Data Length: %d\n", encrypted_datal);
printf("\tEncrypted Data: %s\n", encrypted_data);

okvCryptoContextFree(env, &crypto_context);
okvEncryptResponseFree(env, &encrypt_response);

11.1.9 okvGetAttributeList

okvGetAttributeListにより、KMIPの属性リスト取得操作を実装します。

カテゴリ

KMIP API

用途

okvGetAttributeListにより、KMIPの属性リスト取得操作を実装します。一意識別子で指定したKMIPオブジェクトの通常属性およびカスタム属性の名前を取得します。

attr_names_countでは、attr_namesに収容できるattr_namesの数を指定します。okvGetAttributeList()は、その数の属性名のみをコピーします。それより多くの属性がある場合は、返されるリクエストでattr_names_countが実際の属性数を格納するように変更されます。

構文

OKVErrNo okvGetAttributeList(OKVEnv *env, oratext *uid,
                             ub4 *attr_names_count, oratext **attr_names); 

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vaultインタフェース環境ハンドル。

uid IN

一意識別子(バッチ処理の場合はNULLも可)。

attr_names_count IN/OUT

属性の数。

attr_names OUT

属性の名前。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

取得されたリストは順不同です。

/* Create the KMIP object, say Key for example and get its unique identifier
   as part of its creation in 'uid'. Add attributes like say name, contact info
   and then names of these attributes can be retrieved as below */
…
ub4       attr_list_count = 0;
oratext **attr_names = (oratext **)NULL;

printf("\tGetting the count of attributes associated with the key\n");
okvGetAttributeList(env, uid, &attr_list_count, (oratext **)NULL);

if (okvErrGetNum(env))
{
   printf("Error while getting the attribute list count\n");
}

printf("\tGetting the attribute names associated with the key\n");
attr_names = (oratext **)calloc(attr_list_count, sizeof(oratext *));

for (i = 0; i < attr_list_count; i++)
{
   /* Allocate memory to hold attribute names */
   attr_names[i] = (oratext *)calloc(OKV_NAME_MAXLEN,
   sizeof(oratext));
}

okvGetAttributeList(env, uid, &attr_list_count, (oratext **)attr_names);

if (okvErrGetNum(env))
{
   printf("Error while getting the attribute list names\n");
}

11.1.10 okvGetAttributes

okvGetAttributesにより、KMIPの属性取得操作を実装します。

カテゴリ

KMIP API

用途

okvGetAttributesにより、KMIPの属性取得操作を実装します。一意識別子で指定した特定のKMIPオブジェクトについて、通常属性およびカスタム属性の指定したリストを取得します。

構文

OKVErrNo okvGetAttributes(OKVEnv *env, oratext *uid,
                          ub4 attr_names_count,
                          oratext **attr_names,
                          OKVTTLV **attrs);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

uid IN

一意識別子(バッチ処理の場合はNULLも可)。

attr_names_count IN

取得する属性の数。

attr_names IN

取得する属性の名前。

attrs OUT

取得された属性。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

取得されたリストは順不同です。

/* Create the KMIP object, say Key for example and get its unique
   identifier as part of its creation in 'uid'. Add contact information
   Name, Cryptographic Alogirthm, Cryptographic Length attributes to the
   created key and then all of these attributes can be retrieved as below */
...
OKVTTLV *attrs = (OKVTTLV *) NULL;
oratext *attr_name_list[3];

attr_name_list[0] = okvGetTextForAttributeNum(OKVAttrName);
attr_name_list[1] = okvGetTextForAttributeNum(OKVAttrCryptoAlg);
attr_name_list[2] = okvGetTextForAttributeNum(OKVAttrCryptoLen);

okvGetAttributes(env, uid, 3, (oratext **) attr_name_list, &attrs);

if (okvErrGetNum(env))
{
   printf("Error while getting the attributes of the object\n");
}

11.1.11 okvGetCertificate

okvGetCertificateにより、KMIPの、証明書オブジェクトの取得の操作を実装します。

カテゴリ

KMIP API

用途

okvGetCertificateにより、KMIPの、証明書オブジェクトの取得の操作を実装します。

指定した一意識別子の証明書について、証明書のタイプ、証明書の長さ、エンドポイント・プログラムで提供されるバッファ内の実際の証明書バイト数、および証明書の実際のバイト長が返されます。

提供された証明書バッファの長さがOracle Key Vaultサーバーから取得した実際の証明書の長さよりも短い場合、certificatelには実際の証明書の長さが移入されますが、certificateはNULLに設定されます。

構文

OKVErrNo okvGetCertificate(OKVEnv *env, oratext *uid,
                           ub4 *certificate_type,
                           ub1 *certificate, ub4 *certificatel);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

uid

IN

証明書の一意識別子(バッチ処理の場合はNULLも可)。

certificate_type

OUT

証明書のタイプ。

certificate

OUT

証明書。

certificatel

OUT

証明書の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKバージョン21.2.0.0.0以降。

コメント

なし。

/* Create a Certificate for example and get its unique
   identifier as part of its creation in 'uid' */
...
ub1 *cert;
ub4  certl = 128001;
ub4  cert_type = 0;
cert = (ub1 *)malloc(certl * sizeof(ub1));

printf("\tGetting the certificate\n");

okvGetCertificate(env, uid, &cert_type, cert, &certl);

if (okvErrGetNum(env))
{
   printf("Error while getting the certificate\n");
}

/* Free 'cert' */

11.1.12 okvGetCertificateRequest

okvGetCertificateRequestにより、KMIPの、証明書リクエスト・オブジェクトの取得の操作を実装します。

カテゴリ

KMIP API

用途

okvGetCertificateRequestにより、KMIPの、証明書リクエスト・オブジェクトの取得の操作を実装します。

指定した一意識別子の証明書リクエストについて、証明書リクエストのタイプ、証明書リクエストの長さ、エンドポイント・プログラムで提供されるバッファ内の実際の証明書リクエスト・バイト数、および証明書リクエストの実際のバイト長が返されます。

提供された証明書リクエスト・バッファの長さがOracle Key Vaultサーバーから取得した実際の証明書リクエストの長さよりも短い場合、certificate_requestlには実際の証明書リクエストの長さが移入されますが、certificate_requestはNULLに設定されます。

構文

OKVErrNo okvGetCertificateRequest(OKVEnv *env, oratext *uid,
                                  ub4 *certificate_request_type,
                                  ub1 *certificate_request,
                                  ub4 *certificate_requestl);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

uid

IN

証明書リクエストの一意識別子(バッチ処理の場合はNULLも可)。

certificate_request_type

OUT

証明書リクエストのタイプ。

certificate_request

OUT

証明書リクエスト。

certificate_requestl

OUT

証明書リクエストの長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKバージョン21.2.0.0.0以降。

コメント

なし。

/* Create a Certificate Request for example and get its unique
   identifier as part of its creation in 'uid' */
...
ub1 *cert_req;
ub4  cert_reql = 128001;
ub4  cert_req_type = 0;

cert_req = (ub1 *)malloc(cert_reql * sizeof(ub1));
printf("\tGetting the certificate request\n");

okvGetCertificateRequest(env, uid, &cert_req_type, cert_req,
                         &cert_reql);

if (okvErrGetNum(env))
{
   printf("Error while getting the certificate request\n");
}

/* Free 'cert_req' */

11.1.13 okvGetKey

okvGetKeyにより、KMIPの、KMIP対称キー・オブジェクトの取得の操作を実装します。

カテゴリ

KMIP API

用途

okvGetKeyにより、KMIPの、KMIP対称キー・オブジェクトの取得の操作を実装します。

指定した一意識別子の対称キーについて、キー長、キー・アルゴリズム、エンドポイント・プログラムが提供するバッファ内の実際のキー・バイト数およびキー・バイトの実際の長さが返されます。

提供されたキー・バッファの長さがOracle Key Vaultサーバーから取得した実際のキーの長さよりも小さい場合、keylには実際のキーの長さが移入されますが、キーはNULLに設定されます。

構文

OKVErrNo okvGetKey(OKVEnv *env, oratext *uid,
                   ub4 *key_alg, ub4 *key_len,
                   ub1 *key, ub4 *keyl);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

uid

IN

キーの一意識別子(バッチ処理の場合はNULLも可)。

key_alg

OUT

対称キー・アルゴリズム。

key_len

OUT

作成時に指定した対称キーのキー長。

key

OUT

対称キー。

keyl

OUT

対称キーの長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Create a Symmetric Key for example and get its unique
   identifier as part of its creation in 'uid' */
...
ub1 *key;
ub4 keyl = 128001;
ub4 key_algo = 0;
ub4 key_len = 0;
key = (ub1 *)malloc(keyl * sizeof(ub1));
printf("\tGetting the key\n");
okvGetKey(env, uid, &key_algo, &key_len, key, &keyl);
key[keyl] = 0;

if (okvErrGetNum(env))
{
   printf("Error while getting the key\n");
}

/* Free ‘key’ */

11.1.14 okvGetOpaqueData

okvGetOpaqueDataにより、KMIPの、KMIP不透明データ・オブジェクトの取得の操作を実装します。

カテゴリ

KMIP API

用途

okvGetOpaqueDataにより、KMIPの、KMIP不透明データ・オブジェクトの取得の操作を実装します。

指定した一意識別子の不透明データについて、不透明データのタイプ、不透明データの長さ、エンドポイント・プログラムが提供するバッファ内の不透明データのバイト数が返されます。

提供された不透明データ・バッファの長さがOracle Key Vaultサーバーから取得した実際の不透明データの長さよりも小さい場合、opaque_datalには実際の不透明データの長さが移入されますが、opaque_dataNULLに設定されます。

構文

OKVErrNo okvGetOpaqueData(OKVEnv *env, oratext *uid,
                          ub4 *opaque_data_type,
                          ub1 *opaque_data, ub4 *opaque_datal);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

uid

IN

不透明データの一意識別子(バッチ処理の場合はNULLも可)。

opaque_data_type

OUT

不透明オブジェクトのタイプ。

opaque_data

OUT

不透明オブジェクト。

opaque_datal

OUT

不透明オブジェクトの長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Create an opaque data for example and get its unique
   identifier as part of its creation in 'uid' */
...
ub1     *opaque_data;
ub4      opaque_data_len = 128001;
ub4      opaque_data_type = 0;
opaque_data = (ub1 *)malloc(opaque_data_len*sizeof(ub1));

okvGetOpaqueData(env, &uid[0], &opaque_data_type, &opaque_data[0], &opaque_data_len);

if (okvErrGetNum(env))
{
   printf("Error while getting the opaque data\n");
}

/* Free "opaque_data" */

11.1.15 okvGetPrivateKey

okvGetPrivateKeyにより、KMIPの、KMIP秘密キー・オブジェクトの取得の操作を実装します。

カテゴリ

KMIP API

用途

okvGetPrivateKeyにより、KMIPの、KMIP秘密キー・オブジェクトの取得の操作を実装します。

指定した一意識別子の秘密キーについて、秘密キーの長さ、秘密キーのアルゴリズム、エンドポイント・プログラムで提供されるバッファ内の実際の秘密キー・バイト数、および秘密キーの実際のバイト長が返されます。

提供された秘密キー・バッファの長さがOracle Key Vaultサーバーから取得した実際の秘密キーの長さよりも短い場合、private_keylには実際の秘密キーの長さが移入されますが、private_keyはNULLに設定されます。

構文

OKVErrNo okvGetPrivateKey(OKVEnv *env, oratext *uid,
                          ub4 *private_key_alg, ub4 *private_key_len,
                          ub1 *private_key, ub4 *private_keyl);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

uid

IN

秘密キーの一意識別子(バッチ処理の場合はNULLも可)。

private_key_alg

OUT

秘密キー・アルゴリズム。

private_key_len

OUT

作成時に指定した秘密キーのキー長。

private_key

OUT

秘密キー。

private_keyl

OUT

秘密キーの長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKバージョン21.2.0.0.0以降。

コメント

なし。

/* Create a Private Key for example and get its unique
   identifier as part of its creation in 'uid' */
...
ub1 *private_key;
ub4  private_keyl = 128001;
ub4  private_key_algo = 0;
ub4  private_key_len = 0;
private_key = (ub1 *)malloc(private_keyl * sizeof(ub1));

printf("\tGetting the private key\n");

okvGetPrivateKey(env, uid, &private_key_algo, &private_key_len,
                 private_key, &private_keyl);

private_key[private_keyl] = 0;

if (okvErrGetNum(env))
{
   printf("Error while getting the private key\n");
}

/* Free 'private_key' */

11.1.16 okvGetPublicKey

okvGetPublicKeyにより、KMIPの、KMIP公開キー・オブジェクトの取得の操作を実装します。

カテゴリ

KMIP API

用途

okvGetPublicKeyにより、KMIPの、KMIP公開キー・オブジェクトの取得の操作を実装します。

指定した一意識別子の公開キーについて、公開キーの長さ、公開キーのアルゴリズム、エンドポイント・プログラムで提供されるバッファ内の実際の公開キー・バイト数、および公開キーの実際のバイト長が返されます。

提供された公開キー・バッファの長さがOracle Key Vaultサーバーから取得した実際の公開キーの長さよりも短い場合、public_keylには実際の公開キーの長さが移入されますが、public_keyはNULLに設定されます。

構文

OKVErrNo okvGetPublicKey(OKVEnv *env, oratext *uid,
                         ub4 *public_key_alg, ub4 *public_key_len,
                         ub1 *public_key, ub4 *public_keyl);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

uid

IN

公開キーの一意識別子(バッチ処理の場合はNULLも可)。

public_key_alg

OUT

公開キー・アルゴリズム。

public_key_len

OUT

作成時に指定した公開キーのキー長。

public_key

OUT

公開キー。

public_keyl

OUT

公開キーの長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKバージョン21.2.0.0.0以降。

コメント

なし。

/* Create a Public Key for example and get its unique
   identifier as part of its creation in 'uid' */
...
ub1 *public_key;
ub4  public_keyl = 128001;
ub4  public_key_algo = 0;
ub4  public_key_len = 0;
public_key = (ub1 *)malloc(public_keyl * sizeof(ub1));

printf("\tGetting the public key\n");

okvGetPublicKey(env, uid, &public_key_algo, &public_key_len,
                public_key, &public_keyl);

public_key[public_keyl] = 0;

if (okvErrGetNum(env))
{
   printf("Error while getting the public key\n");
}

/* Free 'public_key' */

11.1.17 okvGetSecretData

okvGetSecretDataにより、KMIPの、KMIPシークレット・データ・オブジェクトの取得の操作を実装します。

カテゴリ

KMIP API

用途

okvGetSecretDataにより、KMIPの、KMIPシークレット・データ・オブジェクトの取得の操作を実装します。

指定した一意識別子のシークレット・データについて、シークレット・データのタイプ、シークレット・データの長さ、エンドポイント・プログラムが提供するバッファ内のシークレット・データのバイト数が返されます。

提供されたシークレット・データ・バッファの長さがOracle Key Vaultサーバーから取得した実際のシークレット・データの長さよりも小さい場合、secret_datalには実際のシークレット・データの長さが移入されますが、secret_dataNULLに設定されます。

構文

OKVErrNo okvGetSecretData(OKVEnv *env, oratext *uid,
                          ub4 *secret_data_type,
                          ub1 *secret_data, ub4 *secret_datal);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

uid

IN

シークレット・データの一意識別子(バッチ処理の場合はNULLも可)。

secret_data_type

OUT

シークレット・データのタイプ。

secret_data

OUT

シークレット・データ。

secret_datal

OUT

シークレット・データの長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Create a secret data for example and get its unique
   identifier as part of its creation in 'uid' */
...
ub1 *secret_data;
ub4 secret_data_len = 128001;
ub4 secret_data_type = 0;
secret_data = (ub1 *)malloc(secret_data_len*sizeof(ub1));

okvGetSecretData(env, &uid[0], &secret_data_type, &secret_data[0], &secret_data_len);

if (okvErrGetNum(env))
{
   printf("Error while getting the secret data\n");
}

/* Free "secret_data" */

11.1.18 okvGetTemplate

okvGetTemplateでは、KMIPテンプレート・オブジェクトのKMIP取得操作を実装します。

カテゴリ

KMIP API

用途

okvGetTemplateでは、KMIPテンプレート・オブジェクトのKMIP取得操作を実装します。

テンプレートは属性のリストであり、Oracle Key VaultユーティリティまたはOracle Key Vault KMIP拡張関数を使用すると解釈できます。指定した一意識別子のテンプレートについて、テンプレート・オブジェクトの属性が返されます。

構文

OKVErrNo okvGetTemplate(OKVEnv *env, oratext *uid,
                        OKVTTLV **attrs_template);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

uid

IN

テンプレートの一意識別子(バッチ処理の場合はNULLも可)。

attrs_template

OUT

テンプレートの属性。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

プロセス開始日と保護停止日を含むテンプレートを登録した場合、このAPIは、それらの属性が含まれているテンプレートを取得するときに一般的な失敗エラーをスローします。

テンプレート・オブジェクトの取得済属性を使用する作成操作または登録操作ごとに、その操作の前にokvGetTemplateを使用する必要があります。

/* Create a template for example and get its unique
   identifier as part of its creation in 'uid' */
...
OKVTTLV *template = (OKVTTLV *) NULL;
okvGetTemplate(env, uid, &template);

if (okvErrGetNum(env))
{
   printf("Error while getting the template\n");
}

11.1.19 okvLocate

okvLocateにより、KMIPの検索操作を実装します。

カテゴリ

KMIP API

用途

okvLocateにより、KMIPの検索操作を実装します。

検索操作では、locate_attrsで指定した属性に一致するOracle Key Vault内のすべてのオブジェクトが検索されます。

uid_cntは、一意識別子文字列の実際の数を示します。

uidsは、locate_attrsで指定した属性に一致するオブジェクトのUIDSです。

構文

OKVErrNo okvLocate(OKVEnv *env,
                   ub4 uid_max, ub4 storage_status, OKVTTLV *locate_attrs,
                   ub4 *uid_cnt, oratext **uids);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

uid_max

IN

予期される一意識別子の最大数。

storage_status

IN

アーカイブ済オブジェクトまたはオンライン・オブジェクトを検索します。

locate_attrs

IN

検索の場所を定義する属性。

uid_cnt

OUT

サーバーから返された一意識別子の数。

uids

OUT

検索属性と記憶域ステータスの基準に一致する一意識別子。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

呼出し側は、この関数から返される一意識別子uids用に十分なメモリーを割り当てる必要があります。唯一の例外は、uid_max値に関係なく、locate_attrsで指定した属性に一致するすべてのUIDがOracle Key Vaultサーバーによって返されることです。

/* Set up the environment handle 'env' and also the memory and connection
   management as shown in previous sections. Create a key with a name
   attribute value "MyNewKey" for example and get its unique
   identifier as part of its creation in 'uid'. Locate operation can be done as
   shown below. */
...
ub4       locate_count = 0;
ub4       uid_max = 1;
OKVTTLV  *loc_attrs = (OKVTTLV *)NULL;
OKVTTLV  *attr_in = (OKVTTLV *)NULL;
oratext **locate_uids = (oratext **) malloc(uid_max * sizeof(oratext *));
ub4       itr = 0;

for (itr = 0; itr < uid_max; itr++)
{
   locate_uids[itr] = (oratext *) malloc(OKV_UNIQUE_ID_MAXLEN * sizeof(oratext));
}

loc_attrs = okvEnvGetOpRequestObj(env);
attr_in = okvAddAttributeObject(env, loc_attrs, OKVAttrName, (ub4) 0);

/* Add name attribute value to name attribute object */
okvAttrAddName(env, attr_in, (oratext *) "MyNewKey", strlen("MyNewKey"), 1);
okvLocate(env, uid_max, 1, loc_attrs, &locate_count, locate_uids);

if (okvErrGetNum(env))
{
   printf("Error while Locating the Key: MyNewKey\n");
}

11.1.20 okvModifyAttribute

okvModifyAttributeにより、KMIPの属性変更操作を実装します。

カテゴリ

KMIP API

用途

okvModifyAttributeにより、KMIPの属性変更操作を実装します。一意識別子で指定したKMIPオブジェクトの属性を変更します。

構文

OKVErrNo okvModifyAttribute(OKVEnv *env, oratext *uid,
                            OKVTTLV **attr);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

uid IN

一意識別子(バッチ処理の場合はNULLも可)。

attr IN

変更する必要があるKMIPオブジェクトの属性。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Create the KMIP object, say Key for example and get its unique identifier
   as part of its creation in 'uid', we can add an attribute and modify it
   as shown shown below */

OKVTTLV *templ = (OKVTTLV *) NULL;
OKVTTLV *req = (OKVTTLV *) NULL;
OKVTTLV *attr_temp = (OKVTTLV *) NULL;
OKVTTLV *attr_in = (OKVTTLV *) NULL;
oratext *contact = (oratext *)"9123456789";
ub4      contactl = strlen((char *) contact);
oratext *new_contact = (oratext *)"abc.xyz@com";
ub4 new_contactl = strlen((char *) new_contact);
templ = okvEnvGetOpRequestObj(env);
attr_temp = okvAddAttributeObject(env, templ, OKVAttrContactInfo, (ub4) 0);

okvAttrAddContactInfo(env, attr_temp, contact, contactl);
okvAddAttribute(env, &uid[0], &attr_temp);

/* Now let's modify the contact info attribute */
req = okvEnvGetOpRequestObj(env);
attr_in = okvAddAttributeObject(env, req, OKVAttrContactInfo, (ub4) 0);
okvAttrAddContactInfo(env, attr_in, new_contact, new_contactl);
okvModifyAttribute(env, &uid[0], &attr_in);

if (okvErrGetNum(env))
{
   printf("Error while modifying the contact info attribute of the object\n");
}

11.1.21 okvQueryCapability

okvQueryCapabilityにより、KMIPの問合せ操作を実装します。

カテゴリ

KMIP API

用途

okvQueryCapabilityにより、KMIPの問合せ操作を実装します。

KMIP問合せ操作は、Oracle Key Vaultサーバーでサポートされている項目(KMIP操作、オブジェクト、サーバー情報など)を返します。項目を一度に1つずつ取得することもできます。どの項目を返すかは、問合せ関数で指定します。サポートされている問合せ関数の値は次のとおりです。
  • OKVDEF_QUERY_OPERATIONS
  • OKVDEF_QUERY_OBJECTS
  • OKVDEF_QUERY_SERVER_INFO

問合せ関数でリクエストしていない項目の数はゼロになります。サーバー情報をリクエストしない場合は、server_informationNULLにすることもできます。

構文

OKVErrNo okvQueryCapability(OKVEnv *env,
                            ub4  query_function_cnt, ub4 *query_function,
                            ub4 *operation_cnt, OKVOpsNo *operation,
                            ub4 *object_type_cnt, OKVObjNo *object_type,
                            OKVServerInformation *server_information);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

query_function_cnt

IN

リクエストされるKMIP関数の数。

query_function

IN

リクエストされるKMIP関数。

operation_cnt

OUT

サポートされているKMIP操作の数。

operation

OUT

サポートされているKMIP操作。

object_type_cnt

OUT

サポートされているKMIP管理対象オブジェクトの数。

object_type

OUT

サポートされているKMIP管理対象オブジェクト。

server_information

OUT

Oracle Key Vaultサーバー固有の情報。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections. */
...
OKVServerInformation s;
ub4 query_function[1];
ub4 operation_cnt = 30;
OKVOpsNo operation[30];
ub4 object_type_cnt = 30;
OKVObjNo object_type[30];
query_function[0] = 3;

okvQueryCapability(env,1, query_function, &operation_cnt, operation,
                   &object_type_cnt, object_type, &s);

if (okvErrGetNum(env))
{
   printf("Error while executing okvQueryCapability");
}

11.1.22 okvRegCertificate

okvRegCertificateにより、KMIPの、KMIP証明書オブジェクトの登録の操作を実装します。

カテゴリ

KMIP API

用途

okvRegCertificateにより、KMIPの、KMIP証明書オブジェクトの登録の操作を実装します。

特定のタイプの証明書がOracle Key Vaultサーバーに登録されています。Oracle Key Vaultサーバーによって生成された証明書オブジェクトの一意識別子は、ouidとして返されます。

Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

新しく登録する証明書には、属性のヘルプ、またはテンプレート名とともに指定して、さらに属性を採用できます。この属性とテンプレート名(指定されている場合)は、KMIP登録操作に追加されるテンプレート属性になります。

構文

OKVErrNo okvRegCertificate(OKVEnv *env,
                           ub4 certificate_type, ub4 certificate_subtype,
                           ub1 *certificate, ub4 certificatel,
                           ub4 mask, OKVTTLV *template_names_attrs,
                           oratext *private_key_uid, 
                           ub4 private_key_uidl,
                           oratext *wallet_name, ub4 wallet_namel,
                           oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

certificate_type

IN

証明書のタイプ。

certificate_subtype

IN

証明書のサブタイプ。

certificate

IN

証明書。

certificatel

IN

証明書の長さ。

mask

IN

証明書の暗号化使用方法マスク。

template_names_attrs

IN

テンプレート-属性を形成するテンプレート名または属性。

private_key_uid

IN

証明書に関連付けられている秘密キーの一意識別子(オプション)。

private_key_uidl

IN

証明書に関連付けられている秘密キーの一意識別子の長さ(オプション)。

wallet_name

IN

ウォレット名の値。

wallet_namel

IN

ウォレット名の値の長さ。

ouid

OUT

登録済証明書の一意識別子。

ouidl

OUT

登録済証明書の一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKバージョン21.2.0.0.0以降。

コメント

証明書オブジェクトにはKMIP名前属性を追加して、そのオブジェクトを今後識別しやすくなるようにすることをお薦めします。

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てるメモリーの長さは、一意識別子の長さの引数ouidlで渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

登録する証明書は、オプションで、秘密キーのUID (private_key_uid)を指定することで秘密キーに関連付けることができます。private_key_uidについては、このAPIに引数として渡す前に、検索操作を実行することで(okvLocate APIを使用)、それが存在することを検証します。

certificate_subtype引数に指定可能な値:
  • OKV_CERT_SUBTYPE_USER_CERT: ユーザー証明書を表します。
  • OKV_CERT_SUBTYPE_TRUSTPOINT: トラストポイントを表します。

証明書は、ウォレット(wallet_name)が指定されている場合、そのウォレットでOracle Key Vaultサーバーに登録されます。指定されていない場合は、デフォルト・ウォレットで登録されます(このウォレットがエンドポイントに存在している場合)。

/* X.509 Certificate type */
ub4      cert_type = OKVDEF_CERT_TYPE_X509;

/* Certificate Subtype */
ub4      cert_subtype = OKV_CERT_SUBTYPE_USER_CERT;

/* Usage mask */
ub4      cert_mask = CRYPTO_MASK_ENCRYPT;
ub1      cert[] = "-----BEGIN CERTIFICATE-----
MIIEvQIBADANBgkqhkiG9w0BAQE………………………………….
-----END CERTIFICATE-----";
ub4      certl = strlen((const char *)cert);
oratext  uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4      uidl = sizeof(uid);
OKVTTLV *template = (OKVTTLV *)NULL;
OKVTTLV *attr_in = (OKVTTLV *)NULL;

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections */
memset(uid, 0, uidl);
template = okvEnvGetOpRequestObj(env);

/* Add name attribute object to request handle */
attr_in = okvAddAttributeObject(env, template, OKVAttrName, (ub4) 0);

/* Add name attribute value to name attribute object */
okvAttrAddName(env, attr_in, (oratext *)"My Certificate for Register operation",
               strlen("My Certificate for Register operation"), 1);

okvRegCertificate(env, cert_type, cert_subtype,
           cert, certl, 
           cert_mask , template,
           (oratext *)NULL, (ub4)0,
           OKV_NO_WALLET, OKV_NO_WALLET_LEN,
           uid, &uidl);

uid[*uidl] = '\0';

if (okvErrGetNum(env))
{
   printf("Error while registering the certificate\n");
}

11.1.23 okvRegCertificateRequest

okvRegCertificateRequestにより、KMIPの、証明書リクエスト・オブジェクトの登録の操作を実装します。

カテゴリ

KMIP API

用途

okvRegCertificateRequestにより、KMIPの、証明書リクエスト・オブジェクトの登録の操作を実装します。

証明書リクエスト・オブジェクトは、不透明オブジェクトとしてOracle Key Vaultサーバーに登録されます。Oracle Key Vaultサーバーによって生成された証明書リクエスト・オブジェクトの一意識別子は、ouidとして返されます。

Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

新しく登録する証明書リクエストには、属性のヘルプ、またはテンプレート名とともに指定して、さらに属性を採用できます。この属性とテンプレート名(指定されている場合)は、KMIP登録操作に追加されるテンプレート属性になります。

構文

OKVErrNo okvRegCertificateRequest(OKVEnv *env,
                                  ub4 certificate_request_type,
                                  ub1 *certificate_request,
                                  ub4 certificate_requestl,
                                  OKVTTLV *template_names_attrs,
                                  oratext *private_key_uid,
                                  ub4 private_key_uidl,
                                  oratext *wallet_name, ub4 wallet_namel,
                                  oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

certificate_request_type

IN

証明書リクエストのタイプ。

certificate_request

IN

証明書リクエスト。

certificate_requestl

IN

証明書リクエストの長さ。

template_names_attrs

IN

テンプレート-属性を形成するテンプレート名または属性。

private_key_uid

IN

証明書リクエストに関連付けられている秘密キーの一意識別子(必須)。

private_key_uidl

IN

証明書リクエストに関連付けられている秘密キーの一意識別子の長さ(必須)。

wallet_name

IN

ウォレット名の値。

wallet_namel

IN

ウォレット名の値の長さ。

ouid

OUT

登録済証明書リクエストの一意識別子。

ouidl

OUT

登録済証明書リクエストの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKバージョン21.2.0.0.0以降。

コメント

証明書リクエスト・オブジェクトにはKMIP名前属性を追加して、そのオブジェクトを今後識別しやすくなるようにすることをお薦めします。

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てるメモリーの長さは、一意識別子の長さの引数ouidlで渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

登録する証明書リクエストは、秘密キーのUID (private_key_uid)を指定することで秘密キーに関連付ける必要があります。private_key_uidについては、このAPIに引数として渡す前に、検索操作を実行することで(okvLocate APIを使用)、それが存在することを検証します。

証明書リクエストは、ウォレット(wallet_name)が指定されている場合、そのウォレットでOracle Key Vaultサーバーに登録されます。指定されていない場合は、デフォルト・ウォレットで登録されます(このウォレットがエンドポイントに存在している場合)。

/* Certificate Request type */
ub4      cert_req_type = OKVDEF_CERT_REQ_TYPE_PEM;
ub1      cert_req[] = "-----BEGIN CERTIFICATE REQUEST-----
MIIEvQIBADANBgkqhkiG9w0BAQE………………………………….
-----END CERTIFICATE REQUEST-----";
ub4      cert_reql = strlen((const char *)cert_req);
oratext  uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4      uidl = sizeof(uid);
OKVTTLV *template = (OKVTTLV *)NULL;
OKVTTLV *attr_in = (OKVTTLV *)NULL;

/* Please make sure to pass a valid Private Key UID */
oratext *private_key_uid = "64281937-768D-4F78-BF39-EBD5985BFAB2";
ub4      private_key_uidl = strlen((const char *)private_key_uid);

/* Set up the environment handle ‘env’ and also the memory and
   connection management as shown in previous sections */
memset(uid, 0, uidl);
template = okvEnvGetOpRequestObj(env);

/* Add name attribute object to request handle */
attr_in = okvAddAttributeObject(env, template, OKVAttrName, (ub4) 0);

/* Add name attribute value to name attribute object */
okvAttrAddName(env, attr_in, (oratext *)"My Certificate Request for Register operation",
               strlen("My Certificate Request for Register operation"), 1);

okvRegCertificateRequest(env, cert_req_type,
                   cert_req, cert_reql, template,
                   private_key_uid, private_key_uidl,
                   OKV_NO_WALLET, OKV_NO_WALLET_LEN,
                   uid, &uidl);

uid[*uidl] = '\0';

if (okvErrGetNum(env))
{
   printf("Error while registering the certificate request\n");
}

11.1.24 okvRegKey

okvRegKeyにより、KMIPの、KMIP対称キー・オブジェクトの登録の操作を実装します。

カテゴリ

KMIP API

用途

okvRegKeyにより、KMIPの、KMIP対称キー・オブジェクトの登録の操作を実装します。

Oracle Key Vaultサーバーによって作成された対称キー・オブジェクトの一意識別子は、ouidとして返されます。

Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

新しく作成されるキーには、属性のヘルプまたはテンプレート名を使用して指定する追加の属性を採用できます。この属性とテンプレート名(指定されている場合)は、KMIP登録操作に追加されるテンプレート属性になります。

構文

OKVErrNo okvRegKey(OKVEnv *env,
                   OKVType key_alg, ub4 key_len, ub1 *key, ub4 keyl,
                   ub4 mask, OKVTTLV *template_names_attrs,
                   oratext *wallet_name, ub4 wallet_namel,
                   oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

key_alg

IN

対称キー・アルゴリズム。

key_len

IN

対称キーのキー長。

key

IN

対称キー。

keyl

IN

対称キーの長さ。

mask

IN

対称キーの暗号化使用方法マスク。

template_names_attrs

IN

テンプレート-属性を形成するテンプレート名または属性。

wallet_name

IN ウォレット名の値。

wallet_namel

IN ウォレット名の値の長さ。
ouid

OUT

登録済キーの一意識別子。

ouidl

OUT

登録済キーの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

対称キー・オブジェクトにはKMIP名前属性を追加して、そのオブジェクトが今後識別しやすくなるようにすることをお薦めします。

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てるメモリーの長さは、一意識別子の長さの引数ouidlで渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

指定したアルゴリズムと使用方法(暗号化使用方法マスク)に応じて指定した長さの対称キーは、ウォレットwallet_nameが指定されている場合、そのウォレットでOracle Key Vaultサーバーに登録されます。指定されていない場合は、デフォルト・ウォレットで登録されます(このウォレットがエンドポイントに存在している場合)。

/* Tag for Cryptographic Algortihm AES */
OKVType   algo = CRYPTO_ALG_AES;

/* Key length 128, because AES keys are 128, 192 or 256 bits in length*/
ub4       key_len = 128;
ub4       usage_mask = CRYPTO_MASK_ENCRYPT | CRYPTO_MASK_DECRYPT;

/* Key */
ub1       key[] = "770A8A65DA156D24";

/* Length of symmetric key */
ub4       keyl = strlen((const char *)key);
oratext   uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4       uidl = sizeof(uid);
OKVTTLV  *template = (OKVTTLV *)NULL;
OKVTTLV  *attr_in = (OKVTTLV *)NULL;

/* Set up the environment handle 'env' and also the memory
   and connection management as shown in previous sections */
memset(uid, 0, uidl);
template = okvEnvGetOpRequestObj(env);

/* Add name attribute object to request handle */
attr_in = okvAddAttributeObject(env, template, OKVAttrName, (ub4) 0);

/* Add name attribute value to name attribute object */
okvAttrAddName(env, attr_in, (oratext *)"My Key for Register operation",
               strlen("My Key for Register operation"), 1);
okvRegKey(env, algo, key_len, &key[0], keyl, usage_mask, template,
          (oratext *)NULL, (ub4)0, uid, &uidl);

if (okvErrGetNum(env))
{
   printf("Error while registering the key\n");
}

11.1.25 okvRegOpaqueData

okvRegOpaqueDataにより、KMIPの、KMIP不透明データ・オブジェクトの登録の操作を実装します。

カテゴリ

KMIP API

用途

okvRegOpaqueDataでは、KMIP不透明データ・オブジェクトのKMIP登録操作を実装します。

不透明データはバイト列です。テキスト・ファイル、テキスト文字列、バイナリ・ファイルまたはキーも不透明データとしてアップロードできます。

登録済の不透明データに対してOracle Key Vaultサーバーで作成された不透明データ・オブジェクトの一意識別子は、ouidとして返されます。

Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

新しく作成される不透明データには、属性のヘルプまたはテンプレート名を使用して指定する追加の属性を採用できます。この属性とテンプレート名(指定されている場合)は、KMIP登録操作に追加されるテンプレート属性になります。

構文

OKVErrNo okvRegOpaqueData(OKVEnv *env,
                          ub4 opaque_data_type, ub1 *opaque_data,
                          ub4 opaque_datal,
                          OKVTTLV *template_names_attrs,
                          oratext *wallet_name, ub4 wallet_namel,
                          oratext *ouid, ub4 *ouidl); 

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

opaque_data_type IN 登録する不透明オブジェクトのタイプ。
opaque_data IN 登録する不透明オブジェクト。
opaque_data1 IN 登録する不透明オブジェクトの長さ。
template_names_attrs IN

テンプレート-属性を形成するテンプレート名または属性。

wallet_name

IN ウォレット名の値。

wallet_namel

IN ウォレット名の値の長さ。
ouid OUT

登録済不透明オブジェクトの一意識別子。

ouid1 OUT

登録済不透明オブジェクトの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

不透明データ・オブジェクトにはKMIP名前属性を追加して、そのオブジェクトを今後識別しやすくなるようにすることをお薦めします。

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てるメモリーの長さは、一意識別子の長さの引数ouidlで渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

指定のタイプの不透明データは、ウォレットwallet_nameが指定されている場合、そのウォレットでOracle Key Vaultサーバーに登録されます。指定されていない場合は、デフォルト・ウォレットで登録されます(このウォレットがエンドポイントに存在している場合)。不透明データのサイズは、Oracle Key Vaultサーバーによって処理されるオブジェクトの最大サイズに制限されます。

例外として、不透明オブジェクトでは、リース期間、非アクティブ化日、破棄日、危殆化発生日、危殆化日および失効理由の各属性はサポートされていません。

oratext *opaque_data = (oratext *)"MyNewData";
ub4 opaque_datal = strlen("MyNewData");
oratext  uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4      uidl = sizeof(uid);

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections */
memset(uid, 0, uidl);

/* Register Opaque Data */
printf("\tRegistering opaque data\n");

okvRegOpaqueData(env, OKVDEF_TAG_OPAQUE_DATA_TYPE,
                 opaque_data, opaque_datal,
                 (OKVTTLV *)NULL, (oratext *)NULL, (ub4)0,
                 &uid[0], uidl);

if (okvErrGetNum(env))
{
   printf("Error while registering the opaque data\n");
}

11.1.26 okvRegPrivateKey

okvRegPrivateKeyにより、KMIPの、KMIP秘密キー・オブジェクトの登録の操作を実装します。

カテゴリ

KMIP API

用途

okvRegPrivateKeyにより、KMIPの、KMIP秘密キー・オブジェクトの登録の操作を実装します。

Oracle Key Vaultサーバーによって登録された秘密キー・オブジェクトの一意識別子は、ouidとして返されます。Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

新しく登録する秘密キーには、属性のヘルプ、またはテンプレート名とともに指定して、さらに属性を採用できます。この属性とテンプレート名(指定されている場合)は、KMIP登録操作に追加されるテンプレート属性になります。

構文

OKVErrNo okvRegPrivateKey(OKVEnv *env,
                          OKVType private_key_alg, ub4 private_key_len,
                          ub1 *private_key, ub4 private_keyl,
                          ub4 mask, OKVTTLV *template_names_attrs,
                          oratext *wallet_name, ub4 wallet_namel,
                          oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

private_key_alg IN

秘密キー・アルゴリズム。

private_key_len IN

秘密キーのキー長。

private_key IN

秘密キー。

private_keyl IN

秘密キーの長さ。

mask IN

秘密キーの暗号化使用方法マスク。

template_names_attrs IN

テンプレート-属性を形成するテンプレート名または属性。

wallet_name IN

ウォレット名の値。

wallet_namel IN

ウォレット名の値の長さ。

ouid OUT

登録済秘密キーの一意識別子。

ouidl OUT

登録済秘密キーの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKバージョン21.2.0.0.0以降。

コメント

秘密キー・オブジェクトにはKMIP名前属性を追加して、そのオブジェクトを今後識別しやすくなるようにすることをお薦めします。

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てるメモリーの長さは、一意識別子の長さの引数ouidlで渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

指定したアルゴリズムと使用方法(暗号化使用方法マスク)に応じて指定した長さの秘密キーは、ウォレットwallet_nameが指定されている場合、そのウォレットでOracle Key Vaultサーバーに登録されます。指定されていない場合は、デフォルト・ウォレットで登録されます(このウォレットがエンドポイントに存在している場合)。

/* Key Algorithm */
OKVType  private_key_algo = CRYPTO_ALG_RSA;

/* Key Size */
ub4      private_key_len = 2048;
ub1      private_key[] = "45687942323587........";
ub4      private_keyl = strlen((const char *)private_key);

/* Usage mask */
ub4      private_key_mask = CRYPTO_MASK_DECRYPT;
oratext  uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4      uidl = sizeof(uid);
OKVTTLV *template = (OKVTTLV *)NULL;
OKVTTLV *attr_in = (OKVTTLV *)NULL;

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections */
memset(uid, 0, uidl);
template = okvEnvGetOpRequestObj(env);

/* Add name attribute object to request handle */
attr_in = okvAddAttributeObject(env, template, OKVAttrName, (ub4) 0);

/* Add name attribute value to name attribute object */
okvAttrAddName(env, attr_in, (oratext *)"My Private Key for Register operation",
               strlen("My Private Key for Register operation"), 1);

okvRegPrivateKey(env, private_key_algo, private_key_len,
                 private_key, private_keyl,
                 private_key_mask, template,
                 OKV_NO_WALLET, OKV_NO_WALLET_LEN,
                 uid, &uidl);

uid[*uidl] = '\0';

if (okvErrGetNum(env))
{
   printf("Error while registering the private key\n");
}

11.1.27 okvRegPublicKey

okvRegPublicKeyにより、KMIPの、KMIP公開キー・オブジェクトの登録の操作を実装します。

カテゴリ

KMIP API

用途

okvRegPublicKeyにより、KMIPの、KMIP公開キー・オブジェクトの登録の操作を実装します。

Oracle Key Vaultサーバーによって登録された公開キー・オブジェクトの一意識別子は、ouidとして返されます。

Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

新しく登録する公開キーには、属性のヘルプ、またはテンプレート名とともに指定して、さらに属性を採用できます。この属性とテンプレート名(指定されている場合)は、KMIP登録操作に追加されるテンプレート属性になります。

構文

OKVErrNo okvRegPublicKey(OKVEnv *env,
                         OKVType public_key_alg, ub4 public_key_len,
                         ub1 *public_key, ub4 public_keyl,
                         ub4 mask, OKVTTLV *template_names_attrs,
                         oratext *private_key_uid, ub4 private_key_uidl,
                         oratext *wallet_name, ub4 wallet_namel,
                         oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

public_key_alg IN

公開キー・アルゴリズム。

public_key_len IN

公開キーのキー長。

public_key IN

公開キー。

public_keyl IN

公開キーの長さ。

mask IN

公開キーの暗号化使用方法マスク。

template_names_attrs IN

テンプレート-属性を形成するテンプレート名または属性。

private_key_uid IN

公開キーに関連付けられている秘密キーの一意識別子(オプション)。

private_key_uidl IN

公開キーに関連付けられている秘密キーの一意識別子の長さ(オプション)。

wallet_name IN

ウォレット名の値。

wallet_namel IN

ウォレット名の値の長さ。

ouid OUT

登録済公開キーの一意識別子。

ouidl OUT

登録済公開キーの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

サポートされているバージョン

Oracle Key Vault C SDKバージョン21.2.0.0.0以降。

コメント

公開キー・オブジェクトにはKMIP名前属性を追加して、そのオブジェクトを今後識別しやすくなるようにすることをお薦めします。

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てるメモリーの長さは、一意識別子の長さの引数ouidlで渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

指定したアルゴリズムと使用方法(暗号化使用方法マスク)に応じて指定した長さの公開キーは、ウォレットwallet_nameが指定されている場合、そのウォレットでOracle Key Vaultサーバーに登録されます。指定されていない場合は、デフォルト・ウォレットで登録されます(このウォレットがエンドポイントに存在している場合)。

登録する公開キーは、オプションで、秘密キーのUID (private_key_uid)を指定することで秘密キーに関連付けることができます。private_key_uidについては、このAPIに引数として渡す前に、検索操作を実行することで(okvLocate APIを使用)、それが存在することを検証します。

/* Key Algorithm */
OKVType  public_key_algo = CRYPTO_ALG_RSA;

/* Key Size */
ub4      public_key_len = 2048;
ub1      public_key[] = "7698767245345566789823428...........";
ub4      public_keyl = strlen((const char *)public_key);

/* Usage mask */
ub4      public_key_mask = CRYPTO_MASK_ENCRYPT;
oratext  uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4      uidl = sizeof(uid);
OKVTTLV *template = (OKVTTLV *)NULL;
OKVTTLV *attr_in = (OKVTTLV *)NULL;

/* Set up the environment handle ‘env’ and also the memory and
   connection management as shown in previous sections */
memset(uid, 0, uidl);
template = okvEnvGetOpRequestObj(env);

/* Add name attribute object to request handle */
attr_in = okvAddAttributeObject(env, template, OKVAttrName, (ub4) 0);

/* Add name attribute value to name attribute object */
okvAttrAddName(env, attr_in, (oratext *)"My Public Key for Register operation",
               strlen("My Public Key for Register operation"), 1);

okvRegPublicKey(env, public_key_algo, public_key_len,
          public_key, public_keyl,
          public_key_mask, template,
          (oratext *)NULL, (ub4)0,
          OKV_NO_WALLET, OKV_NO_WALLET_LEN,
          uid, &uidl);

uid[*uidl] = '\0';

if (okvErrGetNum(env))
{
   printf("Error while registering the public key\n");
}

11.1.28 okvRegSecretData

okvRegSecretDataでは、KMIPシークレット・データ・オブジェクトのKMIP登録操作を実装します。

カテゴリ

KMIP API

用途

okvRegSecretDataでは、KMIPシークレット・データ・オブジェクトのKMIP登録操作を実装します。

通常、シークレット・データはパスワードまたは文字列です。

登録済のシークレット・データに対してOracle Key Vaultサーバーで作成されたシークレット・データの一意識別子は、ouidとして返されます。

Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

新しく作成されるシークレット・データには、属性のヘルプまたはテンプレート名を使用して指定する追加の属性を採用できます。この属性とテンプレート名(指定されている場合)は、KMIP登録操作に追加されるテンプレート属性になります。

構文

OKVErrNo okvRegSecretData(OKVEnv *env,
                          ub4 secret_data_type, ub1 *secret_data,
                          ub4 secret_datal, ub4 mask,
                          OKVTTLV *template_names_attrs,
                          oratext *wallet_name, ub4 wallet_namel,
                          oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

secret_data_type

IN

登録されるシークレット・データのタイプ。

secret_data

IN

登録されるシークレット・データ。

secret_datal

IN

登録されるシークレット・データの長さ。

mask IN

シークレットの暗号化使用方法マスク。

template_names_attrs

IN

テンプレート-属性を形成するテンプレート名または属性。

wallet_name

IN ウォレット名の値。

wallet_namel

IN ウォレット名の値の長さ。
ouid

OUT

登録済シークレット・データの一意識別子。

ouidl

OUT

登録済シークレット・データの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

シークレット・データ・オブジェクトにはKMIP名前属性を追加して、そのオブジェクトが今後識別しやすくなるようにすることをお薦めします。

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てるメモリーの長さは、一意識別子の長さ(ouidl)の引数によって渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

指定のタイプのシークレット・データは、ウォレット(wallet_name)が指定されている場合、そのウォレットでOracle Key Vaultサーバーに登録されます。指定されていない場合は、デフォルト・ウォレットで登録されます(このウォレットがエンドポイントに存在している場合)。

シークレット・データのサイズは、Oracle Key Vaultサーバーによって処理されるオブジェクトの最大サイズに制限されます。

/* Parameters for registering secret data */
/* Tag for secret data type */
OKVType   type = OKVDEF_SECRET_DATA_TYPE_PASSWORD;
ub4       usage_mask = CRYPTO_MASK_ENCRYPT | CRYPTO_MASK_DECRYPT;
oratext  *secret = (oratext *)"MyNewSecret";
ub4       secretl = strlen("MyNewSecret");
oratext   uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4       uidl = sizeof(uid);

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections */
memset(uid, 0, uidl);

/* Register Secret data */
printf("\tRegistering the secret data\n");

okvRegSecretData(env, type, secret, secretl,
                 usage_mask, (OKVTTLV *)NULL,
                 (oratext *)NULL, (ub4)0,
                 &uid[0], uidl);

if (okvErrGetNum(env))
{
   printf("Error while registering the secret data\n");
}

11.1.29 okvRegTemplate

okvRegTemplateでは、KMIPテンプレート・オブジェクトのKMIP登録操作を実装します。

カテゴリ

KMIP API

用途

okvRegTemplateでは、KMIPテンプレート・オブジェクトのKMIP登録操作を実装します(KMIPテンプレート-属性オブジェクトと混同しないでください)。

テンプレート・オブジェクトは、属性のコレクションです。

Oracle Key Vaultで登録済テンプレートに対して指定の属性によって作成されたテンプレート・オブジェクトの一意識別子は、ouidとして返されます。

Oracle Key Vault SDKの一意識別子の最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

構文

OKVErrNo okvRegTemplate(OKVEnv *env,
                        OKVTTLV *attrs_template,
                        oratext *wallet_name, ub4 wallet_namel,
                        oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

attrs_template IN

テンプレートの属性。

wallet_name

IN ウォレット名の値。

wallet_namel

IN ウォレット名の値の長さ。
ouid OUT

登録済テンプレートの一意識別子。

ouid1 OUT

登録済テンプレートの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

呼出し側は、この関数から返される一意識別子用にメモリーを割り当てる必要があります。割り当てたメモリーの長さは、一意識別子の長さ(ouidl)の引数によって渡されます。返される一意識別子を格納するための十分なメモリーを割り当てる必要があります。

テンプレートは、wallet_name引数で指定したウォレットに登録されます。それ以外の場合は、エンドポイントに関連付けられたデフォルト・ウォレットに登録されます(デフォルト・ウォレットが存在する場合)。

oratext  uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4      uidl = sizeof(uid);

/* Set up the environment handle 'env' also the memory and connection
   management as shown in previous sections */
memset(uid, 0, uidl);
okvRegTemplate(env, (OKVTTLV *)NULL, (oratext *)NULL, (ub4)0, &uid[0], &uidl);

if (okvErrGetNum(env))
{
   printf("Error while registering the Template\n");
}

11.1.30 okvRekey

okvRekeyにより、KMIPのキー更新操作を実装します。

カテゴリ

KMIP API

用途

okvRekeyにより、KMIPのキー更新操作を実装します。

キー更新操作には、キー更新が必要になる対称キーの一意識別子が必須です。ほとんどの属性が、古いキーから引き継がれます。一部の属性は、KMIP定義の規則に従って変更されます。

Oracle Key Vaultサーバーによって生成された新しい対称キー・オブジェクトの一意識別子は、ouidとして返されます。

Oracle Key Vault SDKの一意IDの最大長は、OKV_UNIQUE_ID_MAXLENで定義されます。

構文

OKVErrNo okvRekey(OKVEnv *env, oratext *uid,
                  ub4 offset, OKVTTLV *template_names_attrs,
                  oratext *ouid, ub4 *ouidl);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

uid

IN

キー更新するキーの一意識別子(バッチ処理の場合はNULLも可)。

offset

IN

初期化(作成)日とアクティブ化日の間の時間間隔。

template_names_attrs

IN

キー更新のテンプレート-属性を形成するテンプレート名または属性。

ouid

OUT

新しく生成された対称キーの一意識別子。

ouidl

OUT

新しく生成された対称キーの一意識別子の長さ。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

呼出し側は、この関数から返される新しい対称キーの一意識別子用にメモリーを割り当てる必要があります。割り当てたメモリーの長さは、一意識別子の長さ(ouidl)の引数によって渡されます。

Oracle Key Vaultサーバーで使用する場合、このAPIには次の例外があります。
  • サーバーは、キーのキー更新可能回数に制限を課しません。たとえば、キーK1がキー更新され、新しいキーK2が作成された場合、サーバーは再度のキーK1のキー更新を許可して、キーK3が作成されます。
  • キー更新に対してテンプレートが渡された場合、そのテンプレート属性は新しいキーに追加されません。回避策として、キー更新後にokvAddAttributeを使用することで、これを追加できます。

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections. Create
   a key for example and get its unique identifier as part of
   its creation in 'uid'. Rekey can done as shown below */
…
oratext  rekey_uid[OKV_UNIQUE_ID_MAXLEN + 1];
ub4      rekey_uidl = sizeof(rekey_uid);

memset(rekey_uid, 0, rekey_uidl);
okvRekey(env, uid, (ub4)0, (OKVTTLV *)NULL, &rekey_uid[0], &rekey_uidl);

if (okvErrGetNum(env))
{
   printf("Error while Re-Keying the Key\n");
}

11.1.31 okvRevoke

okvRevokeにより、KMIPの失効操作を実装します。

カテゴリ

KMIP API

用途

okvRevokeにより、KMIPの失効操作を実装します。失効理由とオブジェクトが危殆化した日付とともに、一意識別子で指定したKMIPオブジェクトを失効させます。

構文

OKVErrNo okvRevoke(OKVEnv *env, oratext *uid,
                   ub4 revocation_reason,
                   oratext *revocation_msg,
                   ub8 comp_occurrence_date);

パラメータ

パラメータ IN/OUT 説明
env IN

Oracle Key Vault環境ハンドル。

uid IN

一意識別子(バッチ処理の場合はNULLも可)。

revocation_reason IN

KMIPオブジェクトの失効処理についての失効理由。

revocation_msg IN

KMIPオブジェクトの失効処理についての失効メッセージ。

comp_occurrence_date IN

KMIPオブジェクトの危殆化が発生した日付。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Create the KMIP object, say Key for example and get its unique identifier
   as part of its creation in 'uid', activate it and then revoke it as below */

okvRevoke(env, &uid[0], (ub4)1, (oratext *)"Retiring the key",
          (ub8)time((time_t *)NULL));

if (okvErrGetNum(env))
{
   printf("Error while revoking the object\n");
}

11.2 Oracle Key VaultクライアントSDKのバッチAPI

この項では、Oracle Key Vault KMIPバッチ関数のインタフェースについて説明します。

11.2.1 okvBatchCreate

okvBatchCreateでは、Oracle Key Vaultバッチ処理の開始を示します。

カテゴリ

KMIPバッチAPI

用途

okvBatchCreateでは、Oracle Key Vaultバッチ処理の開始を示します。このコマンドの後のすべてのOracle Key Vault関数はバッチ処理されます。

構文

OKVErrNo okvBatchCreate(OKVEnv *env);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

なし。

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections. */

printf("Start preparing batch operations\n");
okvBatchCreate(env);

if (okvErrGetNum(env))
{
   printf("Error while initiating the Batch");
}
...
/* All Oracle Key Vault APIs from this point will be batched */

11.2.2 okvBatchExecute

okvBatchExecuteでは、バッチ処理されるOracle Key Vault関数を実行します。

カテゴリ

KMIPバッチAPI

用途

okvBatchExecuteでは、バッチ処理されるOracle Key Vault関数を実行します。バッチ処理されるOracle Key Vault関数は、okvBatchCreateokvBatchExecuteの間の関数です。エラーが発生した場合は、バッチ処理されたすべてのOracle Key Vault関数のエラーをチェックして、失敗した操作と成功した操作を確認する必要があります。

構文

OKVErrNo okvBatchExecute(OKVEnv *env);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

実行後にバッチ内の個別の操作をチェックするために使用できるAPIは、okvErrGetNumForBatchokvErrGetDepthForBatchおよびokvErrGetNumAtDepthForBatchです。個別のバッチ操作のエラーは、バッチ・コンテキストを解放する前(okvBatchFreeをコールする前)にのみチェックできます。

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections. */
printf("Start preparing batch operations\n");
okvBatchCreate(env);
...
/* All Oracle Key Vault KMIP APIs from this point will be batched */
...
printf("Executing batch operation\n");
okvBatchExecute(env);

if (okvErrGetNum(env))
{
   printf("Error while executing the batch");
}

11.2.3 okvBatchFree

okvBatchFreeでは、Oracle Key Vaultバッチ処理の終了を示します。

カテゴリ

KMIPバッチAPI

用途

okvBatchFreeでは、Oracle Key Vaultバッチ処理の終了を示します。基本的に、複合の引数に割り当てられたメモリーは解放されます。okvBatchCreateを再度コールしないかぎり、それ以降のOracle Key Vault関数はバッチ処理されません。

構文

OKVErrNo okvBatchFree(OKVEnv *env);

パラメータ

パラメータ IN/OUT 説明

env

IN

Oracle Key Vault環境ハンドル。

戻り値

戻り値 説明
OKVErrNo

Oracle Key Vaultエラー番号。

成功: OKV_SUCCESS (0)が返されます。

失敗: エラー・スタックの最上部にあるエラーの有効なエラー番号が返されます。

コメント

個別のバッチ操作のエラーは、バッチ・コンテキストを解放する前(okvBatchFreeをコールする前)にのみチェックできます。

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections. */
printf("Start preparing batch operations\n");
okvBatchCreate(env);
...
/* All Oracle Key Vault KMIP APIs from this point will be batched */
...
printf("Executing batch operation\n");
okvBatchExecute(env);
...
/* Check for Individual Batch Operation errors */
...
printf("Ending batch operations\n\n");
okvBatchFree(env);

if (okvErrGetNum(env))
{
   printf("Error while ending the batch");
}

11.2.4 okvGetBatchOperationCount

okvGetBatchOperationCountでは、バッチ処理されたOracle Key Vault操作の数を取得します。

カテゴリ

KMIPバッチAPI

用途

okvGetBatchOperationCountでは、バッチ処理されたOracle Key Vault操作の数を取得します。

構文

ub4 okvGetBatchOperationCount(OKVEnv *env);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

戻り値

戻り値 説明
ub4

バッチ処理された操作の数。

成功: ゼロ以外の有効な正の数値が返されます。

失敗: ゼロ。

コメント

この関数は、okvBatchFreeの呼出し前に呼び出す必要があります。それ以外の場合は、ゼロが返されます。

ub4 batch_cnt = 0;

/* Set up the environment handle 'env' and also the memory and
   connection management as shown in previous sections. */
printf("\t\tStart preparing batch operations\n");
okvBatchCreate(env);
...
* All Oracle Key Vault KMIP APIs from this point will be batched */
...
printf("\t\tExecuting batch operation\n");
okvBatchExecute(env);
...
/* Check for Individual Batch Operation errors */
...
batch_cnt = okvGetBatchOperationCount(env);
printf("Count of the KMIP operations that are batched: %d", batch_cnt);

11.2.5 okvGetBatchOperationName

okvGetBatchOperationNameは、この関数で渡される個別のバッチ・ジョブ番号のKMIP操作名を返します。

カテゴリ

KMIPバッチAPI

用途

okvGetBatchOperationNameは、この関数で渡される個別のバッチ・ジョブ番号のKMIP操作名を返します。

構文

oratext *okvGetBatchOperationName(OKVEnv *env, ub1 batchjobnum);

パラメータ

パラメータ IN/OUT 説明
env

IN

Oracle Key Vault環境ハンドル。

batchjobnum IN

バッチ・ジョブ番号。

戻り値

戻り値 説明
oratext *

バッチ処理されたKMIP操作名。

成功: バッチ・ジョブ操作名へのポインタが返されます。

失敗: NULLポインタが返されます。

コメント

この関数は、okvBatchFreeの呼出し前に呼び出す必要があります。それ以外の場合は、NULLを指すポインタが返されます。

batchjobnumは、バッチ処理される操作の番号です。たとえば、ユーザーがキーを作成し、キーをアクティブ化して失効させてから破棄する場合、これらの操作はすべて同じ順序でバッチ処理されます。つまり、キーの作成のためのbatchjobnumは1、キーのアクティブ化のためのbatchjobnumは2、失効のためのbatchjobnumは3、破棄のためのbatchjobnumは4になります。

ub4 batch_cnt = 0;
ub4 batch_job_num = 0;

/* Set up the environment handle 'env' also the memory and
   connection management as shown in previous sections. */
printf("\t\tStart preparing batch operations\n");
okvBatchCreate(env);
...
/* All Oracle Key Vault KMIP APIs from this point will be batched */
...
printf("\t\tExecuting batch operation\n");
okvBatchExecute(env);
...
/* Check for Individual Batch Operation errors */
...
batch_cnt = okvGetBatchOperationCount(env);
printf("Batch Operations count is: %d\n", batch_cnt);

if (batch_cnt)
{
   for(batch_job_num=1; batch_job_num<=batch_cnt; batch_job_num++)
   {
      printf("\t\t\t%d: %s\n", batch_job_num, okvGetBatchOperationName(env, batch_job_num));
   }
}