|
32 | 32 | import org.bouncycastle.pqc.crypto.cmce.CMCEPublicKeyParameters; |
33 | 33 | import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumParameters; |
34 | 34 | import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumPublicKeyParameters; |
35 | | -import org.bouncycastle.pqc.crypto.mlkem.MLKEMParameters; |
36 | | -import org.bouncycastle.pqc.crypto.mlkem.MLKEMPublicKeyParameters; |
37 | 35 | import org.bouncycastle.pqc.crypto.falcon.FalconParameters; |
38 | 36 | import org.bouncycastle.pqc.crypto.falcon.FalconPublicKeyParameters; |
39 | 37 | import org.bouncycastle.pqc.crypto.frodo.FrodoParameters; |
|
42 | 40 | import org.bouncycastle.pqc.crypto.hqc.HQCPublicKeyParameters; |
43 | 41 | import org.bouncycastle.pqc.crypto.lms.HSSPublicKeyParameters; |
44 | 42 | import org.bouncycastle.pqc.crypto.lms.LMSPublicKeyParameters; |
| 43 | +import org.bouncycastle.pqc.crypto.mlkem.MLKEMParameters; |
| 44 | +import org.bouncycastle.pqc.crypto.mlkem.MLKEMPublicKeyParameters; |
45 | 45 | import org.bouncycastle.pqc.crypto.newhope.NHPublicKeyParameters; |
46 | 46 | import org.bouncycastle.pqc.crypto.ntru.NTRUParameters; |
47 | 47 | import org.bouncycastle.pqc.crypto.ntru.NTRUPublicKeyParameters; |
|
55 | 55 | import org.bouncycastle.pqc.crypto.rainbow.RainbowPublicKeyParameters; |
56 | 56 | import org.bouncycastle.pqc.crypto.saber.SABERParameters; |
57 | 57 | import org.bouncycastle.pqc.crypto.saber.SABERPublicKeyParameters; |
| 58 | +import org.bouncycastle.pqc.crypto.slhdsa.SLHDSAParameters; |
| 59 | +import org.bouncycastle.pqc.crypto.slhdsa.SLHDSAPublicKeyParameters; |
58 | 60 | import org.bouncycastle.pqc.crypto.sphincs.SPHINCSPublicKeyParameters; |
59 | 61 | import org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusParameters; |
60 | 62 | import org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusPublicKeyParameters; |
@@ -88,18 +90,6 @@ public class PublicKeyFactory |
88 | 90 | converters.put(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig, new LMSConverter()); |
89 | 91 | converters.put(PQCObjectIdentifiers.mcElieceCca2, new McElieceCCA2Converter()); |
90 | 92 | converters.put(BCObjectIdentifiers.sphincsPlus, new SPHINCSPlusConverter()); |
91 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_128s, new SPHINCSPlusConverter()); |
92 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_128f, new SPHINCSPlusConverter()); |
93 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_192s, new SPHINCSPlusConverter()); |
94 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_192f, new SPHINCSPlusConverter()); |
95 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_256s, new SPHINCSPlusConverter()); |
96 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_256f, new SPHINCSPlusConverter()); |
97 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_128s, new SPHINCSPlusConverter()); |
98 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_128f, new SPHINCSPlusConverter()); |
99 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_192s, new SPHINCSPlusConverter()); |
100 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_192f, new SPHINCSPlusConverter()); |
101 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_256s, new SPHINCSPlusConverter()); |
102 | | - converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_256f, new SPHINCSPlusConverter()); |
103 | 93 |
|
104 | 94 | converters.put(BCObjectIdentifiers.sphincsPlus_sha2_128s_r3, new SPHINCSPlusConverter()); |
105 | 95 | converters.put(BCObjectIdentifiers.sphincsPlus_sha2_128f_r3, new SPHINCSPlusConverter()); |
@@ -230,6 +220,19 @@ public class PublicKeyFactory |
230 | 220 | converters.put(BCObjectIdentifiers.rainbow_V_classic, new RainbowConverter()); |
231 | 221 | converters.put(BCObjectIdentifiers.rainbow_V_circumzenithal, new RainbowConverter()); |
232 | 222 | converters.put(BCObjectIdentifiers.rainbow_V_compressed, new RainbowConverter()); |
| 223 | + |
| 224 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_128s, new SLHDSAConverter()); |
| 225 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_128f, new SLHDSAConverter()); |
| 226 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_192s, new SLHDSAConverter()); |
| 227 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_192f, new SLHDSAConverter()); |
| 228 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_256s, new SLHDSAConverter()); |
| 229 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_sha2_256f, new SLHDSAConverter()); |
| 230 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_128s, new SLHDSAConverter()); |
| 231 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_128f, new SLHDSAConverter()); |
| 232 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_192s, new SLHDSAConverter()); |
| 233 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_192f, new SLHDSAConverter()); |
| 234 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_256s, new SLHDSAConverter()); |
| 235 | + converters.put(NISTObjectIdentifiers.id_slh_dsa_shake_256f, new SLHDSAConverter()); |
233 | 236 | } |
234 | 237 |
|
235 | 238 | /** |
@@ -708,6 +711,31 @@ AsymmetricKeyParameter getPublicKeyParameters(SubjectPublicKeyInfo keyInfo, Obje |
708 | 711 | } |
709 | 712 | } |
710 | 713 |
|
| 714 | + private static class SLHDSAConverter |
| 715 | + extends SubjectPublicKeyInfoConverter |
| 716 | + { |
| 717 | + AsymmetricKeyParameter getPublicKeyParameters(SubjectPublicKeyInfo keyInfo, Object defaultParams) |
| 718 | + throws IOException |
| 719 | + { |
| 720 | + try |
| 721 | + { |
| 722 | + byte[] keyEnc = ASN1OctetString.getInstance(keyInfo.parsePublicKey()).getOctets(); |
| 723 | + |
| 724 | + SLHDSAParameters spParams = Utils.slhdsaParamsLookup(keyInfo.getAlgorithm().getAlgorithm()); |
| 725 | + |
| 726 | + return new SLHDSAPublicKeyParameters(spParams, Arrays.copyOfRange(keyEnc, 4, keyEnc.length)); |
| 727 | + } |
| 728 | + catch (Exception e) |
| 729 | + { |
| 730 | + byte[] keyEnc = keyInfo.getPublicKeyData().getOctets(); |
| 731 | + |
| 732 | + SLHDSAParameters spParams = Utils.slhdsaParamsLookup(keyInfo.getAlgorithm().getAlgorithm()); |
| 733 | + |
| 734 | + return new SLHDSAPublicKeyParameters(spParams, keyEnc); |
| 735 | + } |
| 736 | + } |
| 737 | + } |
| 738 | + |
711 | 739 | private static class RainbowConverter |
712 | 740 | extends SubjectPublicKeyInfoConverter |
713 | 741 | { |
|
0 commit comments