diff --git a/prov/src/main/java/org/bouncycastle/jcajce/interfaces/MLDSAPublicKey.java b/prov/src/main/java/org/bouncycastle/jcajce/interfaces/MLDSAPublicKey.java index 877ffbc608..7b6593af15 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/interfaces/MLDSAPublicKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/interfaces/MLDSAPublicKey.java @@ -5,4 +5,10 @@ public interface MLDSAPublicKey extends PublicKey, MLDSAKey { + /** + * Return the raw encoded data representing the public key: rho || t1. + * + * @return the concatenation of rho and t1. + */ + byte[] getPublicData(); } diff --git a/prov/src/main/java/org/bouncycastle/jcajce/interfaces/MLKEMPublicKey.java b/prov/src/main/java/org/bouncycastle/jcajce/interfaces/MLKEMPublicKey.java index 832466c025..1554370d2a 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/interfaces/MLKEMPublicKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/interfaces/MLKEMPublicKey.java @@ -5,4 +5,10 @@ public interface MLKEMPublicKey extends PublicKey, MLKEMKey { + /** + * Return the raw encoded data representing the public key: t || rho. + * + * @return the concatenation of t and rho. + */ + byte[] getPublicData(); } diff --git a/prov/src/main/java/org/bouncycastle/jcajce/interfaces/SLHDSAPublicKey.java b/prov/src/main/java/org/bouncycastle/jcajce/interfaces/SLHDSAPublicKey.java index 18ffadb9a1..cb31a97339 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/interfaces/SLHDSAPublicKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/interfaces/SLHDSAPublicKey.java @@ -5,4 +5,10 @@ public interface SLHDSAPublicKey extends PublicKey, SLHDSAKey { + /** + * Return the raw encoded data representing the public key: seed || root. + * + * @return the concatenation of the seed and root values. + */ + byte[] getPublicData(); } diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPrivateKey.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPrivateKey.java index f1dc16f2d9..1b0911f926 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPrivateKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPrivateKey.java @@ -13,6 +13,9 @@ import org.bouncycastle.pqc.crypto.util.PrivateKeyFactory; import org.bouncycastle.pqc.jcajce.provider.util.KeyUtil; import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Fingerprint; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; public class BCMLDSAPrivateKey implements MLDSAPrivateKey @@ -28,7 +31,7 @@ public BCMLDSAPrivateKey( MLDSAPrivateKeyParameters params) { this.params = params; - algorithm = MLDSAParameterSpec.fromName(params.getParameters().getName()).getName().toUpperCase(); + this.algorithm = MLDSAParameterSpec.fromName(params.getParameters().getName()).getName().toUpperCase(); } public BCMLDSAPrivateKey(PrivateKeyInfo keyInfo) @@ -79,7 +82,7 @@ public int hashCode() } /** - * @return name of the algorithm - "ML-DSA" + * @return name of the algorithm */ public final String getAlgorithm() { @@ -111,6 +114,26 @@ public String getFormat() return "PKCS#8"; } + public String toString() + { + StringBuilder buf = new StringBuilder(); + String nl = Strings.lineSeparator(); + byte[] keyBytes = params.getPublicKey(); + + // -DM Hex.toHexString + buf.append(getAlgorithm()) + .append(" ") + .append("Private Key").append(" [") + .append(new Fingerprint(keyBytes).toString()) + .append("]") + .append(nl) + .append(" public data: ") + .append(Hex.toHexString(keyBytes)) + .append(nl); + + return buf.toString(); + } + MLDSAPrivateKeyParameters getKeyParams() { return params; diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPublicKey.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPublicKey.java index a259a32a64..69e2edd393 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPublicKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPublicKey.java @@ -12,6 +12,9 @@ import org.bouncycastle.pqc.crypto.util.PublicKeyFactory; import org.bouncycastle.pqc.crypto.util.SubjectPublicKeyInfoFactory; import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Fingerprint; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; public class BCMLDSAPublicKey implements MLDSAPublicKey @@ -74,6 +77,11 @@ public final String getAlgorithm() return MLDSAParameterSpec.fromName(params.getParameters().getName()).getName(); } + public byte[] getPublicData() + { + return params.getEncoded(); + } + public byte[] getEncoded() { try @@ -98,6 +106,26 @@ public MLDSAParameterSpec getParameterSpec() return MLDSAParameterSpec.fromName(params.getParameters().getName()); } + public String toString() + { + StringBuilder buf = new StringBuilder(); + String nl = Strings.lineSeparator(); + byte[] keyBytes = params.getEncoded(); + + // -DM Hex.toHexString + buf.append(getAlgorithm()) + .append(" ") + .append("Public Key").append(" [") + .append(new Fingerprint(keyBytes).toString()) + .append("]") + .append(nl) + .append(" public data: ") + .append(Hex.toHexString(keyBytes)) + .append(nl); + + return buf.toString(); + } + CipherParameters getKeyParams() { return params; diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPrivateKey.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPrivateKey.java index 186687f340..687e575b47 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPrivateKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPrivateKey.java @@ -1,5 +1,9 @@ package org.bouncycastle.jcajce.provider.asymmetric.mlkem; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + import org.bouncycastle.asn1.ASN1Set; import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; import org.bouncycastle.jcajce.interfaces.MLKEMPrivateKey; @@ -9,10 +13,9 @@ import org.bouncycastle.pqc.crypto.util.PrivateKeyFactory; import org.bouncycastle.pqc.crypto.util.PrivateKeyInfoFactory; import org.bouncycastle.util.Arrays; - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; +import org.bouncycastle.util.Fingerprint; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; public class BCMLKEMPrivateKey implements MLKEMPrivateKey @@ -41,7 +44,7 @@ private void init(PrivateKeyInfo keyInfo) { this.attributes = keyInfo.getAttributes();; this.params = (MLKEMPrivateKeyParameters)PrivateKeyFactory.createKey(keyInfo); - this.algorithm = params.getParameters().getName(); + this.algorithm = MLKEMParameterSpec.fromName(params.getParameters().getName()).getName().toUpperCase(); } /** @@ -78,11 +81,10 @@ public int hashCode() public final String getAlgorithm() { return algorithm; -// return MLKEMParameterSpec.fromName(params.getParameters().getName()).getName().toUpperCase(); } + public byte[] getEncoded() { - try { PrivateKeyInfo pki = PrivateKeyInfoFactory.createPrivateKeyInfo(params, attributes); @@ -110,7 +112,27 @@ public String getFormat() return "PKCS#8"; } - public MLKEMPrivateKeyParameters getKeyParams() + public String toString() + { + StringBuilder buf = new StringBuilder(); + String nl = Strings.lineSeparator(); + byte[] keyBytes = params.getPublicKey(); + + // -DM Hex.toHexString + buf.append(getAlgorithm()) + .append(" ") + .append("Private Key").append(" [") + .append(new Fingerprint(keyBytes).toString()) + .append("]") + .append(nl) + .append(" public data: ") + .append(Hex.toHexString(keyBytes)) + .append(nl); + + return buf.toString(); + } + + MLKEMPrivateKeyParameters getKeyParams() { return params; } diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPublicKey.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPublicKey.java index c8e0b747b5..22de2720bd 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPublicKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPublicKey.java @@ -1,5 +1,9 @@ package org.bouncycastle.jcajce.provider.asymmetric.mlkem; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; import org.bouncycastle.jcajce.interfaces.MLKEMPublicKey; import org.bouncycastle.jcajce.spec.MLKEMParameterSpec; @@ -7,10 +11,9 @@ import org.bouncycastle.pqc.crypto.util.PublicKeyFactory; import org.bouncycastle.pqc.crypto.util.SubjectPublicKeyInfoFactory; import org.bouncycastle.util.Arrays; - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; +import org.bouncycastle.util.Fingerprint; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; public class BCMLKEMPublicKey implements MLKEMPublicKey @@ -20,7 +23,6 @@ public class BCMLKEMPublicKey private transient MLKEMPublicKeyParameters params; private transient String algorithm; - private transient byte[] encoding; public BCMLKEMPublicKey( MLKEMPublicKeyParameters params) @@ -38,13 +40,13 @@ private void init(SubjectPublicKeyInfo keyInfo) throws IOException { this.params = (MLKEMPublicKeyParameters)PublicKeyFactory.createKey(keyInfo); - this.algorithm = params.getParameters().getName(); + this.algorithm = MLKEMParameterSpec.fromName(params.getParameters().getName()).getName().toUpperCase(); } private void init(MLKEMPublicKeyParameters params) { this.params = params; - this.algorithm = params.getParameters().getName(); + this.algorithm = MLKEMParameterSpec.fromName(params.getParameters().getName()).getName().toUpperCase(); } /** * Compare this ML-KEM public key with another object. @@ -82,6 +84,11 @@ public final String getAlgorithm() return algorithm; } + public byte[] getPublicData() + { + return params.getEncoded(); + } + public byte[] getEncoded() { try @@ -106,7 +113,27 @@ public MLKEMParameterSpec getParameterSpec() return MLKEMParameterSpec.fromName(params.getParameters().getName()); } - public MLKEMPublicKeyParameters getKeyParams() + public String toString() + { + StringBuilder buf = new StringBuilder(); + String nl = Strings.lineSeparator(); + byte[] keyBytes = params.getEncoded(); + + // -DM Hex.toHexString + buf.append(getAlgorithm()) + .append(" ") + .append("Public Key").append(" [") + .append(new Fingerprint(keyBytes).toString()) + .append("]") + .append(nl) + .append(" public data: ") + .append(Hex.toHexString(keyBytes)) + .append(nl); + + return buf.toString(); + } + + MLKEMPublicKeyParameters getKeyParams() { return params; } diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPrivateKey.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPrivateKey.java index c179d068c3..a0cc8ca28e 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPrivateKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPrivateKey.java @@ -14,7 +14,9 @@ import org.bouncycastle.pqc.crypto.util.PrivateKeyFactory; import org.bouncycastle.pqc.crypto.util.PrivateKeyInfoFactory; import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Fingerprint; import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; public class BCSLHDSAPrivateKey implements SLHDSAPrivateKey @@ -72,7 +74,7 @@ public int hashCode() } /** - * @return name of the algorithm - "SLH-DSA" + * @return name of the algorithm - "SLH-DSA..." */ public final String getAlgorithm() { @@ -109,6 +111,26 @@ public String getFormat() return "PKCS#8"; } + public String toString() + { + StringBuilder buf = new StringBuilder(); + String nl = Strings.lineSeparator(); + byte[] keyBytes = params.getPublicKey(); + + // -DM Hex.toHexString + buf.append(getAlgorithm()) + .append(" ") + .append("Private Key").append(" [") + .append(new Fingerprint(keyBytes).toString()) + .append("]") + .append(nl) + .append(" public data: ") + .append(Hex.toHexString(keyBytes)) + .append(nl); + + return buf.toString(); + } + SLHDSAPrivateKeyParameters getKeyParams() { return params; diff --git a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPublicKey.java b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPublicKey.java index f603e33775..4be92e066c 100644 --- a/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPublicKey.java +++ b/prov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPublicKey.java @@ -12,7 +12,9 @@ import org.bouncycastle.pqc.crypto.util.PublicKeyFactory; import org.bouncycastle.pqc.crypto.util.SubjectPublicKeyInfoFactory; import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Fingerprint; import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; public class BCSLHDSAPublicKey implements SLHDSAPublicKey @@ -75,6 +77,11 @@ public final String getAlgorithm() return "SLH-DSA" + "-" + Strings.toUpperCase(params.getParameters().getName()); } + public byte[] getPublicData() + { + return params.getEncoded(); + } + public byte[] getEncoded() { try @@ -99,6 +106,26 @@ public SLHDSAParameterSpec getParameterSpec() return SLHDSAParameterSpec.fromName(params.getParameters().getName()); } + public String toString() + { + StringBuilder buf = new StringBuilder(); + String nl = Strings.lineSeparator(); + byte[] keyBytes = params.getEncoded(); + + // -DM Hex.toHexString + buf.append(getAlgorithm()) + .append(" ") + .append("Public Key").append(" [") + .append(new Fingerprint(keyBytes).toString()) + .append("]") + .append(nl) + .append(" public data: ") + .append(Hex.toHexString(keyBytes)) + .append(nl); + + return buf.toString(); + } + CipherParameters getKeyParams() { return params;