11package org .bouncycastle .cms .test ;
22
33import java .io .BufferedInputStream ;
4- import java .io .ByteArrayInputStream ;
54import java .io .IOException ;
65import java .io .InputStream ;
76import java .io .InputStreamReader ;
3231import org .bouncycastle .asn1 .ASN1Encodable ;
3332import org .bouncycastle .asn1 .ASN1EncodableVector ;
3433import org .bouncycastle .asn1 .ASN1Encoding ;
35- import org .bouncycastle .asn1 .ASN1InputStream ;
3634import org .bouncycastle .asn1 .ASN1Integer ;
3735import org .bouncycastle .asn1 .ASN1ObjectIdentifier ;
3836import org .bouncycastle .asn1 .ASN1OctetString ;
@@ -985,10 +983,7 @@ public void testSHA1AndMD5WithRSAEncapsulatedRepeated()
985983
986984 CMSSignedData s = gen .generate (msg , true );
987985
988- ByteArrayInputStream bIn = new ByteArrayInputStream (s .getEncoded ());
989- ASN1InputStream aIn = new ASN1InputStream (bIn );
990-
991- s = new CMSSignedData (ContentInfo .getInstance (aIn .readObject ()));
986+ s = new CMSSignedData (s .getEncoded ());
992987
993988 certs = s .getCertificates ();
994989
@@ -1041,10 +1036,7 @@ public void testSHA1AndMD5WithRSAEncapsulatedRepeated()
10411036
10421037 s = gen .generate (msg , true );
10431038
1044- bIn = new ByteArrayInputStream (s .getEncoded ());
1045- aIn = new ASN1InputStream (bIn );
1046-
1047- s = new CMSSignedData (ContentInfo .getInstance (aIn .readObject ()));
1039+ s = new CMSSignedData (s .getEncoded ());
10481040
10491041 certs = s .getCertificates ();
10501042
@@ -1851,6 +1843,20 @@ public void testEd25519()
18511843 expectedDigAlgId );
18521844 }
18531845
1846+ public void testEd25519Detached ()
1847+ throws Exception
1848+ {
1849+ /*
1850+ * RFC 8419 3.1. When signing with Ed25519, the digestAlgorithm MUST be id-sha512, and the algorithm
1851+ * parameters field MUST be absent.
1852+ *
1853+ * We confirm here that our implementation defaults to SHA-512 for the digest algorithm.
1854+ */
1855+ AlgorithmIdentifier expectedDigAlgId = new AlgorithmIdentifier (NISTObjectIdentifiers .id_sha512 );
1856+
1857+ detachedTest (_signEd25519KP , _signEd25519Cert , "Ed25519" , EdECObjectIdentifiers .id_Ed25519 , expectedDigAlgId );
1858+ }
1859+
18541860 public void testEd448 ()
18551861 throws Exception
18561862 {
@@ -1867,16 +1873,20 @@ public void testEd448()
18671873 encapsulatedTest (_signEd448KP , _signEd448Cert , "Ed448" , EdECObjectIdentifiers .id_Ed448 , expectedDigAlgId );
18681874 }
18691875
1870- public void testDetachedEd25519 ()
1876+ public void testEd448Detached ()
18711877 throws Exception
18721878 {
1873- detachedTest (_signEd25519KP , _signEd25519Cert , "Ed25519" , EdECObjectIdentifiers .id_Ed25519 , new AlgorithmIdentifier (NISTObjectIdentifiers .id_sha512 ));
1874- }
1879+ /*
1880+ * RFC 8419 3.1. When signing with Ed448, the digestAlgorithm MUST be id-shake256-len, the algorithm
1881+ * parameters field MUST be present, and the parameter MUST contain 512, encoded as a positive integer
1882+ * value.
1883+ *
1884+ * We confirm here that our implementation defaults to id-shake256-len/512 for the digest algorithm.
1885+ */
1886+ AlgorithmIdentifier expectedDigAlgId = new AlgorithmIdentifier (NISTObjectIdentifiers .id_shake256_len ,
1887+ new ASN1Integer (512 ));
18751888
1876- public void testEdDetached448 ()
1877- throws Exception
1878- {
1879- detachedTest (_signEd448KP , _signEd448Cert , "Ed448" , EdECObjectIdentifiers .id_Ed448 , new AlgorithmIdentifier (NISTObjectIdentifiers .id_shake256_len , new ASN1Integer (512 )));
1889+ detachedTest (_signEd448KP , _signEd448Cert , "Ed448" , EdECObjectIdentifiers .id_Ed448 , expectedDigAlgId );
18801890 }
18811891
18821892 public void testEd25519WithNoAttr ()
@@ -2519,11 +2529,8 @@ private void subjectKeyIDTest(
25192529 CMSSignedData s = gen .generate (msg , true );
25202530
25212531 assertEquals (3 , s .getVersion ());
2522-
2523- ByteArrayInputStream bIn = new ByteArrayInputStream (s .getEncoded ());
2524- ASN1InputStream aIn = new ASN1InputStream (bIn );
25252532
2526- s = new CMSSignedData (ContentInfo . getInstance ( aIn . readObject () ));
2533+ s = new CMSSignedData (s . getEncoded ( ));
25272534
25282535 certStore = s .getCertificates ();
25292536
@@ -2563,10 +2570,7 @@ private void subjectKeyIDTest(
25632570
25642571 s = gen .generate (msg , true );
25652572
2566- bIn = new ByteArrayInputStream (s .getEncoded ());
2567- aIn = new ASN1InputStream (bIn );
2568-
2569- s = new CMSSignedData (ContentInfo .getInstance (aIn .readObject ()));
2573+ s = new CMSSignedData (s .getEncoded ());
25702574
25712575 certStore = s .getCertificates ();
25722576
@@ -2641,7 +2645,7 @@ private void encapsulatedTest(
26412645
26422646 CMSSignedData s = gen .generate (msg , true );
26432647
2644- s = new CMSSignedData (ContentInfo . getInstance ( s .getEncoded () ));
2648+ s = new CMSSignedData (s .getEncoded ());
26452649
26462650 Set digestAlgorithms = new HashSet (s .getDigestAlgorithmIDs ());
26472651
@@ -2720,7 +2724,7 @@ private void encapsulatedTest(
27202724
27212725 s = gen .generate (msg , true );
27222726
2723- s = new CMSSignedData (ContentInfo . getInstance ( s .getEncoded () ));
2727+ s = new CMSSignedData (s .getEncoded ());
27242728
27252729 certStore = s .getCertificates ();
27262730 crlStore = s .getCRLs ();
@@ -2776,12 +2780,9 @@ private void detachedTest(
27762780
27772781 gen .addCertificates (certs );
27782782
2779- CMSSignedData s = gen .generate (msg , true );
2780-
2781- ByteArrayInputStream bIn = new ByteArrayInputStream (s .getEncoded ());
2782- ASN1InputStream aIn = new ASN1InputStream (bIn );
2783+ CMSSignedData s = gen .generate (msg );
27832784
2784- s = new CMSSignedData (msg , ContentInfo . getInstance ( aIn . readObject () ));
2785+ s = new CMSSignedData (msg , s . getEncoded ( ));
27852786
27862787 Set digestAlgorithms = new HashSet (s .getDigestAlgorithmIDs ());
27872788
@@ -2948,10 +2949,7 @@ public void testNullContentWithSigner()
29482949
29492950 CMSSignedData s = gen .generate (new CMSAbsentContent (), false );
29502951
2951- ByteArrayInputStream bIn = new ByteArrayInputStream (s .getEncoded ());
2952- ASN1InputStream aIn = new ASN1InputStream (bIn );
2953-
2954- s = new CMSSignedData (ContentInfo .getInstance (aIn .readObject ()));
2952+ s = new CMSSignedData (s .getEncoded ());
29552953
29562954 verifySignatures (s );
29572955 }
0 commit comments