Apache Harmony ASN.1/BER クラスを使用して LDAP バインド要求を解析しようとしています (別のライブラリを使用できますが、Apache ライセンスがあるため、それを選択しました)。
私の質問は、特に ASN.1 の「CHOICE」のエンコーディングに関するものです。LDAP ASN.1 スキーマ ( http://www.rfc-editor.org/rfc/rfc2251.txt ) を定義する RFC は、バインド要求の一部として次を提供します。
BindRequest ::= [APPLICATION 0] SEQUENCE {
version INTEGER (1 .. 127),
name LDAPDN,
authentication AuthenticationChoice }
AuthenticationChoice ::= CHOICE {
simple [0] OCTET STRING,
-- 1 and 2 reserved
sasl [3] SaslCredentials }
SaslCredentials ::= SEQUENCE {
mechanism LDAPString,
credentials OCTET STRING OPTIONAL }
そのCHOICEは実際にどのようにエンコードされていますか?
JXplorer を使用してサンプルのバインド要求を生成し、送信された生データをキャプチャしました。次のようになります。
00000000 30 31 02 01 01 60 2c 02 01 03 04 1b 75 69 64 3d |01...`,.....uid=|
00000010 74 65 73 74 75 73 65 72 2c 64 63 3d 74 65 73 74 |testuser,dc=test|
00000020 2c 64 63 3d 63 6f 6d 80 0a 74 65 73 74 69 6e 67 |,dc=com..testing|
00000030 31 32 33 |123|
そこにある 80 (オフセット 0x27) は、その選択を表しているようです。十分に公平です-そして、(http://en.wikipedia.org/wiki/Basic_Encoding_Rules#BER_encodingごとに)「コンテキスト固有」であることを示すために最後のビットが設定されていることがわかります(つまり、このアプリケーション/プロトコルによって定義されます)しかしこれが「単純な」認証か「sasl」認証かはどうすればわかりますか? どのオプションが使用されているかを示すものは何ですか? この場合、次のバイト (0x0a) が文字列の長さのように見えます。つまり、これは OctetString か、そのようなものである可能性があります。 .
上記の CHOICE セクションの [0] と [3] が何を意味するかもわかりません。オプションは 4 つあるのに、番号 0 と 3 のオプションだけが使用されているということですか?