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

BCRYPT_ECC_PARAMETER_HEADER

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

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

フィールド

フィールドサイズx64x86説明
dwVersionDWORD4+0+0ECCパラメータ構造体のバージョン番号。
dwCurveTypeECC_CURVE_TYPE_ENUM4+4+4楕円曲線の種別を示す列挙値。
dwCurveGenerationAlgIdECC_CURVE_ALG_ID_ENUM4+8+8曲線生成アルゴリズム識別子の列挙値。
cbFieldLengthDWORD4+12+12有限体要素のバイト長。
cbSubgroupOrderDWORD4+16+16部分群の位数のバイト長。
cbCofactorDWORD4+20+20余因子(cofactor)のバイト長。
cbSeedDWORD4+24+24曲線生成シードのバイト長。

各言語での定義

#include <windows.h>

// BCRYPT_ECC_PARAMETER_HEADER  (x64 28 / x86 28 バイト)
typedef struct BCRYPT_ECC_PARAMETER_HEADER {
    DWORD dwVersion;
    ECC_CURVE_TYPE_ENUM dwCurveType;
    ECC_CURVE_ALG_ID_ENUM dwCurveGenerationAlgId;
    DWORD cbFieldLength;
    DWORD cbSubgroupOrder;
    DWORD cbCofactor;
    DWORD cbSeed;
} BCRYPT_ECC_PARAMETER_HEADER;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct BCRYPT_ECC_PARAMETER_HEADER
{
    public uint dwVersion;
    public int dwCurveType;
    public int dwCurveGenerationAlgId;
    public uint cbFieldLength;
    public uint cbSubgroupOrder;
    public uint cbCofactor;
    public uint cbSeed;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure BCRYPT_ECC_PARAMETER_HEADER
    Public dwVersion As UInteger
    Public dwCurveType As Integer
    Public dwCurveGenerationAlgId As Integer
    Public cbFieldLength As UInteger
    Public cbSubgroupOrder As UInteger
    Public cbCofactor As UInteger
    Public cbSeed As UInteger
End Structure
import ctypes
from ctypes import wintypes

class BCRYPT_ECC_PARAMETER_HEADER(ctypes.Structure):
    _fields_ = [
        ("dwVersion", wintypes.DWORD),
        ("dwCurveType", ctypes.c_int),
        ("dwCurveGenerationAlgId", ctypes.c_int),
        ("cbFieldLength", wintypes.DWORD),
        ("cbSubgroupOrder", wintypes.DWORD),
        ("cbCofactor", wintypes.DWORD),
        ("cbSeed", wintypes.DWORD),
    ]
#[repr(C)]
pub struct BCRYPT_ECC_PARAMETER_HEADER {
    pub dwVersion: u32,
    pub dwCurveType: i32,
    pub dwCurveGenerationAlgId: i32,
    pub cbFieldLength: u32,
    pub cbSubgroupOrder: u32,
    pub cbCofactor: u32,
    pub cbSeed: u32,
}
import "golang.org/x/sys/windows"

type BCRYPT_ECC_PARAMETER_HEADER struct {
	dwVersion uint32
	dwCurveType int32
	dwCurveGenerationAlgId int32
	cbFieldLength uint32
	cbSubgroupOrder uint32
	cbCofactor uint32
	cbSeed uint32
}
type
  BCRYPT_ECC_PARAMETER_HEADER = record
    dwVersion: DWORD;
    dwCurveType: Integer;
    dwCurveGenerationAlgId: Integer;
    cbFieldLength: DWORD;
    cbSubgroupOrder: DWORD;
    cbCofactor: DWORD;
    cbSeed: DWORD;
  end;
const BCRYPT_ECC_PARAMETER_HEADER = extern struct {
    dwVersion: u32,
    dwCurveType: i32,
    dwCurveGenerationAlgId: i32,
    cbFieldLength: u32,
    cbSubgroupOrder: u32,
    cbCofactor: u32,
    cbSeed: u32,
};
type
  BCRYPT_ECC_PARAMETER_HEADER {.bycopy.} = object
    dwVersion: uint32
    dwCurveType: int32
    dwCurveGenerationAlgId: int32
    cbFieldLength: uint32
    cbSubgroupOrder: uint32
    cbCofactor: uint32
    cbSeed: uint32
struct BCRYPT_ECC_PARAMETER_HEADER
{
    uint dwVersion;
    int dwCurveType;
    int dwCurveGenerationAlgId;
    uint cbFieldLength;
    uint cbSubgroupOrder;
    uint cbCofactor;
    uint cbSeed;
}

HSP用 定義

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

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

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