javabouncycastledsa

How to read DER DSA private key to AsymmetricKeyParameter in bouncy castle (Java)


How to read DER file with private DSA key (4096 bit) into AsymmetricKeyParameter for usage in DSASigner ?

The following code I tried:

 byte[] privateKeyBytes = FileUtils.readFileToByteArray(new File(
                    "sign-key-private.der"));
 AsymmetricKeyParameter privateKey = PrivateKeyFactory
                    .createKey(privateKeyBytes);

Result is an exception:

java.lang.IllegalArgumentException: unknown object in getInstance: org.bouncycastle.asn1.ASN1Integer
    at org.bouncycastle.asn1.ASN1Sequence.getInstance(Unknown Source)
    at org.bouncycastle.asn1.x509.AlgorithmIdentifier.getInstance(Unknown Source)
    at org.bouncycastle.asn1.pkcs.PrivateKeyInfo.<init>(Unknown Source)
    at org.bouncycastle.asn1.pkcs.PrivateKeyInfo.getInstance(Unknown Source)
    at org.bouncycastle.crypto.util.PrivateKeyFactory.createKey(Unknown Source)
    at test.security.core.Program.main(Program.java:41)

Solution

  • The workaround solution I have finally used was to convert key to PEM format and use the following:

     @Cleanup
     FileReader privateKeyReader = new FileReader(new File("key.pem"));
     @Cleanup
     PEMParser parser = new PEMParser(privateKeyReader);
    
     PEMKeyPair keyPair = (PEMKeyPair) parser.readObject();
     AsymmetricKeyParameter privateKey = PrivateKeyFactory
         .createKey(keyPair.getPrivateKeyInfo());
     AsymmetricKeyParameter publicKey = PublicKeyFactory
         .createKey(keyPair.getPublicKeyInfo());