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

CERT_RDN_ATTR

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

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

フィールド

フィールドサイズx64x86説明
pszObjIdLPSTR8/4+0+0

この構造体で定義される属性の型を表す オブジェクト識別子 (OID) です。このメンバーには次のいずれかの OID を指定できます。

意味
szOID_AUTHORITY_REVOCATION_LIST
セキュリティ属性です。
szOID_BUSINESS_CATEGORY
大文字と小文字を区別しない文字列です。 説明属性です。
szOID_CA_CERTIFICATE
セキュリティ属性です。
szOID_CERTIFICATE_REVOCATION_LIST
セキュリティ属性です。
szOID_COMMON_NAME
大文字と小文字を区別しない文字列です。 ラベル付け属性です。
szOID_COUNTRY_NAME
2 文字の印字可能文字列です。 地理的属性です。
szOID_CROSS_CERTIFICATE_PAIR
セキュリティ属性です。
szOID_DESCRIPTION
大文字と小文字を区別しない文字列です。説明属性です。
szOID_DESTINATION_INDICATOR
印字可能文字列です。 電気通信アドレス指定属性です。
szOID_DEVICE_SERIAL_NUMBER
印字可能文字列です。 ラベル付け属性です。
szOID_DOMAIN_COMPONENT
IA5 文字列です。"com." のような DNS 名の構成要素です。
szOID_FACSIMILE_TELEPHONE_NUMBER
電気通信アドレス指定属性です。
szOID_GIVEN_NAME
大文字と小文字を区別しない文字列です。 名前属性です。
szOID_INITIALS
大文字と小文字を区別しない文字列です。名前属性です。
szOID_INTERNATIONAL_ISDN_NUMBER
数字文字列です。 電気通信アドレス指定属性です。
szOID_LOCALITY_NAME
大文字と小文字を区別しない文字列です。 地理的属性です。
szOID_MEMBER
関係アプリケーション属性です。
szOID_ORGANIZATION_NAME
大文字と小文字を区別しない文字列です。 組織属性です。
szOID_ORGANIZATIONAL_UNIT_NAME
大文字と小文字を区別しない文字列です。 組織属性です。
szOID_OWNER
関係アプリケーション属性です。
szOID_PHYSICAL_DELIVERY_OFFICE_NAME
大文字と小文字を区別しない文字列です。 郵便アドレス指定属性です。
szOID_PKCS_12_FRIENDLY_NAME_ATTR
PKCS #12 属性です。
szOID_PKCS_12_LOCAL_KEY_ID
PKCS #12 属性です。
szOID_POST_OFFICE_BOX
大文字と小文字を区別しない文字列です。 郵便アドレス指定属性です。
szOID_POSTAL_ADDRESS
印字可能文字列です。 郵便アドレス指定属性です。
szOID_POSTAL_CODE
大文字と小文字を区別しない文字列です。 郵便アドレス指定属性です。
szOID_PREFERRED_DELIVERY_METHOD
優先設定属性です。
szOID_PRESENTATION_ADDRESS
OSI アプリケーション属性です。
szOID_REGISTERED_ADDRESS
電気通信アドレス指定属性です。
szOID_ROLE_OCCUPANT
関係アプリケーション属性です。
szOID_RSA_emailAddr
IA5 文字列です。 電子メール属性です。
szOID_SEARCH_GUIDE
説明属性です。
szOID_SEE_ALSO
関係アプリケーション属性です。
szOID_STATE_OR_PROVINCE_NAME
大文字と小文字を区別しない文字列です。 地理的属性です。
szOID_STREET_ADDRESS
大文字と小文字を区別しない文字列です。 地理的属性です。
szOID_SUPPORTED_APPLICATION_CONTEXT
OSI アプリケーション属性です。
szOID_SUR_NAME
大文字と小文字を区別しない文字列です。 ラベル付け属性です。
szOID_TELEPHONE_NUMBER
電気通信アドレス指定属性です。
szOID_TELETEXT_TERMINAL_IDENTIFIER
電気通信アドレス指定属性です。
szOID_TELEX_NUMBER
電気通信アドレス指定属性です。
szOID_TITLE
大文字と小文字を区別しない文字列です。 組織属性です。
szOID_USER_CERTIFICATE
セキュリティ属性です。
szOID_USER_PASSWORD
セキュリティ属性です。
szOID_X21_ADDRESS
数字文字列です。 電気通信アドレス指定属性です。
dwValueTypeDWORD4+8+4

Value メンバーの解釈方法を示します。

このメンバーには次のいずれかの値を指定できます。

意味
CERT_RDN_ANY_TYPE
pszObjId メンバーによって、想定される型と長さが決まります。
CERT_RDN_BMP_STRING
Unicode 文字 (16 ビット) の配列です。
CERT_RDN_ENCODED_BLOB
エンコードされたデータ BLOB です。
CERT_RDN_GENERAL_STRING
現在は使用されていません。
CERT_RDN_GRAPHIC_STRING
現在は使用されていません。
CERT_RDN_IA5_STRING
IA5 (ASCII) 文字の任意の文字列です。
CERT_RDN_INT4_STRING
INT4 要素 (32 ビット) の配列です。
CERT_RDN_ISO646_STRING
128 文字の文字セット (8 ビット) です。
CERT_RDN_NUMERIC_STRING
0 から 9 までの文字と空白文字のみです (8 ビット)。
CERT_RDN_OCTET_STRING
オクテット (8 ビット) の任意の文字列です。
CERT_RDN_PRINTABLE_STRING
印字可能文字 (8 ビット) の任意の文字列です。
CERT_RDN_T61_STRING
T.61 文字 (8 ビット) の任意の文字列です。
CERT_RDN_TELETEX_STRING
T.61 文字 (8 ビット) の任意の文字列です
CERT_RDN_UNICODE_STRING
Unicode 文字 (16 ビット) の配列です。
CERT_RDN_UNIVERSAL_STRING
INT4 要素 (32 ビット) の配列です。
CERT_RDN_UTF8_STRING
16 ビット Unicode 文字の配列で、転送時には 1 ~ 3 個の 8 ビット文字の並びとして UTF8 エンコードされます。
CERT_RDN_VIDEOTEX_STRING
ビデオテキスト文字の任意の文字列です。
CERT_RDN_VISIBLE_STRING
95 文字の文字セット (8 ビット) です。
 

次のフラグは、ビット単位の OR 演算で組み合わせて dwValueType メンバーに設定できます。

意味
CERT_RDN_DISABLE_CHECK_TYPE_FLAG
エンコード時に使用します。設定すると、文字がその値の型として有効かどうかのチェックを行いません。
CERT_RDN_DISABLE_IE4_UTF8_FLAG
デコード時に使用します。既定では、CERT_RDN_T61_STRING でエンコードされた値は最初に UTF8 としてデコードされます。UTF8 でのデコードに失敗した場合、その値は 8 ビット文字としてデコードされます。このフラグを設定すると、最初の UTF8 としてのデコードの試行を省略し、値を 8 ビット文字としてデコードします。
CERT_RDN_ENABLE_T61_UNICODE_FLAG
エンコード時に使用します。設定すると、すべての Unicode 文字が <= 0xFF の場合に、CERT_RDN_UNICODE_STRING 値ではなく CERT_RDN_T61_STRING 値が選択されます。
CERT_RDN_ENABLE_UTF8_UNICODE_FLAG
エンコード時に使用します。設定すると、文字列は CERT_RDN_UNICODE_STRING 値ではなく CERT_RDN_UTF8_STRING 値でエンコードされます。
CERT_RDN_FORCE_UTF8_UNICODE_FLAG
エンコード時に使用します。設定すると、DirectoryString 型の文字列は CERT_RDN_PRINTABLE_STRING 値ではなく CERT_RDN_UTF8_STRING 値でエンコードされます。さらに、CERT_RDN_ENABLE_UTF8_UNICODE_FLAG も有効になります。

Windows Vista、Windows Server 2003、Windows XP:  このフラグはサポートされていません。

CERT_RDN_ENABLE_PUNYCODE_FLAG
エンコード時に使用します。文字列に電子メールの RDN が含まれ、その電子メールアドレスが Punycode エンコードされている場合、生成される電子メールアドレスは IA5String としてエンコードされます。ホスト名の Punycode エンコードは、 ラベル単位で実行されます。

デコード時に使用します。名前に電子メールの RDN が含まれ、その電子メールアドレスのローカル部またはホスト名の部分に Punycode エンコードされた IA5String が含まれている場合、 RDN の文字列値は対応する Unicode に変換されます。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP:  このフラグはサポートされていません。

ValueCRYPT_INTEGER_BLOB16/8+16+8

属性の値を格納する CERT_RDN_VALUE_BLOB です。 ValuecbData メンバーは、pbData メンバーの長さ (バイト単位) です。 pbData の文字列に含まれる要素数ではありません。

たとえば、DWORD は 32 ビット、つまり 4 バイトです。 pbDataDWORD の配列である場合、cbData は配列内の DWORD 要素数の 4 倍になります。 SHORT は 16 ビット、つまり 2 バイトです。 pbDataSHORT 要素の配列である場合、cbData は配列の長さの 2 倍でなければなりません。

ValuepbData メンバーには、NULL で終わる 8 ビットまたは 16 ビット文字の配列、あるいは固定長の要素配列を指定できます。 dwValueTypeCERT_RDN_ENCODED_BLOB が設定されている場合、pbData はエンコードされています。

公式ドキュメント

CERT_RDN_ATTR 構造体は、相対識別名 (RDN) の 1 つの属性を保持します。RDN 全体は、CERT_RDN_ATTR 構造体の配列を含む CERT_RDN 構造体で表現されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// CRYPT_INTEGER_BLOB  (x64 16 / x86 8 バイト)
typedef struct CRYPT_INTEGER_BLOB {
    DWORD cbData;
    BYTE* pbData;
} CRYPT_INTEGER_BLOB;

// CERT_RDN_ATTR  (x64 32 / x86 16 バイト)
typedef struct CERT_RDN_ATTR {
    LPSTR pszObjId;
    DWORD dwValueType;
    CRYPT_INTEGER_BLOB Value;
} CERT_RDN_ATTR;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CRYPT_INTEGER_BLOB
{
    public uint cbData;
    public IntPtr pbData;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CERT_RDN_ATTR
{
    public IntPtr pszObjId;
    public uint dwValueType;
    public CRYPT_INTEGER_BLOB Value;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CRYPT_INTEGER_BLOB
    Public cbData As UInteger
    Public pbData As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CERT_RDN_ATTR
    Public pszObjId As IntPtr
    Public dwValueType As UInteger
    Public Value As CRYPT_INTEGER_BLOB
End Structure
import ctypes
from ctypes import wintypes

class CRYPT_INTEGER_BLOB(ctypes.Structure):
    _fields_ = [
        ("cbData", wintypes.DWORD),
        ("pbData", ctypes.c_void_p),
    ]

class CERT_RDN_ATTR(ctypes.Structure):
    _fields_ = [
        ("pszObjId", ctypes.c_void_p),
        ("dwValueType", wintypes.DWORD),
        ("Value", CRYPT_INTEGER_BLOB),
    ]
#[repr(C)]
pub struct CRYPT_INTEGER_BLOB {
    pub cbData: u32,
    pub pbData: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct CERT_RDN_ATTR {
    pub pszObjId: *mut core::ffi::c_void,
    pub dwValueType: u32,
    pub Value: CRYPT_INTEGER_BLOB,
}
import "golang.org/x/sys/windows"

type CRYPT_INTEGER_BLOB struct {
	cbData uint32
	pbData uintptr
}

type CERT_RDN_ATTR struct {
	pszObjId uintptr
	dwValueType uint32
	Value CRYPT_INTEGER_BLOB
}
type
  CRYPT_INTEGER_BLOB = record
    cbData: DWORD;
    pbData: Pointer;
  end;

  CERT_RDN_ATTR = record
    pszObjId: Pointer;
    dwValueType: DWORD;
    Value: CRYPT_INTEGER_BLOB;
  end;
const CRYPT_INTEGER_BLOB = extern struct {
    cbData: u32,
    pbData: ?*anyopaque,
};

const CERT_RDN_ATTR = extern struct {
    pszObjId: ?*anyopaque,
    dwValueType: u32,
    Value: CRYPT_INTEGER_BLOB,
};
type
  CRYPT_INTEGER_BLOB {.bycopy.} = object
    cbData: uint32
    pbData: pointer

  CERT_RDN_ATTR {.bycopy.} = object
    pszObjId: pointer
    dwValueType: uint32
    Value: CRYPT_INTEGER_BLOB
struct CRYPT_INTEGER_BLOB
{
    uint cbData;
    void* pbData;
}

struct CERT_RDN_ATTR
{
    void* pszObjId;
    uint dwValueType;
    CRYPT_INTEGER_BLOB Value;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CERT_RDN_ATTR サイズ: 16 バイト(x86)
dim st, 4    ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; pszObjId : LPSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwValueType : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Value : CRYPT_INTEGER_BLOB (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CERT_RDN_ATTR サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; pszObjId : LPSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; dwValueType : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; Value : CRYPT_INTEGER_BLOB (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global CRYPT_INTEGER_BLOB
    #field int cbData
    #field intptr pbData
#endstruct

#defstruct global CERT_RDN_ATTR
    #field intptr pszObjId
    #field int dwValueType
    #field CRYPT_INTEGER_BLOB Value
#endstruct

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