Win32 API 日本語リファレンス
ホームSecurity.Cryptography › NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT

NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT

構造体
サイズx64: 24 バイト / x86: 24 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
MagicDWORD4+0+0TPMプラットフォーム構成証明ステートメントを示すマジック値。
VersionDWORD4+4+4ステートメント形式のバージョン番号。
pcrAlgDWORD4+8+8PCR計測に用いるハッシュアルゴリズムの種別を示す値。
cbSignatureDWORD4+12+12署名(TPM Quoteの署名)のバイト長。
cbQuoteDWORD4+16+16TPM Quote(TPMS_ATTEST)データのバイト長。
cbPcrsDWORD4+20+20PCR値群データのバイト長。

各言語での定義

#include <windows.h>

// NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT  (x64 24 / x86 24 バイト)
typedef struct NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT {
    DWORD Magic;
    DWORD Version;
    DWORD pcrAlg;
    DWORD cbSignature;
    DWORD cbQuote;
    DWORD cbPcrs;
} NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT
{
    public uint Magic;
    public uint Version;
    public uint pcrAlg;
    public uint cbSignature;
    public uint cbQuote;
    public uint cbPcrs;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT
    Public Magic As UInteger
    Public Version As UInteger
    Public pcrAlg As UInteger
    Public cbSignature As UInteger
    Public cbQuote As UInteger
    Public cbPcrs As UInteger
End Structure
import ctypes
from ctypes import wintypes

class NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT(ctypes.Structure):
    _fields_ = [
        ("Magic", wintypes.DWORD),
        ("Version", wintypes.DWORD),
        ("pcrAlg", wintypes.DWORD),
        ("cbSignature", wintypes.DWORD),
        ("cbQuote", wintypes.DWORD),
        ("cbPcrs", wintypes.DWORD),
    ]
#[repr(C)]
pub struct NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT {
    pub Magic: u32,
    pub Version: u32,
    pub pcrAlg: u32,
    pub cbSignature: u32,
    pub cbQuote: u32,
    pub cbPcrs: u32,
}
import "golang.org/x/sys/windows"

type NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT struct {
	Magic uint32
	Version uint32
	pcrAlg uint32
	cbSignature uint32
	cbQuote uint32
	cbPcrs uint32
}
type
  NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT = record
    Magic: DWORD;
    Version: DWORD;
    pcrAlg: DWORD;
    cbSignature: DWORD;
    cbQuote: DWORD;
    cbPcrs: DWORD;
  end;
const NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT = extern struct {
    Magic: u32,
    Version: u32,
    pcrAlg: u32,
    cbSignature: u32,
    cbQuote: u32,
    cbPcrs: u32,
};
type
  NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT {.bycopy.} = object
    Magic: uint32
    Version: uint32
    pcrAlg: uint32
    cbSignature: uint32
    cbQuote: uint32
    cbPcrs: uint32
struct NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT
{
    uint Magic;
    uint Version;
    uint pcrAlg;
    uint cbSignature;
    uint cbQuote;
    uint cbPcrs;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; Magic : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Version : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pcrAlg : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cbSignature : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; cbQuote : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; cbPcrs : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT
    #field int Magic
    #field int Version
    #field int pcrAlg
    #field int cbSignature
    #field int cbQuote
    #field int cbPcrs
#endstruct

stdim st, NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT        ; NSTRUCT 変数を確保
st->Magic = 100
mes "Magic=" + st->Magic