ホーム › Security.Cryptography › BCRYPT_ECC_PARAMETER_HEADER
BCRYPT_ECC_PARAMETER_HEADER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwVersion | DWORD | 4 | +0 | +0 | ECCパラメータ構造体のバージョン番号。 |
| dwCurveType | ECC_CURVE_TYPE_ENUM | 4 | +4 | +4 | 楕円曲線の種別を示す列挙値。 |
| dwCurveGenerationAlgId | ECC_CURVE_ALG_ID_ENUM | 4 | +8 | +8 | 曲線生成アルゴリズム識別子の列挙値。 |
| cbFieldLength | DWORD | 4 | +12 | +12 | 有限体要素のバイト長。 |
| cbSubgroupOrder | DWORD | 4 | +16 | +16 | 部分群の位数のバイト長。 |
| cbCofactor | DWORD | 4 | +20 | +20 | 余因子(cofactor)のバイト長。 |
| cbSeed | DWORD | 4 | +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 Structureimport 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: uint32struct 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