Win32 API 日本語リファレンス
ホームSecurity.Cryptography › CLMD_PIV_GENERATE_ASYMMETRIC_KEY

CLMD_PIV_GENERATE_ASYMMETRIC_KEY

構造体
サイズx64: 24 バイト / x86: 16 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dwVersionDWORD4+0+0PIV非対称鍵生成構造体のバージョン番号。
bAlgorithmIdBYTE1+4+4鍵生成に用いるアルゴリズム識別子。
bKeyIdBYTE1+5+5生成する鍵の識別子。
pbKeyBYTE*8/4+8+8生成された鍵データへのポインタ。
cbKeyDWORD4+16+12鍵データのバイト長。

各言語での定義

#include <windows.h>

// CLMD_PIV_GENERATE_ASYMMETRIC_KEY  (x64 24 / x86 16 バイト)
typedef struct CLMD_PIV_GENERATE_ASYMMETRIC_KEY {
    DWORD dwVersion;
    BYTE bAlgorithmId;
    BYTE bKeyId;
    BYTE* pbKey;
    DWORD cbKey;
} CLMD_PIV_GENERATE_ASYMMETRIC_KEY;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CLMD_PIV_GENERATE_ASYMMETRIC_KEY
{
    public uint dwVersion;
    public byte bAlgorithmId;
    public byte bKeyId;
    public IntPtr pbKey;
    public uint cbKey;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CLMD_PIV_GENERATE_ASYMMETRIC_KEY
    Public dwVersion As UInteger
    Public bAlgorithmId As Byte
    Public bKeyId As Byte
    Public pbKey As IntPtr
    Public cbKey As UInteger
End Structure
import ctypes
from ctypes import wintypes

class CLMD_PIV_GENERATE_ASYMMETRIC_KEY(ctypes.Structure):
    _fields_ = [
        ("dwVersion", wintypes.DWORD),
        ("bAlgorithmId", ctypes.c_ubyte),
        ("bKeyId", ctypes.c_ubyte),
        ("pbKey", ctypes.c_void_p),
        ("cbKey", wintypes.DWORD),
    ]
#[repr(C)]
pub struct CLMD_PIV_GENERATE_ASYMMETRIC_KEY {
    pub dwVersion: u32,
    pub bAlgorithmId: u8,
    pub bKeyId: u8,
    pub pbKey: *mut core::ffi::c_void,
    pub cbKey: u32,
}
import "golang.org/x/sys/windows"

type CLMD_PIV_GENERATE_ASYMMETRIC_KEY struct {
	dwVersion uint32
	bAlgorithmId byte
	bKeyId byte
	pbKey uintptr
	cbKey uint32
}
type
  CLMD_PIV_GENERATE_ASYMMETRIC_KEY = record
    dwVersion: DWORD;
    bAlgorithmId: Byte;
    bKeyId: Byte;
    pbKey: Pointer;
    cbKey: DWORD;
  end;
const CLMD_PIV_GENERATE_ASYMMETRIC_KEY = extern struct {
    dwVersion: u32,
    bAlgorithmId: u8,
    bKeyId: u8,
    pbKey: ?*anyopaque,
    cbKey: u32,
};
type
  CLMD_PIV_GENERATE_ASYMMETRIC_KEY {.bycopy.} = object
    dwVersion: uint32
    bAlgorithmId: uint8
    bKeyId: uint8
    pbKey: pointer
    cbKey: uint32
struct CLMD_PIV_GENERATE_ASYMMETRIC_KEY
{
    uint dwVersion;
    ubyte bAlgorithmId;
    ubyte bKeyId;
    void* pbKey;
    uint cbKey;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CLMD_PIV_GENERATE_ASYMMETRIC_KEY サイズ: 16 バイト(x86)
dim st, 4    ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; bAlgorithmId : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; bKeyId : BYTE (+5, 1byte)  poke st,5,値  /  値 = peek(st,5)
; pbKey : BYTE* (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cbKey : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CLMD_PIV_GENERATE_ASYMMETRIC_KEY サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; bAlgorithmId : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; bKeyId : BYTE (+5, 1byte)  poke st,5,値  /  値 = peek(st,5)
; pbKey : BYTE* (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; cbKey : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CLMD_PIV_GENERATE_ASYMMETRIC_KEY
    #field int dwVersion
    #field byte bAlgorithmId
    #field byte bKeyId
    #field intptr pbKey
    #field int cbKey
#endstruct

stdim st, CLMD_PIV_GENERATE_ASYMMETRIC_KEY        ; NSTRUCT 変数を確保
st->dwVersion = 100
mes "dwVersion=" + st->dwVersion