ホーム › Security.Cryptography › CARD_DERIVE_KEY
CARD_DERIVE_KEY
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwVersion | DWORD | 4 | +0 | +0 | 鍵導出情報構造体のバージョン番号。 |
| dwFlags | DWORD | 4 | +4 | +4 | 鍵導出処理の動作を制御するフラグ。 |
| pwszKDF | LPWSTR | 8/4 | +8 | +8 | 使用する鍵導出関数(KDF)名のワイド文字列。 |
| bSecretAgreementIndex | BYTE | 1 | +16 | +12 | 導出元となる共有秘密のインデックス。 |
| pParameterList | void* | 8/4 | +24 | +16 | KDFパラメータリストへのポインタ。NULL可。 |
| pbDerivedKey | BYTE* | 8/4 | +32 | +20 | 導出された鍵データへのポインタ。 |
| cbDerivedKey | DWORD | 4 | +40 | +24 | 導出された鍵のバイト長。 |
| pwszAlgId | LPWSTR | 8/4 | +48 | +28 | 導出鍵のアルゴリズム識別子ワイド文字列。NULL可。 |
| dwKeyLen | DWORD | 4 | +56 | +32 | 導出する鍵の長さ。 |
| hKey | UINT_PTR | 8/4 | +64 | +36 | 導出鍵のハンドル。 |
各言語での定義
#include <windows.h>
// CARD_DERIVE_KEY (x64 72 / x86 40 バイト)
typedef struct CARD_DERIVE_KEY {
DWORD dwVersion;
DWORD dwFlags;
LPWSTR pwszKDF;
BYTE bSecretAgreementIndex;
void* pParameterList;
BYTE* pbDerivedKey;
DWORD cbDerivedKey;
LPWSTR pwszAlgId;
DWORD dwKeyLen;
UINT_PTR hKey;
} CARD_DERIVE_KEY;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CARD_DERIVE_KEY
{
public uint dwVersion;
public uint dwFlags;
public IntPtr pwszKDF;
public byte bSecretAgreementIndex;
public IntPtr pParameterList;
public IntPtr pbDerivedKey;
public uint cbDerivedKey;
public IntPtr pwszAlgId;
public uint dwKeyLen;
public UIntPtr hKey;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CARD_DERIVE_KEY
Public dwVersion As UInteger
Public dwFlags As UInteger
Public pwszKDF As IntPtr
Public bSecretAgreementIndex As Byte
Public pParameterList As IntPtr
Public pbDerivedKey As IntPtr
Public cbDerivedKey As UInteger
Public pwszAlgId As IntPtr
Public dwKeyLen As UInteger
Public hKey As UIntPtr
End Structureimport ctypes
from ctypes import wintypes
class CARD_DERIVE_KEY(ctypes.Structure):
_fields_ = [
("dwVersion", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("pwszKDF", ctypes.c_void_p),
("bSecretAgreementIndex", ctypes.c_ubyte),
("pParameterList", ctypes.c_void_p),
("pbDerivedKey", ctypes.c_void_p),
("cbDerivedKey", wintypes.DWORD),
("pwszAlgId", ctypes.c_void_p),
("dwKeyLen", wintypes.DWORD),
("hKey", ctypes.c_size_t),
]#[repr(C)]
pub struct CARD_DERIVE_KEY {
pub dwVersion: u32,
pub dwFlags: u32,
pub pwszKDF: *mut core::ffi::c_void,
pub bSecretAgreementIndex: u8,
pub pParameterList: *mut core::ffi::c_void,
pub pbDerivedKey: *mut core::ffi::c_void,
pub cbDerivedKey: u32,
pub pwszAlgId: *mut core::ffi::c_void,
pub dwKeyLen: u32,
pub hKey: usize,
}import "golang.org/x/sys/windows"
type CARD_DERIVE_KEY struct {
dwVersion uint32
dwFlags uint32
pwszKDF uintptr
bSecretAgreementIndex byte
pParameterList uintptr
pbDerivedKey uintptr
cbDerivedKey uint32
pwszAlgId uintptr
dwKeyLen uint32
hKey uintptr
}type
CARD_DERIVE_KEY = record
dwVersion: DWORD;
dwFlags: DWORD;
pwszKDF: Pointer;
bSecretAgreementIndex: Byte;
pParameterList: Pointer;
pbDerivedKey: Pointer;
cbDerivedKey: DWORD;
pwszAlgId: Pointer;
dwKeyLen: DWORD;
hKey: NativeUInt;
end;const CARD_DERIVE_KEY = extern struct {
dwVersion: u32,
dwFlags: u32,
pwszKDF: ?*anyopaque,
bSecretAgreementIndex: u8,
pParameterList: ?*anyopaque,
pbDerivedKey: ?*anyopaque,
cbDerivedKey: u32,
pwszAlgId: ?*anyopaque,
dwKeyLen: u32,
hKey: usize,
};type
CARD_DERIVE_KEY {.bycopy.} = object
dwVersion: uint32
dwFlags: uint32
pwszKDF: pointer
bSecretAgreementIndex: uint8
pParameterList: pointer
pbDerivedKey: pointer
cbDerivedKey: uint32
pwszAlgId: pointer
dwKeyLen: uint32
hKey: uintstruct CARD_DERIVE_KEY
{
uint dwVersion;
uint dwFlags;
void* pwszKDF;
ubyte bSecretAgreementIndex;
void* pParameterList;
void* pbDerivedKey;
uint cbDerivedKey;
void* pwszAlgId;
uint dwKeyLen;
size_t hKey;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CARD_DERIVE_KEY サイズ: 40 バイト(x86)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pwszKDF : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; bSecretAgreementIndex : BYTE (+12, 1byte) poke st,12,値 / 値 = peek(st,12)
; pParameterList : void* (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pbDerivedKey : BYTE* (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; cbDerivedKey : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; pwszAlgId : LPWSTR (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwKeyLen : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; hKey : UINT_PTR (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CARD_DERIVE_KEY サイズ: 72 バイト(x64)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pwszKDF : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; bSecretAgreementIndex : BYTE (+16, 1byte) poke st,16,値 / 値 = peek(st,16)
; pParameterList : void* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pbDerivedKey : BYTE* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; cbDerivedKey : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; pwszAlgId : LPWSTR (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; dwKeyLen : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; hKey : UINT_PTR (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CARD_DERIVE_KEY
#field int dwVersion
#field int dwFlags
#field intptr pwszKDF
#field byte bSecretAgreementIndex
#field intptr pParameterList
#field intptr pbDerivedKey
#field int cbDerivedKey
#field intptr pwszAlgId
#field int dwKeyLen
#field intptr hKey
#endstruct
stdim st, CARD_DERIVE_KEY ; NSTRUCT 変数を確保
st->dwVersion = 100
mes "dwVersion=" + st->dwVersion