From 976dbba542732071a478a79d93a7e3bec26ef5d8 Mon Sep 17 00:00:00 2001 From: Loris Zinsou Date: Sat, 5 Mar 2022 14:30:30 +0100 Subject: [PATCH] Add support for rfc2633 sMIME capabilities signed attr (#215) * Support sMIME capabilities signed attribute * Reference rfc2633 sMIME capabilities section * Allow non-algorithm OIDs in sMIME capabilities * Add sMIME capabilities parse test --- asn1crypto/cms.py | 18 ++++++ ...ime-signature-generated-by-thunderbird.p7s | Bin 0 -> 2865 bytes tests/test_cms.py | 54 ++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 tests/fixtures/smime-signature-generated-by-thunderbird.p7s diff --git a/asn1crypto/cms.py b/asn1crypto/cms.py index 7ce583d..9c8b6db 100644 --- a/asn1crypto/cms.py +++ b/asn1crypto/cms.py @@ -100,6 +100,8 @@ class CMSAttributeType(ObjectIdentifier): '1.2.840.113549.1.9.4': 'message_digest', '1.2.840.113549.1.9.5': 'signing_time', '1.2.840.113549.1.9.6': 'counter_signature', + # https://datatracker.ietf.org/doc/html/rfc2633#section-2.5.2 + '1.2.840.113549.1.9.15': 'smime_capabilities', # https://tools.ietf.org/html/rfc2633#page-26 '1.2.840.113549.1.9.16.2.11': 'encrypt_key_pref', # https://tools.ietf.org/html/rfc3161#page-20 @@ -946,6 +948,21 @@ class SMIMEEncryptionKeyPreferences(SetOf): _child_spec = SMIMEEncryptionKeyPreference +class SMIMECapabilityIdentifier(Sequence): + _fields = [ + ('capability_id', ObjectIdentifier), + ('parameters', Any, {'optional': True}), + ] + + +class SMIMECapabilites(SequenceOf): + _child_spec = SMIMECapabilityIdentifier + + +class SetOfSMIMECapabilites(SetOf): + _child_spec = SMIMECapabilites + + ContentInfo._oid_specs = { 'data': OctetString, 'signed_data': SignedData, @@ -981,4 +998,5 @@ class SMIMEEncryptionKeyPreferences(SetOf): 'microsoft_nested_signature': SetOfContentInfo, 'microsoft_time_stamp_token': SetOfContentInfo, 'encrypt_key_pref': SMIMEEncryptionKeyPreferences, + 'smime_capabilities': SetOfSMIMECapabilites, } diff --git a/tests/fixtures/smime-signature-generated-by-thunderbird.p7s b/tests/fixtures/smime-signature-generated-by-thunderbird.p7s new file mode 100644 index 0000000000000000000000000000000000000000..c75b2a9636b662fee7536a7e4b24024b0cddf9df GIT binary patch literal 2865 zcmdT`c|6o>7oYjfX3UtelP-pdJ6V5|gqLdzS+b`obg2~c+BIZvW*AFF))-~$wM1Se zYlTmCDy9;VQI-~Dr;CVJ_ige1@&14B^Vjn|=RD^*pXWK}dk#oPq7`CHV^;W}C?Jmx z(g7%xj0gFUXxA81=ouIsfFU5@4kIW8lE*}pfJ{Uo$b=;T!d_l{4E?H@@}%ii2@H!p?7QuP;7Ij3=Nm|t1BpMbMngqK zy+Z$#>-z=x(tLfqPg1>9PWyU;Qeu4j_JRAz`^cK=YM_?mHdNaI|9Sy40ok383PnI* zOaKo7nE)@q1fY-y!X)BSRu60luF|2_q)1*adLe5lkf^e2`1&W?_E7QnLCUK@@u*%n zd%bmnWL4@NDQ|C5A75Ri-Dj%ck>@&J6Mbr{GCnP%^))a!bwNAXg<_E197t@6t@%}y z$a7lV(L=S6rjg5!IF3ZoOcvJ#wgYcZvK6qThia@RYV7j@9x!Bw#pX+T! zB7IR0KlqdSAJlf(!e{R3*zdq72veCE(Z^E3%ueWN1 zTtw<$(#6(S97B2;dZcjkrHt~*dh5j3w-D++tFIsPgs1f0u_!3g3o7?WH5#6c?NUsP z-sm298p+1G2NVxawmX~Ft6Q~7>?KBM@<0hw3!f%UAw05kuT3{Yk`&5hZm)XG&EnVf zE^giBdG(x47M&k2;J*;ZwDTTDl~AjmTe9#Y;TW}e+Kf1dzkC7a=ag^sD!@(~j%`E; zHz}FFer~`Y&gS|b+&+oBckBeMgb>RXM}xP}o$|$p)KZ#mP{KxzF!rZc zv#QGav#xGtof721I&@azR^oIxZtl{~5>2?pqb^-#9KEEr_3%Mumiv;VoD;2f4KZLV z{wM)}K_Sqc8M0k=+Zh6dpz7Jw4{fi%IJeH5C=yFv+%K@fcT$uCt6naN;6LjYMSiLm zvAwvbQTCZr$;$@eR_V=v}TU=q-0)hE8bi`DZvmWY3tP zkS-%vW;&KXG_2{Ef#H_clfDvn)ykgHEX<`qGfG>8Kp8r<;LWfzU+dGU^tJLqH*ckd zLA93Dy%sKMMrOGlS4UplWREwL-fWzbRq+~nAPTk0QjI-kqq$yQ-<-M{R5P?Yl=5Lz zxZ-fSyI)ve7d25GRH)0}C2^myuo<>M_9<)938)2C+5jg|5ne~Ts|qB1t%u!PdJ z=40=aGXSaM16pevG79sB`}3}tPbz#$;Jz_I-_JM21D2$h9JdX5Jl`rWP~Unf_?jL8qH+xI;FG-G~d+R}4&OsD){u6XV& zSm1f7?MvU=HwID$6XAxLo*PKlr>rFMSwxz)HmqY{Pf{;~>JK>&DYD~J&RiMG8c28= zjyr(}ZbVhJ7)Clh1RofQ*;Be(q^)%uE^)Ye<9qO~F^wTT*WW0OL|$7osOao@=oPD8 zrzfh^%^?Rbme?u|J=I+LHz)bd+8Ulpq-$Lbb_;wISp2Lpj!5zCpRjrhkT#Tdu!O@CL(wA4X7b1FQUzsUPhGSLmT znJ_Qxx^ZOr>K98{zo-ijEhe!c=Pe%TpSTlkFKh*R{d9;YyMQOa?O?tI3su+&0FW2S z^WQcILxH#-djJ3+^zB;xt^)w5K8Qjh6mc*B^}liw$f!f26_HRll&QfFCo@X_MxV&I zkHmbN0?_;bW;^)2zf}f)pJ29|Eu0BJ&b~6-{D zxR#U>Ezsm2(GA#3*!Z2YP;`&3X|%IsP^`_OdLvsiA*_>Fws$JGJ(<{{BGINYv5R%( z;UxQ6R?>Op>1(XMWmuZa2(Qg95esouHYK=Drfs5wo0A^dJyWgLlf+t9k`!F0OJWXe!2lCI61KdrG$|@UwI15NkK_cG}zm zj~Cr|{dC-z$2};$KG?1P{fD$iy8Y{KFT6RAbIab~WcLa5CKAm3jYARGgz?`sH$%vhvxvA~)??G7c9CU3^d_Bi<69 z_Vy#|ID28ftx4Ag~N YhK#MCSesFYaQ?;XZT{xVkU!Ud0A