ホーム › Security.Authentication.WebAuthn › EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST
EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwVersion | DWORD | 4 | +0 | +0 | この構造体のバージョン番号を示す。 |
| pwszRpId | LPWSTR | 8/4 | +8 | +4 | 信頼当事者(RP)IDの文字列へのポインタ。 |
| cbRpId | DWORD | 4 | +16 | +8 | RP IDのバイト数を示す。 |
| pbRpId | BYTE* | 8/4 | +24 | +12 | RP IDのバイト列へのポインタ。 |
| cbClientDataHash | DWORD | 4 | +32 | +16 | クライアントデータハッシュのバイト数を示す。 |
| pbClientDataHash | BYTE* | 8/4 | +40 | +20 | クライアントデータのハッシュへのポインタ。 |
| CredentialList | WEBAUTHN_CREDENTIAL_LIST | 16/8 | +48 | +24 | 許可する資格情報の一覧を保持する。 |
| cbCborExtensionsMap | DWORD | 4 | +64 | +32 | CBOR拡張マップのバイト数を示す。 |
| pbCborExtensionsMap | BYTE* | 8/4 | +72 | +36 | CBORエンコードされた拡張マップへのポインタ。 |
| pAuthenticatorOptions | EXPERIMENTAL_WEBAUTHN_CTAPCBOR_AUTHENTICATOR_OPTIONS* | 8/4 | +80 | +40 | 認証器オプションへのポインタ。 |
| fEmptyPinAuth | BOOL | 4 | +88 | +44 | 空のpinAuthを使用するかを示すブール値。 |
| cbPinAuth | DWORD | 4 | +92 | +48 | pinAuthのバイト数を示す。 |
| pbPinAuth | BYTE* | 8/4 | +96 | +52 | PINプロトコルのpinAuth値へのポインタ。 |
| pHmacSaltExtension | EXPERIMENTAL_WEBAUTHN_CTAPCBOR_HMAC_SALT_EXTENSION* | 8/4 | +104 | +56 | hmac-secretソルト拡張へのポインタ。NULL可。 |
| cbHmacSecretSaltValues | DWORD | 4 | +112 | +60 | hmac-secretソルト値のバイト数を示す。 |
| pbHmacSecretSaltValues | BYTE* | 8/4 | +120 | +64 | hmac-secretソルト値データへのポインタ。 |
| dwPinProtocol | DWORD | 4 | +128 | +68 | 使用するPINプロトコルのバージョンを示す。 |
| lCredBlobExt | INT | 4 | +132 | +72 | credBlob拡張の指定値を示す。 |
| lLargeBlobKeyExt | INT | 4 | +136 | +76 | largeBlobKey拡張の指定値を示す。 |
| dwCredLargeBlobOperation | DWORD | 4 | +140 | +80 | large blobに対する操作種別を示す。 |
| cbCredLargeBlobCompressed | DWORD | 4 | +144 | +84 | 圧縮済みlarge blobのバイト数を示す。 |
| pbCredLargeBlobCompressed | BYTE* | 8/4 | +152 | +88 | 圧縮されたlarge blobデータへのポインタ。 |
| dwCredLargeBlobOriginalSize | DWORD | 4 | +160 | +92 | large blobの圧縮前サイズを示す。 |
| cbJsonExt | DWORD | 4 | +164 | +96 | JSON形式拡張データのバイト数を示す。 |
| pbJsonExt | BYTE* | 8/4 | +168 | +100 | JSON形式の拡張データへのポインタ。 |
各言語での定義
#include <windows.h>
// WEBAUTHN_CREDENTIAL_LIST (x64 16 / x86 8 バイト)
typedef struct WEBAUTHN_CREDENTIAL_LIST {
DWORD cCredentials;
WEBAUTHN_CREDENTIAL_EX** ppCredentials;
} WEBAUTHN_CREDENTIAL_LIST;
// EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST (x64 176 / x86 104 バイト)
typedef struct EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST {
DWORD dwVersion;
LPWSTR pwszRpId;
DWORD cbRpId;
BYTE* pbRpId;
DWORD cbClientDataHash;
BYTE* pbClientDataHash;
WEBAUTHN_CREDENTIAL_LIST CredentialList;
DWORD cbCborExtensionsMap;
BYTE* pbCborExtensionsMap;
EXPERIMENTAL_WEBAUTHN_CTAPCBOR_AUTHENTICATOR_OPTIONS* pAuthenticatorOptions;
BOOL fEmptyPinAuth;
DWORD cbPinAuth;
BYTE* pbPinAuth;
EXPERIMENTAL_WEBAUTHN_CTAPCBOR_HMAC_SALT_EXTENSION* pHmacSaltExtension;
DWORD cbHmacSecretSaltValues;
BYTE* pbHmacSecretSaltValues;
DWORD dwPinProtocol;
INT lCredBlobExt;
INT lLargeBlobKeyExt;
DWORD dwCredLargeBlobOperation;
DWORD cbCredLargeBlobCompressed;
BYTE* pbCredLargeBlobCompressed;
DWORD dwCredLargeBlobOriginalSize;
DWORD cbJsonExt;
BYTE* pbJsonExt;
} EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WEBAUTHN_CREDENTIAL_LIST
{
public uint cCredentials;
public IntPtr ppCredentials;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST
{
public uint dwVersion;
public IntPtr pwszRpId;
public uint cbRpId;
public IntPtr pbRpId;
public uint cbClientDataHash;
public IntPtr pbClientDataHash;
public WEBAUTHN_CREDENTIAL_LIST CredentialList;
public uint cbCborExtensionsMap;
public IntPtr pbCborExtensionsMap;
public IntPtr pAuthenticatorOptions;
[MarshalAs(UnmanagedType.Bool)] public bool fEmptyPinAuth;
public uint cbPinAuth;
public IntPtr pbPinAuth;
public IntPtr pHmacSaltExtension;
public uint cbHmacSecretSaltValues;
public IntPtr pbHmacSecretSaltValues;
public uint dwPinProtocol;
public int lCredBlobExt;
public int lLargeBlobKeyExt;
public uint dwCredLargeBlobOperation;
public uint cbCredLargeBlobCompressed;
public IntPtr pbCredLargeBlobCompressed;
public uint dwCredLargeBlobOriginalSize;
public uint cbJsonExt;
public IntPtr pbJsonExt;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WEBAUTHN_CREDENTIAL_LIST
Public cCredentials As UInteger
Public ppCredentials As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST
Public dwVersion As UInteger
Public pwszRpId As IntPtr
Public cbRpId As UInteger
Public pbRpId As IntPtr
Public cbClientDataHash As UInteger
Public pbClientDataHash As IntPtr
Public CredentialList As WEBAUTHN_CREDENTIAL_LIST
Public cbCborExtensionsMap As UInteger
Public pbCborExtensionsMap As IntPtr
Public pAuthenticatorOptions As IntPtr
<MarshalAs(UnmanagedType.Bool)> Public fEmptyPinAuth As Boolean
Public cbPinAuth As UInteger
Public pbPinAuth As IntPtr
Public pHmacSaltExtension As IntPtr
Public cbHmacSecretSaltValues As UInteger
Public pbHmacSecretSaltValues As IntPtr
Public dwPinProtocol As UInteger
Public lCredBlobExt As Integer
Public lLargeBlobKeyExt As Integer
Public dwCredLargeBlobOperation As UInteger
Public cbCredLargeBlobCompressed As UInteger
Public pbCredLargeBlobCompressed As IntPtr
Public dwCredLargeBlobOriginalSize As UInteger
Public cbJsonExt As UInteger
Public pbJsonExt As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class WEBAUTHN_CREDENTIAL_LIST(ctypes.Structure):
_fields_ = [
("cCredentials", wintypes.DWORD),
("ppCredentials", ctypes.c_void_p),
]
class EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST(ctypes.Structure):
_fields_ = [
("dwVersion", wintypes.DWORD),
("pwszRpId", ctypes.c_void_p),
("cbRpId", wintypes.DWORD),
("pbRpId", ctypes.c_void_p),
("cbClientDataHash", wintypes.DWORD),
("pbClientDataHash", ctypes.c_void_p),
("CredentialList", WEBAUTHN_CREDENTIAL_LIST),
("cbCborExtensionsMap", wintypes.DWORD),
("pbCborExtensionsMap", ctypes.c_void_p),
("pAuthenticatorOptions", ctypes.c_void_p),
("fEmptyPinAuth", wintypes.BOOL),
("cbPinAuth", wintypes.DWORD),
("pbPinAuth", ctypes.c_void_p),
("pHmacSaltExtension", ctypes.c_void_p),
("cbHmacSecretSaltValues", wintypes.DWORD),
("pbHmacSecretSaltValues", ctypes.c_void_p),
("dwPinProtocol", wintypes.DWORD),
("lCredBlobExt", ctypes.c_int),
("lLargeBlobKeyExt", ctypes.c_int),
("dwCredLargeBlobOperation", wintypes.DWORD),
("cbCredLargeBlobCompressed", wintypes.DWORD),
("pbCredLargeBlobCompressed", ctypes.c_void_p),
("dwCredLargeBlobOriginalSize", wintypes.DWORD),
("cbJsonExt", wintypes.DWORD),
("pbJsonExt", ctypes.c_void_p),
]#[repr(C)]
pub struct WEBAUTHN_CREDENTIAL_LIST {
pub cCredentials: u32,
pub ppCredentials: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST {
pub dwVersion: u32,
pub pwszRpId: *mut core::ffi::c_void,
pub cbRpId: u32,
pub pbRpId: *mut core::ffi::c_void,
pub cbClientDataHash: u32,
pub pbClientDataHash: *mut core::ffi::c_void,
pub CredentialList: WEBAUTHN_CREDENTIAL_LIST,
pub cbCborExtensionsMap: u32,
pub pbCborExtensionsMap: *mut core::ffi::c_void,
pub pAuthenticatorOptions: *mut core::ffi::c_void,
pub fEmptyPinAuth: i32,
pub cbPinAuth: u32,
pub pbPinAuth: *mut core::ffi::c_void,
pub pHmacSaltExtension: *mut core::ffi::c_void,
pub cbHmacSecretSaltValues: u32,
pub pbHmacSecretSaltValues: *mut core::ffi::c_void,
pub dwPinProtocol: u32,
pub lCredBlobExt: i32,
pub lLargeBlobKeyExt: i32,
pub dwCredLargeBlobOperation: u32,
pub cbCredLargeBlobCompressed: u32,
pub pbCredLargeBlobCompressed: *mut core::ffi::c_void,
pub dwCredLargeBlobOriginalSize: u32,
pub cbJsonExt: u32,
pub pbJsonExt: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type WEBAUTHN_CREDENTIAL_LIST struct {
cCredentials uint32
ppCredentials uintptr
}
type EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST struct {
dwVersion uint32
pwszRpId uintptr
cbRpId uint32
pbRpId uintptr
cbClientDataHash uint32
pbClientDataHash uintptr
CredentialList WEBAUTHN_CREDENTIAL_LIST
cbCborExtensionsMap uint32
pbCborExtensionsMap uintptr
pAuthenticatorOptions uintptr
fEmptyPinAuth int32
cbPinAuth uint32
pbPinAuth uintptr
pHmacSaltExtension uintptr
cbHmacSecretSaltValues uint32
pbHmacSecretSaltValues uintptr
dwPinProtocol uint32
lCredBlobExt int32
lLargeBlobKeyExt int32
dwCredLargeBlobOperation uint32
cbCredLargeBlobCompressed uint32
pbCredLargeBlobCompressed uintptr
dwCredLargeBlobOriginalSize uint32
cbJsonExt uint32
pbJsonExt uintptr
}type
WEBAUTHN_CREDENTIAL_LIST = record
cCredentials: DWORD;
ppCredentials: Pointer;
end;
EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST = record
dwVersion: DWORD;
pwszRpId: Pointer;
cbRpId: DWORD;
pbRpId: Pointer;
cbClientDataHash: DWORD;
pbClientDataHash: Pointer;
CredentialList: WEBAUTHN_CREDENTIAL_LIST;
cbCborExtensionsMap: DWORD;
pbCborExtensionsMap: Pointer;
pAuthenticatorOptions: Pointer;
fEmptyPinAuth: BOOL;
cbPinAuth: DWORD;
pbPinAuth: Pointer;
pHmacSaltExtension: Pointer;
cbHmacSecretSaltValues: DWORD;
pbHmacSecretSaltValues: Pointer;
dwPinProtocol: DWORD;
lCredBlobExt: Integer;
lLargeBlobKeyExt: Integer;
dwCredLargeBlobOperation: DWORD;
cbCredLargeBlobCompressed: DWORD;
pbCredLargeBlobCompressed: Pointer;
dwCredLargeBlobOriginalSize: DWORD;
cbJsonExt: DWORD;
pbJsonExt: Pointer;
end;const WEBAUTHN_CREDENTIAL_LIST = extern struct {
cCredentials: u32,
ppCredentials: ?*anyopaque,
};
const EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST = extern struct {
dwVersion: u32,
pwszRpId: ?*anyopaque,
cbRpId: u32,
pbRpId: ?*anyopaque,
cbClientDataHash: u32,
pbClientDataHash: ?*anyopaque,
CredentialList: WEBAUTHN_CREDENTIAL_LIST,
cbCborExtensionsMap: u32,
pbCborExtensionsMap: ?*anyopaque,
pAuthenticatorOptions: ?*anyopaque,
fEmptyPinAuth: i32,
cbPinAuth: u32,
pbPinAuth: ?*anyopaque,
pHmacSaltExtension: ?*anyopaque,
cbHmacSecretSaltValues: u32,
pbHmacSecretSaltValues: ?*anyopaque,
dwPinProtocol: u32,
lCredBlobExt: i32,
lLargeBlobKeyExt: i32,
dwCredLargeBlobOperation: u32,
cbCredLargeBlobCompressed: u32,
pbCredLargeBlobCompressed: ?*anyopaque,
dwCredLargeBlobOriginalSize: u32,
cbJsonExt: u32,
pbJsonExt: ?*anyopaque,
};type
WEBAUTHN_CREDENTIAL_LIST {.bycopy.} = object
cCredentials: uint32
ppCredentials: pointer
EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST {.bycopy.} = object
dwVersion: uint32
pwszRpId: pointer
cbRpId: uint32
pbRpId: pointer
cbClientDataHash: uint32
pbClientDataHash: pointer
CredentialList: WEBAUTHN_CREDENTIAL_LIST
cbCborExtensionsMap: uint32
pbCborExtensionsMap: pointer
pAuthenticatorOptions: pointer
fEmptyPinAuth: int32
cbPinAuth: uint32
pbPinAuth: pointer
pHmacSaltExtension: pointer
cbHmacSecretSaltValues: uint32
pbHmacSecretSaltValues: pointer
dwPinProtocol: uint32
lCredBlobExt: int32
lLargeBlobKeyExt: int32
dwCredLargeBlobOperation: uint32
cbCredLargeBlobCompressed: uint32
pbCredLargeBlobCompressed: pointer
dwCredLargeBlobOriginalSize: uint32
cbJsonExt: uint32
pbJsonExt: pointerstruct WEBAUTHN_CREDENTIAL_LIST
{
uint cCredentials;
void* ppCredentials;
}
struct EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST
{
uint dwVersion;
void* pwszRpId;
uint cbRpId;
void* pbRpId;
uint cbClientDataHash;
void* pbClientDataHash;
WEBAUTHN_CREDENTIAL_LIST CredentialList;
uint cbCborExtensionsMap;
void* pbCborExtensionsMap;
void* pAuthenticatorOptions;
int fEmptyPinAuth;
uint cbPinAuth;
void* pbPinAuth;
void* pHmacSaltExtension;
uint cbHmacSecretSaltValues;
void* pbHmacSecretSaltValues;
uint dwPinProtocol;
int lCredBlobExt;
int lLargeBlobKeyExt;
uint dwCredLargeBlobOperation;
uint cbCredLargeBlobCompressed;
void* pbCredLargeBlobCompressed;
uint dwCredLargeBlobOriginalSize;
uint cbJsonExt;
void* pbJsonExt;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST サイズ: 104 バイト(x86)
dim st, 26 ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pwszRpId : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; cbRpId : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pbRpId : BYTE* (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; cbClientDataHash : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pbClientDataHash : BYTE* (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; CredentialList : WEBAUTHN_CREDENTIAL_LIST (+24, 8byte) varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; cbCborExtensionsMap : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; pbCborExtensionsMap : BYTE* (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; pAuthenticatorOptions : EXPERIMENTAL_WEBAUTHN_CTAPCBOR_AUTHENTICATOR_OPTIONS* (+40, 4byte) varptr(st)+40 を基点に操作(4byte:入れ子/配列)
; fEmptyPinAuth : BOOL (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; cbPinAuth : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; pbPinAuth : BYTE* (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; pHmacSaltExtension : EXPERIMENTAL_WEBAUTHN_CTAPCBOR_HMAC_SALT_EXTENSION* (+56, 4byte) varptr(st)+56 を基点に操作(4byte:入れ子/配列)
; cbHmacSecretSaltValues : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; pbHmacSecretSaltValues : BYTE* (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; dwPinProtocol : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; lCredBlobExt : INT (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; lLargeBlobKeyExt : INT (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; dwCredLargeBlobOperation : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; cbCredLargeBlobCompressed : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; pbCredLargeBlobCompressed : BYTE* (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; dwCredLargeBlobOriginalSize : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; cbJsonExt : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; pbJsonExt : BYTE* (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST サイズ: 176 バイト(x64)
dim st, 44 ; 4byte整数×44(構造体サイズ 176 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pwszRpId : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; cbRpId : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pbRpId : BYTE* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; cbClientDataHash : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; pbClientDataHash : BYTE* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; CredentialList : WEBAUTHN_CREDENTIAL_LIST (+48, 16byte) varptr(st)+48 を基点に操作(16byte:入れ子/配列)
; cbCborExtensionsMap : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; pbCborExtensionsMap : BYTE* (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; pAuthenticatorOptions : EXPERIMENTAL_WEBAUTHN_CTAPCBOR_AUTHENTICATOR_OPTIONS* (+80, 8byte) varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; fEmptyPinAuth : BOOL (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; cbPinAuth : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; pbPinAuth : BYTE* (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pHmacSaltExtension : EXPERIMENTAL_WEBAUTHN_CTAPCBOR_HMAC_SALT_EXTENSION* (+104, 8byte) varptr(st)+104 を基点に操作(8byte:入れ子/配列)
; cbHmacSecretSaltValues : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; pbHmacSecretSaltValues : BYTE* (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; dwPinProtocol : DWORD (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; lCredBlobExt : INT (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; lLargeBlobKeyExt : INT (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; dwCredLargeBlobOperation : DWORD (+140, 4byte) st.35 = 値 / 値 = st.35 (lpoke/lpeek も可)
; cbCredLargeBlobCompressed : DWORD (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; pbCredLargeBlobCompressed : BYTE* (+152, 8byte) qpoke st,152,値 / qpeek(st,152) ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; dwCredLargeBlobOriginalSize : DWORD (+160, 4byte) st.40 = 値 / 値 = st.40 (lpoke/lpeek も可)
; cbJsonExt : DWORD (+164, 4byte) st.41 = 値 / 値 = st.41 (lpoke/lpeek も可)
; pbJsonExt : BYTE* (+168, 8byte) qpoke st,168,値 / qpeek(st,168) ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WEBAUTHN_CREDENTIAL_LIST
#field int cCredentials
#field intptr ppCredentials
#endstruct
#defstruct global EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST
#field int dwVersion
#field intptr pwszRpId
#field int cbRpId
#field intptr pbRpId
#field int cbClientDataHash
#field intptr pbClientDataHash
#field WEBAUTHN_CREDENTIAL_LIST CredentialList
#field int cbCborExtensionsMap
#field intptr pbCborExtensionsMap
#field intptr pAuthenticatorOptions
#field bool fEmptyPinAuth
#field int cbPinAuth
#field intptr pbPinAuth
#field intptr pHmacSaltExtension
#field int cbHmacSecretSaltValues
#field intptr pbHmacSecretSaltValues
#field int dwPinProtocol
#field int lCredBlobExt
#field int lLargeBlobKeyExt
#field int dwCredLargeBlobOperation
#field int cbCredLargeBlobCompressed
#field intptr pbCredLargeBlobCompressed
#field int dwCredLargeBlobOriginalSize
#field int cbJsonExt
#field intptr pbJsonExt
#endstruct
stdim st, EXPERIMENTAL_WEBAUTHN_CTAPCBOR_GET_ASSERTION_REQUEST ; NSTRUCT 変数を確保
st->dwVersion = 100
mes "dwVersion=" + st->dwVersion