@@ -786,6 +786,96 @@ def assert_raise_pkcs7_exception
786786 end
787787 end
788788
789+ public
790+
791+ def test_enveloped
792+ @rsa1024 = OpenSSL ::PKey . read <<-_PEM_
793+ -----BEGIN RSA PRIVATE KEY-----
794+ MIICXgIBAAKBgQDLwsSw1ECnPtT+PkOgHhcGA71nwC2/nL85VBGnRqDxOqjVh7Cx
795+ aKPERYHsk4BPCkE3brtThPWc9kjHEQQ7uf9Y1rbCz0layNqHyywQEVLFmp1cpIt/
796+ Q3geLv8ZD9pihowKJDyMDiN6ArYUmZczvW4976MU3+l54E6lF/JfFEU5hwIDAQAB
797+ AoGBAKSl/MQarye1yOysqX6P8fDFQt68VvtXkNmlSiKOGuzyho0M+UVSFcs6k1L0
798+ maDE25AMZUiGzuWHyaU55d7RXDgeskDMakD1v6ZejYtxJkSXbETOTLDwUWTn618T
799+ gnb17tU1jktUtU67xK/08i/XodlgnQhs6VoHTuCh3Hu77O6RAkEA7+gxqBuZR572
800+ 74/akiW/SuXm0SXPEviyO1MuSRwtI87B02D0qgV8D1UHRm4AhMnJ8MCs1809kMQE
801+ JiQUCrp9mQJBANlt2ngBO14us6NnhuAseFDTBzCHXwUUu1YKHpMMmxpnGqaldGgX
802+ sOZB3lgJsT9VlGf3YGYdkLTNVbogQKlKpB8CQQDiSwkb4vyQfDe8/NpU5Not0fII
803+ 8jsDUCb+opWUTMmfbxWRR3FBNu8wnym/m19N4fFj8LqYzHX4KY0oVPu6qvJxAkEA
804+ wa5snNekFcqONLIE4G5cosrIrb74sqL8GbGb+KuTAprzj5z1K8Bm0UW9lTjVDjDi
805+ qRYgZfZSL+x1P/54+xTFSwJAY1FxA/N3QPCXCjPh5YqFxAMQs2VVYTfg+t0MEcJD
806+ dPMQD5JX6g5HKnHFg2mZtoXQrWmJSn7p8GJK8yNTopEErA==
807+ -----END RSA PRIVATE KEY-----
808+ _PEM_
809+ @rsa2048 = OpenSSL ::PKey . read <<-_PEM_
810+ -----BEGIN RSA PRIVATE KEY-----
811+ MIIEpAIBAAKCAQEAuV9ht9J7k4NBs38jOXvvTKY9gW8nLICSno5EETR1cuF7i4pN
812+ s9I1QJGAFAX0BEO4KbzXmuOvfCpD3CU+Slp1enenfzq/t/e/1IRW0wkJUJUFQign
813+ 4CtrkJL+P07yx18UjyPlBXb81ApEmAB5mrJVSrWmqbjs07JbuS4QQGGXLc+Su96D
814+ kYKmSNVjBiLxVVSpyZfAY3hD37d60uG+X8xdW5v68JkRFIhdGlb6JL8fllf/A/bl
815+ NwdJOhVr9mESHhwGjwfSeTDPfd8ZLE027E5lyAVX9KZYcU00mOX+fdxOSnGqS/8J
816+ DRh0EPHDL15RcJjV2J6vZjPb0rOYGDoMcH+94wIDAQABAoIBAAzsamqfYQAqwXTb
817+ I0CJtGg6msUgU7HVkOM+9d3hM2L791oGHV6xBAdpXW2H8LgvZHJ8eOeSghR8+dgq
818+ PIqAffo4x1Oma+FOg3A0fb0evyiACyrOk+EcBdbBeLo/LcvahBtqnDfiUMQTpy6V
819+ seSoFCwuN91TSCeGIsDpRjbG1vxZgtx+uI+oH5+ytqJOmfCksRDCkMglGkzyfcl0
820+ Xc5CUhIJ0my53xijEUQl19rtWdMnNnnkdbG8PT3LZlOta5Do86BElzUYka0C6dUc
821+ VsBDQ0Nup0P6rEQgy7tephHoRlUGTYamsajGJaAo1F3IQVIrRSuagi7+YpSpCqsW
822+ wORqorkCgYEA7RdX6MDVrbw7LePnhyuaqTiMK+055/R1TqhB1JvvxJ1CXk2rDL6G
823+ 0TLHQ7oGofd5LYiemg4ZVtWdJe43BPZlVgT6lvL/iGo8JnrncB9Da6L7nrq/+Rvj
824+ XGjf1qODCK+LmreZWEsaLPURIoR/Ewwxb9J2zd0CaMjeTwafJo1CZvcCgYEAyCgb
825+ aqoWvUecX8VvARfuA593Lsi50t4MEArnOXXcd1RnXoZWhbx5rgO8/ATKfXr0BK/n
826+ h2GF9PfKzHFm/4V6e82OL7gu/kLy2u9bXN74vOvWFL5NOrOKPM7Kg+9I131kNYOw
827+ Ivnr/VtHE5s0dY7JChYWE1F3vArrOw3T00a4CXUCgYEA0SqY+dS2LvIzW4cHCe9k
828+ IQqsT0yYm5TFsUEr4sA3xcPfe4cV8sZb9k/QEGYb1+SWWZ+AHPV3UW5fl8kTbSNb
829+ v4ng8i8rVVQ0ANbJO9e5CUrepein2MPL0AkOATR8M7t7dGGpvYV0cFk8ZrFx0oId
830+ U0PgYDotF/iueBWlbsOM430CgYEAqYI95dFyPI5/AiSkY5queeb8+mQH62sdcCCr
831+ vd/w/CZA/K5sbAo4SoTj8dLk4evU6HtIa0DOP63y071eaxvRpTNqLUOgmLh+D6gS
832+ Cc7TfLuFrD+WDBatBd5jZ+SoHccVrLR/4L8jeodo5FPW05A+9gnKXEXsTxY4LOUC
833+ 9bS4e1kCgYAqVXZh63JsMwoaxCYmQ66eJojKa47VNrOeIZDZvd2BPVf30glBOT41
834+ gBoDG3WMPZoQj9pb7uMcrnvs4APj2FIhMU8U15LcPAj59cD6S6rWnAxO8NFK7HQG
835+ 4Jxg3JNNf8ErQoCHb1B3oVdXJkmbJkARoDpBKmTCgKtP8ADYLmVPQw==
836+ -----END RSA PRIVATE KEY-----
837+ _PEM_
838+ ca = OpenSSL ::X509 ::Name . parse ( "/DC=org/DC=ruby-lang/CN=CA" )
839+ ee1 = OpenSSL ::X509 ::Name . parse ( "/DC=org/DC=ruby-lang/CN=EE1" )
840+ ee2 = OpenSSL ::X509 ::Name . parse ( "/DC=org/DC=ruby-lang/CN=EE2" )
841+
842+ ca_exts = [
843+ [ "basicConstraints" , "CA:TRUE" , true ] ,
844+ [ "keyUsage" , "keyCertSign, cRLSign" , true ] ,
845+ [ "subjectKeyIdentifier" , "hash" , false ] ,
846+ [ "authorityKeyIdentifier" , "keyid:always" , false ] ,
847+ ]
848+ @ca_cert = issue_cert ( ca , @rsa2048 , 1 , ca_exts , nil , nil )
849+ ee_exts = [
850+ [ "keyUsage" , "Non Repudiation, Digital Signature, Key Encipherment" , true ] ,
851+ [ "authorityKeyIdentifier" , "keyid:always" , false ] ,
852+ [ "extendedKeyUsage" , "clientAuth, emailProtection, codeSigning" , false ] ,
853+ ]
854+ @ee1_cert = issue_cert ( ee1 , @rsa1024 , 2 , ee_exts , @ca_cert , @rsa2048 )
855+ @ee2_cert = issue_cert ( ee2 , @rsa1024 , 3 , ee_exts , @ca_cert , @rsa2048 )
856+
857+ #
858+
859+ certs = [ @ee1_cert , @ee2_cert ]
860+ cipher = OpenSSL ::Cipher ::AES . new ( "128-CBC" )
861+ data = "aaaaa\n bbbbb\n ccccc\n "
862+
863+ tmp = OpenSSL ::PKCS7 . encrypt ( certs , data , cipher , OpenSSL ::PKCS7 ::BINARY )
864+ p7 = OpenSSL ::PKCS7 . new ( tmp . to_der )
865+ recip = p7 . recipients
866+ assert_equal ( :enveloped , p7 . type )
867+ assert_equal ( 2 , recip . size )
868+
869+ assert_equal ( @ca_cert . subject . to_s , recip [ 0 ] . issuer . to_s )
870+ assert_equal ( 2 , recip [ 0 ] . serial )
871+ assert_equal ( data , p7 . decrypt ( @rsa1024 , @ee1_cert ) )
872+
873+ assert_equal ( @ca_cert . subject . to_s , recip [ 1 ] . issuer . to_s )
874+ assert_equal ( 3 , recip [ 1 ] . serial )
875+ assert_equal ( data , p7 . decrypt ( @rsa1024 , @ee2_cert ) )
876+ assert_equal ( data , p7 . decrypt ( @rsa1024 ) )
877+ end
878+
789879 end
790880end
791881
0 commit comments