ホーム › Security.Authentication.WebAuthn › WEBAUTHN_ASSERTION
WEBAUTHN_ASSERTION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwVersion | DWORD | 4 | +0 | +0 | この構造体のバージョン番号を示す。 |
| cbAuthenticatorData | DWORD | 4 | +4 | +4 | 認証器データのバイト数を示す。 |
| pbAuthenticatorData | BYTE* | 8/4 | +8 | +8 | 認証器データ(authenticatorData)へのポインタ。 |
| cbSignature | DWORD | 4 | +16 | +12 | 署名データのバイト数を示す。 |
| pbSignature | BYTE* | 8/4 | +24 | +16 | アサーション署名データへのポインタ。 |
| Credential | WEBAUTHN_CREDENTIAL | 24/16 | +32 | +20 | アサーションに使用された資格情報を保持する。 |
| cbUserId | DWORD | 4 | +56 | +36 | ユーザーIDのバイト数を示す。 |
| pbUserId | BYTE* | 8/4 | +64 | +40 | ユーザーハンドル(ユーザーID)へのポインタ。NULL可。 |
| Extensions | WEBAUTHN_EXTENSIONS | 16/8 | +72 | +44 | アサーションに含まれるWebAuthn拡張の集合を保持する。 |
| cbCredLargeBlob | DWORD | 4 | +88 | +52 | large blobデータのバイト数を示す。 |
| pbCredLargeBlob | BYTE* | 8/4 | +96 | +56 | 取得したlarge blobデータへのポインタ。 |
| dwCredLargeBlobStatus | DWORD | 4 | +104 | +60 | large blob操作の結果状態を示す値。 |
| pHmacSecret | WEBAUTHN_HMAC_SECRET_SALT* | 8/4 | +112 | +64 | hmac-secret拡張の結果ソルトへのポインタ。NULL可。 |
| dwUsedTransport | DWORD | 4 | +120 | +68 | 使用された認証器トランスポートを示すビット値。 |
| cbUnsignedExtensionOutputs | DWORD | 4 | +124 | +72 | 署名対象外拡張出力のバイト数を示す。 |
| pbUnsignedExtensionOutputs | BYTE* | 8/4 | +128 | +76 | 署名対象外の拡張出力データへのポインタ。 |
| cbClientDataJSON | DWORD | 4 | +136 | +80 | クライアントデータJSONのバイト数を示す。 |
| pbClientDataJSON | BYTE* | 8/4 | +144 | +84 | クライアントデータJSONへのポインタ。 |
| cbAuthenticationResponseJSON | DWORD | 4 | +152 | +88 | 認証応答JSONのバイト数を示す。 |
| pbAuthenticationResponseJSON | BYTE* | 8/4 | +160 | +92 | 認証応答JSONデータへのポインタ。 |
各言語での定義
#include <windows.h>
// WEBAUTHN_CREDENTIAL (x64 24 / x86 16 バイト)
typedef struct WEBAUTHN_CREDENTIAL {
DWORD dwVersion;
DWORD cbId;
BYTE* pbId;
LPWSTR pwszCredentialType;
} WEBAUTHN_CREDENTIAL;
// WEBAUTHN_EXTENSIONS (x64 16 / x86 8 バイト)
typedef struct WEBAUTHN_EXTENSIONS {
DWORD cExtensions;
WEBAUTHN_EXTENSION* pExtensions;
} WEBAUTHN_EXTENSIONS;
// WEBAUTHN_ASSERTION (x64 168 / x86 96 バイト)
typedef struct WEBAUTHN_ASSERTION {
DWORD dwVersion;
DWORD cbAuthenticatorData;
BYTE* pbAuthenticatorData;
DWORD cbSignature;
BYTE* pbSignature;
WEBAUTHN_CREDENTIAL Credential;
DWORD cbUserId;
BYTE* pbUserId;
WEBAUTHN_EXTENSIONS Extensions;
DWORD cbCredLargeBlob;
BYTE* pbCredLargeBlob;
DWORD dwCredLargeBlobStatus;
WEBAUTHN_HMAC_SECRET_SALT* pHmacSecret;
DWORD dwUsedTransport;
DWORD cbUnsignedExtensionOutputs;
BYTE* pbUnsignedExtensionOutputs;
DWORD cbClientDataJSON;
BYTE* pbClientDataJSON;
DWORD cbAuthenticationResponseJSON;
BYTE* pbAuthenticationResponseJSON;
} WEBAUTHN_ASSERTION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WEBAUTHN_CREDENTIAL
{
public uint dwVersion;
public uint cbId;
public IntPtr pbId;
public IntPtr pwszCredentialType;
}
[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_ASSERTION
{
public uint dwVersion;
public uint cbAuthenticatorData;
public IntPtr pbAuthenticatorData;
public uint cbSignature;
public IntPtr pbSignature;
public WEBAUTHN_CREDENTIAL Credential;
public uint cbUserId;
public IntPtr pbUserId;
public WEBAUTHN_EXTENSIONS Extensions;
public uint cbCredLargeBlob;
public IntPtr pbCredLargeBlob;
public uint dwCredLargeBlobStatus;
public IntPtr pHmacSecret;
public uint dwUsedTransport;
public uint cbUnsignedExtensionOutputs;
public IntPtr pbUnsignedExtensionOutputs;
public uint cbClientDataJSON;
public IntPtr pbClientDataJSON;
public uint cbAuthenticationResponseJSON;
public IntPtr pbAuthenticationResponseJSON;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WEBAUTHN_CREDENTIAL
Public dwVersion As UInteger
Public cbId As UInteger
Public pbId As IntPtr
Public pwszCredentialType As IntPtr
End Structure
<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_ASSERTION
Public dwVersion As UInteger
Public cbAuthenticatorData As UInteger
Public pbAuthenticatorData As IntPtr
Public cbSignature As UInteger
Public pbSignature As IntPtr
Public Credential As WEBAUTHN_CREDENTIAL
Public cbUserId As UInteger
Public pbUserId As IntPtr
Public Extensions As WEBAUTHN_EXTENSIONS
Public cbCredLargeBlob As UInteger
Public pbCredLargeBlob As IntPtr
Public dwCredLargeBlobStatus As UInteger
Public pHmacSecret As IntPtr
Public dwUsedTransport As UInteger
Public cbUnsignedExtensionOutputs As UInteger
Public pbUnsignedExtensionOutputs As IntPtr
Public cbClientDataJSON As UInteger
Public pbClientDataJSON As IntPtr
Public cbAuthenticationResponseJSON As UInteger
Public pbAuthenticationResponseJSON As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class WEBAUTHN_CREDENTIAL(ctypes.Structure):
_fields_ = [
("dwVersion", wintypes.DWORD),
("cbId", wintypes.DWORD),
("pbId", ctypes.c_void_p),
("pwszCredentialType", ctypes.c_void_p),
]
class WEBAUTHN_EXTENSIONS(ctypes.Structure):
_fields_ = [
("cExtensions", wintypes.DWORD),
("pExtensions", ctypes.c_void_p),
]
class WEBAUTHN_ASSERTION(ctypes.Structure):
_fields_ = [
("dwVersion", wintypes.DWORD),
("cbAuthenticatorData", wintypes.DWORD),
("pbAuthenticatorData", ctypes.c_void_p),
("cbSignature", wintypes.DWORD),
("pbSignature", ctypes.c_void_p),
("Credential", WEBAUTHN_CREDENTIAL),
("cbUserId", wintypes.DWORD),
("pbUserId", ctypes.c_void_p),
("Extensions", WEBAUTHN_EXTENSIONS),
("cbCredLargeBlob", wintypes.DWORD),
("pbCredLargeBlob", ctypes.c_void_p),
("dwCredLargeBlobStatus", wintypes.DWORD),
("pHmacSecret", ctypes.c_void_p),
("dwUsedTransport", wintypes.DWORD),
("cbUnsignedExtensionOutputs", wintypes.DWORD),
("pbUnsignedExtensionOutputs", ctypes.c_void_p),
("cbClientDataJSON", wintypes.DWORD),
("pbClientDataJSON", ctypes.c_void_p),
("cbAuthenticationResponseJSON", wintypes.DWORD),
("pbAuthenticationResponseJSON", ctypes.c_void_p),
]#[repr(C)]
pub struct WEBAUTHN_CREDENTIAL {
pub dwVersion: u32,
pub cbId: u32,
pub pbId: *mut core::ffi::c_void,
pub pwszCredentialType: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct WEBAUTHN_EXTENSIONS {
pub cExtensions: u32,
pub pExtensions: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct WEBAUTHN_ASSERTION {
pub dwVersion: u32,
pub cbAuthenticatorData: u32,
pub pbAuthenticatorData: *mut core::ffi::c_void,
pub cbSignature: u32,
pub pbSignature: *mut core::ffi::c_void,
pub Credential: WEBAUTHN_CREDENTIAL,
pub cbUserId: u32,
pub pbUserId: *mut core::ffi::c_void,
pub Extensions: WEBAUTHN_EXTENSIONS,
pub cbCredLargeBlob: u32,
pub pbCredLargeBlob: *mut core::ffi::c_void,
pub dwCredLargeBlobStatus: u32,
pub pHmacSecret: *mut core::ffi::c_void,
pub dwUsedTransport: u32,
pub cbUnsignedExtensionOutputs: u32,
pub pbUnsignedExtensionOutputs: *mut core::ffi::c_void,
pub cbClientDataJSON: u32,
pub pbClientDataJSON: *mut core::ffi::c_void,
pub cbAuthenticationResponseJSON: u32,
pub pbAuthenticationResponseJSON: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type WEBAUTHN_CREDENTIAL struct {
dwVersion uint32
cbId uint32
pbId uintptr
pwszCredentialType uintptr
}
type WEBAUTHN_EXTENSIONS struct {
cExtensions uint32
pExtensions uintptr
}
type WEBAUTHN_ASSERTION struct {
dwVersion uint32
cbAuthenticatorData uint32
pbAuthenticatorData uintptr
cbSignature uint32
pbSignature uintptr
Credential WEBAUTHN_CREDENTIAL
cbUserId uint32
pbUserId uintptr
Extensions WEBAUTHN_EXTENSIONS
cbCredLargeBlob uint32
pbCredLargeBlob uintptr
dwCredLargeBlobStatus uint32
pHmacSecret uintptr
dwUsedTransport uint32
cbUnsignedExtensionOutputs uint32
pbUnsignedExtensionOutputs uintptr
cbClientDataJSON uint32
pbClientDataJSON uintptr
cbAuthenticationResponseJSON uint32
pbAuthenticationResponseJSON uintptr
}type
WEBAUTHN_CREDENTIAL = record
dwVersion: DWORD;
cbId: DWORD;
pbId: Pointer;
pwszCredentialType: Pointer;
end;
WEBAUTHN_EXTENSIONS = record
cExtensions: DWORD;
pExtensions: Pointer;
end;
WEBAUTHN_ASSERTION = record
dwVersion: DWORD;
cbAuthenticatorData: DWORD;
pbAuthenticatorData: Pointer;
cbSignature: DWORD;
pbSignature: Pointer;
Credential: WEBAUTHN_CREDENTIAL;
cbUserId: DWORD;
pbUserId: Pointer;
Extensions: WEBAUTHN_EXTENSIONS;
cbCredLargeBlob: DWORD;
pbCredLargeBlob: Pointer;
dwCredLargeBlobStatus: DWORD;
pHmacSecret: Pointer;
dwUsedTransport: DWORD;
cbUnsignedExtensionOutputs: DWORD;
pbUnsignedExtensionOutputs: Pointer;
cbClientDataJSON: DWORD;
pbClientDataJSON: Pointer;
cbAuthenticationResponseJSON: DWORD;
pbAuthenticationResponseJSON: Pointer;
end;const WEBAUTHN_CREDENTIAL = extern struct {
dwVersion: u32,
cbId: u32,
pbId: ?*anyopaque,
pwszCredentialType: ?*anyopaque,
};
const WEBAUTHN_EXTENSIONS = extern struct {
cExtensions: u32,
pExtensions: ?*anyopaque,
};
const WEBAUTHN_ASSERTION = extern struct {
dwVersion: u32,
cbAuthenticatorData: u32,
pbAuthenticatorData: ?*anyopaque,
cbSignature: u32,
pbSignature: ?*anyopaque,
Credential: WEBAUTHN_CREDENTIAL,
cbUserId: u32,
pbUserId: ?*anyopaque,
Extensions: WEBAUTHN_EXTENSIONS,
cbCredLargeBlob: u32,
pbCredLargeBlob: ?*anyopaque,
dwCredLargeBlobStatus: u32,
pHmacSecret: ?*anyopaque,
dwUsedTransport: u32,
cbUnsignedExtensionOutputs: u32,
pbUnsignedExtensionOutputs: ?*anyopaque,
cbClientDataJSON: u32,
pbClientDataJSON: ?*anyopaque,
cbAuthenticationResponseJSON: u32,
pbAuthenticationResponseJSON: ?*anyopaque,
};type
WEBAUTHN_CREDENTIAL {.bycopy.} = object
dwVersion: uint32
cbId: uint32
pbId: pointer
pwszCredentialType: pointer
WEBAUTHN_EXTENSIONS {.bycopy.} = object
cExtensions: uint32
pExtensions: pointer
WEBAUTHN_ASSERTION {.bycopy.} = object
dwVersion: uint32
cbAuthenticatorData: uint32
pbAuthenticatorData: pointer
cbSignature: uint32
pbSignature: pointer
Credential: WEBAUTHN_CREDENTIAL
cbUserId: uint32
pbUserId: pointer
Extensions: WEBAUTHN_EXTENSIONS
cbCredLargeBlob: uint32
pbCredLargeBlob: pointer
dwCredLargeBlobStatus: uint32
pHmacSecret: pointer
dwUsedTransport: uint32
cbUnsignedExtensionOutputs: uint32
pbUnsignedExtensionOutputs: pointer
cbClientDataJSON: uint32
pbClientDataJSON: pointer
cbAuthenticationResponseJSON: uint32
pbAuthenticationResponseJSON: pointerstruct WEBAUTHN_CREDENTIAL
{
uint dwVersion;
uint cbId;
void* pbId;
void* pwszCredentialType;
}
struct WEBAUTHN_EXTENSIONS
{
uint cExtensions;
void* pExtensions;
}
struct WEBAUTHN_ASSERTION
{
uint dwVersion;
uint cbAuthenticatorData;
void* pbAuthenticatorData;
uint cbSignature;
void* pbSignature;
WEBAUTHN_CREDENTIAL Credential;
uint cbUserId;
void* pbUserId;
WEBAUTHN_EXTENSIONS Extensions;
uint cbCredLargeBlob;
void* pbCredLargeBlob;
uint dwCredLargeBlobStatus;
void* pHmacSecret;
uint dwUsedTransport;
uint cbUnsignedExtensionOutputs;
void* pbUnsignedExtensionOutputs;
uint cbClientDataJSON;
void* pbClientDataJSON;
uint cbAuthenticationResponseJSON;
void* pbAuthenticationResponseJSON;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WEBAUTHN_ASSERTION サイズ: 96 バイト(x86)
dim st, 24 ; 4byte整数×24(構造体サイズ 96 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; cbAuthenticatorData : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pbAuthenticatorData : BYTE* (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; cbSignature : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; pbSignature : BYTE* (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; Credential : WEBAUTHN_CREDENTIAL (+20, 16byte) varptr(st)+20 を基点に操作(16byte:入れ子/配列)
; cbUserId : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; pbUserId : BYTE* (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; Extensions : WEBAUTHN_EXTENSIONS (+44, 8byte) varptr(st)+44 を基点に操作(8byte:入れ子/配列)
; cbCredLargeBlob : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; pbCredLargeBlob : BYTE* (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; dwCredLargeBlobStatus : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; pHmacSecret : WEBAUTHN_HMAC_SECRET_SALT* (+64, 4byte) varptr(st)+64 を基点に操作(4byte:入れ子/配列)
; dwUsedTransport : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; cbUnsignedExtensionOutputs : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; pbUnsignedExtensionOutputs : BYTE* (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; cbClientDataJSON : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; pbClientDataJSON : BYTE* (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; cbAuthenticationResponseJSON : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; pbAuthenticationResponseJSON : BYTE* (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WEBAUTHN_ASSERTION サイズ: 168 バイト(x64)
dim st, 42 ; 4byte整数×42(構造体サイズ 168 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; cbAuthenticatorData : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pbAuthenticatorData : BYTE* (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; cbSignature : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pbSignature : BYTE* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; Credential : WEBAUTHN_CREDENTIAL (+32, 24byte) varptr(st)+32 を基点に操作(24byte:入れ子/配列)
; cbUserId : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; pbUserId : BYTE* (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; Extensions : WEBAUTHN_EXTENSIONS (+72, 16byte) varptr(st)+72 を基点に操作(16byte:入れ子/配列)
; cbCredLargeBlob : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; pbCredLargeBlob : BYTE* (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; dwCredLargeBlobStatus : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; pHmacSecret : WEBAUTHN_HMAC_SECRET_SALT* (+112, 8byte) varptr(st)+112 を基点に操作(8byte:入れ子/配列)
; dwUsedTransport : DWORD (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; cbUnsignedExtensionOutputs : DWORD (+124, 4byte) st.31 = 値 / 値 = st.31 (lpoke/lpeek も可)
; pbUnsignedExtensionOutputs : BYTE* (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; cbClientDataJSON : DWORD (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; pbClientDataJSON : BYTE* (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; cbAuthenticationResponseJSON : DWORD (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; pbAuthenticationResponseJSON : BYTE* (+160, 8byte) qpoke st,160,値 / qpeek(st,160) ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WEBAUTHN_CREDENTIAL
#field int dwVersion
#field int cbId
#field intptr pbId
#field intptr pwszCredentialType
#endstruct
#defstruct global WEBAUTHN_EXTENSIONS
#field int cExtensions
#field intptr pExtensions
#endstruct
#defstruct global WEBAUTHN_ASSERTION
#field int dwVersion
#field int cbAuthenticatorData
#field intptr pbAuthenticatorData
#field int cbSignature
#field intptr pbSignature
#field WEBAUTHN_CREDENTIAL Credential
#field int cbUserId
#field intptr pbUserId
#field WEBAUTHN_EXTENSIONS Extensions
#field int cbCredLargeBlob
#field intptr pbCredLargeBlob
#field int dwCredLargeBlobStatus
#field intptr pHmacSecret
#field int dwUsedTransport
#field int cbUnsignedExtensionOutputs
#field intptr pbUnsignedExtensionOutputs
#field int cbClientDataJSON
#field intptr pbClientDataJSON
#field int cbAuthenticationResponseJSON
#field intptr pbAuthenticationResponseJSON
#endstruct
stdim st, WEBAUTHN_ASSERTION ; NSTRUCT 変数を確保
st->dwVersion = 100
mes "dwVersion=" + st->dwVersion