6 Oracle Key Vaultのデータ型と構造体

この項では、Oracle Key Vaultのデータ型と構造体について説明します。

6.1 Oracle Key Vaultのデータ型

この項では、Oracle Key Vault SDKで提供されるデータ型について説明します。

Oracle Key VaultクライアントSDKでは、Oracle Key VaultクライアントSDK全体で使用するCデータ型のセットが定義されています。こうした定義は、okvcsdk.hのインクルード時にエンドポイント・プログラムで使用できるようになります。次の表に、データ型とその説明を示します。

表6-1 Oracle Key Vaultのデータ型

データ型 説明
ub1 1バイト以上の符号なしバイト。
sb1 1バイト以上の符号付きバイト。
ub2 2バイト以上の符号なしバイト。
sb2 2バイト以上の符号付きバイト。
ub4 4バイト以上の符号なしバイト。
sb4 4バイト以上の符号付きバイト。
ub8 8バイト以上の符号なしバイト。
sb8 8バイト以上の符号付きバイト。
OKVErrNo ub4と同じです。
OKVTag ub4と同じです。
OKVType ub1と同じです。
oratext サイズ1バイトの文字バイト。

6.2 Oracle Key Vaultの構造体と列挙型

この項では、Oracle Key Vault SDKで提供される構造体と列挙型について説明します。

6.2.1 OKVAttr

OKVAttrは、KMIP仕様でサポートされているすべてのKMIP属性(単一インスタンス属性または複数インスタンス属性)のコレクションを保持します。

マルチインスタンス属性には、マルチインスタンス属性の数を保持するためのフィールドもあります。テキスト文字列およびバイト列がある属性は、その値のポインタに関連付けられた長さを保持します。

定義

/* Client SDK collection of attribtues */
struct OKVAttr
{
  struct
  {
    oratext *id;
    ub4      idl;
  } unique_identifier;
  ub4      name_count;
  struct
  {
    oratext *name;
    ub4      namel;
    ub4      type;
  } name[OKV_MAX_ATTR_INSTANCES];
  OKVObjNo object_type;
  ub4 crypto_algorithm;
  ub4 crypto_length;
  ub4 crypto_parameters_count;
  struct
  {
    ub4 block_cipher_mode;
    ub4 padding_method;
    ub4 hashing_algorithm;
    ub4 key_role_type;
  } crypto_parameters[OKV_MAX_ATTR_INSTANCES];
  ub4 cert_type;
  ub4 cert_length;
  struct
  {
    ub1 *issuer;
    ub4  issuerl;
    ub1 *serial_number;
    ub4  serial_numberl;
  } X509_cert_identifier;
  struct
  {
    ub1 *distinguished_name;
    ub4  distinguished_namel;
    ub4  alternative_name_count;
    struct
    {
      ub1 *name;
      ub4  namel;
    } alternative_name[OKV_MAX_ALTERNATE_NAMES];
  } X509_cert_subject;
  struct
  {
    ub1 *distinguished_name;
    ub4  distinguished_namel;
    ub4  alternative_name_count;
    struct
    {
      ub1 *name;
      ub4  namel;
    } alternative_name[OKV_MAX_ALTERNATE_NAMES];
  } X509_cert_issuer;
  ub4 digital_signature_algorithm_count;
  ub4 digital_signature_algorithm[OKV_MAX_ATTR_INSTANCES];
  ub4 digest_count;
  struct
  {
    ub4  hashing_algorithm;
    ub4  key_format_type;
    ub1 *digest_value;
    ub4  digest_valuel;
  } digest[OKV_MAX_ATTR_INSTANCES];
  ub4 crypto_usage_mask;
  ub4 lease_time;
  struct
  {
    ub8 total;
    ub8 count;
    ub4 unit;
  } usage_limits;
  ub4 state;
  ub8 initial_date;
  ub8 activation_date;
  ub8 process_start_date;
  ub8 protect_stop_date;
  ub8 deactivation_date;
  ub8 destroy_date;
  ub8 compromise_occurrence_date;
  ub8 compromise_date;
  struct
  {
    ub4 reason_code;
    oratext *message;
    ub4      messagel;
  } revocation_reason;
  ub8 archive_date;
  ub8 fresh;
  ub4 link_count;
  struct
  {
    ub4 type;
    oratext *linked_object_identifier;
    ub4      linked_object_identifierl;
  } link[OKV_MAX_ATTR_INSTANCES];
  ub8 last_change_date;
  ub8 extractable;
  ub8 never_extractable;

  /* Un-Supported Attributes * /

    Crypto Domain Parameters
    Cert_Identifier
    Cert_Subject
    Cert_Issuer
    Object_Group[]
    Contact_Information
    Application_Specific_Information[]
    Operation_Policy_Name
  */
};
typedef struct OKVAttr OKVAttr;

6.2.2 OKVAttrNo

OKVAttrNoでは、KMIP属性の数としてのOKVATTRMAXとKMIP属性を定義します。

定義

/* KMIP Attributes */
typedef enum
{
  OKVAttrNone = 0,
  OKVAttrUniqueId,
  OKVAttrName,
  OKVAttrObjType,
  OKVAttrCryptoAlg,
  OKVAttrCryptoLen,
  OKVAttrCryptoParams,
  OKVAttrCryptoDomainParams,
  OKVAttrCertType,
  OKVAttrCertLength,
  OKVAttrX509CertId,
  OKVAttrX509CertSubject,
  OKVAttrX509CertIssuer,
  OKVAttrCertId,
  OKVAttrCertSubject,
  OKVAttrCertIssuer,
  OKVAttrDigitalSignAlgo,
  OKVAttrDigest,
  OKVAttrOpsPolicyName,
  OKVAttrCryptoUsageMask,
  OKVAttrLeaseTime,
  OKVAttrUsageLimits,
  OKVAttrState,
  OKVAttrInitialDate,
  OKVAttrActivationDate,
  OKVAttrProcessStartDate,
  OKVAttrProtectStopDate,
  OKVAttrDeactivationDate,
  OKVAttrDestroyDate,
  OKVAttrCompromiseOccurrenceDate,
  OKVAttrCompromiseDate,
  OKVAttrRevocationReason,
  OKVAttrArchiveDate,
  OKVAttrObjectGroup,
  OKVAttrFresh,
  OKVAttrLink,
  OKVAttrAppSpecificInfo,
  OKVAttrContactInfo,
  OKVAttrLastChangeDate,
  OKVAttrExtractable,
  OKVAttrNeverExtractable,
  OKVAttrInvalid = 255
} OKVAttrNo;
#define OKVATTRMAX 42

6.2.3 OKVCryptoContext

OKVCryptoContextは、暗号操作に必要なパラメータを保持します。

定義

/* Crypto Context */
struct OKVCryptoContext
{
  OKVOpsNo crypto_operation;
  ub4 block_cipher_mode;
  ub4 padding;
  ub8 random_iv;
  ub1 *iv;
  ub4 ivl;
  ub1 *auth_encryption_additional_data;
  ub4 auth_encryption_additional_datal;
  ub1 *auth_encryption_tag;
  ub4 auth_encryption_tagl;
};
typedef struct OKVCryptoContext OKVCryptoContext;

パラメータ

パラメータ 説明

crypto_operation

暗号操作のタイプ。

block_cipher_mode

ブロック暗号モードの値。

padding

パディングの値。

random_iv

ランダムなIVの値。

iv

IVの値。

ivl

IVの値の長さ。

auth_encryption_additional_data

認証済暗号化の追加データ値。

auth_encryption_additional_datal

認証済暗号化の追加データ値の長さ。

auth_encryption_tag

認証済暗号化のタグの値。

auth_encryption_tagl

認証済暗号化のタグの値の長さ。

6.2.4 OKVDecryptResponse

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

定義

struct OKVDecryptResponse {
  ub1 *decrypted_data;
  ub4 decrypted_datal;
};
typedef struct OKVDecryptResponse OKVDecryptResponse;

パラメータ

パラメータ 説明

decrypted_data

復号化されたデータ値。

decrypted_datal

復号化されたデータ値の長さ。

6.2.5 OKVEncryptResponse

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

定義

struct OKVEncryptResponse {
  ub1 *encrypted_data;
  ub4 encrypted_datal;
  ub1 *iv;
  ub4 ivl;
  ub1 *auth_encryption_tag;
  ub4 auth_encryption_tagl;
};
typedef struct OKVEncryptResponse OKVEncryptResponse;

パラメータ

パラメータ 説明

encrypted_data

暗号化されたデータ値。

encrypted_datal

暗号化されたデータ値の長さ。

iv

IVの値。

ivl

IVの値の長さ。

auth_encryption_tag

認証済暗号化のタグの値。

auth_encryption_tagl

認証済暗号化のタグの値の長さ。

6.2.6 OKVEnv

OKVEnvは、エンドポイントSDKプログラムの動作を制御するOracle Key Vault環境ハンドルです。

OKVEnvは、エンドポイントSDKプログラムで使用するサービス・プロバイダ・インタフェース(SPI)ハンドルと、Oracle Key Vault関数のリクエストと結果のOKVTTLVオブジェクトも保持します。

定義

/* Oracle Key Vault Environment */
struct OKVEnv
{
   OKVConnCtx      *conn_spi;
   OKVMemoryCtx    *mem_spi;
   OKVParseCtx     *parse_spi;
   ub4              flag;
   #define OKVENV_CONN_SETUP  0x00000001
   #define OKVENV_BATCH_MODE  0x00000002
   #define OKVENV_CONN_SPI    0x00000004
   #define OKVENV_NATCONN_SPI 0x00000008
   #define OKVENV_MEM_SPI     0x00000010
   #define OKVENV_NATMEM_SPI  0x00000020
   #define OKVENV_PACK_XML    0x00000040
   OKVTTLV         *request_obj;
   OKVTTLV         *result_obj;
   OKVErr          *err;
   OKVTrcCtx       *trc_ctx;
   ub4              batch_cnt;
   OKVBatchCtx    **batch;
   ub4              batch_err_ctx_cnt;
   OKVBatchErrCtx **batch_err_ctx;
};
typedef struct OKVEnv OKVEnv;

パラメータ

パラメータ 説明

conn_spi

接続管理SPIのハンドルを格納します。エンドポイント・プログラムで指定していない場合は、ネイティブの接続管理のハンドルを格納します。

mem_spi

メモリー管理SPIのハンドルを格納します。エンドポイント・プログラムで指定していない場合は、ネイティブのメモリー管理のハンドルを格納します。

parse_spi

解析管理のコンテキストを格納します。OKVTTLVオブジェクトのシリアライズはOracle Key VaultクライアントSDKの内部で実行されるため、parse_spiは内部的にのみ設定および設定解除されます。KMIP v1.1では、通常のTTLVパッキングまたはXMLスタイルのパッキングを保持できます。最初のバージョンのOracle Key VaultクライアントSDKでは、TTLVパッキングがサポートされています。

flag

Oracle Key VaultクライアントSDKプログラムの動作を制御します。ほとんどのフラグは自明的です。

request_obj

引数にOKVTTLVオブジェクトがあるOracle Key Vault API関数の場合は、そのオブジェクトを事前に作成しておきます。このオブジェクトに割り当てられたメモリーは、request_objによってポイントされます。

result_obj

OKVTTLVオブジェクトを返すOracle Key Vault API関数の場合は、コールの完了後(Oracle Key Vault API関数のメモリーがクリーン・アップされた後)に、EndPointプログラムでオブジェクトを解釈する必要があります。OKVTTLVオブジェクトのメモリーは、Oracle Key Vault関数コール時に消去されず、result_objによってポイントされています。

err

Oracle Key Vault操作のエラーを取得するエラー・ハンドルです。特定の操作に対して複数のエラーが報告されることがあります。そうしたエラーは、エラー・スタックに取得されます。

trc_ctx

トレース管理のハンドルを格納します。

batch_cnt

バッチ操作の数です。

batch

バッチ操作と結果用プレースホルダの配列です。

batch_err_ctx_cnt

バッチ・エラー・コンテキストの数です。

batch_err_ctx

バッチ・エラー・コンテキストには、Oracle Key Vault操作名やその操作に関連するエラー(ある場合)などの情報が保持されます。

6.2.7 OKVErr

OKVErrは、Oracle Key Vault操作のエラーを取得するOracle Key Vaultエラー管理ハンドルです。

特定の操作に対して複数のエラーが報告されることがあります。そうしたエラーは、エラー・スタックに取得されます。

定義

/* Oracle Key Vault Error Management */
struct OKVErr
{
   #define OKVERR_CNT 100
   ub1 err_cnt;
   ub4 err_stack[OKVERR_CNT];
};
typedef struct OKVErr OKVErr;

パラメータ

パラメータ 説明
err_cnt

エラー・スタック内のエラー数。エラー・スタックの深さを示します。

err_stack

取得されたエラー番号のスタック。

6.2.8 OKVMemoryCtx

OKVMemoryCtxは、エンドポイント定義のメモリー関数に対するメモリー・コンテキストとポインタを保持するOracle Key Vaultメモリー管理コンテキストです。

また、エンドポイント・プログラムによって提供される関数のmallocreallocおよびfreeへのポインタも保持します。

定義

/* Memory Function Context */
struct OKVMemoryCtx
{
   void     *ctx;                                                /* Context */
   void *  (*okvMalloc)(void *ctx, size_t size);                 /* Malloc */
   void *  (*okvRealloc)(void *ctx, void **ptr, size_t size);    /* Realloc */
   void    (*okvFree)(void *ctx, void **ptr);                    /* Free */
};
typedef struct OKVMemoryCtx OKVMemoryCtx;

パラメータ

パラメータ 説明
ctx エンドポイント・プログラム定義のメモリー・コンテキスト。

okvMalloc

エンドポイント・プログラム定義のメモリー割当て関数へのポインタです。この関数では、割り当てたメモリーをクリア(割り当てたすべてのバイトをゼロに設定)する必要があります。

okvRealloc

以前に割り当てていてデータが移入されている可能性のあるメモリーのサイズを再割当てするエンドポイント・プログラム定義関数へのポインタです。

okvFree

okvMallocまたはokvReallocを使用して割り当てたメモリーを解放するエンドポイント・プログラム定義関数へのポインタです。このポインタは、解放後にNULLに設定する必要があります。

6.2.9 OKVObjNo

OKVObjNoでは、KMIP管理対象オブジェクトのタイプの最大可能数としてのOKVOBJMAXとKMIP管理対象オブジェクトのタイプを定義します。

定義

/* OKV KMIP Managed Objects */
typedef enum
{
   OKVObjNone = 0,          /* No Object Type */
   OKVObjCert = 1,          /* Certificate */
   OKVObjSymmetric,         /* Symmetric Key */
   OKVObjPublic,            /* Public Key */
   OKVObjPrivate,           /* Private Key */
   OKVObjTemplate = 6,      /* Template */
   OKVObjSecret,            /* Secret Data */
   OKVObjOpaque             /* Opaque Object */
} OKVObjNo;
#define OKVOBJMAX          8

6.2.10 OKVOps

OKVOpsは、Oracle Key Vault操作ハンドルです。

定義

/* Oracle Key Vault KMIP Operation */
struct OKVOps
{
  OKVOpsNo      ops;
  OKVErr        err;
  OKVTTLV       *item;
  OKVTTLV       *req;
  ub4           res;
  OKVTTLV       *resp;
  OKVErr        *errb;
};
typedef struct OKVOps OKVOps;

OKVOpsは、特定のOracle Key Vault KMIP操作と操作の結果(成功または失敗)のためのリクエストおよびレスポンスOKVTTLV構造体を取得します。

パラメータ

パラメータ 説明

ops

このOracle Key Vault操作ハンドルに関連付けられたKMIP操作。

err

バッチ操作用のエラー・ハンドル。

item このKMIP操作のバッチ項目。
req

KMIPリクエストOKVTTLVオブジェクト。

res

KMIP操作の結果。

resp

KMIPレスポンスOKVTTLVオブジェクト。

errb

バッチ操作用のエラー・ハンドルのポインタ。

6.2.11 OKVOpsNo

OKVOpsNoでは、KMIP操作の最大可能数としてのOKVOPSMAXとKMIP操作を定義します。

定義

/* KMIP Operations */
typedef enum
{
  OKVOpNone = 0,            /* Wrong Operation */
  OKVOpCreate = 1,          /* Create */
  OKVOpCreateKeyPair,
  OKVOpRegister,            /* Register */
  OKVOpRekey,               /* Rekey */
  OKVOpDeriveKey,
  OKVOpCertify,
  OKVOpRecertify,
  OKVOpLocate,              /* Locate */
  OKVOpCheck,               /* Check */
  OKVOpGet,                 /* Get */
  OKVOpGetAttributes,       /* Get Attributes */
  OKVOpGetAttributeList,    /* Get Attribute List */
  OKVOpAddAttribute,        /* Add Attribute */
  OKVOpModifyAttribute,     /* Modify Attribute */
  OKVOpDeleteAttribute,     /* Delete Attribute */
  OKVOpObtainLease,
  OKVOpGetUsageAllocation,
  OKVOpActivate,            /* Activate */
  OKVOpRevoke,              /* Revoke */
  OKVOpDestroy,             /* Destroy */
  OKVOpArchive,
  OKVOpRecover,
  OKVOpValidate,
  OKVOpQuery,               /* Query */
  OKVOpCancel,
  OKVOpPoll,
  OKVOpNotify,
  OKVOpPut,
  OKVOpRekeyKeyPair,
  OKVOpDiscoverVersions,    /* Discover Versions */
  OKVOpEncrypt,             /* Encrypt */
  OKVOpDecrypt,             /* Decrypt */
} OKVOpsNo;
#define OKVOPSMAX 32

6.2.12 OKVServerInformation

OKVServerInformationは、Oracle Key Vault問合せ操作に対してOracle Key Vaultサーバーから返されるOracle Key Vault固有の情報です。

定義

struct OKVServerInformation
{
   oratext server_name[30];
   oratext server_version[30];
};
typedef struct OKVServerInformation OKVServerInformation;

パラメータ

パラメータ 説明

server_name

エンドポイント・プログラムがOracle Key Vaultサーバーと通信する場合は、ORACLE KEYVAULT SERVERにする必要があります。

server_version

エンドポイント・プログラムが通信するOracle Key Vaultサーバーのバージョン。

6.2.13 OKVTTLV

OKVTTLVでは、TTLVオブジェクトのOracle Key Vault構造体を定義します。

定義

/* Oracle Key Vault KMIP TTLV Structure */
struct OKVTTLV
{
   OKVTag    tag;
   OKVType   typ;
   ub4       len;
   ub1      *val;
   ub4       ttlv_array_cnt;
   OKVTTLV **ttlv_array;
};
typedef struct OKVTTLV OKVTTLV;

パラメータ

パラメータ 説明

tag

TTLVオブジェクトのタグ値。

typ

TTLVオブジェクトのタイプ値。

len

TTLVオブジェクトの値の長さ。

val

TTLVオブジェクトの値。

ttlv_array_cnt

このTTLVオブジェクトの子TTLVオブジェクトの数。

ttlv_array

このTTLVオブジェクトの子TTLVオブジェクトの配列。