2012-03-06 21 views
1

Bouncy Castleライブラリのバージョン146のCMSAuthenticatedDataを使用していますが、正しく作成でき、ASN.1ダンプを調べることで検証できますコンテンツを取得します。Bouncy CastleのCMSAuthenticatedData [Java]からカプセル化されたコンテンツを取得する

認証データオブジェクトが発生して作成され、このように:

CMSAuthenticatedDataGenerator generator = new CMSAuthenticatedDataGenerator(); 
CMSProcessableByteArray myContent = new CMSProcessableByteArray(myBytes); 
CMSAuthenticatedData cmsData = generator.generate(myContent, myMacCalculator); 

cmsDataは、サーバに送信.getEncoded()とシリアル化され、バイト[]コンストラクタとデシリアライズ。 RFCから、myBytesはAuthenticatedDataオブジェクト内のencapContentInfoフィールドにあるはずですが、取得できません。ここで私はこれまで試したものです:

// The original byte array I want to retrieve is 633 bytes long. 

cmsData.getEncoded(); 
// returns ASN.1 for authData OID and AuthenticatedData object. Size: 724 

cmsData.getContentInfo(); 
// Same as cmsData.getEncoded(). Size: 724 

cmsData.getContentInfo().getContent().getDERObject().getEncoded(); 
// returns ASN.1 for AuthenticatedData object. Size: 703 

だから、これはさえ可能である、または私はASN.1のバイト配列を解析し、私自身の実装を展開する必要がありますか?研究の週間後

答えて

0

は、私がorg.bouncycastle.asn1.cms.AuthenticatedDataを使用して解決策を見つけた:

CMSAuthenticatedData cmsData; // <- this is the object created. 
byte[] cmsBytes = cmsData.getContentInfo().getContent().getDERObject().getEncoded(); 
ASN1Sequence byteSeq = (ASN1Sequence) ASN1Object.fromByteArray(rawAuthenticatedDataBytes) 
AuthenticatedData authData = new AuthenticatedData(byteSeq); 
byte[] contentBytes = authData.getEncapsulatedContentInfo().getContent().getDERObject().getEncoded() 

私は確かに、これは最も簡単な方法ではありません願っていますが、それは私が見つけただけでした。

関連する問題