問題タブ [ber]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asn.1 - EMV トランザクションでの GET PROCESSING OPTIONS コマンドの PDOL の解析
非接触 EMV カードに送信される、正しくフォーマットされた GET PROCESSING OPTIONS コマンドを作成しようとしています。この投稿は非常に役に立ちましたが、もう少し詳しく知る必要があります。
PDOL を解析するとき、各タグの長さが 2 バイトで、その後に返されるデータのサイズが続くと想定しても安全ですか?
たとえば、PDOL9F66049F02069F37049F1A02
は 、 などに分割され
9F66 04
、9F02 06
それぞれに 2 バイトのタグと、予想されるデータ値の長さの 1 バイトが含まれます。
解析時に各タグの長さが 2 バイトであると想定しても安全ですか?
tags - 未定義のタグを持つ ASN.1 BER シーケンス
非常に長い BER メッセージをデコードする必要があり、2 つの異なる状況があります。1 つには、特定のタグのない必須パラメーターがいくつかあり、暗黙的なタグを持つ多くのオプションのパラメーターがあります。もう一方には、オプションの暗黙的なタグのみがあります。たとえば、次のとおりです。
ケース 1:
など、さらに多くのパラメーターがあり、約 40 個あります。そのうちのいくつかは構築されており、内部にも構築されたパラメーターがあります。
ケース 2:
ポイントは、これらのメッセージから実際に必要なパラメーターは 3 つまたは 4 つだけということです。
残りは気にしません。必要がない場合、デコーダーがメッセージ全体をデコードするのにそれほど多くの処理時間を費やしたくありません。これを行う標準的な方法はありますか?
2 番目のケースでは、次のように ASN.1 定義を SEQUENCE から SET に変更するというアイデアを思いつきました。
つまり、解析はこれら 3 つのパラメーターを SET としてデコードするだけです。もちろん、受信時にバイナリ メッセージを変更して、SEQUENCE から SET (1 ビットのみ) に変換する必要があります。しかし、最初の SEQUENCE ではそれができません。
「不明なタグを無視する」ように指示する方法はありますか?
「EXTENSIBILITY IMPLIED」について読みましたが、それが必要なのか、それとも拡張マーカー「...」を使用しているかのように、SEQUENCE の最後に拡張性を暗示しているだけなのか理解できません。
前もって感謝します、
ルイス
matlab - BER が一定になるのはなぜですか? コードが正しくないのですか?
畳み込み符号と QAM-16 の変調方式を使用して、CDMA で 2 人のユーザー間の BER をシミュレートする作業を行っています。添付したグラフから、ユーザー 1 とユーザー 2 の BER は同じで一定です。SNR は伝送に影響を与えないようです。とにかく私はグラフを改善することができますか?これが私のコードです:
java - 自動タグで動作するオープンソース Java ASN.1 デコーダー
私はASN.1でエンコードされたストリームを扱うのは初めてで、できればJava用の無料のクラスコンパイラとデコーダを見つけるのに苦労しています。
エンコードされた 16 進文字列があります。
表記の例を次に示します。
JAC を使い始めました: https://sourceforge.net/projects/jac-asn1/ しかし、自動タグはサポートされていません。
次に jASN1 を試してみました: https://www.openmuc.org/asn1/ 自動タグをサポートしているかどうかはわかりません。Notation は問題なくコンパイルされているようですが、正しくデコードできず、タグ付けが間違っているように見えます。
エンコードされた文字列の先頭を取ると: 30 82 02 74 80 02 00 a2... これは私の理解です:
しかし、「IntersectionSituationData」のテストをエンコードすると、次のようになります。 30 81 8a 0a 02 00 a2 つまり、タイプは 'x0a' == 10 で、ASN.1 Universal ENUMERATED です。それは彼の通知を見ると理にかなっていますが、自動タグがjASN1によって無視されていると推測しています。生成された Java クラスを見ると、SemiDialogID が、ユニバーサル クラス識別子を使用する BerEnum を拡張していることがわかります。
jASN1 を自動タグで動作させるために必要なことはありますか、それとも別のライブラリが必要ですか? 後者の場合、人々は何を推奨しますか? 理想的には、使いやすいオープン ソースの Java ソリューションを探しています。C ソリューションで間に合わせ、JNI を使用して動作させることができると思います。
encoding - 複数のカプセル化されたオクテット文字列を使用した ASN.1 不定長エンコーディングの解釈
私はこのようなBER構造を持っています...
$ openssl asn1parse -inform der -in test.der -i -dump
...またはder2asciiスタイルで...
私が知っていること: 0x0000 を含む場合など、プリミティブ型はあいまいさを導入する可能性があるため、不定長エンコーディングには構築された型が含まれている必要があります。知りたいこと: この BER 構造を解析するとき、デコーダはどのように動作する必要がありますか? 両方の OCTET STRING のヘッダー バイトがエンコードに含まれていますか? はいの場合、不定長のバイトデータはどのようにエンコードされますか? 2 番目の OCTET STRING がたとえば INTEGER の場合、アプリケーションは [0] とタグ付けされた TLV フィールドの値をどのように解釈しますか?
CMS 標準では、フィールドは単一の OCTET STRING として定義されているため、この質問をしていますが、ほとんどの BER エンコーディングでは、常に 2 つのフィールドが表示されます。これは、不定長エンコーディングのみによるものですか? 何か不足していますか?
ITU-T X.690 から:
8.1.4 内容オクテット
内容のオクテットは、0、1、または複数のオクテットで構成され、後続の節で指定されているデータ値をエンコードするものとします。
注 – 内容のオクテットは、データ値のタイプによって異なります。後続の句は、ASN.1 の型の定義と同じ順序に従います。
これは、構築されたすべての型を配置でき、アプリケーションは構築された TLV 構造の値部分のみを解釈する必要があるということですか?