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

OFFLOAD_PRIVATE_KEY

構造体
サイズx64: 32 バイト / x86: 20 バイト

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

フィールド

フィールドサイズx64x86説明
dwVersionDWORD4+0+0オフロード秘密鍵構造体のバージョン番号。
cbPrime1DWORD4+4+4RSA秘密鍵の素数1(P)のバイト長。
cbPrime2DWORD4+8+8RSA秘密鍵の素数2(Q)のバイト長。
pbPrime1BYTE*8/4+16+12RSA秘密鍵の素数1(P)のバイト列へのポインタ。
pbPrime2BYTE*8/4+24+16RSA秘密鍵の素数2(Q)のバイト列へのポインタ。

各言語での定義

#include <windows.h>

// OFFLOAD_PRIVATE_KEY  (x64 32 / x86 20 バイト)
typedef struct OFFLOAD_PRIVATE_KEY {
    DWORD dwVersion;
    DWORD cbPrime1;
    DWORD cbPrime2;
    BYTE* pbPrime1;
    BYTE* pbPrime2;
} OFFLOAD_PRIVATE_KEY;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OFFLOAD_PRIVATE_KEY
{
    public uint dwVersion;
    public uint cbPrime1;
    public uint cbPrime2;
    public IntPtr pbPrime1;
    public IntPtr pbPrime2;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OFFLOAD_PRIVATE_KEY
    Public dwVersion As UInteger
    Public cbPrime1 As UInteger
    Public cbPrime2 As UInteger
    Public pbPrime1 As IntPtr
    Public pbPrime2 As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class OFFLOAD_PRIVATE_KEY(ctypes.Structure):
    _fields_ = [
        ("dwVersion", wintypes.DWORD),
        ("cbPrime1", wintypes.DWORD),
        ("cbPrime2", wintypes.DWORD),
        ("pbPrime1", ctypes.c_void_p),
        ("pbPrime2", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct OFFLOAD_PRIVATE_KEY {
    pub dwVersion: u32,
    pub cbPrime1: u32,
    pub cbPrime2: u32,
    pub pbPrime1: *mut core::ffi::c_void,
    pub pbPrime2: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type OFFLOAD_PRIVATE_KEY struct {
	dwVersion uint32
	cbPrime1 uint32
	cbPrime2 uint32
	pbPrime1 uintptr
	pbPrime2 uintptr
}
type
  OFFLOAD_PRIVATE_KEY = record
    dwVersion: DWORD;
    cbPrime1: DWORD;
    cbPrime2: DWORD;
    pbPrime1: Pointer;
    pbPrime2: Pointer;
  end;
const OFFLOAD_PRIVATE_KEY = extern struct {
    dwVersion: u32,
    cbPrime1: u32,
    cbPrime2: u32,
    pbPrime1: ?*anyopaque,
    pbPrime2: ?*anyopaque,
};
type
  OFFLOAD_PRIVATE_KEY {.bycopy.} = object
    dwVersion: uint32
    cbPrime1: uint32
    cbPrime2: uint32
    pbPrime1: pointer
    pbPrime2: pointer
struct OFFLOAD_PRIVATE_KEY
{
    uint dwVersion;
    uint cbPrime1;
    uint cbPrime2;
    void* pbPrime1;
    void* pbPrime2;
}

HSP用 定義

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

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

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