0
我有一個使用HSM的java程序,它使用本地API提供給我,以及只有兩個大整數的ECDSA簽名的R和S值。我需要採取這些整數並創建ASN.1編碼。任何想法,我怎麼能做到這一點?我確實有BouncyCastle運行,但是,我不熟悉可用的選項。從兩個大整數創建ASN.1
我有一個使用HSM的java程序,它使用本地API提供給我,以及只有兩個大整數的ECDSA簽名的R和S值。我需要採取這些整數並創建ASN.1編碼。任何想法,我怎麼能做到這一點?我確實有BouncyCastle運行,但是,我不熟悉可用的選項。從兩個大整數創建ASN.1
一個小例子來說明:
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));
}
}
如果你以某種方式獲得字節而不是整數,然後確保你正確設置符號位,例如通過使用'new BigInteger(1,[byte array])',其中1表示應該假設無符號編碼。 –
謝謝你!對此,我真的非常感激! –