ホーム › 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 | この構造体のバージョンです。将来の変更に対応できるようにするためのものです。このフィールドは必須であり、CURRENT_VERSION に設定してください。 |
| pwszFormatType | LPWSTR | 8/4 | +8 | +4 | アテステーションの形式の種類です。 |
| cbAuthenticatorData | DWORD | 4 | +16 | +8 | pbAuthenticatorData のサイズです。 |
| pbAuthenticatorData | BYTE* | 8/4 | +24 | +12 | この資格情報のために作成された認証器データ (authenticator data) です。 |
| cbAttestation | DWORD | 4 | +32 | +16 | CBOR エンコードされたアテステーション情報のサイズです。 |
| pbAttestation | BYTE* | 8/4 | +40 | +20 | CBOR エンコードされたアテステーション情報です。 |
| dwAttestationDecodeType | DWORD | 4 | +48 | +24 | アテステーションのデコード種別です。 |
| pvAttestationDecode | void* | 8/4 | +56 | +28 | アテステーションのデコード値です。 |
| cbAttestationObject | DWORD | 4 | +64 | +32 | pbAttestationObject のサイズです。 |
| pbAttestationObject | BYTE* | 8/4 | +72 | +36 | 証明書利用者 (Relying Party) に返される、CBOR エンコードされたアテステーション オブジェクトです。 |
| cbCredentialId | DWORD | 4 | +80 | +40 | pbCredentialId のサイズです。 |
| pbCredentialId | BYTE* | 8/4 | +88 | +44 | 認証器データから抽出された CredentialId のバイト列です。Edge が証明書利用者 (Relying Party) に返すために使用します。 |
| Extensions | WEBAUTHN_EXTENSIONS | 16/8 | +96 | +48 | この資格情報の拡張機能です。 |
| dwUsedTransport | DWORD | 4 | +112 | +56 | 使用されたトランスポートに応じて、WEBAUTHN_CTAP_TRANSPORT のビットのいずれかが渡されます。 |
| bEpAtt | BOOL | 4 | +116 | +60 | EP アテステーション フラグです。 |
| bLargeBlobSupported | BOOL | 4 | +120 | +64 | 認証器が large blob アテステーションをサポートしているかどうかを示します。 |
| bResidentKey | BOOL | 4 | +124 | +68 | 証明書利用者が常駐キー (resident key) を必要とするかどうかを示します。 |
| 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データへのポインタ。 |
公式ドキュメント
資格情報のアテステーション データを格納します。
解説(Remarks)
pvAttestationDecode は dwAttestationDecodeType に応じて異なります。
| デコード種別 | デコード値 |
|---|---|
| WEBAUTHN_ATTESTATION_DECODE_NONE | NULL - CBOR 形式のアテステーション情報をデコードできません |
| WEBAUTHN_ATTESTATION_DECODE_COMMON | PWEBAUTHN_COMMON_ATTESTATION |
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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