ホーム › Security.Authentication.WebAuthn › WEBAUTHN_CREDENTIAL_ATTESTATION
WEBAUTHN_CREDENTIAL_ATTESTATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwVersion | DWORD | 4 | +0 | +0 | この構造体のバージョン番号を示す。 |
| pwszFormatType | LPWSTR | 8/4 | +8 | +4 | アテステーション形式の種別文字列へのポインタ。 |
| cbAuthenticatorData | DWORD | 4 | +16 | +8 | 認証器データのバイト数を示す。 |
| pbAuthenticatorData | BYTE* | 8/4 | +24 | +12 | 認証器データ(authenticatorData)へのポインタ。 |
| cbAttestation | DWORD | 4 | +32 | +16 | アテステーションステートメントのバイト数を示す。 |
| pbAttestation | BYTE* | 8/4 | +40 | +20 | アテステーションステートメントデータへのポインタ。 |
| dwAttestationDecodeType | DWORD | 4 | +48 | +24 | アテステーションの復号形式を示す値。 |
| pvAttestationDecode | void* | 8/4 | +56 | +28 | 復号済みアテステーション構造へのポインタ。NULL可。 |
| cbAttestationObject | DWORD | 4 | +64 | +32 | アテステーションオブジェクト全体のバイト数を示す。 |
| pbAttestationObject | BYTE* | 8/4 | +72 | +36 | CBORエンコードされたアテステーションオブジェクトへのポインタ。 |
| cbCredentialId | DWORD | 4 | +80 | +40 | 資格情報IDのバイト数を示す。 |
| pbCredentialId | BYTE* | 8/4 | +88 | +44 | 生成された資格情報IDへのポインタ。 |
| Extensions | WEBAUTHN_EXTENSIONS | 16/8 | +96 | +48 | 作成結果に含まれるWebAuthn拡張の集合を保持する。 |
| dwUsedTransport | DWORD | 4 | +112 | +56 | 使用された認証器トランスポートを示すビット値。 |
| bEpAtt | BOOL | 4 | +116 | +60 | エンタープライズアテステーションが返されたかを示すブール値。 |
| bLargeBlobSupported | BOOL | 4 | +120 | +64 | large blobがサポートされたかを示すブール値。 |
| bResidentKey | BOOL | 4 | +124 | +68 | 常駐鍵として作成されたかを示すブール値。 |
| bPrfEnabled | BOOL | 4 | +128 | +72 | PRF拡張が有効化されたかを示すブール値。 |
| cbUnsignedExtensionOutputs | DWORD | 4 | +132 | +76 | 署名対象外拡張出力のバイト数を示す。 |
| pbUnsignedExtensionOutputs | BYTE* | 8/4 | +136 | +80 | 署名対象外の拡張出力データへのポインタ。 |
| pHmacSecret | WEBAUTHN_HMAC_SECRET_SALT* | 8/4 | +144 | +84 | hmac-secret拡張の結果ソルトへのポインタ。NULL可。 |
| bThirdPartyPayment | BOOL | 4 | +152 | +88 | サードパーティ決済対応で作成されたかを示すブール値。 |
| dwTransports | DWORD | 4 | +156 | +92 | 資格情報が利用可能なトランスポートを示すビットマスク。 |
| cbClientDataJSON | DWORD | 4 | +160 | +96 | クライアントデータJSONのバイト数を示す。 |
| pbClientDataJSON | BYTE* | 8/4 | +168 | +100 | クライアントデータJSONへのポインタ。 |
| cbRegistrationResponseJSON | DWORD | 4 | +176 | +104 | 登録応答JSONのバイト数を示す。 |
| pbRegistrationResponseJSON | BYTE* | 8/4 | +184 | +108 | 登録応答JSONデータへのポインタ。 |
各言語での定義
#include <windows.h>
// WEBAUTHN_EXTENSIONS (x64 16 / x86 8 バイト)
typedef struct WEBAUTHN_EXTENSIONS {
DWORD cExtensions;
WEBAUTHN_EXTENSION* pExtensions;
} WEBAUTHN_EXTENSIONS;
// WEBAUTHN_CREDENTIAL_ATTESTATION (x64 192 / x86 112 バイト)
typedef struct WEBAUTHN_CREDENTIAL_ATTESTATION {
DWORD dwVersion;
LPWSTR pwszFormatType;
DWORD cbAuthenticatorData;
BYTE* pbAuthenticatorData;
DWORD cbAttestation;
BYTE* pbAttestation;
DWORD dwAttestationDecodeType;
void* pvAttestationDecode;
DWORD cbAttestationObject;
BYTE* pbAttestationObject;
DWORD cbCredentialId;
BYTE* pbCredentialId;
WEBAUTHN_EXTENSIONS Extensions;
DWORD dwUsedTransport;
BOOL bEpAtt;
BOOL bLargeBlobSupported;
BOOL bResidentKey;
BOOL bPrfEnabled;
DWORD cbUnsignedExtensionOutputs;
BYTE* pbUnsignedExtensionOutputs;
WEBAUTHN_HMAC_SECRET_SALT* pHmacSecret;
BOOL bThirdPartyPayment;
DWORD dwTransports;
DWORD cbClientDataJSON;
BYTE* pbClientDataJSON;
DWORD cbRegistrationResponseJSON;
BYTE* pbRegistrationResponseJSON;
} WEBAUTHN_CREDENTIAL_ATTESTATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WEBAUTHN_EXTENSIONS
{
public uint cExtensions;
public IntPtr pExtensions;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WEBAUTHN_CREDENTIAL_ATTESTATION
{
public uint dwVersion;
public IntPtr pwszFormatType;
public uint cbAuthenticatorData;
public IntPtr pbAuthenticatorData;
public uint cbAttestation;
public IntPtr pbAttestation;
public uint dwAttestationDecodeType;
public IntPtr pvAttestationDecode;
public uint cbAttestationObject;
public IntPtr pbAttestationObject;
public uint cbCredentialId;
public IntPtr pbCredentialId;
public WEBAUTHN_EXTENSIONS Extensions;
public uint dwUsedTransport;
[MarshalAs(UnmanagedType.Bool)] public bool bEpAtt;
[MarshalAs(UnmanagedType.Bool)] public bool bLargeBlobSupported;
[MarshalAs(UnmanagedType.Bool)] public bool bResidentKey;
[MarshalAs(UnmanagedType.Bool)] public bool bPrfEnabled;
public uint cbUnsignedExtensionOutputs;
public IntPtr pbUnsignedExtensionOutputs;
public IntPtr pHmacSecret;
[MarshalAs(UnmanagedType.Bool)] public bool bThirdPartyPayment;
public uint dwTransports;
public uint cbClientDataJSON;
public IntPtr pbClientDataJSON;
public uint cbRegistrationResponseJSON;
public IntPtr pbRegistrationResponseJSON;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WEBAUTHN_EXTENSIONS
Public cExtensions As UInteger
Public pExtensions As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WEBAUTHN_CREDENTIAL_ATTESTATION
Public dwVersion As UInteger
Public pwszFormatType As IntPtr
Public cbAuthenticatorData As UInteger
Public pbAuthenticatorData As IntPtr
Public cbAttestation As UInteger
Public pbAttestation As IntPtr
Public dwAttestationDecodeType As UInteger
Public pvAttestationDecode As IntPtr
Public cbAttestationObject As UInteger
Public pbAttestationObject As IntPtr
Public cbCredentialId As UInteger
Public pbCredentialId As IntPtr
Public Extensions As WEBAUTHN_EXTENSIONS
Public dwUsedTransport As UInteger
<MarshalAs(UnmanagedType.Bool)> Public bEpAtt As Boolean
<MarshalAs(UnmanagedType.Bool)> Public bLargeBlobSupported As Boolean
<MarshalAs(UnmanagedType.Bool)> Public bResidentKey As Boolean
<MarshalAs(UnmanagedType.Bool)> Public bPrfEnabled As Boolean
Public cbUnsignedExtensionOutputs As UInteger
Public pbUnsignedExtensionOutputs As IntPtr
Public pHmacSecret As IntPtr
<MarshalAs(UnmanagedType.Bool)> Public bThirdPartyPayment As Boolean
Public dwTransports As UInteger
Public cbClientDataJSON As UInteger
Public pbClientDataJSON As IntPtr
Public cbRegistrationResponseJSON As UInteger
Public pbRegistrationResponseJSON As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class WEBAUTHN_EXTENSIONS(ctypes.Structure):
_fields_ = [
("cExtensions", wintypes.DWORD),
("pExtensions", ctypes.c_void_p),
]
class WEBAUTHN_CREDENTIAL_ATTESTATION(ctypes.Structure):
_fields_ = [
("dwVersion", wintypes.DWORD),
("pwszFormatType", ctypes.c_void_p),
("cbAuthenticatorData", wintypes.DWORD),
("pbAuthenticatorData", ctypes.c_void_p),
("cbAttestation", wintypes.DWORD),
("pbAttestation", ctypes.c_void_p),
("dwAttestationDecodeType", wintypes.DWORD),
("pvAttestationDecode", ctypes.c_void_p),
("cbAttestationObject", wintypes.DWORD),
("pbAttestationObject", ctypes.c_void_p),
("cbCredentialId", wintypes.DWORD),
("pbCredentialId", ctypes.c_void_p),
("Extensions", WEBAUTHN_EXTENSIONS),
("dwUsedTransport", wintypes.DWORD),
("bEpAtt", wintypes.BOOL),
("bLargeBlobSupported", wintypes.BOOL),
("bResidentKey", wintypes.BOOL),
("bPrfEnabled", wintypes.BOOL),
("cbUnsignedExtensionOutputs", wintypes.DWORD),
("pbUnsignedExtensionOutputs", ctypes.c_void_p),
("pHmacSecret", ctypes.c_void_p),
("bThirdPartyPayment", wintypes.BOOL),
("dwTransports", wintypes.DWORD),
("cbClientDataJSON", wintypes.DWORD),
("pbClientDataJSON", ctypes.c_void_p),
("cbRegistrationResponseJSON", wintypes.DWORD),
("pbRegistrationResponseJSON", ctypes.c_void_p),
]#[repr(C)]
pub struct WEBAUTHN_EXTENSIONS {
pub cExtensions: u32,
pub pExtensions: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct WEBAUTHN_CREDENTIAL_ATTESTATION {
pub dwVersion: u32,
pub pwszFormatType: *mut core::ffi::c_void,
pub cbAuthenticatorData: u32,
pub pbAuthenticatorData: *mut core::ffi::c_void,
pub cbAttestation: u32,
pub pbAttestation: *mut core::ffi::c_void,
pub dwAttestationDecodeType: u32,
pub pvAttestationDecode: *mut core::ffi::c_void,
pub cbAttestationObject: u32,
pub pbAttestationObject: *mut core::ffi::c_void,
pub cbCredentialId: u32,
pub pbCredentialId: *mut core::ffi::c_void,
pub Extensions: WEBAUTHN_EXTENSIONS,
pub dwUsedTransport: u32,
pub bEpAtt: i32,
pub bLargeBlobSupported: i32,
pub bResidentKey: i32,
pub bPrfEnabled: i32,
pub cbUnsignedExtensionOutputs: u32,
pub pbUnsignedExtensionOutputs: *mut core::ffi::c_void,
pub pHmacSecret: *mut core::ffi::c_void,
pub bThirdPartyPayment: i32,
pub dwTransports: u32,
pub cbClientDataJSON: u32,
pub pbClientDataJSON: *mut core::ffi::c_void,
pub cbRegistrationResponseJSON: u32,
pub pbRegistrationResponseJSON: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type WEBAUTHN_EXTENSIONS struct {
cExtensions uint32
pExtensions uintptr
}
type WEBAUTHN_CREDENTIAL_ATTESTATION struct {
dwVersion uint32
pwszFormatType uintptr
cbAuthenticatorData uint32
pbAuthenticatorData uintptr
cbAttestation uint32
pbAttestation uintptr
dwAttestationDecodeType uint32
pvAttestationDecode uintptr
cbAttestationObject uint32
pbAttestationObject uintptr
cbCredentialId uint32
pbCredentialId uintptr
Extensions WEBAUTHN_EXTENSIONS
dwUsedTransport uint32
bEpAtt int32
bLargeBlobSupported int32
bResidentKey int32
bPrfEnabled int32
cbUnsignedExtensionOutputs uint32
pbUnsignedExtensionOutputs uintptr
pHmacSecret uintptr
bThirdPartyPayment int32
dwTransports uint32
cbClientDataJSON uint32
pbClientDataJSON uintptr
cbRegistrationResponseJSON uint32
pbRegistrationResponseJSON uintptr
}type
WEBAUTHN_EXTENSIONS = record
cExtensions: DWORD;
pExtensions: Pointer;
end;
WEBAUTHN_CREDENTIAL_ATTESTATION = record
dwVersion: DWORD;
pwszFormatType: Pointer;
cbAuthenticatorData: DWORD;
pbAuthenticatorData: Pointer;
cbAttestation: DWORD;
pbAttestation: Pointer;
dwAttestationDecodeType: DWORD;
pvAttestationDecode: Pointer;
cbAttestationObject: DWORD;
pbAttestationObject: Pointer;
cbCredentialId: DWORD;
pbCredentialId: Pointer;
Extensions: WEBAUTHN_EXTENSIONS;
dwUsedTransport: DWORD;
bEpAtt: BOOL;
bLargeBlobSupported: BOOL;
bResidentKey: BOOL;
bPrfEnabled: BOOL;
cbUnsignedExtensionOutputs: DWORD;
pbUnsignedExtensionOutputs: Pointer;
pHmacSecret: Pointer;
bThirdPartyPayment: BOOL;
dwTransports: DWORD;
cbClientDataJSON: DWORD;
pbClientDataJSON: Pointer;
cbRegistrationResponseJSON: DWORD;
pbRegistrationResponseJSON: Pointer;
end;const WEBAUTHN_EXTENSIONS = extern struct {
cExtensions: u32,
pExtensions: ?*anyopaque,
};
const WEBAUTHN_CREDENTIAL_ATTESTATION = extern struct {
dwVersion: u32,
pwszFormatType: ?*anyopaque,
cbAuthenticatorData: u32,
pbAuthenticatorData: ?*anyopaque,
cbAttestation: u32,
pbAttestation: ?*anyopaque,
dwAttestationDecodeType: u32,
pvAttestationDecode: ?*anyopaque,
cbAttestationObject: u32,
pbAttestationObject: ?*anyopaque,
cbCredentialId: u32,
pbCredentialId: ?*anyopaque,
Extensions: WEBAUTHN_EXTENSIONS,
dwUsedTransport: u32,
bEpAtt: i32,
bLargeBlobSupported: i32,
bResidentKey: i32,
bPrfEnabled: i32,
cbUnsignedExtensionOutputs: u32,
pbUnsignedExtensionOutputs: ?*anyopaque,
pHmacSecret: ?*anyopaque,
bThirdPartyPayment: i32,
dwTransports: u32,
cbClientDataJSON: u32,
pbClientDataJSON: ?*anyopaque,
cbRegistrationResponseJSON: u32,
pbRegistrationResponseJSON: ?*anyopaque,
};type
WEBAUTHN_EXTENSIONS {.bycopy.} = object
cExtensions: uint32
pExtensions: pointer
WEBAUTHN_CREDENTIAL_ATTESTATION {.bycopy.} = object
dwVersion: uint32
pwszFormatType: pointer
cbAuthenticatorData: uint32
pbAuthenticatorData: pointer
cbAttestation: uint32
pbAttestation: pointer
dwAttestationDecodeType: uint32
pvAttestationDecode: pointer
cbAttestationObject: uint32
pbAttestationObject: pointer
cbCredentialId: uint32
pbCredentialId: pointer
Extensions: WEBAUTHN_EXTENSIONS
dwUsedTransport: uint32
bEpAtt: int32
bLargeBlobSupported: int32
bResidentKey: int32
bPrfEnabled: int32
cbUnsignedExtensionOutputs: uint32
pbUnsignedExtensionOutputs: pointer
pHmacSecret: pointer
bThirdPartyPayment: int32
dwTransports: uint32
cbClientDataJSON: uint32
pbClientDataJSON: pointer
cbRegistrationResponseJSON: uint32
pbRegistrationResponseJSON: pointerstruct WEBAUTHN_EXTENSIONS
{
uint cExtensions;
void* pExtensions;
}
struct WEBAUTHN_CREDENTIAL_ATTESTATION
{
uint dwVersion;
void* pwszFormatType;
uint cbAuthenticatorData;
void* pbAuthenticatorData;
uint cbAttestation;
void* pbAttestation;
uint dwAttestationDecodeType;
void* pvAttestationDecode;
uint cbAttestationObject;
void* pbAttestationObject;
uint cbCredentialId;
void* pbCredentialId;
WEBAUTHN_EXTENSIONS Extensions;
uint dwUsedTransport;
int bEpAtt;
int bLargeBlobSupported;
int bResidentKey;
int bPrfEnabled;
uint cbUnsignedExtensionOutputs;
void* pbUnsignedExtensionOutputs;
void* pHmacSecret;
int bThirdPartyPayment;
uint dwTransports;
uint cbClientDataJSON;
void* pbClientDataJSON;
uint cbRegistrationResponseJSON;
void* pbRegistrationResponseJSON;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WEBAUTHN_CREDENTIAL_ATTESTATION サイズ: 112 バイト(x86)
dim st, 28 ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pwszFormatType : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; cbAuthenticatorData : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pbAuthenticatorData : BYTE* (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; cbAttestation : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pbAttestation : BYTE* (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwAttestationDecodeType : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; pvAttestationDecode : void* (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; cbAttestationObject : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; pbAttestationObject : BYTE* (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; cbCredentialId : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; pbCredentialId : BYTE* (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; Extensions : WEBAUTHN_EXTENSIONS (+48, 8byte) varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; dwUsedTransport : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; bEpAtt : BOOL (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; bLargeBlobSupported : BOOL (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; bResidentKey : BOOL (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; bPrfEnabled : BOOL (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; cbUnsignedExtensionOutputs : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; pbUnsignedExtensionOutputs : BYTE* (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; pHmacSecret : WEBAUTHN_HMAC_SECRET_SALT* (+84, 4byte) varptr(st)+84 を基点に操作(4byte:入れ子/配列)
; bThirdPartyPayment : BOOL (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; dwTransports : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; cbClientDataJSON : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; pbClientDataJSON : BYTE* (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; cbRegistrationResponseJSON : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; pbRegistrationResponseJSON : BYTE* (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WEBAUTHN_CREDENTIAL_ATTESTATION サイズ: 192 バイト(x64)
dim st, 48 ; 4byte整数×48(構造体サイズ 192 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pwszFormatType : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; cbAuthenticatorData : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pbAuthenticatorData : BYTE* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; cbAttestation : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; pbAttestation : BYTE* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; dwAttestationDecodeType : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; pvAttestationDecode : void* (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; cbAttestationObject : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; pbAttestationObject : BYTE* (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; cbCredentialId : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; pbCredentialId : BYTE* (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; Extensions : WEBAUTHN_EXTENSIONS (+96, 16byte) varptr(st)+96 を基点に操作(16byte:入れ子/配列)
; dwUsedTransport : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; bEpAtt : BOOL (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; bLargeBlobSupported : BOOL (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; bResidentKey : BOOL (+124, 4byte) st.31 = 値 / 値 = st.31 (lpoke/lpeek も可)
; bPrfEnabled : BOOL (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; cbUnsignedExtensionOutputs : DWORD (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; pbUnsignedExtensionOutputs : BYTE* (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; pHmacSecret : WEBAUTHN_HMAC_SECRET_SALT* (+144, 8byte) varptr(st)+144 を基点に操作(8byte:入れ子/配列)
; bThirdPartyPayment : BOOL (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; dwTransports : DWORD (+156, 4byte) st.39 = 値 / 値 = st.39 (lpoke/lpeek も可)
; cbClientDataJSON : DWORD (+160, 4byte) st.40 = 値 / 値 = st.40 (lpoke/lpeek も可)
; pbClientDataJSON : BYTE* (+168, 8byte) qpoke st,168,値 / qpeek(st,168) ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; cbRegistrationResponseJSON : DWORD (+176, 4byte) st.44 = 値 / 値 = st.44 (lpoke/lpeek も可)
; pbRegistrationResponseJSON : BYTE* (+184, 8byte) qpoke st,184,値 / qpeek(st,184) ※IronHSPのみ。3.7/3.8は lpoke st,184,下位 : lpoke st,188,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WEBAUTHN_EXTENSIONS
#field int cExtensions
#field intptr pExtensions
#endstruct
#defstruct global WEBAUTHN_CREDENTIAL_ATTESTATION
#field int dwVersion
#field intptr pwszFormatType
#field int cbAuthenticatorData
#field intptr pbAuthenticatorData
#field int cbAttestation
#field intptr pbAttestation
#field int dwAttestationDecodeType
#field intptr pvAttestationDecode
#field int cbAttestationObject
#field intptr pbAttestationObject
#field int cbCredentialId
#field intptr pbCredentialId
#field WEBAUTHN_EXTENSIONS Extensions
#field int dwUsedTransport
#field bool bEpAtt
#field bool bLargeBlobSupported
#field bool bResidentKey
#field bool bPrfEnabled
#field int cbUnsignedExtensionOutputs
#field intptr pbUnsignedExtensionOutputs
#field intptr pHmacSecret
#field bool bThirdPartyPayment
#field int dwTransports
#field int cbClientDataJSON
#field intptr pbClientDataJSON
#field int cbRegistrationResponseJSON
#field intptr pbRegistrationResponseJSON
#endstruct
stdim st, WEBAUTHN_CREDENTIAL_ATTESTATION ; NSTRUCT 変数を確保
st->dwVersion = 100
mes "dwVersion=" + st->dwVersion