2017-08-02 15 views
0

私は、ネイティブAPIを使用して、2つのBig IntegersであるECDSA署名のRとSの値を与えるHSMを使用するJavaプログラムを使用しています。これらの整数を取り、ASN.1エンコーディングを作成する必要があります。どのように私はそれを行うことができるかについての任意のアイデア?私はBouncyCastleを稼働させていますが、私は利用可能なオプションに精通していません。2つの大きな整数からASN.1を作成する

答えて

3

小さな例を説明するために:あなたは何とか代わりに、整数のバイトを取得する場合

import org.bouncycastle.asn1.ASN1Integer; 
import org.bouncycastle.asn1.DERSequence; 

import javax.xml.bind.DatatypeConverter; 
import java.math.BigInteger; 

public class Main { 

    public static void main(String[] args) throws Exception { 
     BigInteger r = new BigInteger("29128391823901823918293108120938102381912839182390182391829310812093810238199"); 
     BigInteger s = new BigInteger("38663726871681756650018917824777578348866372687168175665001891782477757834811"); 

     ASN1Integer asn1R = new ASN1Integer(r); 
     ASN1Integer asn1S = new ASN1Integer(s); 

     DERSequence seq = new DERSequence(new ASN1Integer[]{asn1R, asn1S}); 
     byte[] encoded = seq.getEncoded(); 
     System.out.println(DatatypeConverter.printHexBinary(encoded)); 
    } 
} 
+0

、あなたは正しく符号ビットを設定することを確認し、例えば'new BigInteger(1、[byte array])'を使用して符号なし符号化が仮定されるべきであることを示す。 –

+0

ありがとうございました!ほんとうにありがとう! –

関連する問題