Re: Re: Re: why publickey sequence use DLSequence in CMP cr-CertTemplate entity ?
David Hook <dgh-rTAZ0PM/[email protected]> Sat, 25 May 2019 15:47:58 +1000
| Newsgroups | gmane.comp.encryption.bouncy-castle.devel |
|---|---|
| Message-ID | <[email protected]> |
I'm not sure I understand this one. The object's correct - it's just
implicitly tagged. Can you expand on what you think the problem is?
Thanks,
David
On 24/5/19 3:43 am, Matti Aarnio wrote:
> Hi David,
>
> The code below shows this bad request generation formatting.
> The same badness happens for RSA key too.
> ( KeyPairgenerator.getInstance("RSA","BC"); kpg.initialize(1024); )
>
> Therefore the problem is probably in the CertTemplateBuilder.build() method.
> Or more precisely the addOptional() method inside it:
> DERTaggedObject dto = new DERTaggedObject(false, 6, keyInfo);
>
> Why does that encode the tagged thing incorrectly?
>
> BR, Matti Aarnio
>
>
> import java.math.BigInteger;
> import java.security.KeyPair;
> import java.security.KeyPairGenerator;
> import java.security.PublicKey;
> import java.security.Security;
> import java.security.spec.ECGenParameterSpec;
>
> import org.bouncycastle.asn1.DERTaggedObject;
> import org.bouncycastle.asn1.crmf.CertTemplate;
> import org.bouncycastle.asn1.crmf.CertTemplateBuilder;
> import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
> import org.bouncycastle.cert.crmf.CertificateRequestMessage;
> import org.bouncycastle.cert.crmf.CertificateRequestMessageBuilder;
> import org.bouncycastle.jce.provider.BouncyCastleProvider;
> import org.bouncycastle.util.encoders.Hex;
>
> public class TestSM2Keygen {
>
> public static void main(String[]args) {
> try {
> Security.addProvider(new BouncyCastleProvider());
>
> final ECGenParameterSpec ecGenSpec = new ECGenParameterSpec("sm2p256v1");
> final KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC","BC");
> kpg.initialize(ecGenSpec);
> final KeyPair kp = kpg.generateKeyPair();
> final PublicKey pubKey = kp.getPublic();
> final byte[] pubKeyDer = pubKey.getEncoded();
> final SubjectPublicKeyInfo keyInfo = SubjectPublicKeyInfo.getInstance(pubKeyDer);
> final byte[] spkiDer = keyInfo.getEncoded();
>
> System.out.println("pubkey = "+Hex.toHexString(pubKeyDer));
> System.out.println("spki = "+Hex.toHexString(spkiDer));
>
> final CertificateRequestMessageBuilder msgBuilder = new CertificateRequestMessageBuilder(BigInteger.ONE);
> msgBuilder.setPublicKey(keyInfo);
>
> CertificateRequestMessage crm = msgBuilder.build();
> System.out.println("CRM = "+Hex.toHexString(crm.getEncoded()));
>
> final DERTaggedObject dto = new DERTaggedObject(false, 6, keyInfo);
> System.out.println("DTO = "+Hex.toHexString(dto.getEncoded()));
>
> final CertTemplateBuilder ctb = new CertTemplateBuilder();
> ctb.setPublicKey(keyInfo);
> final CertTemplate ct = ctb.build();
> System.out.println("CT = "+Hex.toHexString(ct.getEncoded()));
>
> }
> catch (Throwable e) {
> e.printStackTrace();
> }
> }
> }