From c54860f86fe8a15cb709b67409509849b990fe43 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Wed, 21 Sep 2016 15:23:54 -0700 Subject: [PATCH] Remove restrictions on signing key length (#13910) Roslyn uses the CLR APIs to sign an assembly, so as long as the CLR supports the key length and it is a valid key structure there's no reason we should limit the length of the key. In addition, the previous limit was wrong -- it didn't include padding space for the key header. Fixes #12822 --- .../InternalsVisibleToAndStrongNameTests.cs | 62 ++++++++++++++++ .../AssemblyIdentity.DisplayName.cs | 13 +--- .../Core/CompilerTestResources.csproj | 2 + .../Core/SymbolsTests/snMaxSizeKey.snk | Bin 0 -> 9236 bytes .../Core/SymbolsTests/snMaxSizePublicKey.snk | Bin 0 -> 2080 bytes .../Test/Resources/Core/TestResources.cs | 61 ++++++++++++++++ .../InternalsVisibleToAndStrongNameTests.vb | 69 ++++++++++++++++++ .../Utilities/Desktop/SigningTestHelpers.cs | 6 ++ 8 files changed, 202 insertions(+), 11 deletions(-) create mode 100644 src/Compilers/Test/Resources/Core/SymbolsTests/snMaxSizeKey.snk create mode 100644 src/Compilers/Test/Resources/Core/SymbolsTests/snMaxSizePublicKey.snk diff --git a/src/Compilers/CSharp/Test/Emit/Attributes/InternalsVisibleToAndStrongNameTests.cs b/src/Compilers/CSharp/Test/Emit/Attributes/InternalsVisibleToAndStrongNameTests.cs index e09bb14d454..6d4ee9d55d2 100644 --- a/src/Compilers/CSharp/Test/Emit/Attributes/InternalsVisibleToAndStrongNameTests.cs +++ b/src/Compilers/CSharp/Test/Emit/Attributes/InternalsVisibleToAndStrongNameTests.cs @@ -1015,6 +1015,68 @@ public class C #region Signing + [Fact] + public void MaxSizeKey() + { + var pubKey = TestResources.General.snMaxSizePublicKeyString; + string pubKeyToken = "1540923db30520b2"; + var pubKeyTokenBytes = new byte[] { 0x15, 0x40, 0x92, 0x3d, 0xb3, 0x05, 0x20, 0xb2 }; + + var comp = CreateCompilationWithMscorlib($@" +using System; +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo(""MaxSizeComp2, PublicKey={pubKey}, PublicKeyToken={pubKeyToken}"")] + +internal class C +{{ + public static void M() + {{ + Console.WriteLine(""Called M""); + }} +}}", + options: TestOptions.ReleaseDll + .WithCryptoKeyFile(SigningTestHelpers.MaxSizeKeyFile) + .WithStrongNameProvider(s_defaultProvider)); + + comp.VerifyEmitDiagnostics(); + + Assert.True(comp.IsRealSigned); + VerifySignedBitSetAfterEmit(comp); + Assert.Equal(TestResources.General.snMaxSizePublicKey, comp.Assembly.Identity.PublicKey); + Assert.Equal(pubKeyTokenBytes, comp.Assembly.Identity.PublicKeyToken); + + var src = @" +class D +{ + public static void Main() + { + C.M(); + } +}"; + var comp2 = CreateCompilationWithMscorlib(src, +references: new[] { comp.ToMetadataReference() }, +assemblyName: "MaxSizeComp2", +options: TestOptions.ReleaseExe + .WithCryptoKeyFile(SigningTestHelpers.MaxSizeKeyFile) + .WithStrongNameProvider(s_defaultProvider)); + + CompileAndVerify(comp2, expectedOutput: "Called M"); + Assert.Equal(TestResources.General.snMaxSizePublicKey, comp2.Assembly.Identity.PublicKey); + Assert.Equal(pubKeyTokenBytes, comp2.Assembly.Identity.PublicKeyToken); + + var comp3 = CreateCompilationWithMscorlib(src, +references: new[] { comp.EmitToImageReference() }, +assemblyName: "MaxSizeComp2", +options: TestOptions.ReleaseExe + .WithCryptoKeyFile(SigningTestHelpers.MaxSizeKeyFile) + .WithStrongNameProvider(s_defaultProvider)); + + CompileAndVerify(comp3, expectedOutput: "Called M"); + Assert.Equal(TestResources.General.snMaxSizePublicKey, comp3.Assembly.Identity.PublicKey); + Assert.Equal(pubKeyTokenBytes, comp3.Assembly.Identity.PublicKeyToken); + } + [Fact] public void SignIt() { diff --git a/src/Compilers/Core/Portable/MetadataReference/AssemblyIdentity.DisplayName.cs b/src/Compilers/Core/Portable/MetadataReference/AssemblyIdentity.DisplayName.cs index 63f6513178b..dec9a19802b 100644 --- a/src/Compilers/Core/Portable/MetadataReference/AssemblyIdentity.DisplayName.cs +++ b/src/Compilers/Core/Portable/MetadataReference/AssemblyIdentity.DisplayName.cs @@ -619,24 +619,15 @@ internal static bool TryParseVersion(string str, out ulong result, out AssemblyI } } - private const int MaxPublicKeyBytes = 2048; - private static bool TryParsePublicKey(string value, out ImmutableArray key) { - ImmutableArray result; - if (value.Length > (MaxPublicKeyBytes * 2) || !TryParseHexBytes(value, out result)) - { - key = default(ImmutableArray); - return false; - } - - if (!MetadataHelpers.IsValidPublicKey(result)) + if (!TryParseHexBytes(value, out key) || + !MetadataHelpers.IsValidPublicKey(key)) { key = default(ImmutableArray); return false; } - key = result; return true; } diff --git a/src/Compilers/Test/Resources/Core/CompilerTestResources.csproj b/src/Compilers/Test/Resources/Core/CompilerTestResources.csproj index 319a0022677..d3e03e7bc1b 100644 --- a/src/Compilers/Test/Resources/Core/CompilerTestResources.csproj +++ b/src/Compilers/Test/Resources/Core/CompilerTestResources.csproj @@ -346,6 +346,8 @@ + + diff --git a/src/Compilers/Test/Resources/Core/SymbolsTests/snMaxSizeKey.snk b/src/Compilers/Test/Resources/Core/SymbolsTests/snMaxSizeKey.snk new file mode 100644 index 0000000000000000000000000000000000000000..d47ca1d7c28e205d60debfca112d2c0253c8e7f9 GIT binary patch literal 9236 zcmV+vBTn2-!VSv>HFvQSRRNl2S-gMN1Ygx%8&&fMYHHs!ec6q}Bo3yY7uEZXi4 zcI#A>^2;{;N2;jh)BP z_=1eB90Tp(3DBTWvb&rx+`zqCW#koa`Kut_I!avjo5; z(llo4yR4oDwb$#DFTe@B7z5BXaSq44_i!1r~CZ~>+4HqT?_vZ|Sh)A}jv^?pyNnjmU2=Ud9d!t!h~XY3nvGt{HG3&0g) z-M|0-SZvR@?pd!i;}U+qnFC}e;G7VBN5SZYpfUzs&TZC4FkARfxe_yy$d{BcjxXQ+ zUaDfzPDoELw?FCxhr8OLc@BB}4hc6bVTZ>;$fNOK(3lwY9mS7v{~8|IRoSz1 zzv(Us>cS#H!nthVAv&UF@*1v{NSPrfoB!Wj3I~*NZLf=6syazv1SxwuCB{b}C-k=Y z{eslumsD@6YQq(IqYFKu*2eHbC1!YNwKlog>(^)G(aO87xp(XbINGzdnf_zy4#pxT z9gxGo!Rx`RV;do2C`y)D>0!k|sms<9&_;=oF};Hzd`UZhuXD}orE(Q8 z7%7^fKaX+6X4bv`gUyD2qAMTpS;8=fmQ}^Ml(@dzFO7eIw)xc zG<1#?K|E#Iqj0e)Mx$qzs!fhtM;3LXM-(~XGe>EG;vSk!{;pE?SEc?sw#{nTs=Nuk zU7GiDCdSXc0sA;qYg`M9f?fl?p*@8_H)XwAY`)Q-(3W)lX&rMTD3p&{uzmyA`5Eru ztRwc`eMzoF@n3{lXgar&CkaLFC$*T&omax9`80xzyZ*aVF=d1tmi;d z9>q!768o=lXuUW0khEfgXh1OB+$~beLDaWnt^9Br9XTOp)Uzgm zp7kP~obL;dFVc5V1$w!+sbYH%xp>_}e(QiRYR7!osrK3iN8G+I5Kjh!b zgp}!4L%6!);XA*}T0<-?{YV}iVY;%sz}FNH>9lgvQ4+G^LBj%SbZAx#*(QVd_^L)0rW%V=|)kA_c=^hnyjF0^AD9?d^w%>6{^C6yLcL{W{V6?L_R6BU7@2 zE^+tI#&JSaB8bverZGCXi-tf9W1SZQr=zAaCwN~fEW11U%+dCpjruYodEt={o zZo_?qzhiaIbSl8olAqD~QJGWs*#T9&ebFsfX5Kf$#)q50@sM0MihZTI#eF-b9Ziv(fV3@9d7S(9MY81j-gSu z`l9y7XWA-8)kYKhy73;2ufK8-WSIK5?xmVCeT9D38K15!(#}Mpinr+F(Z`q16-(T0 z99J|NujCN!dl9ER<(&;3^IZI1N?T*;3j&&%ipkwY?0OZ~UVx#GW>9

aTf!>~jj> zZSzb5+(PWYWUu|F+g)^ejya>!{>j~(omfM@4gN3ZnH@-_&M?eSSsJ=+<-JkTlGhr> z63yy38I-O&W@-Y%og(rxhJ?S7c{oia%b>`%Hs7Qhq7iT}i|oh7TFC5!>-yB>^?>XaGC^O1Ir>7d(1=t zA($S3ukq{kVkUFdkz^HpqK^e$x0tZ@nqheu06{9T`Y3b0yEy%uw~{?%2pOHp&XXhL zTyb)pMl=@2xmS$Rrw})e@F4RKa0fM1&nlUOym4)2uOM_MDu(|e5Zlcb&A7+F%De+I z>T`J}sxI+8V8lp@jR{D&#O19MLU*Wi7x%y)hu+gSQip8zXe*Hz8=h1gY?4xrnFUhNSD`;G@1l?Eo7;vw+KgggJO55E8E5h{ASQG?>SsBf(BFl zjd4u$e?%HAIlD4Dsq5xn56q!9Uc?#M4}B#_oH>HTjU3!$nj7*ZR!)Px71kQ2Vqh7w zWZsVRAIVZ8EM!3izN;&Na-9TaJ-|Y$R}Uo-g!{H=ybhIC6GZbIncI{GLR!>eha)xi6jr+OgjMjJM}cK0vu3UiUg<^JPUV%8WNp`p|8 zd(2TjZ*9m=#(kQER)jBGc2|eUl@(u8QGSPcj^v}nCyt>75xF2lMFPFWxnUtV+=(P` zmD1b5jv@Hjr;3t7-CDBpV4y>k0(tY&)$i(WvJL6U>h#EHNmV==_52T>UlSIkw>>Di z{>2$bmMe^d5!xSQ-o+7+(Rmk=KLj}tenX!nZud84g9CO;CvJ0%81mEeM3}gq`Wwqo zxAzOY{>3x%9hh0Ps>;a8g!i}ilo{o^7LERcBTUU|-sG}cim<0+aTt^Z90QAP=}EBT6&b>&&01=*e%|iE-1ec`B{bTz$hA-{Vwx1th0; zHH1N}8C>RF^6ggqlLs!&yG;DxmK9B_7Ccqx9GDShzKgnYFDas)zqK8u^PrzI#(pyh z>JpXY6@x(ZMwjTl{N7Sqv)Z&K5U-DKq<&Ny@DXTqI7)t~Dgn4ys8Z*vO|^=1#e{1# zWcAt>C})6)s$dHBd;!R$?K95_DYH17e3>`nfRpUzV1X1%S_sZpWQI|aR9HJ9>FW?J zl|So^zz#F-BzPcyv-!L0htZiFl6{Qlr+1leoIB?H4;v9MVQYZZPk;Jlrq>>SZ95zA z^VC3E zLGtceg&6Y3*zO;|!iQm`P<|qC5%+A@l+I@z6Hz((SLna+F6nW=CX(IXYnDn684yoj zSPdAf*2k6=?%e>0-wwcFQ@d23$A^g6N-CsIaX$&ZXo!NBaBwQgl1EZ%klTpG{$fdi z|6zhT^?mg22BWTJTY2p(SscsGE8+z`;_%WSB|jb>&p(sq?d53waGYIPl7*_lMaQd4 zynVo;V7agDYQ&{MJr7`;h>MCouAw9|hwbI$ItyGR3~Jc#OHgNTbr?TDG}Eg8f{~~d541sx&FzSZ^YeHZ&I{MH@MO~ghatanQ|{R-WdhqJ}l z-wu!joE75DPLVi96zu+pGCJ&Qg10`j>B0+Tl87_%vTY#?10J#YqJz!~ndmb*5^3`~ zwfC?Y4v-SDePDS}QUV%hs9pqe$=~-MWmDheEM~GIcNBJKP~5se9%6d$L6R^0Ddagj zzFEK>=W3Y~wAeX6YO`upfC?qDS_;C2L@u08C&;vXEe4rx|6zod`v4So8%w+h0%IGpPYe6M@Ttz z;4F@0T(I_OKyc@D$nq0yu7q1E+O}aV?CAh6o!#2aBuvJi_)cRduyiERP0-`yM9m`L zk?oB$=?WH29&dG5o^yg0LLSFNs3G}qHn{Vuju@arXYcM++p!v3@l`ndRZ1w-j=i?P zlY)Us(pTe4k7^9YKQY7+rA6i)r&GYez7epj#j)sVK z+NrdjsO$js^nQjT?({DFjaiZWi{3lt7K4(J49wN_s!`4xnt)SE7Yd?Ea3(N0&caJd?dGTVeCKdu-ZYv2 zR9t0?VkLa&>D=^dj!2|x#c21nc9Imbc{*t#vk5paz0E%^9rp~xxm9QgrLRt`{9~i3 zl57u<;<63Jtf8JW_!kaqIkY5Zsg?MgNro(UV~NB1)6VdV%hL%<%XVMjT_?!1Nl3TC z?c{0Zk|d09jTN+|gzO1jdymgsntOa@aP{!N2qdC(gz^#rXSBR0z?M-O7l|mNr}lh~ zTu1Z4d+i@OZss)1dK?Fb+BTgYRrWF>?p7U+7P8IOu?sP0u^>-mr;m-!cH9u(pn^V_ z+6+x)`c?Fe(8-j4OnH}Ny4xa5MMJ~E5P#4t-NlLtBelhG=GU|l)sXp}8(fP5AU(LF zlWy{?#-L!6DI~YFY>yi8O{`X+fJ6|5zu%k_Vvd$OwF6LQ!MFt_mH5ORc=(mBc1Jje zU8!69k)y%H%QYhPAx=4*+X7yxUE0o55Br6RA07uRbyYk1={iJq_mu8~!3MTTXbU0* z=aPeD%EDK*X@)-@_H47c~`P7bi)L_RZ)?*F|sa$EX0>7eyqa+@?;SX5YSbr`@;mJwYfas>VJ+e2;&MMECSI=`lJgL8%}j z!B5j)RCB!JvNX@ZTVR=O$oKHI6P}ttl4-g>@Pb~ zLQ1k2Ln`S7neS*{Sty@BC`5y{HNzA0*R@d;qo3D~=^|ln81B3AMJfa@HoGFkT?a1h zh#Z@aC#N=KfL^o=6J8P4-}F0ef4;xhJ+soloZyS!9@sU;hAHz5Q0<^#@^pU}nm2>B zSX0nn5H-RuFSB)b#x1{^npAnEVK<&1A;5xX%E*e(y5eo z3PrqnX>%!1+`M{wD!BLaMKg^cyT0#RD!JG1MMZ&tA~v{K%SALQ`U}w6EU2gfdv1V- zr%0`fJSz9rkfGJSNEr_vyyb~-!CxS8G=~22=ju{Dn>BHv8_S6^Vmvn?TE2a?U{#WE z3}!>wbn#lF)sP_D)g{k1Mm`Ff+InKhP1+k-Qwmfz%k~(_&XH0vRMu*1#_IV(^4W%~ z3qc%WeI`~*AQA$MnBU;CyYbY`2??2;W7%n+KO|4_sodKA#sy`Gqc&WYWTg7cvmm(= zXl&Cvr#U9j+D~08i?azj7;HE0cdj7d+)PUORPu!*h{ovp<5Wo5%_fGDO0rSXU6E|YKR{CaXPH=3^Y1%(6H@#1Ox)ILx8Q8RR4Zla0E zVPA|ow z?%cLU!4fRp*YWmawHBM=cL~VrQRC55m9&^34Re)(lxHDA8g5#H%9W+8=LNK9ILhO@ zld02|WUN7{^HN}UCGNCSvwKBoR09jPMpkHLqD{N`0~p39GKFX4MUl|J+vGqb&D5<$ zxbt~A3WCFVLTfg9{mxX75G10=4+7`Q%Iy+ZdyPCDm5sSZklE}9>fw_vL&s!~QVEl{ z#*Wfp{&xZfPQ7u_p&!){W zD25!*5>*e5vD5Lly23nt$?XBs9XHlPMMekYSmnQ!B|Sm#l#3AV2eC`=7;t_h>*7N? z^>x@OaHxi^{0_>91%bF74Z|$o1jp>bR5-}+KS|c1+-&9)$O%=__7D#nqKzq4r~5Ps zFCYlRo-L|No>oIIh(rv$-IlD;kOf%TS3Qz`S*Vu7T-RGAi>^f^BsB^omF@$QeJe>L zlM>B}ir^_qOe5s`wE9rDFPlvzKT&dG7=Pe|kj8dRNd@r2I{#u}d)5-*wU=gHLZdWC z#z_3dZC9miU>n=??Kn=a$;r=s==7h&_Hz;dM%=g>I#Ce4nX3)k4C{=)z~i}zNSDE8M6=vE-(ay~(|;o6miz`m$(pm?^ET@;brWJhzusO$G~9 zY()p;=@ve9G%Tc0+(A%(7-*f?iq;uf@rT!lCH=2~^&`T24LHKVc=##M^ni>d5xlWaSx17Eox+`i7xp4GiCJ@KuMcV1qa%*TjHg%GduFvFtUOoVJtlk2h zr*#c#6%L32x~VAVi>z}J%cFw?tjc4dUfx=G{1E+Tdo-0QiQey&wXd#oiXp|suBc*Q zfV~CVUVciBldR}uOPk8A_5~V%kja0}OFseeZhU=G+G$!}bDSPD_SpKiAK;{ll`PWoTz25-0bB*IUjQM3nuu3Nq1cHw#=N zNOggrt!2>K6|8x(gYQJ9Kqwdqia*1Jc$0w7)0=2`CCPIr*7l@E-?PIrF1SyZ8u`nY zxMpOrw|1c5`Tc%&A=Q^%zeLSu%0Ix4s|YwurXtS zM_`1_PL2hgYTqg@JwtL6qf@}@*zwjf%;VyEtMaFboLdh*eC6+?m`g8yx00q3i5EU; z%RaquK|S(keyHOT+cm|xrko>ifn!5fN8*vZ<@ud_!-G4L<;hME%i(PVAD3duO4#`$ z+)1>8tl?aBmp*7vx+@=expYv=fCkpR!_2$iJnW|bODDHO@+NTT+XEGvQ?kt+5@H+S zwd?rmxJkt6a=G!;1jdvsTjQ_9qWt@a_K%v2R|Z2}R^^TKdnfq+pXEQV+W+8Fh4dPV zadt8ph-;jon`7w0BINhB$nuWzuy;U->|7r!xFUEY51FZqr(qbVCt>^GMbG(<0T6kN zdc7QJKHfjH=S3DGCqOw<4eFN!h!Bq!qUIV`2eH{7;49ozyHjv;7bfYFranuv^*DKy z4E))CC|cS}CE>Y0cq;th?WfBGy4~g?*%1`en%mVb=uMlu>VOVErCxu zBw#B{%twPW6PkkWq0fi2#=iABHn`7~ti4WuL^+1qJ4UPtilB8ahAxna0?!(phIeBt z0v7=;4As%Yv+wvf@eRgksQ{9Zqh{bd*oG!0C=L>WxyWR(31i57Bb8J}KLi$GX@XU< z5ceW*4KTF-Ai>!7DniS#sAb&B7r6Phpn|N!v>EZAZK(gSHejj+0V|rQ<=^XG-yNdN zLuxhDAs(63iUF{@>!E?IchJb=NIoF>bs4x?wS(MRhzMk9y}|7wQ(N33HY?V>c_mk%_-{ zi~6CMHHG>jRVQLj@spg|qoG8W)>&)&fJ*sq^Q?tIrc`&TGpk*pjyqM7_smJ?3E9!< z?MDLOTukVKA0WTdfEzzQ{)id0WRmU*?q8UB^a^DK^LpHA|ELmzC?V7;bM&$*Oscv#@OCynS7X&FbV~ku zt`4_EjT%iw|GnB5rwvf9kN@Cvtb6LT67QeR?u3J*oNCJUq@AqWF5+&A_okn17o@gq zzDbwcKy4{BSvqaY0%NBNDNaZR;(R`WeKKjTn2-!VSv>HFvQSRRNl2S-gMN1Ygx%8&&fMYHHs!ec z6q}Bo3yY7uEZXi4cI#A>^2;{;N2;jh)BP_=1eB90Tp(3DBTWvb&rx+`zqCW#k zoa`Kut_I!avjo5;(llo4yR4oDwb$#DFTe@B7z5BXaSq44_i!1r~CZ~>+4HqT?_vZ|Sh)A}jv^?pyNnjmU2=Ud9d!t!h~ zXY3nvGt{HG3&0g)-M|0-SZvR@?pd!i;}U+qnFC}e;G7VBN5SZYpfUzs&TZC4FkARf zxe_yy$d{BcjxXQ+UaDfzPDoELw?FCxhr8OLc@BB}4hc6bVTZ>;$fNOK(3lwY z9mS7v{~8|IRoSz1zv(Us>cS#H!nthVAv&UF@*1v{NSPrfoB!Wj3I~*NZLf=6syazv z1SxwuCB{b}C-k=Y{eslumsD@6YQq(IqYFKu*2eHbC1!YNwKlog>(^)G(aO87xp(Xb zINGzdnf_zy4#pxT9gxGo!Rx`RV;do2C`y)D>0!k|sms<9&_;=oF};Hzd`UZ zhuXD}orE(Q87%7^fKaX+6X4bv`gUyD2qAMTpS;8=fmQ}^ zMl(@dzFO7eIw)xcG<1#?K|E#Iqj0e)Mx$qzs!fhtM;3LXM-(~XGe>EG;vSk!{;pE? zSEc?sw#{nTs=NukU7GiDCdSXc0sA;qYg`M9f?fl?p*@8_H)XwAY`)Q-(3W)lX&rMT zD3p&{uzmyA`5ErutRwc`eMzoF@n3{lXgar&CkaLFC$*T&omax9`80x zzyZ*aVF=d1tmi;d9>q!768o=lXuUW0khEfgXh1OB+$~beLDaWnt^9Br9XTOp)Uzg< zvk$mBPtk)%ap3ACXbcJUR1mp7kP~obL;dFVc5V1$w!+sbYH%xp>_}e(QiRYR7!os zrK3iN8G+I5Kjh!bgp}!4L%6!);XA*}T0<-?{YV}iVY;%sz}FNH>9lgvQ4+G^LBj%S zbZAx#*(QVd_ ResourceLoader.GetOrCreateResource(ref s_snPublicKey2, "SymbolsTests.snPublicKey2.snk"); + private static byte[] s_snMaxSizeKey; + public static byte[] snMaxSizeKey => ResourceLoader.GetOrCreateResource(ref s_snMaxSizeKey, "SymbolsTests.snMaxSizeKey.snk"); + + private static byte[] s_snMaxSizePublicKey; + public static byte[] snMaxSizePublicKey => ResourceLoader.GetOrCreateResource(ref s_snMaxSizePublicKey, "SymbolsTests.snMaxSizePublicKey.snk"); + + public static string snMaxSizePublicKeyString => "002400000480000014080000060200000024000052534131004000000100010079bb5332224912" + +"5411d2b44dd63b137e1b452899a7e7f626917328ff9e25c728e3e3b503ba34deab31d1f1ae1558" + +"8c4bda69eccea5b13e4a4e10b39fc2fd9f05d1ba728beb8365bad6b6da9adc653836d3ff12b9a6" + +"98900c3f593cf088b2504ec949489b6f837e76fe84ddd30ccedce1d836e5b8fb149b8e9e0b8b8f" + +"bc2cdaee0e76eb549270c4df104accb72530113f431d88982ae69ed75e09530d6951722b60342e" + +"b1f5dd5babacdb365dd71597680c50fe85bce823ee902ab3377e7eef8f96168f8c8a1e8264ba94" + +"481f5208e4c21208ea312bc1a34bd0e615b39ce8948c4a4d2c0a48b0bc901dfc0519afc378f859" + +"5a77375e6c265e1c38bdc7dbf7c4d07d36b67ac94464fe5c26aed915f1c035756d0f3363fce751" + +"0f12459060f417ab5df610ffca60e6dd739dc750189f23a47716c75a7a8e3363b198f05093d2a0" + +"c9debafbfca3d682c5ea3ed578118d9dc7d0f8828cad1c03ede009d774585b9665e0c8d7325805" + +"faba80796f668f79c92b9a195bc7530bb8ecaaba07a7cfdb70c46b96ca613102b1a674bfc742fa" + +"9562704edb78063db818c0675c9bd8c18d203fc4d5bc2685003bc6c136caf07a202578cb85480d" + +"50f6187b88fb733a2f4ce200bbda68c4ef47483a3530ae8403cb38253a06e2e9385b6d3ae9a718" + +"2ba7a23f03499cec1c92ae06dde6b304c025d23466ebbbac9e06b5d7eb932fc009bc1803d03571" + +"0ec7bce4a6176b407ffdc9a5b55a3ff444609172a146bf76ae40759634e8224ba2882371808f44" + +"59a37f8e69115424947818f19ff6609a715f550e33de0307195fe1e526c57efc7212d6cb561dd8" + +"33cb8c28ae9dc32a4bc0f775887001a5ec36cf63e5b2aa9989d3fa29ebf57e4fa89a206a32e75b" + +"cac3c2f26c3267ec1b7433d4a3b90bc01563ddbffffe586ccfb8ee59af34e3127ebf99036427e0" + +"9c107d47c1e885a032065dce6dd646305bf84fb9123392c89794318e2fdffd5eaa62d1e52d29b9" + +"4e484f2fb73fea0487bbdaa1790e79fc0e09372c6187c742c8a3f160d09818f51dc58f71ff1a1e" + +"d955d9b373bfe92e09eac22241c2b96ce0213aa266f21aae95489921269bffdf5c0a0794716daf" + +"8b5daa3a496004297b3a25c6472027f4b6f9fd82d4e297546faa6ac31579a30b3da1d6c6f04125" + +"667868b536b9d9ebd767e4d1cabbaeb977ec0738dab3b599fe63ea0ec622261d90c3c0c1ebc1ab" + +"631b2162284a9659e961c541aab1658853a9a6501e73f11c9c27b8e9bf41f03187dab5909d8433" + +"499f9dfaec2a2c907e39bf1683c75c882e469e79aba05d597a24db33479fac758f5bdc4cbd79df" + +"03ec1e403f231bfb81ff9db7ee4cfe084f5c187729cc9f072d7a710651ea15f0e43f330e321723" + +"21554d7bf9fd784d18a80a13509818286616d4a7251e2c57f1c257aa0c57bd75da0b0e01532ad5" + +"17de450733f8379a9db8c9f12ac77b65215d44b40eebb513ec9ddc9537f7811eb5283386422d90" + +"6d26077608a1f506e966426d40cc5e61e2d7e888586c85050ec29eff79116c42c9714ad6672441" + +"03a9e79af9b330825ff186b19a791b60eca8776539ca2759f9dbbd87d07f3dac38b814ae9707e4" + +"73ee52e10b3e8d8344bc06287a9c6c58ab36658b4a6ab48ae2e6d08d748b35868c5207aab08311" + +"91f451595d0104968050ae1c13e0d619fa766cd90821732b9fbcc429815606704633515cbe5ad5" + +"e33a28690534748e15413c65d9a370b12946a36796aa4d8e5b471675a3471439e133476981e21e" + +"9a4dfeae52f657a5fe3ab6cd6ad8aabc09bd5d9af77226c6cfbe01fb38546b5c0b8b825e03bda1" + +"3d85403765bd5a6cbed19fd09674fd691d732328948f5ab07e03d7f919eee0ac23f6de7d49ae44" + +"f15f8459683ab792270945ee2807158a5e6898cb912cbe3b0b6820565045a41699d0a5e3b89319" + +"fb921008e18bb1c28557600c33cf2c299a79213834cb9ec72ba6402699c381060cfebaa3faf52d" + +"9b2f1b68c3cc0db79ff47b293853b80ec4198c7fe099077f876f2d6c26305cab1c9de8bb8daae4" + +"22e1ef7c5c76949c8d27fde90281781eef364cc001d0916108d6c0ace740521ec549d912fbaf71" + +"68bd37f790b46282684030dcdc2d52cb41d4b763adfc701a1d392166d4b3269ab30fb83a4fd183" + +"4771e0ea24680c09f55413750b082787e4bb301e107c34cfab1cc88b7d68489602cb8e46bd73c9" + +"6c8de8af5285f919e93cc6251df057443460a15d432e130510f8adbaa8d28c574db7d9ef6fb947" + +"b70e274d93cfaa47d00f3318643a08815c10975722324037504d7f0e3902393d5327bc0467ea5b" + +"d555ba0671ca3873486038abeccc6d48a11c6e3ffb2acca285a53641a02233bb7e7c76ab38acf6" + +"759b985e22b18da77932c0c04217798d1473ebf41061d8c006c9479b34745fbea8a1761000d16f" + +"414a544a7dc4a5a346871981d1ed3fe4dfcb8494e95643b8bae2e13bbfcb5a432c2dfd481e1d61" + +"bab2bcc0d7140fe9b472d25112b2e241c3026a7468560ce3ed582d6872b041680bff3998d51afc" + +"a45094e3e1982510fe8573ac2d3ab596d9d0c6b43a5f72c6046f24c2ac457fd440d6f8d4dd0b71" + +"399d0c1aa366e7a86c57ba5235d327da1245b5ecdf0b3e0e81a0418a5743f3fe98ef6c9236dce0" + +"2463c798af2b239f6ddf2e5a5ffa198151c2ffbf932b7357e80e858c9ddb81fe8223897af61cae" + +"c44ae4f07e686b1d721fa78b39c7934179786592472f8739fb90fd5ae41e118fafbb30bd7b02c3" + +"cf3def669d830f4dcdf863919c1ee6c3b68a4d66a74af3088592a4055b54738804034d134c5a92" + +"e47395955d222b04472da50de86f931084653e4b0f91ffccef2c777c80d92683f8f87b6b60733d" + +"73b0035501dd2adba2bbdf6697"; + private static byte[] s_CSharpErrors; public static byte[] CSharpErrors => ResourceLoader.GetOrCreateResource(ref s_CSharpErrors, "SymbolsTests.UseSiteErrors.CSharpErrors.dll"); diff --git a/src/Compilers/VisualBasic/Test/Emit/Attributes/InternalsVisibleToAndStrongNameTests.vb b/src/Compilers/VisualBasic/Test/Emit/Attributes/InternalsVisibleToAndStrongNameTests.vb index d176b9cc300..c836c336902 100644 --- a/src/Compilers/VisualBasic/Test/Emit/Attributes/InternalsVisibleToAndStrongNameTests.vb +++ b/src/Compilers/VisualBasic/Test/Emit/Attributes/InternalsVisibleToAndStrongNameTests.vb @@ -31,6 +31,18 @@ Partial Public Class InternalsVisibleToAndStrongNameTests Return New SigningTestHelpers.VirtualizedStrongNameProvider(ImmutableArray.Create(keyFilePath)) End Function + Private Shared Sub VerifySigned(comp As Compilation) + Using outStream = comp.EmitToStream() + + outStream.Position = 0 + + Dim headers = New PEHeaders(outStream) + + Dim flags = headers.CorHeader.Flags + Assert.True(flags.HasFlag(CorFlags.StrongNameSigned)) + End Using + End Sub + #End Region #Region "Naming Tests" @@ -913,6 +925,63 @@ BC31535: Friend assembly reference 'WantsIVTAccess' is invalid. Strong-name sign #End Region #Region "Signing" + + + Public Sub MaxSizeKey() + Dim pubKey = TestResources.General.snMaxSizePublicKeyString + Const pubKeyToken = "1540923db30520b2" + Dim pubKeyTokenBytes As Byte() = {&H15, &H40, &H92, &H3D, &HB3, &H5, &H20, &HB2} + + Dim comp = CreateCompilationWithMscorlib( + + +Imports System +Imports System.Runtime.CompilerServices + +<Assembly:InternalsVisibleTo("MaxSizeComp2, PublicKey=<%= pubKey %>, PublicKeyToken=<%= pubKeyToken %>")> + +Friend Class C + Public Shared Sub M() + Console.WriteLine("Called M") + End Sub +End Class + +, + options:=TestOptions.ReleaseDll.WithCryptoKeyFile(SigningTestHelpers.MaxSizeKeyFile).WithStrongNameProvider(s_defaultProvider)) + + comp.VerifyEmitDiagnostics() + + Assert.True(comp.IsRealSigned) + VerifySigned(comp) + Assert.Equal(TestResources.General.snMaxSizePublicKey, comp.Assembly.Identity.PublicKey) + Assert.Equal(Of Byte)(pubKeyTokenBytes, comp.Assembly.Identity.PublicKeyToken) + + Dim src = + + +Class D + Public Shared Sub Main() + C.M() + End Sub +End Class + + + + Dim comp2 = CreateCompilationWithMscorlib(src, references:={comp.ToMetadataReference()}, +options:=TestOptions.ReleaseExe.WithCryptoKeyFile(SigningTestHelpers.MaxSizeKeyFile).WithStrongNameProvider(s_defaultProvider)) + + CompileAndVerify(comp2, expectedOutput:="Called M") + Assert.Equal(TestResources.General.snMaxSizePublicKey, comp2.Assembly.Identity.PublicKey) + Assert.Equal(Of Byte)(pubKeyTokenBytes, comp2.Assembly.Identity.PublicKeyToken) + + Dim comp3 = CreateCompilationWithMscorlib(src, references:={comp.EmitToImageReference()}, +options:=TestOptions.ReleaseExe.WithCryptoKeyFile(SigningTestHelpers.MaxSizeKeyFile).WithStrongNameProvider(s_defaultProvider)) + + CompileAndVerify(comp3, expectedOutput:="Called M") + Assert.Equal(TestResources.General.snMaxSizePublicKey, comp3.Assembly.Identity.PublicKey) + Assert.Equal(Of Byte)(pubKeyTokenBytes, comp3.Assembly.Identity.PublicKeyToken) + End Sub + Public Sub SignIt() Dim other As VisualBasicCompilation = CreateCompilationWithMscorlib( diff --git a/src/Test/Utilities/Desktop/SigningTestHelpers.cs b/src/Test/Utilities/Desktop/SigningTestHelpers.cs index 18933c26f1e..c51d8ac8571 100644 --- a/src/Test/Utilities/Desktop/SigningTestHelpers.cs +++ b/src/Test/Utilities/Desktop/SigningTestHelpers.cs @@ -19,6 +19,8 @@ internal static class SigningTestHelpers internal static string KeyPairFile2 = @"R:\__Test__\KeyPair2_" + Guid.NewGuid() + ".snk"; internal static string PublicKeyFile2 = @"R:\__Test__\PublicKey2_" + Guid.NewGuid() + ".snk"; + internal static string MaxSizeKeyFile = @"R:\__Test__\MaxSizeKey_" + Guid.NewGuid() + ".snk"; + private static bool s_keyInstalled; internal const string TestContainerName = "RoslynTestContainer"; @@ -88,6 +90,10 @@ internal override byte[] ReadAllBytes(string fullPath) { return TestResources.General.snPublicKey2; } + else if (PathEquals(fullPath, MaxSizeKeyFile)) + { + return TestResources.General.snMaxSizeKey; + } throw new FileNotFoundException("File not found", fullPath); } -- GitLab