diff --git a/crypto/src/pqc/asn1/CmcePrivateKey.cs b/crypto/src/pqc/asn1/CmcePrivateKey.cs
index c6ba33352..743b801f5 100644
--- a/crypto/src/pqc/asn1/CmcePrivateKey.cs
+++ b/crypto/src/pqc/asn1/CmcePrivateKey.cs
@@ -18,6 +18,7 @@ using Org.BouncyCastle.Utilities;
// </pre>
namespace Org.BouncyCastle.Pqc.Asn1
{
+ // TODO[api] Should only be Asn1Encodable
public class CmcePrivateKey
: Asn1Object
{
@@ -84,7 +85,7 @@ namespace Org.BouncyCastle.Pqc.Asn1
public Asn1Object ToAsn1Primitive()
{
- Asn1EncodableVector v = new Asn1EncodableVector();
+ Asn1EncodableVector v = new Asn1EncodableVector(7);
v.Add(new DerInteger(version));
v.Add(new DerOctetString(delta));
@@ -94,9 +95,9 @@ namespace Org.BouncyCastle.Pqc.Asn1
v.Add(new DerOctetString(s));
// todo optional publickey
- if(PublicKey != null)
+ if (publicKey != null)
{
- v.Add(new CmcePublicKey(PublicKey.T));
+ v.Add(new CmcePublicKey(publicKey.T));
}
return new DerSequence(v);
diff --git a/crypto/src/pqc/asn1/CmcePublicKey.cs b/crypto/src/pqc/asn1/CmcePublicKey.cs
index 1e417c5df..00a2afe19 100644
--- a/crypto/src/pqc/asn1/CmcePublicKey.cs
+++ b/crypto/src/pqc/asn1/CmcePublicKey.cs
@@ -4,6 +4,7 @@ using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Pqc.Asn1
{
+ // TODO[api] Should only be Asn1Encodable
public class CmcePublicKey
: Asn1Object
{
@@ -23,9 +24,7 @@ namespace Org.BouncyCastle.Pqc.Asn1
public Asn1Object ToAsn1Primitive()
{
- Asn1EncodableVector v = new Asn1EncodableVector();
- v.Add(new DerOctetString(t));
- return new DerSequence(v);
+ return new DerSequence(new DerOctetString(t));
}
public static CmcePublicKey GetInstance(Object o)
diff --git a/crypto/src/pqc/crypto/utils/PqcPrivateKeyInfoFactory.cs b/crypto/src/pqc/crypto/utils/PqcPrivateKeyInfoFactory.cs
index ce0300cf4..3d1b1b679 100644
--- a/crypto/src/pqc/crypto/utils/PqcPrivateKeyInfoFactory.cs
+++ b/crypto/src/pqc/crypto/utils/PqcPrivateKeyInfoFactory.cs
@@ -105,8 +105,7 @@ namespace Org.BouncyCastle.Pqc.Crypto.Utilities
#pragma warning restore CS0618 // Type or member is obsolete
if (privateKey is FalconPrivateKeyParameters falconPrivateKeyParameters)
{
- Asn1EncodableVector v = new Asn1EncodableVector();
-
+ Asn1EncodableVector v = new Asn1EncodableVector(4);
v.Add(new DerInteger(1));
v.Add(new DerOctetString(falconPrivateKeyParameters.GetSpolyLittleF()));
v.Add(new DerOctetString(falconPrivateKeyParameters.GetG()));
@@ -120,8 +119,7 @@ namespace Org.BouncyCastle.Pqc.Crypto.Utilities
}
if (privateKey is KyberPrivateKeyParameters kyberPrivateKeyParameters)
{
- Asn1EncodableVector v = new Asn1EncodableVector();
-
+ Asn1EncodableVector v = new Asn1EncodableVector(4);
v.Add(new DerInteger(0));
v.Add(new DerOctetString(kyberPrivateKeyParameters.S));
v.Add(new DerOctetString(kyberPrivateKeyParameters.Hpk));
@@ -130,7 +128,7 @@ namespace Org.BouncyCastle.Pqc.Crypto.Utilities
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(
PqcUtilities.KyberOidLookup(kyberPrivateKeyParameters.Parameters));
- Asn1EncodableVector vPub = new Asn1EncodableVector();
+ Asn1EncodableVector vPub = new Asn1EncodableVector(2);
vPub.Add(new DerOctetString(kyberPrivateKeyParameters.T));
vPub.Add(new DerOctetString(kyberPrivateKeyParameters.Rho));
@@ -139,8 +137,7 @@ namespace Org.BouncyCastle.Pqc.Crypto.Utilities
}
if (privateKey is DilithiumPrivateKeyParameters dilithiumPrivateKeyParameters)
{
- Asn1EncodableVector v = new Asn1EncodableVector();
-
+ Asn1EncodableVector v = new Asn1EncodableVector(7);
v.Add(new DerInteger(0));
v.Add(new DerBitString(dilithiumPrivateKeyParameters.Rho));
v.Add(new DerBitString(dilithiumPrivateKeyParameters.K));
@@ -152,7 +149,7 @@ namespace Org.BouncyCastle.Pqc.Crypto.Utilities
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(
PqcUtilities.DilithiumOidLookup(dilithiumPrivateKeyParameters.Parameters));
- Asn1EncodableVector vPub = new Asn1EncodableVector();
+ Asn1EncodableVector vPub = new Asn1EncodableVector(2);
vPub.Add(new DerOctetString(dilithiumPrivateKeyParameters.Rho));
vPub.Add(new DerOctetString(dilithiumPrivateKeyParameters.T1));
diff --git a/crypto/src/pqc/crypto/utils/PqcSubjectPublicKeyInfoFactory.cs b/crypto/src/pqc/crypto/utils/PqcSubjectPublicKeyInfoFactory.cs
index 756308460..672108789 100644
--- a/crypto/src/pqc/crypto/utils/PqcSubjectPublicKeyInfoFactory.cs
+++ b/crypto/src/pqc/crypto/utils/PqcSubjectPublicKeyInfoFactory.cs
@@ -115,7 +115,7 @@ namespace Org.BouncyCastle.Pqc.Crypto.Utilities
{
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(
PqcUtilities.KyberOidLookup(kyberPublicKeyParameters.Parameters));
- Asn1EncodableVector v = new Asn1EncodableVector();
+ Asn1EncodableVector v = new Asn1EncodableVector(2);
v.Add(new DerOctetString(kyberPublicKeyParameters.T));
v.Add(new DerOctetString(kyberPublicKeyParameters.Rho));
return new SubjectPublicKeyInfo(algorithmIdentifier, new DerSequence(v));
|