|
33 | 33 | import org.bouncycastle.pqc.crypto.bike.BIKEPrivateKeyParameters; |
34 | 34 | import org.bouncycastle.pqc.crypto.cmce.CMCEParameters; |
35 | 35 | import org.bouncycastle.pqc.crypto.cmce.CMCEPrivateKeyParameters; |
| 36 | +import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumParameters; |
| 37 | +import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumPrivateKeyParameters; |
| 38 | +import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumPublicKeyParameters; |
36 | 39 | import org.bouncycastle.pqc.crypto.falcon.FalconParameters; |
37 | 40 | import org.bouncycastle.pqc.crypto.falcon.FalconPrivateKeyParameters; |
38 | 41 | import org.bouncycastle.pqc.crypto.frodo.FrodoParameters; |
@@ -245,8 +248,8 @@ else if (algOID.on(BCObjectIdentifiers.pqc_kem_ntru)) |
245 | 248 | return new NTRUPrivateKeyParameters(spParams, keyEnc); |
246 | 249 | } |
247 | 250 | else if (algOID.equals(NISTObjectIdentifiers.id_alg_ml_kem_512) || |
248 | | - algOID.equals(NISTObjectIdentifiers.id_alg_ml_kem_768) || |
249 | | - algOID.equals(NISTObjectIdentifiers.id_alg_ml_kem_1024)) |
| 251 | + algOID.equals(NISTObjectIdentifiers.id_alg_ml_kem_768) || |
| 252 | + algOID.equals(NISTObjectIdentifiers.id_alg_ml_kem_1024)) |
250 | 253 | { |
251 | 254 | ASN1OctetString kyberKey = ASN1OctetString.getInstance(keyInfo.parsePrivateKey()); |
252 | 255 | MLKEMParameters kyberParams = Utils.kyberParamsLookup(algOID); |
@@ -319,15 +322,61 @@ else if (algOID.equals(NISTObjectIdentifiers.id_ml_dsa_44) |
319 | 322 | null); |
320 | 323 | } |
321 | 324 | } |
| 325 | + else |
| 326 | + { |
| 327 | + throw new IOException("not supported"); |
| 328 | + } |
| 329 | + } |
| 330 | + else if (algOID.equals(BCObjectIdentifiers.dilithium2) |
| 331 | + || algOID.equals(BCObjectIdentifiers.dilithium3) || algOID.equals(BCObjectIdentifiers.dilithium5)) |
| 332 | + { |
| 333 | + ASN1Encodable keyObj = keyInfo.parsePrivateKey(); |
| 334 | + DilithiumParameters dilParams = Utils.dilithiumParamsLookup(algOID); |
| 335 | + |
| 336 | + if (keyObj instanceof ASN1Sequence) |
| 337 | + { |
| 338 | + ASN1Sequence keyEnc = ASN1Sequence.getInstance(keyObj); |
| 339 | + |
| 340 | + int version = ASN1Integer.getInstance(keyEnc.getObjectAt(0)).intValueExact(); |
| 341 | + if (version != 0) |
| 342 | + { |
| 343 | + throw new IOException("unknown private key version: " + version); |
| 344 | + } |
| 345 | + |
| 346 | + if (keyInfo.getPublicKeyData() != null) |
| 347 | + { |
| 348 | + DilithiumPublicKeyParameters pubParams = PublicKeyFactory.DilithiumConverter.getPublicKeyParams(dilParams, keyInfo.getPublicKeyData()); |
| 349 | + |
| 350 | + return new DilithiumPrivateKeyParameters(dilParams, |
| 351 | + ASN1BitString.getInstance(keyEnc.getObjectAt(1)).getOctets(), |
| 352 | + ASN1BitString.getInstance(keyEnc.getObjectAt(2)).getOctets(), |
| 353 | + ASN1BitString.getInstance(keyEnc.getObjectAt(3)).getOctets(), |
| 354 | + ASN1BitString.getInstance(keyEnc.getObjectAt(4)).getOctets(), |
| 355 | + ASN1BitString.getInstance(keyEnc.getObjectAt(5)).getOctets(), |
| 356 | + ASN1BitString.getInstance(keyEnc.getObjectAt(6)).getOctets(), |
| 357 | + pubParams.getT1()); // encT1 |
| 358 | + } |
| 359 | + else |
| 360 | + { |
| 361 | + return new DilithiumPrivateKeyParameters(dilParams, |
| 362 | + ASN1BitString.getInstance(keyEnc.getObjectAt(1)).getOctets(), |
| 363 | + ASN1BitString.getInstance(keyEnc.getObjectAt(2)).getOctets(), |
| 364 | + ASN1BitString.getInstance(keyEnc.getObjectAt(3)).getOctets(), |
| 365 | + ASN1BitString.getInstance(keyEnc.getObjectAt(4)).getOctets(), |
| 366 | + ASN1BitString.getInstance(keyEnc.getObjectAt(5)).getOctets(), |
| 367 | + ASN1BitString.getInstance(keyEnc.getObjectAt(6)).getOctets(), |
| 368 | + null); |
| 369 | + } |
| 370 | + } |
322 | 371 | else if (keyObj instanceof DEROctetString) |
323 | 372 | { |
324 | 373 | byte[] data = ASN1OctetString.getInstance(keyObj).getOctets(); |
325 | 374 | if (keyInfo.getPublicKeyData() != null) |
326 | 375 | { |
327 | | - MLDSAPublicKeyParameters pubParams = PublicKeyFactory.MLDSAConverter.getPublicKeyParams(spParams, keyInfo.getPublicKeyData()); |
328 | | - return new MLDSAPrivateKeyParameters(spParams, data, pubParams); |
| 376 | + DilithiumPublicKeyParameters pubParams = PublicKeyFactory.DilithiumConverter.getPublicKeyParams(dilParams, keyInfo.getPublicKeyData()); |
| 377 | + return new DilithiumPrivateKeyParameters(dilParams, data, pubParams); |
329 | 378 | } |
330 | | - return new MLDSAPrivateKeyParameters(spParams, data, null); |
| 379 | + return new DilithiumPrivateKeyParameters(dilParams, data, null); |
331 | 380 | } |
332 | 381 | else |
333 | 382 | { |
|
0 commit comments