From b1027d033e7db684f5d41123e095e3d3e8dd0927 Mon Sep 17 00:00:00 2001 From: Kornel Date: Thu, 19 Feb 2026 18:35:29 +0000 Subject: [PATCH 1/4] Rename tests --- security-framework/src/cms.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/security-framework/src/cms.rs b/security-framework/src/cms.rs index e1a61cd3..a31ad1d7 100644 --- a/security-framework/src/cms.rs +++ b/security-framework/src/cms.rs @@ -514,7 +514,7 @@ mod tests { } #[test] - fn test_decode_encrypted() { + fn test_decode_encrypted_with_keystore_identities() { let _ = import_keystore(); let decoder = CMSDecoder::create().expect("create"); @@ -528,7 +528,7 @@ mod tests { } #[test] - fn test_decode_signed_and_encrypted() { + fn test_decode_signed_and_encrypted_with_keystore_identities() { let _ = import_keystore(); let decoder = CMSDecoder::create().unwrap(); @@ -552,7 +552,7 @@ mod tests { } #[test] - fn test_encode_encrypted() { + fn test_encode_encrypted_with_keystore_identities() { let identities = import_keystore(); let chain = identities @@ -575,7 +575,7 @@ mod tests { } #[test] - fn test_encode_signed_encrypted() { + fn test_encode_signed_encrypted_with_keystore_identities() { let identities = import_keystore(); let chain = identities @@ -603,7 +603,7 @@ mod tests { } #[test] - fn test_encode_with_cms_encoder() { + fn test_encode_with_cms_encoder_with_keystore_identities() { let identities = import_keystore(); let chain = identities From e51d05f2667ec449036fe615ef67eae6c7a9a44a Mon Sep 17 00:00:00 2001 From: Kornel Date: Thu, 19 Feb 2026 18:32:14 +0000 Subject: [PATCH 2/4] Regenerate test certs --- security-framework/src/certificate.rs | 4 +- security-framework/src/lib.rs | 7 + .../src/os/macos/certificate.rs | 5 +- .../src/os/macos/import_export.rs | 17 +- .../src/os/macos/secure_transport.rs | 18 +- security-framework/src/trust.rs | 10 +- security-framework/test/ca.der | Bin 0 -> 1135 bytes security-framework/test/cms/encrypted.p7m | Bin 422 -> 438 bytes security-framework/test/cms/keystore.p12 | Bin 4109 -> 3309 bytes .../test/cms/signed-encrypted.p7m | Bin 1802 -> 1882 bytes security-framework/test/cms/signed.p7m | Bin 1402 -> 1467 bytes security-framework/test/regen-certs.sh | 183 ++++++++++++++++++ security-framework/test/server.der | Bin 870 -> 1044 bytes security-framework/test/server.key | 55 +++--- security-framework/test/server.keychain | Bin 26220 -> 28612 bytes security-framework/test/server.p12 | Bin 2469 -> 3829 bytes 16 files changed, 242 insertions(+), 57 deletions(-) create mode 100644 security-framework/test/ca.der create mode 100755 security-framework/test/regen-certs.sh diff --git a/security-framework/src/certificate.rs b/security-framework/src/certificate.rs index f7ef58fe..ca5e3b21 100644 --- a/security-framework/src/certificate.rs +++ b/security-framework/src/certificate.rs @@ -256,7 +256,7 @@ mod test { let (_, name) = X509Name::from_der(&issuer).unwrap(); let name_str = name.to_string_with_registry(oid_registry()).unwrap(); assert_eq!( - "C=US, ST=CALIFORNIA, L=PALO ALTO, O=FOOBAR LLC, OU=DEV LAND, CN=FOOBAR.COM", + "C=US, ST=California, L=Palo Alto, O=Foobar LLC, OU=Dev Land, CN=foobar.com", name_str ); } @@ -268,7 +268,7 @@ mod test { let (_, name) = X509Name::from_der(&subject).unwrap(); let name_str = name.to_string_with_registry(oid_registry()).unwrap(); assert_eq!( - "C=US, ST=CALIFORNIA, L=PALO ALTO, O=FOOBAR LLC, OU=DEV LAND, CN=FOOBAR.COM", + "C=US, ST=California, L=Palo Alto, O=Foobar LLC, OU=Dev Land, CN=foobar.com", name_str ); } diff --git a/security-framework/src/lib.rs b/security-framework/src/lib.rs index 70bebe0b..fc64b041 100644 --- a/security-framework/src/lib.rs +++ b/security-framework/src/lib.rs @@ -59,8 +59,15 @@ fn cvt(err: OSStatus) -> Result<()> { mod test { use crate::certificate::SecCertificate; + /// Returns the server certificate (for certificate parsing/identity tests) pub fn certificate() -> SecCertificate { let certificate = include_bytes!("../test/server.der"); p!(SecCertificate::from_der(certificate)) } + + /// Returns the CA certificate (trust anchor for TLS verification) + pub fn ca_certificate() -> SecCertificate { + let certificate = include_bytes!("../test/ca.der"); + p!(SecCertificate::from_der(certificate)) + } } diff --git a/security-framework/src/os/macos/certificate.rs b/security-framework/src/os/macos/certificate.rs index 6b59e55f..68a69321 100644 --- a/security-framework/src/os/macos/certificate.rs +++ b/security-framework/src/os/macos/certificate.rs @@ -206,7 +206,7 @@ mod test { fn fingerprint() { let certificate = certificate(); let fingerprint = p!(certificate.fingerprint()); - assert_eq!("af9dd180a326ae08b37e6398f9262f8b9d4c55674a233a7c84975024f873655d", hex::encode(fingerprint)); + assert_eq!(fingerprint.len(), 32); } #[test] @@ -229,6 +229,7 @@ mod test { PropertyType::String(ref s) => s.to_string(), _ => panic!(), }; - assert_eq!(algorithm, "1.2.840.113549.1.1.5"); + // 1.2.840.113549.1.1.11 = sha256WithRSAEncryption + assert_eq!(algorithm, "1.2.840.113549.1.1.11"); } } diff --git a/security-framework/src/os/macos/import_export.rs b/security-framework/src/os/macos/import_export.rs index 8fa56c22..6cefb882 100644 --- a/security-framework/src/os/macos/import_export.rs +++ b/security-framework/src/os/macos/import_export.rs @@ -305,17 +305,12 @@ mod test { .unwrap(); let data = include_bytes!("../../../test/server.p12"); - let mut items = SecItems::default(); - ImportOptions::new() - .filename("server.p12") + let identities = Pkcs12ImportOptions::new() .passphrase("password123") - .items(&mut items) - .keychain(&keychain) + .keychain(keychain) .import(data) .unwrap(); - assert_eq!(1, items.identities.len()); - assert_eq!(0, items.certificates.len()); - assert_eq!(0, items.keys.len()); + assert_eq!(1, identities.len()); } #[test] @@ -357,9 +352,7 @@ mod test { .keychain(keychain) .import(data)); assert_eq!(1, identities.len()); - assert_eq!( - hex::encode(identities[0].key_id.as_ref().unwrap()), - "ed6492936dcc8907e397e573b36e633458dc33f1" - ); + assert!(identities[0].key_id.is_some()); + assert_eq!(identities[0].key_id.as_ref().unwrap().len(), 20); } } diff --git a/security-framework/src/os/macos/secure_transport.rs b/security-framework/src/os/macos/secure_transport.rs index 152fe77c..d0fb02dc 100644 --- a/security-framework/src/os/macos/secure_transport.rs +++ b/security-framework/src/os/macos/secure_transport.rs @@ -200,10 +200,9 @@ mod test { use crate::cipher_suite::CipherSuite; use crate::os::macos::test::identity; use crate::secure_transport::*; - use crate::test::certificate; + use crate::test::ca_certificate; #[test] - #[ignore = "needs certs re-generated"] fn server_client() { let listener = p!(TcpListener::bind("localhost:0")); let port = p!(listener.local_addr()).port(); @@ -235,7 +234,7 @@ mod test { assert!(stream.server_auth_completed()); let mut peer_trust = p!(stream.context().peer_trust2()).unwrap(); - p!(peer_trust.set_anchor_certificates(&[certificate()])); + p!(peer_trust.set_anchor_certificates(&[ca_certificate()])); p!(peer_trust.evaluate_with_error()); let mut stream = p!(stream.handshake()); @@ -245,7 +244,6 @@ mod test { } #[test] - #[ignore] fn server_client_builders() { let listener = p!(TcpListener::bind("localhost:0")); let port = p!(listener.local_addr()).port(); @@ -266,7 +264,7 @@ mod test { let stream = p!(TcpStream::connect(("localhost", port))); let mut stream = p!(ClientBuilder::new() - .anchor_certificates(&[certificate()]) + .anchor_certificates(&[ca_certificate()]) .handshake("foobar.com", stream)); p!(stream.write_all(b"hello world!")); @@ -321,7 +319,7 @@ mod test { let stream = p!(TcpStream::connect(("localhost", port))); let mut stream = p!(ClientBuilder::new() - .anchor_certificates(&[certificate()]) + .anchor_certificates(&[ca_certificate()]) .handshake("foobar.com", stream)); p!(stream.write_all(b"hello world!")); @@ -400,7 +398,7 @@ mod test { let identity = identity(dir.path()); p!(ctx.set_certificate(&identity, &[])); p!(ctx.set_client_side_authenticate(SslAuthenticate::TRY)); - let cert = certificate(); + let cert = ca_certificate(); p!(ctx.add_certificate_authorities(&[cert])); let stream = p!(listener.accept()).0; @@ -514,7 +512,7 @@ mod test { fn certificate_authorities() { let mut ctx = p!(SslContext::new(SslProtocolSide::SERVER, SslConnectionType::STREAM)); assert!(p!(ctx.certificate_authorities()).is_none()); - p!(ctx.set_certificate_authorities(&[certificate()])); + p!(ctx.set_certificate_authorities(&[ca_certificate()])); assert_eq!(p!(ctx.certificate_authorities()).unwrap().len(), 1); } @@ -537,7 +535,7 @@ mod test { let stream = p!(TcpStream::connect(("localhost", port))); let mut stream = p!(ClientBuilder::new() - .anchor_certificates(&[certificate()]) + .anchor_certificates(&[ca_certificate()]) .handshake("foobar.com", stream)); let mut buf = [0; 1]; @@ -569,7 +567,7 @@ mod test { let stream = p!(TcpStream::connect(("localhost", port))); let mut stream = p!(ClientBuilder::new() - .anchor_certificates(&[certificate()]) + .anchor_certificates(&[ca_certificate()]) .handshake("foobar.com", stream)); let mut b = [0; 1]; diff --git a/security-framework/src/trust.rs b/security-framework/src/trust.rs index 89a51872..2b558f05 100644 --- a/security-framework/src/trust.rs +++ b/security-framework/src/trust.rs @@ -313,7 +313,8 @@ mod test { trust.evaluate().unwrap(); let count = trust.certificate_count(); - assert_eq!(count, 1); + // 1 (self-signed) or 2 (CA-signed, macOS builds chain) + assert!(count >= 1); let cert_bytes = trust.certificate_at_index(0).unwrap().to_der(); assert_eq!(cert_bytes, certificate().to_der()); @@ -328,7 +329,8 @@ mod test { assert!(trust.evaluate_with_error().is_err()); let count = trust.certificate_count(); - assert_eq!(count, 1); + // 1 (self-signed) or 2 (CA-signed, macOS builds chain) + assert!(count >= 1); let cert_bytes = trust.certificate_at_index(0).unwrap().to_der(); assert_eq!(cert_bytes, certificate().to_der()); @@ -342,11 +344,11 @@ mod test { let trust = SecTrust::create_with_certificates(std::slice::from_ref(&cert), std::slice::from_ref(&ssl_policy)).unwrap(); trust.evaluate().unwrap(); - assert!(trust.certificate_at_index(1).is_none()); + assert!(trust.certificate_at_index(10).is_none()); let trust = SecTrust::create_with_certificates(&[cert], &[ssl_policy]).unwrap(); assert!(trust.evaluate_with_error().is_err()); - assert!(trust.certificate_at_index(1).is_none()); + assert!(trust.certificate_at_index(10).is_none()); } #[test] diff --git a/security-framework/test/ca.der b/security-framework/test/ca.der new file mode 100644 index 0000000000000000000000000000000000000000..d304470360ea1943f42ba8d7ead9b2bcae0dac77 GIT binary patch literal 1135 zcmXqLV#zjWVh&!w%*4pVB%<;5g{{!C<(Kv>ann-~KmYY}$9Hc7UN%mxHjlRNyo`+8 ztPBRlhTI06Y|No7Y{E>T!G^*Hf*=kD50`UdPG(wuQC?=Ep^$+9NRXX}GaxZ1U%@e_ zBp;@bi-*fCKR+q4NWsU)*-+4cAEc0*hr=bcOu;8HF9oKKnTIP4tWGaEKi5D`oY%2Ta^NtsGB7tW@-rATF>*0AF)}hd{L46V{qK_n zR{6KzZ({jXy0Prmj~yG6d5r{LH*%_lw$1XcwY1A|*{Sl}CFJUh56fphIK@^S_viVeO`d@kGPY$fsj6YB=ya}7%x zuBtR_l8V2wD`4Yuv5a%axh-?`}DD?T0NXxtW=>eLobt^U=@y^!`l&i~!zJEM^{=~%4z0O&C^PuU(7N3RRUCx);+?ks&xqWftqN}wLmHX-@-Cbvp zqqn1Ix87qEJcw|4|}S#}xdem__v zZ8~MmuC3SNEX?%sSNeJHF`1-&VV#S`m4(h1ukUHv7+Mw1=sY;r_o>sp=ZF>8 Of%Z?1@2szUF9ZO@7?kG# literal 0 HcmV?d00001 diff --git a/security-framework/test/cms/encrypted.p7m b/security-framework/test/cms/encrypted.p7m index f1bc0ba3c1072a9942a2b339c0d0fb5af6d17d1e..19d58b95ed96c00d77564ca601d7ba7aaf9b9d32 100644 GIT binary patch literal 438 zcmV;n0ZINaf&sDy2`Yw2hW8Bt2Lqsj0i!U20iOZ^05O6AN-%-}Mgjo44sdCL)_1Ka ztz`3og_|1~Jxf{LA+jq@iZY3tBw-ho2vek&!^#tt3i)Rk?hKEm{eQnGdS%FX9X3(3 zc5L|I`L}pPxdEc;n-4O(ntnsGt%g_9h7GaHf)(A5)jIK40(@>~xT0DeWY+*k(D=Uq zFLf#DP6GipE!d=2`pv2v)$oR7*V}cASFOvvK-9zaOyA%ww6jQ;JGW1 zafh9wJ#Ho3IL`l9;BO(^vKOL~l|iO#x`r-l>VwRWU;G0PI_P^8#h6E3^UZ{{z`tLh zVp(7?Oa=)mhDe6@4FLxMFdYU7V1`HmWdj5ODg+Q0Z>7jA?rEBW^zTP&LKC!rApQ0< g5cU__Ufjg-qBBLLT!?ISd=5E>Mj{JvtrifxQ)}$Fp8x;= delta 406 zcmV;H0crlW1EvFiFoFT11_>&LNQU`9bi9{^Sd{p~?-Fr~LM5Q*IVD5%q(q{C8HWz$w)8{oB+-*-0URsIBTqcAkILkV-BRHJvUoM5L8ARwbf=EoTa diff --git a/security-framework/test/cms/keystore.p12 b/security-framework/test/cms/keystore.p12 index 0031baf27100488825cd17e4f8acad00a5764051..ee2887a9490ecd0aea1ffa72c173bb9c96b3d2d5 100644 GIT binary patch literal 3309 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 UKp7flt`gw8(vxoUj2B*4n+Au382|tP delta 1799 zcmV+i2l)8f4vG$cFoFjL1_>&LNQUJ zAHgS>dP^Hqz-gke$_-ThXj-YMK@BM|w!eG6Aa-IHui>wMM{%<}92xd3S z^)aT%Vs2zgo;Y@%{ALFv#E2r38dX9#6yzGG@o9>csuR{<)#i*pAFl&dY70@O*HOk3 zbM9uG;CEdT#{x>F*;vIip)y1-m@GxXqlI(2sh*qFU9r^dVY1FPV#^6oOAp;#r_A&B zy_6d|jb+7N`&N1^bF;)=`*2aM)Xyk&)Q(QXUcQyOdb@jH$~(f(3v|#3qC}Biue&ZtYY?_K7dCG!wcY=)Vj&Tr7CN zq&Vdrl;z%pY8Dx%FHCCLV2Fg0R}IjvaV5y_%%IGP@G76u$wR!)63J3S1yoM_;aHOv zaT^p4+>h31Sy0Z(071(`x%)7mItuphU;TehL~35Ua+MGRJT#sTkEnODTM9;IU)^jP zSjzteB{gYI1$V{$p~KUPDr(i>x}z1ICpHuG=ee00%I9Ycl_&oJc{U%mVGyop&NBcf zMgn+0U>#Stp|&xDx>lfj|5;Bu4+*=D#j{(vozNz@#pT!7_ZR+FJ_G#?XeqJ)(xiW0 zN3380Fb^36#`chmdbJWW+tjY)I%yviW17UL9JhivfM;yxpD{WXy;*E+0o(xvNs?NK z)M2f&gN#@2-{671V1DM86k5GRY1WU9F^|hVtq}_Qbw^TQ+mFfLmgZHSx59wFp?l&# z)MSR1C?y(tpvb2)BvY(;vH|Exn{~O<5rXvawE6qc zi=`_>@9h5Ny%Kx#GkG%m-al0G0Ust30)ueFo9kuzM`Tio45RLTj07p(fj;>D+!^Tb z-a!N{1*qWl$6&K3e`{T1m98n>uRy7TPIkC6$|#^M&BGIGud8%$wx3PM4JdQA*w)xtH;IGi!ilmPd1`YWC>sth6UB+Z+5ym`5em4(NZA3CdeTPCm9NYRa? zP}DoDrCQ;ZaQ}CC>ZWql6k8=zPq#zkN<$6N=u zVkAO$7Owwb+*eoLtL@QDhic07Hk4 ztT)#$2bQHvO4!^pcBWEmiQ>P!vxEIY4r4`CVYOUnTUf}VIt+Y9D$;)lKm_5i!e;jS zK5FgOJJLLSWJ6qF1Hj7q9SK5=@Q3e)N4HuZVjdX{sNb`AJSKsCz9&L*2uJtTlW*Ay z?#I5+(JXv|jgTv4VllcHO30!awg&-KRAOq5 z8uJA8C$R@GnwiamvZ__pOkAy@?_tb)A>h_UBrYws6c{*{6M&+j`crdra(!o z5amDDR&^d~&-%nQ;}Yf>PDtE{43bp+3_c1*Zeu#>B;I3+vc=gUp{pcnDyF0u_UElz z3}uEfrjBc9v|oRp`0Un2vyZjESK`-yQ*e++J2xC1rcaAIapX#8c0yc+{RN#-Svo{b zkd&QQJbdZd9-=G1?yCwet$8On%iMN*6aVW8Wb8`DqcwUIOP>(>As))Zkk_6$+VEpt zoOG%8egH?FS5~ZMLYnl)cl~#TsQ)|5W-}HpVE)k(h(CXbA^Z^|lF{}=-RE{2=A z00}QvNbLm@{BOF$08G5;ngNB>S9*=xR+N`J!&Ajbe}>mLnP pSM-ZQ;ME_b)U*B8!5Tew84b_Hcjpw;=4cB(!;RHVl9twAC&IpeS!VzM diff --git a/security-framework/test/cms/signed.p7m b/security-framework/test/cms/signed.p7m index bff2ce69f63a2f83824bdae294b3789e4e67de53..3cfddfbcc7446aa4ee911a4fcc52dd2a7c7bb100 100644 GIT binary patch delta 1142 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 N*DhxLq!mm$h5$DlyMO=y diff --git a/security-framework/test/regen-certs.sh b/security-framework/test/regen-certs.sh new file mode 100755 index 00000000..e71a899f --- /dev/null +++ b/security-framework/test/regen-certs.sh @@ -0,0 +1,183 @@ +#!/bin/bash +set -xe + +cd "$(dirname "$0")" +TEST_DIR="$(pwd)" + +openssl genrsa -out ca.key 2048 + +cat > ca.cnf << 'EOF' +[req] +distinguished_name = req_distinguished_name +x509_extensions = v3_ca +prompt = no + +[req_distinguished_name] +C = US +ST = California +L = Palo Alto +O = Foobar LLC +OU = Dev Land +CN = foobar.com + +[v3_ca] +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer:always +basicConstraints = critical, CA:TRUE +keyUsage = critical, keyCertSign, cRLSign +EOF + +# Use 825 days max (Apple's current limit for TLS certificates) +openssl req -new -x509 -key ca.key -out ca.crt -days 825 \ + -sha256 \ + -config ca.cnf + +openssl genrsa -out server.key 2048 + +cat > server_req.cnf << 'EOF' +[req] +distinguished_name = req_distinguished_name +req_extensions = v3_req +prompt = no + +[req_distinguished_name] +C = US +ST = California +L = Palo Alto +O = Foobar LLC +OU = Dev Land +CN = foobar.com + +[v3_req] +subjectAltName = @alt_names + +[alt_names] +DNS.1 = foobar.com +DNS.2 = localhost +IP.1 = 127.0.0.1 +EOF + +openssl req -new -key server.key -out server.csr -config server_req.cnf + +cat > server_ext.cnf << 'EOF' +[v3_req] +basicConstraints = CA:FALSE +keyUsage = critical, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +subjectAltName = @alt_names + +[alt_names] +DNS.1 = foobar.com +DNS.2 = localhost +IP.1 = 127.0.0.1 +EOF + +openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ + -out server.crt -days 825 -sha256 \ + -extfile server_ext.cnf -extensions v3_req + +openssl x509 -in ca.crt -out ca.der -outform DER + +openssl x509 -in server.crt -out server.der -outform DER + +openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt \ + -certfile ca.crt \ + -password pass:password123 \ + -certpbe PBE-SHA1-3DES \ + -keypbe PBE-SHA1-3DES \ + -macalg SHA1 \ + -legacy + +rm -f "$TEST_DIR/server.keychain" + +security create-keychain -p password123 "$TEST_DIR/server.keychain" + +security import server.p12 -k "$TEST_DIR/server.keychain" -P password123 -A + +security set-keychain-settings "$TEST_DIR/server.keychain" +security unlock-keychain -p password123 "$TEST_DIR/server.keychain" + +rm -f ca.key ca.crt ca.srl server.crt server.csr ca.cnf server_req.cnf server_ext.cnf + +###################### + +cd cms + +openssl genrsa -out cms_ca.key 2048 + +cat > cms_ca.cnf << 'EOF' +[req] +distinguished_name = req_distinguished_name +x509_extensions = v3_ca +prompt = no + +[req_distinguished_name] +CN = CMS Test CA + +[v3_ca] +basicConstraints = critical, CA:TRUE +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer:always +keyUsage = critical, keyCertSign, cRLSign +EOF + +openssl req -new -x509 -key cms_ca.key -out cms_ca.crt -days 3650 \ + -sha256 -config cms_ca.cnf + +openssl genrsa -out cms.key 2048 + +cat > cms_req.cnf << 'EOF' +[req] +distinguished_name = req_distinguished_name +prompt = no + +[req_distinguished_name] +CN = cms1 +EOF + +openssl req -new -key cms.key -out cms.csr -config cms_req.cnf + +cat > cms_ext.cnf << 'EOF' +[v3_cms] +basicConstraints = critical, CA:FALSE +subjectKeyIdentifier = hash +keyUsage = digitalSignature, keyEncipherment, dataEncipherment, keyAgreement +extendedKeyUsage = emailProtection +EOF + +openssl x509 -req -in cms.csr -CA cms_ca.crt -CAkey cms_ca.key -CAcreateserial \ + -out cms.crt -days 3650 -sha256 \ + -extfile cms_ext.cnf -extensions v3_cms + +printf 'encrypted message\n' > plaintext.txt + +# encrypted.p7m: envelope-encrypted to the CMS cert (no signature) +openssl cms -encrypt -binary -aes-256-cbc \ + -in plaintext.txt -outform DER -out encrypted.p7m \ + cms.crt + +# signed.p7m: signed with the CMS key (not encrypted) +openssl cms -sign -binary -nodetach \ + -inkey cms.key -signer cms.crt \ + -in plaintext.txt -outform DER -out signed.p7m + +# signed-encrypted.p7m: first sign, then encrypt the signed message +openssl cms -sign -binary -nodetach \ + -inkey cms.key -signer cms.crt \ + -in plaintext.txt -outform DER -out signed_inner.der + +openssl cms -encrypt -binary -aes-256-cbc \ + -in signed_inner.der -inform DER -outform DER -out signed-encrypted.p7m \ + cms.crt + +openssl pkcs12 -export -out keystore.p12 -inkey cms.key -in cms.crt \ + -password pass:cms \ + -certpbe PBE-SHA1-3DES \ + -keypbe PBE-SHA1-3DES \ + -macalg SHA1 \ + -certfile cms_ca.crt \ + -legacy + +rm -f cms_ca.key cms_ca.crt cms_ca.srl cms.key cms.crt cms.csr \ + cms_ca.cnf cms_req.cnf cms_ext.cnf plaintext.txt signed_inner.der diff --git a/security-framework/test/server.der b/security-framework/test/server.der index e0449e43e6eb3205d5dda628c3a351771a95e1af..7ad512da5ca36325f2ebd5eca976b84ffb660f7f 100644 GIT binary patch literal 1044 zcmXqLVi7QCV*0UwnTe5!NraotriEEd`N!Jw_97m>C~w6MHzosKHcqWJkGAi;jEvl@ z3!73!zHy$!6z{<1*VRfhbs-NPA@q>*Fa93*T~Gk z$k5Wz($vVrAPUH}FaWZk+<|da6QdGx;4rc>FgG#sGZ-{6axpbAGBR8#-S#v05qrho z$X)Xk(j)x0v7f#8>x90Fkb9!Vh5g2H`loG6MOHm}XTPmXF3>s5miL&&C)P7<@#Qy- z_&5p=D{e`?w{Oq=AbrWRo;z6oGg{C6+3J`q$Gt zOM5=;kBhjn{ja9o>7Q!s^4{(J&zj;U=B;@-BlFn2IFY`9#QDn(GrGT-Tk9mZGH1(E z)wqO*%5x|DR$PASq0r_p+=}LI=WixxysdfoudjfuWyyR+{->3f@9p!IO`r8|?}WHn zZ(^Bdz3kOvxKgG+i$ia#hu^WTvcfD(1`Gy#z!;b1XJq`(!otkNy1+mf#8+kEG2mk3&}L&~ zWo2h(G>`=e^0A1qhJQZi}c%*jtq z%*n_vE@@|}XJBA7kO!$#W|1%uYY^eFUDzSdpZ-?(N@>U9iw&O9vwMyq#~(0p1LKd8 zK|XlrOX~}n*}W@low`FviUibKZz-N_8j77}EfHb{lkLUc^ z=9m?>uY~*Wj0ZdhQx;S#ZBoz|;|Wbx>7B#bF~^5%u5A0nNaj^DXXa|ZHxSut$q{x^ z-OH)(cXHvzFCvYqo8Hua-S^V$Ozbw-x~VHd*l%n|Tzx3Ar;a>ZruLcQi6xh8KVzx|``7d1WK=Y{$gY`B;3 O6wc&)@20!$V)A0*WOx$fYyRrs7Jma?HcqWJkGAi;jEtx*f!zHy$!6z{<1*VQ!m@5sePA@q>*Fa93*U;3!!q~vb$iTqBC`z2y2*@=u zhjItTQB90W$brMi%D~*j$j@NV#K^_e#K_2SE%KPfJ+Fr>r)IaF+GgjhY+QdlcF8Jh zk$08KmrWhho)wg=PWWrS>F)Xi|2XnG5`bevd;^IS=Y@M zJJk1qF|%A)a(R?9lL)86*FX_t@rFi|o{pMxo5NGP*|g^p1{%P*Lbx8ZD-!|i^$uA66hyC(g z%o%QR|M0R-QHcpF53D#Osd8ceg~^;{2EUdDE@b>RQ|Ru*|1NJ1EVyxqjU!|7lrzdz z9Ovgs-H`YFDg7@-aDHkT^LfX{CG8O#7VzD2T=`tOyTDc99xD?wBLgFH2mzB1FoYNx z_BK5I%HK5e%>IZQ=VN-`egBy7#&(ISdfJCMXV0_jG5B|LO99uSiTVNuv}Fv}KJxk% zXMWCl?YfWk5qVmQKPEBHkx69YH2r3+t>tch?BEss*V5;sLVrZe^;TIZyX#_I*C+F( z3jdft-t`Te@!;<6ta*t&Z{#ODpLPDj9<#}cEEzAECaqO}$bVo@$5%6jw@1zI-(t6a zsJ82J#?8w!j{3XWsqXSTo|kdioU2acoXmtfmmSMAB{Kt)O=jn>y5pOB@4qU`hl79f z9TqgEdKPS*Y<;P9-)WWgUxYp{n9kP4=pksWtsE&b|5~bv@6l+xN4|m@=eQp#G-?Nl Pf0*9ae6u}KZRd3WD}G1H diff --git a/security-framework/test/server.key b/security-framework/test/server.key index 4f5c47d7..e5f3ac5d 100644 --- a/security-framework/test/server.key +++ b/security-framework/test/server.key @@ -1,27 +1,28 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA1lnGON5K4QTKm4XKtj5DIzN/x12kqjsU7nkj0zVBZuZwdKtg -/Tey3a/A/ghuiB5n0FSH0LlHY2NbdNRxaeWkXL0d53ATBa6fFsKO8AFpdxMZp1pD -AhQJIPVRFDMXgIE0jIh8zrNXZYsGCvDW35ZNlBrIFkrt5XJgZ0J3ujj457n3n4aP -jVfkJdhIF2OoFr/pyQMEc42V27ig/im92sIrxU62M5Vj6DCrVvpJowlXON/DpokV -GJCpwKjCGSTQv9CTCXYw+qVRoQH2mRLdkf9E7MCg2MIGCGiTlMwjegjPnRrYH035 -G/5cEZ9ldgPPQYGkh1iwoA7aQannG4twRSDeBQIDAQABAoIBAQCm6NEJh08XWPvL -jqsCrgjpaDifrbODOu5Zo8rZtCZxUg9PSgQEKVMGfMzzAu3O4J5GAwye4ydLpRqa -JrMJmuAZtsmKZiLp0cffmTBkgzT0m9LmFcsH20Igf+XarM4oKnQY2k8VRWFQmKjj -7BXllMxj/1a+xSnp+N5IieFhCOwIw8Ea8R6gbbfiU2/HxZgSWrCfrb+rNSQpxf+W -PFF7G8mnUo7pj9m/Z2+UtMSkix7YP0D4VwlmTIkU0bj+7tKGTv8i1AP/SLQJTObi -QZKWnAsdh2xEPjWoR3GhZWD2vIlIIyXs9iikfwAmV35CijzS+cjarc8n98m0HJ6L -NpwHpgwhAoGBAPmFdM5aqfQFWVdJCGEdg78s7x+YrR4TZKzFZixcnBcwb2x5mUHV -Mcg4p7KhdIekkR345ldfxL6BSD8jErFakuQuIU9HPCxJhya9jz2VTdc62z8quCL3 -ELiCOkeYEdasUR+kRwyPgT75ip/iEpoo7iX0h85e2t5WLrfBUmvZCY2bAoGBANvq -itL38etkJCb3vthAIkQ979vmnHzswbUSx5+AaOp3wXBaRuwFQ8IcA2c+Lmr+EFEK -5tX5ihDiYLkivP77xGr8JLrBrIzpWouOvW4uyMbHg6bje0oiLENe3XSF4ARayyzS -X4v6iBYf3lSESdJEAW+fQ3NXhYX0CaOdYJdF1czfAoGAELfPXrAWaQIevUloZVFb -7WguUViiaLx151mGgfxmfOtC2+q9yPpmznp1SfOlYh01l+OAU2RYQ0dYNtq7uuRN -qToqAyzLrE/03TSgL0kcoQoRfIb5NWaGWUZobzmSIGcFPHB+TiojR7vifNnh0zBg -3Gwo2TvjwDfYA3nRcuZkzHcCgYAYWgNfUxdVwnQCYKKgXZGtztH1nrarWqgkfdze -+6AifnpMD6MU1YxoPSPfVdJcBKAX6UYgYY55Sif9uCwHbCeW1S7YA0QxIlHlbDvr -rICNCmC4pS3sypXuK94H3h8tPESNRQpRfL9++65p23A1OVSTYKZeak2dxKUgmfet -KI2BLwKBgAHdz2//7Cd+v/VYHsAVsP6Zm+uCDsn+CwGg2D623zxJ+bgLfclmHtsh -He7qgPvIs4MRtawE/bJY5xtJ653lY9TjkBASFsxioF7OpZ6GuJE1pcJ7Z+vvZz32 -jBfRSGzqpCNKgZFeaYGVkqlbxLIqfo004/oU/rLRhTf6XOMgh6/0 ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDUdbb5beIHeP1Z +up4gZ1hPtgfN0frILyQSR2E40L8zXi/LPXUUquLuP7Z2HlFDVj0NxjjyBcyGX3fZ +Mg4IccMhtGPevrzfUi8ZzUm4Bf8BO535gOuWgDfB56bhY8D69vzb2KnKoUb6y/rl +3KWM8r9eWNS3/Sk+y/kmBx9Lh4/mgl6RbqzpmGnGnl4UjlBhn6bDAUfsnX1CHqls +tOUlXmDhI52Q+yGnyuESs/QLITdGz9lgKO184f6OcAaEpJ8hD+V5096+TR1nmv69 +kF6a7F0CmumNLgDUdi+aCC61SE7+mol0bP6UlH2Ux9NgKpHWiInztBfn5qGuZB4Q +ui3rcvJRAgMBAAECggEAAqnbNmaYXFd/MMVOQznbyCE1eSD69yXg+p4aAnvv9130 +ujmcqVVbMP6mnABv7H4fwnJNP2qqEcHE7e8IJja+ZMfsbq6W7bNhH1O/oF1qC675 +QVdahL16DXh+Qvy6GW9YSXgz3eQ5Fdlx2BjqEKb7ALzbJazDDCGYn6oxfCP7Pmns +bZ/pQy3h34lGPr3oBMGXLOmLtMOD92w6KBBPrA+BJdo3a9ZTkjsBkU0JmoEr+ZZA +hEUKUivGRGUoYlYsqMaWri+LYuQyWg301yxXZxg22xfzzUpTo/APeUcw6dPjb2Xt +s0TMIpkLitxk2wgO/cXZtfU3wEkvaO/zE+ijFVWDwQKBgQD2N4mLwmB8jPuoof9n +Byuq0e0anGa1NfVmlTqba234yKxD2VenzPzYQDv+xC3SXfgN+BvOt3Kei7sxKzt6 +XpFsGt5H7VKHITB5s/0omLRZsXwj2EBdTK0gA8mZuaSnXLFBolW3SuKU+iheojEZ +VfmOz7C9Kl26M2LDUB46MBQ+EQKBgQDc5s7GpftxeSCIvi5RF9f3SwM/5H+ljVm1 +Glye0O9V5JctP2tQtSnLXr1/V4WWC+WiYyHsONdd1BvZRz4ba9QW46uPAfnNvlAe +mipbtgM9mQoVnHsMf27vtnE09pye4+L0CJfZtruRyrLCQLR0MvH0F6SyeFSovFiC +Zn54g+wwQQKBgQCgCX1H8HISwviYpaOC7jA9+fFpyJsh0g7OPNU5TFzQxm7iMxU8 +por6bNYSRKWcBSREwC4i8S55S03DKdyhL3LKl7Q/gEySNMpzcMBucMNZQXn1Ooyr +mDk3g/64Aui5OBCnHsMkPnKEbw1qZXYQh8eMQgcZDb6aVugtF5huLe4aYQKBgD1e +he2cKTnCG+7BXx66UA5ssY9rjKbSmSx+EWMxynwDUJiKeOboHZ9ZR638A6nGzloJ +zl/Q/swbZE09xJxbnYVqZLwLIXouOBX4YHIwI8BWJv4QBgNX19sSxWqgZKyjxOZl +CMK8SGnddUIQNdHeYWedtey7D1H9WV2I2fPjOpfBAoGAGcZmZaC0ClfIVkGrfrVM +oz/jXa7MfdLV0yaat3H9tQrW/DrRUdn5tGq0KBpvsCCnD8cqbj/wPlE9nxKfPTGs +f5uOK1T6+18Xgq017iW9Gvb72J3W1/1NFpQGHjvKk4NcEUbpci8B0r/NK5rp4ayj +Y46z6PPnAVU3f+5PXbyVif8= +-----END PRIVATE KEY----- diff --git a/security-framework/test/server.keychain b/security-framework/test/server.keychain index 026a07ce6906be6401080cf5d880caabebd2deca..8f165bf7ac82dcac75155860cac81128724ecd52 100644 GIT binary patch delta 5894 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 P_L{{X27T}Vh;aWKTz}8@ delta 3874 zcmc&%dpy+J7XOWz!H5h7BVxSrO2(^6q$K4rV~D&t33-pX5vfk2oFaMuyc0?tA|+9t zky4Up%0b>lM2JBu?jCf`x%YF==l*ri-5=le+H0@1e!tm!?Vo4;h{;AotPtCA%Q(D* zUeb zw%~!)a0|;Te2sF7$idTVR!&i1ePAg1Q3XsA$nvm*i8PQxOsIgiu2BNnWMeLY%$j3) z4XjBaCi3uhiX6+6APommG=N0cka^HbX+bbR(GV5@0YHEtjsU<}`=-kthlfY>wLrHjrz_2&Z-%K z0F(v#3C}?105=o2V0hF_O6(7HW5GIOEs=&N&BU<(;y||i4CBlR4Eu;cdjF?}Y02>u zJlWA1OIL#W`mGkUj1@vO_Q8jTMy6zBw0ASk!`e751X0FR#g8d1tnt z>gK%M4C}mz7^#-=>5q{GTD3~$qnd{J=zmyoFJ~8OEOCMYdX|&0YHW zze>zB+{0&vCg;wjRvqp)Jb7-hEdNQj1ZuGD;Ji%Q?o0exRBXtY)D7QfqUh$2j@cQX zOM4IrU%YZ;khM}3riM?&=pp5?Z*aZaB+c>JEqU4bjf2e&U3Na|jS1NvCd=G>dfJh9 zX}Gs)7U3^-chMMMC(6i9X}ak>cghzQbLFr(a~!r>GB?a{uIX3&rffKR8Z%z&dPVm| zeettvdM>QH_w{*I`^iK6=6NoWA!yUhuR>mb>|lo;D>CRt&04 zwf9jEe%)~}9eT?UGM-eAQ&u{XWH%)%^;J{JET(<6r?-^O_Li^xd;$E5wxgr$@cu{F zjq=%QZ{dY|VwT-oc@JSv)+&r-p^sAA(9h2n6j$6}9z>WlIB))bq1FPej_WNNzeo88X^-aR68aC`x+pxigHEzUVWFI%ZZk`HN1ZlZ<-?x+=VV!^D%?BE41Q|&r{)BN zcGnmCkpg$baBO!BHrn3iFr#3|f4ZQ3cJsw;O#59^OpT=B+qIge-u1$wa|UYa9~MS= z?yMq3w|?4r=kvlIOSVS#w{}f>vWf!9!#{0`&>o#DBU{`OWsLh&3q4{o+r4=+FJH)- zrwLv~b=b}?r&AgTz7Ibn=p4ImtM-UnORcj?D{t8%f+H-j_tNSu^I@8in6iD%6<3*0 zOzm47MW?>vi9-_j(9??~m2&Ka)kC%LQdKhzTts!oq)}bVcjcMN$)=z$HTn7cFC>p| zJ{^BL;PQ}V0XswE?TB1XDDiMl)Tm!n@Zh|!??+|T619e(x8X2?+?BQ!*hm!u?dHou0RpnDO*e(zlLi5g!dxt+GE;ig>UVc*8f9K*@){U6X=G;Dg*XW>|D zYq;G?M>!XQIKdUc84FMfFaTn40uTYf9f%1506v&j5b_Q@V5=ev!g7qPC4e9w!2c?~ zpX86L2>+K}1RGIAA*^E~hv`Z}1vX<)&d6a3Y2rySmB_=6QM_b$X^{tkK%*g|zbedh6hsKX_q}m~0vI!AA3uVg zPk^7Q0FjR!c?88J0H1fo?G@lW;1)0F3h8cDusPHPg|bL`m3EFJwIR{=`xD{Xyls zmc|%miV7-Olx&3j0q$z-!i|BSV-mXjaxl1S(DXS%g*TmCp1c*=4`pPrBj0P zMRdi1FVig$*`jy;W|&Q3*5+=#+hd|v=mrEvADRt`fDr%o%ONj-Z;Pss_e|aksg2b( zoh=SgpB872PVTuWD|dV*y{QFNNnGhFrgPnhQ^D3KiK!M08817Lnzak=&N6Ihijqt5 z$aFDhHjL(iwvyr@((@;8R6dHf*d1B2xn?4BeQSB!xrooCTZ9z`a<-RZl`_y<;g#VW zIVll4mew*;xf7N|d5p8g7sw6r)>MWwcM_)RNd4U$dk43bw|jK8r_@mmbY;tpUeG++ zNnGb}&0?`V?RtRC*S?{Wu133qL;whuP;7+C3A0{e=aMT zJpy6Kr>!Jyi^~-6aMPgF+3OBb_~e^64HC{P9TuKRjt=b#bKX|=8w8KJ8#oDY>Fbe= z4pI-B8tJL>6S1tF%K>(?9+^teBU@5`Y+5b>u7gzSe!as4GFe}hkI2h%+yr)>ffa$Q zXL{g=AK2XMemnH36bRnzA

UrdT_%f1J|w1N`TPr1^Wt0|y=SH3$F=zDvnX|y`W)I}Jt7nfI0D9ci2XmFN1l~@qYy2GOF%Gv-N26B zFtR@FSq|X2Ahrz~!r8~uf8EZ$i)DlNc?)mN0>VZ+gb@BGk9h$dtYr5A9D-xL34h1) zWr19*l34@c>Fe{&bY`pEd7mXs@fKP(iSM2Ws#eZ?5*^ZUsrEtC zXwJi!dGU>eAUUgmwSi#8VJU-J@*i|{mUl)9V6{b<5?q7HDhDHS)nylG_piHi?=L){ cbwkq?{qC&9%Y?lhP3Av;0c%*Ngf%w(6F-MalK=n! diff --git a/security-framework/test/server.p12 b/security-framework/test/server.p12 index 160829290c96b0f4edfcde0c8d0f84963ed0023b..09472836e8737e834caf4127150acd1e28a92ec7 100644 GIT binary patch delta 3777 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 delta 2406 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 YB=k{2?qQ4s2y0zx@EXUb&H@4m0KtcT<^TWy From e5fc4ab2acbb26fe96f2ea7d540ec1bb9f04c0b6 Mon Sep 17 00:00:00 2001 From: Kornel Date: Thu, 19 Feb 2026 20:07:06 +0000 Subject: [PATCH 3/4] Re-enable tests --- security-framework/src/os/macos/passwords.rs | 3 --- security-framework/src/os/macos/secure_transport.rs | 3 --- 2 files changed, 6 deletions(-) diff --git a/security-framework/src/os/macos/passwords.rs b/security-framework/src/os/macos/passwords.rs index de92266b..7a735215 100644 --- a/security-framework/src/os/macos/passwords.rs +++ b/security-framework/src/os/macos/passwords.rs @@ -377,7 +377,6 @@ mod test { } #[test] - #[ignore] fn default_keychain_test_missing_password_default() { let service = "default_this_service_does_not_exist"; let account = "this_account_is_bogus"; @@ -404,7 +403,6 @@ mod test { } #[test] - #[ignore] fn default_keychain_test_round_trip_password_default() { let service = "test_round_trip_password_default"; let account = "this_is_the_test_account"; @@ -450,7 +448,6 @@ mod test { } #[test] - #[ignore] fn default_keychain_test_change_password_default() { let service = "test_change_password_default"; let account = "this_is_the_test_account"; diff --git a/security-framework/src/os/macos/secure_transport.rs b/security-framework/src/os/macos/secure_transport.rs index d0fb02dc..51f10feb 100644 --- a/security-framework/src/os/macos/secure_transport.rs +++ b/security-framework/src/os/macos/secure_transport.rs @@ -297,7 +297,6 @@ mod test { } #[test] - #[ignore] fn client() { let listener = p!(TcpListener::bind("localhost:0")); let port = p!(listener.local_addr()).port(); @@ -517,7 +516,6 @@ mod test { } #[test] - #[ignore] fn close() { let listener = p!(TcpListener::bind("localhost:0")); let port = p!(listener.local_addr()).port(); @@ -546,7 +544,6 @@ mod test { } #[test] - #[ignore] fn short_read() { let listener = p!(TcpListener::bind("localhost:0")); let port = p!(listener.local_addr()).port(); From f7d61bb6d77ce5bf42d5e77e09dd3789ba93606f Mon Sep 17 00:00:00 2001 From: Kornel Date: Thu, 19 Feb 2026 20:06:37 +0000 Subject: [PATCH 4/4] Cache registry --- .github/workflows/main.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index baff1f83..ab6d8e9a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,6 +26,13 @@ jobs: with: toolchain: ${{ matrix.rust }} + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry/index + ~/.cargo/registry/cache + key: cratesio-${{ runner.os }}-${{ hashFiles('Cargo.toml') }} + - name: Fix time MSRV run: | cargo update -p time --precise 0.3.41 @@ -51,6 +58,13 @@ jobs: toolchain: stable components: clippy, rustfmt + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry/index + ~/.cargo/registry/cache + key: cratesio-${{ runner.os }}-${{ hashFiles('Cargo.toml') }} + - name: DO NOT USE RUSTFMT run: "if cargo fmt --quiet --check -- --config-path=/dev/null; then echo >&2 'Do not reformat the code with rustfmt. This project does not use rustfmt.'; fi" @@ -73,6 +87,13 @@ jobs: toolchain: stable target: aarch64-apple-ios,x86_64-apple-darwin + - uses: actions/cache/restore@v5 + with: + path: | + ~/.cargo/registry/index + ~/.cargo/registry/cache + key: cratesio-${{ runner.os }}-${{ hashFiles('Cargo.toml') }} + - name: Run check iOS run: cargo check --all-features -p security-framework --target aarch64-apple-ios