ホーム › Security.Authentication.Identity › SEC_TRAFFIC_SECRETS
SEC_TRAFFIC_SECRETS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| SymmetricAlgId | WCHAR | 128 | +0 | +0 | 対称暗号アルゴリズム識別子を保持するワイド文字列(CNGアルゴリズム名)。 |
| ChainingMode | WCHAR | 128 | +128 | +128 | ブロック暗号の連鎖モードを示すワイド文字列(GCM/CBC等)。 |
| HashAlgId | WCHAR | 128 | +256 | +256 | 鍵導出に用いるハッシュアルゴリズム識別子を保持するワイド文字列。 |
| KeySize | WORD | 2 | +384 | +384 | トラフィック鍵のサイズ(バイト数)。 |
| IvSize | WORD | 2 | +386 | +386 | 初期化ベクトルのサイズ(バイト数)。 |
| MsgSequenceStart | WORD | 2 | +388 | +388 | 本シークレットが有効となる開始メッセージ番号。 |
| MsgSequenceEnd | WORD | 2 | +390 | +390 | 本シークレットが有効となる終了メッセージ番号。 |
| TrafficSecretType | SEC_TRAFFIC_SECRET_TYPE | 4 | +392 | +392 | トラフィックシークレットの種別を示すSEC_TRAFFIC_SECRET_TYPE列挙値。 |
| TrafficSecretSize | WORD | 2 | +396 | +396 | TrafficSecretの長さ(バイト数)。 |
| TrafficSecret | BYTE | 1 | +398 | +398 | 実際のトラフィックシークレットデータを保持する可変長バイト配列の先頭要素。 |
各言語での定義
#include <windows.h>
// SEC_TRAFFIC_SECRETS (x64 400 / x86 400 バイト)
typedef struct SEC_TRAFFIC_SECRETS {
WCHAR SymmetricAlgId[64];
WCHAR ChainingMode[64];
WCHAR HashAlgId[64];
WORD KeySize;
WORD IvSize;
WORD MsgSequenceStart;
WORD MsgSequenceEnd;
SEC_TRAFFIC_SECRET_TYPE TrafficSecretType;
WORD TrafficSecretSize;
BYTE TrafficSecret[1];
} SEC_TRAFFIC_SECRETS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SEC_TRAFFIC_SECRETS
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string SymmetricAlgId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string ChainingMode;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string HashAlgId;
public ushort KeySize;
public ushort IvSize;
public ushort MsgSequenceStart;
public ushort MsgSequenceEnd;
public int TrafficSecretType;
public ushort TrafficSecretSize;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public byte[] TrafficSecret;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SEC_TRAFFIC_SECRETS
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=64)> Public SymmetricAlgId As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=64)> Public ChainingMode As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=64)> Public HashAlgId As String
Public KeySize As UShort
Public IvSize As UShort
Public MsgSequenceStart As UShort
Public MsgSequenceEnd As UShort
Public TrafficSecretType As Integer
Public TrafficSecretSize As UShort
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public TrafficSecret() As Byte
End Structureimport ctypes
from ctypes import wintypes
class SEC_TRAFFIC_SECRETS(ctypes.Structure):
_fields_ = [
("SymmetricAlgId", ctypes.c_wchar * 64),
("ChainingMode", ctypes.c_wchar * 64),
("HashAlgId", ctypes.c_wchar * 64),
("KeySize", ctypes.c_ushort),
("IvSize", ctypes.c_ushort),
("MsgSequenceStart", ctypes.c_ushort),
("MsgSequenceEnd", ctypes.c_ushort),
("TrafficSecretType", ctypes.c_int),
("TrafficSecretSize", ctypes.c_ushort),
("TrafficSecret", ctypes.c_ubyte * 1),
]#[repr(C)]
pub struct SEC_TRAFFIC_SECRETS {
pub SymmetricAlgId: [u16; 64],
pub ChainingMode: [u16; 64],
pub HashAlgId: [u16; 64],
pub KeySize: u16,
pub IvSize: u16,
pub MsgSequenceStart: u16,
pub MsgSequenceEnd: u16,
pub TrafficSecretType: i32,
pub TrafficSecretSize: u16,
pub TrafficSecret: [u8; 1],
}import "golang.org/x/sys/windows"
type SEC_TRAFFIC_SECRETS struct {
SymmetricAlgId [64]uint16
ChainingMode [64]uint16
HashAlgId [64]uint16
KeySize uint16
IvSize uint16
MsgSequenceStart uint16
MsgSequenceEnd uint16
TrafficSecretType int32
TrafficSecretSize uint16
TrafficSecret [1]byte
}type
SEC_TRAFFIC_SECRETS = record
SymmetricAlgId: array[0..63] of WideChar;
ChainingMode: array[0..63] of WideChar;
HashAlgId: array[0..63] of WideChar;
KeySize: Word;
IvSize: Word;
MsgSequenceStart: Word;
MsgSequenceEnd: Word;
TrafficSecretType: Integer;
TrafficSecretSize: Word;
TrafficSecret: array[0..0] of Byte;
end;const SEC_TRAFFIC_SECRETS = extern struct {
SymmetricAlgId: [64]u16,
ChainingMode: [64]u16,
HashAlgId: [64]u16,
KeySize: u16,
IvSize: u16,
MsgSequenceStart: u16,
MsgSequenceEnd: u16,
TrafficSecretType: i32,
TrafficSecretSize: u16,
TrafficSecret: [1]u8,
};type
SEC_TRAFFIC_SECRETS {.bycopy.} = object
SymmetricAlgId: array[64, uint16]
ChainingMode: array[64, uint16]
HashAlgId: array[64, uint16]
KeySize: uint16
IvSize: uint16
MsgSequenceStart: uint16
MsgSequenceEnd: uint16
TrafficSecretType: int32
TrafficSecretSize: uint16
TrafficSecret: array[1, uint8]struct SEC_TRAFFIC_SECRETS
{
wchar[64] SymmetricAlgId;
wchar[64] ChainingMode;
wchar[64] HashAlgId;
ushort KeySize;
ushort IvSize;
ushort MsgSequenceStart;
ushort MsgSequenceEnd;
int TrafficSecretType;
ushort TrafficSecretSize;
ubyte[1] TrafficSecret;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SEC_TRAFFIC_SECRETS サイズ: 400 バイト(x64)
dim st, 100 ; 4byte整数×100(構造体サイズ 400 / 4 切り上げ)
; SymmetricAlgId : WCHAR (+0, 128byte) varptr(st)+0 を基点に操作(128byte:入れ子/配列)
; ChainingMode : WCHAR (+128, 128byte) varptr(st)+128 を基点に操作(128byte:入れ子/配列)
; HashAlgId : WCHAR (+256, 128byte) varptr(st)+256 を基点に操作(128byte:入れ子/配列)
; KeySize : WORD (+384, 2byte) wpoke st,384,値 / 値 = wpeek(st,384)
; IvSize : WORD (+386, 2byte) wpoke st,386,値 / 値 = wpeek(st,386)
; MsgSequenceStart : WORD (+388, 2byte) wpoke st,388,値 / 値 = wpeek(st,388)
; MsgSequenceEnd : WORD (+390, 2byte) wpoke st,390,値 / 値 = wpeek(st,390)
; TrafficSecretType : SEC_TRAFFIC_SECRET_TYPE (+392, 4byte) st.98 = 値 / 値 = st.98 (lpoke/lpeek も可)
; TrafficSecretSize : WORD (+396, 2byte) wpoke st,396,値 / 値 = wpeek(st,396)
; TrafficSecret : BYTE (+398, 1byte) varptr(st)+398 を基点に操作(1byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SEC_TRAFFIC_SECRETS
#field wchar SymmetricAlgId 64
#field wchar ChainingMode 64
#field wchar HashAlgId 64
#field short KeySize
#field short IvSize
#field short MsgSequenceStart
#field short MsgSequenceEnd
#field int TrafficSecretType
#field short TrafficSecretSize
#field byte TrafficSecret 1
#endstruct
stdim st, SEC_TRAFFIC_SECRETS ; NSTRUCT 変数を確保
st->KeySize = 100
mes "KeySize=" + st->KeySize