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

BCRYPT_ECCFULLKEY_BLOB

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

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

フィールド

フィールドサイズx64x86説明
dwMagicDWORD4+0+0ECCフル鍵BLOBの種別を示すマジック値。
dwVersionDWORD4+4+4このBLOB形式のバージョン番号。
dwCurveTypeECC_CURVE_TYPE_ENUM4+8+8曲線の種別を示すECC_CURVE_TYPE_ENUM値。
dwCurveGenerationAlgIdECC_CURVE_ALG_ID_ENUM4+12+12曲線パラメーター生成アルゴリズムを示す列挙値。
cbFieldLengthDWORD4+16+16有限体要素のバイト長。
cbSubgroupOrderDWORD4+20+20サブグループ位数のバイト長。
cbCofactorDWORD4+24+24余因子(cofactor)のバイト長。
cbSeedDWORD4+28+28曲線生成に使用したシードのバイト長。

各言語での定義

#include <windows.h>

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

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct BCRYPT_ECCFULLKEY_BLOB
{
    public uint dwMagic;
    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_ECCFULLKEY_BLOB
    Public dwMagic As UInteger
    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_ECCFULLKEY_BLOB(ctypes.Structure):
    _fields_ = [
        ("dwMagic", wintypes.DWORD),
        ("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_ECCFULLKEY_BLOB {
    pub dwMagic: u32,
    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_ECCFULLKEY_BLOB struct {
	dwMagic uint32
	dwVersion uint32
	dwCurveType int32
	dwCurveGenerationAlgId int32
	cbFieldLength uint32
	cbSubgroupOrder uint32
	cbCofactor uint32
	cbSeed uint32
}
type
  BCRYPT_ECCFULLKEY_BLOB = record
    dwMagic: DWORD;
    dwVersion: DWORD;
    dwCurveType: Integer;
    dwCurveGenerationAlgId: Integer;
    cbFieldLength: DWORD;
    cbSubgroupOrder: DWORD;
    cbCofactor: DWORD;
    cbSeed: DWORD;
  end;
const BCRYPT_ECCFULLKEY_BLOB = extern struct {
    dwMagic: u32,
    dwVersion: u32,
    dwCurveType: i32,
    dwCurveGenerationAlgId: i32,
    cbFieldLength: u32,
    cbSubgroupOrder: u32,
    cbCofactor: u32,
    cbSeed: u32,
};
type
  BCRYPT_ECCFULLKEY_BLOB {.bycopy.} = object
    dwMagic: uint32
    dwVersion: uint32
    dwCurveType: int32
    dwCurveGenerationAlgId: int32
    cbFieldLength: uint32
    cbSubgroupOrder: uint32
    cbCofactor: uint32
    cbSeed: uint32
struct BCRYPT_ECCFULLKEY_BLOB
{
    uint dwMagic;
    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_ECCFULLKEY_BLOB サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; dwMagic : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwVersion : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwCurveType : ECC_CURVE_TYPE_ENUM (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwCurveGenerationAlgId : ECC_CURVE_ALG_ID_ENUM (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; cbFieldLength : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; cbSubgroupOrder : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; cbCofactor : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; cbSeed : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global BCRYPT_ECCFULLKEY_BLOB
    #field int dwMagic
    #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_ECCFULLKEY_BLOB        ; NSTRUCT 変数を確保
st->dwMagic = 100
mes "dwMagic=" + st->dwMagic